From f3439e0926c204fa4dd5ff558ec4673ac1ad3dda Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Mon, 6 Jul 2026 08:45:51 +0100 Subject: [PATCH 01/32] Revert "chore: drop committed coverage and metrics" This reverts commit 8a014548ee24fd15d5284b6e19c74b4a44a08958. --- .coverage | Bin 0 -> 53248 bytes .gitignore | 7 ------- models/hbr/metrics/eir_OOF_metrics_K10CV.csv | 3 +++ models/hbr/metrics/eir_test_metrics.csv | 2 ++ models/hbr/metrics/hbr_OOF_metrics_K10CV.csv | 3 +++ models/hbr/metrics/hbr_test_metrics.csv | 2 ++ .../metrics/eir_OOF_metrics_K10CV.csv | 3 +++ models/prevalence/metrics/eir_test_metrics.csv | 2 ++ 8 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 .coverage create mode 100644 models/hbr/metrics/eir_OOF_metrics_K10CV.csv create mode 100644 models/hbr/metrics/eir_test_metrics.csv create mode 100644 models/hbr/metrics/hbr_OOF_metrics_K10CV.csv create mode 100644 models/hbr/metrics/hbr_test_metrics.csv create mode 100644 models/prevalence/metrics/eir_OOF_metrics_K10CV.csv create mode 100644 models/prevalence/metrics/eir_test_metrics.csv diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..1a0fcec026e9c9e7548efa780d8c7df37451060d GIT binary patch literal 53248 zcmeI4UyK_^9mi+AYp>V;CVvR#xVEt2sDrqN+Se9sI?!Z}yMvOLA3h zq&xNau58cl%=~74zt8+;#$i}X$ooldmm zf6n=@mrT#SXtsoB zF53-Z+D_fBS%K}Wn8B(@a<_d^mlGYu(Nrfh&W7^xtYX(mDiAAFM9Z_AmbY$xPpnUe z8RFUku@*!TREV%w9GSyB9E(qxo>&&1aB9Mjv^Z?nr*c!5H*$LU;6dez2yL>w8olyc ztf7d$DW{gHpqlH|rS?_Na%!u>pEj+Yg*BJ-Tni#=J-0a*xMst4LNguT4s6#k#hR$K z15v-LfzuLNauB>hYpASq(x7vZWL(z(oxbp0B;)L{@G>dqxCz$2psbpNL!F&=vr5Rn z+itdGRf=wz*4N_U+x$oC$K-qLEbFvCp?fukokNzT|XhhT~3~ z(g^Z^`}3LdqX!j6UMbf6^9}mGRk7NE8(vqa@hkK6QTW0BtX`g&P_CR09Yx})RPDg; zofuo3rWd`9>&W!&{YLhZtxh6)QKMnH%VC$1(q_~+tQ9dEr$)oVZaWgW&b*N+pPbmv zb$TvPneUzEI%65VJU*^;jnIwa)`|mtiwh+!d6!`{NooqqZ+po=@Kied?mOm6;S8r^*p4DSx&_Ok}A|s~&ZC*(d`g zUR)J-6c^1#U$g=d*iB)|ETJ-?V_md-v*rm(q`7ozQvDz|kgZjjm!EQ#oRweYIunXs ze(*u1(~di1G|p6fn$(+CqIP_l+TtX)CHDR03=O#SZD-I=B)b6|@-nJH4sKBkRwD{Y zuK2r7Zb~lj6@G)!3kL{*00@8p2!H?xfB*=900@8p2!O!eBcLiNMVIUU6u-{+U+Dt} z2!H?xfB*=900@8p2!H?xfB*=9z(MS(W1N zF#Znz$4AmYC=CK200JNY0w4eaAOHd&00JNY0wB;MP*CqxlG^~OoH}mAcLC({|3Wd# z_*LHJM@u(LS4+>7PL$N*wc>Nd$0-2^2!H?xfB*=900@8p2!H?x>@fl-3L5JubE|Gs z%+Y`Tt(N7{P8W4CC;Y&E;?&p9&a~EpRo9vGy;>O8q`y$ltPmw{iva`^FP&63dEdGceD;mXLm)`2u5>wkSw>!?GkJ+S`I99J(5EuXCa)1wgYt^c(zYn}Z=*L~;uUmeAS zWc{C_22hP*Z$b>L|FQoc20su00T2KI5C8!X009sH0T2KI5ZKcMR7GV)`TSquHyOQf zfB*=900@8p2!H?xfB*=900@8p2<$-us!G52C%f{cUo!q4{{w%W|APOVKhN8|!qcUH zQ8W$^009sH0T2KI5C8!X009sH0T9?_0>|>2VyvaQZi<=g*)xnyvS$ynO@m$6XiIx~ zs?A#TNsqP9z44a+p95@j>4!gI>}iUlwKbh{n!WOUHTKJZcR*cROy?g5kLs?{O zUuasi_npER#U#h|{p{NBslM=tH^<{iq6}~KE=Z7__*jUTn94U;;n32 zo@w2;`Its$pEXj8rO|zW@cDmyzhlSEK!qRx0w4eaAOHd&00JNY0w4eaAOHe8LqI Date: Mon, 6 Jul 2026 12:29:15 +0100 Subject: [PATCH 02/32] fix: update minimum prevalence filter to 0.01 and adjust assertions accordingly --- .gitignore | 8 ++++++++ models/prevalence/README.md | 2 +- models/prevalence/prepare.py | 6 +++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index a47f00b..452d4fe 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,11 @@ models/**/*.parquet models/**/*.pkl models/**/*.model models/**/plots/ + +models/**/metrics/ + +# Test / coverage +.coverage +.coverage.* +htmlcov/ +.pytest_cache/ \ No newline at end of file diff --git a/models/prevalence/README.md b/models/prevalence/README.md index e43e317..aedbded 100644 --- a/models/prevalence/README.md +++ b/models/prevalence/README.md @@ -6,7 +6,7 @@ Predicts **EIR** from year-9 prevalence (`prev_y9`) + 6 interventions. Bundled a `prevalence` → `estiMINT_model.pkl`. ```bash -python models/prevalence/prepare.py # datasets source -> training.parquet (prev_y9 >= 0.02) +python models/prevalence/prepare.py # datasets source -> training.parquet (prev_y9 >= 0.01) python models/prevalence/train.py # -> estiMINT_model.pkl, eir_xgb_FINAL.model, metrics/, plots/ ``` diff --git a/models/prevalence/prepare.py b/models/prevalence/prepare.py index 08b6675..391e4c4 100644 --- a/models/prevalence/prepare.py +++ b/models/prevalence/prepare.py @@ -1,6 +1,6 @@ """Derive the prevalence->EIR training view from datasets/estimint_simulations_y9.parquet. -Filters prev_y9 >= 0.02 and sorts by key for a deterministic, reproducible view. +Filters prev_y9 >= 0.01 and sorts by key for a deterministic, reproducible view. """ from pathlib import Path @@ -13,14 +13,14 @@ KEYS = ["parameter_index", "simulation_index"] COLS = KEYS + ["eir", "dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use", "prev_y9"] -MIN_PREVALENCE = 0.02 +MIN_PREVALENCE = 0.01 def prepare(): src = pd.read_parquet(SOURCE) view = src[src.prev_y9 >= MIN_PREVALENCE][COLS].sort_values(KEYS).reset_index(drop=True) - assert len(view) == 12429, f"expected 12,429 rows, got {len(view):,}" + assert len(view) == 12874, f"expected 12,874 rows, got {len(view):,}" assert not view.isna().any().any(), "unexpected NaN in prevalence view" view.to_parquet(OUT, index=False) print(f"prevalence view: {len(view):,} rows -> {OUT}") From 7d037e80d94a0851b224e166ef3320078a8cf9f0 Mon Sep 17 00:00:00 2001 From: Anmol Date: Mon, 6 Jul 2026 13:48:31 +0000 Subject: [PATCH 03/32] update to correct data preprocessing --- .gitignore | 4 +- datasets/split.csv | 12875 +++++++++++++++++++++++ pyproject.toml | 10 + src/estimint/v2/conf/train_config.yaml | 13 + src/estimint/v2/data/features.py | 72 + src/estimint/v2/data/preprocess.py | 246 + src/estimint/v2/train_base.py | 31 + uv.lock | 292 +- 8 files changed, 13540 insertions(+), 3 deletions(-) create mode 100644 datasets/split.csv create mode 100644 src/estimint/v2/conf/train_config.yaml create mode 100644 src/estimint/v2/data/features.py create mode 100644 src/estimint/v2/data/preprocess.py create mode 100644 src/estimint/v2/train_base.py diff --git a/.gitignore b/.gitignore index 452d4fe..fcbcbeb 100644 --- a/.gitignore +++ b/.gitignore @@ -53,4 +53,6 @@ models/**/metrics/ .coverage .coverage.* htmlcov/ -.pytest_cache/ \ No newline at end of file +.pytest_cache/ +train_outputs/ +outputs/ diff --git a/datasets/split.csv b/datasets/split.csv new file mode 100644 index 0000000..40d76b4 --- /dev/null +++ b/datasets/split.csv @@ -0,0 +1,12875 @@ +parameter_index,simulation_index,split +1128,4,train +2344,2,train +2519,3,train +1820,2,train +1603,4,train +1737,4,train +1341,4,train +2295,2,train +1899,2,train +2336,3,train +2732,3,train +1637,2,train +2508,2,train +2112,2,train +2549,3,train +2945,3,train +1850,2,train +2029,4,train +1767,4,train +2628,3,train +2325,2,train +2063,2,train +2500,3,train +3058,1,train +2317,3,train +94,2,train +2826,1,train +3005,3,train +2564,1,train +3046,4,train +11,4,train +3442,4,train +2347,3,train +2784,4,train +2481,3,train +3301,1,train +744,3,train +348,3,train +2643,1,train +3039,1,train +45,2,train +482,3,train +3259,4,train +3655,4,train +2560,3,train +778,1,train +3514,1,train +299,3,train +2990,1,train +3076,4,train +2773,3,train +2814,4,train +991,1,train +3768,2,train +774,3,train +3506,2,train +3902,2,train +75,2,train +512,3,train +3289,4,train +3685,4,train +3027,4,train +2765,4,train +1070,1,train +808,1,train +3981,2,train +1028,4,train +3282,1,train +3323,2,train +725,3,train +766,4,train +3061,2,train +463,3,train +3240,4,train +2844,4,train +2978,4,train +625,1,train +3536,2,train +3973,3,train +1375,4,train +979,4,train +3274,2,train +3670,2,train +676,3,train +3453,4,train +3191,4,train +1496,1,train +1275,2,train +972,1,train +576,1,train +1058,4,train +3353,2,train +3749,2,train +359,3,train +3790,3,train +493,3,train +3962,2,train +3566,2,train +4003,3,train +1405,4,train +3741,3,train +747,4,train +1567,2,train +1264,1,train +1701,2,train +1484,4,train +606,1,train +1043,2,train +3820,3,train +826,4,train +3954,3,train +960,4,train +564,4,train +1914,2,train +1518,2,train +1652,2,train +819,1,train +1435,4,train +3771,3,train +777,4,train +1335,2,train +1772,3,train +1032,1,train +1252,4,train +1944,2,train +1985,3,train +2381,3,train +1723,3,train +4018,1,train +1203,4,train +2198,3,train +1802,3,train +2494,1,train +2411,3,train +2452,4,train +1712,2,train +1316,2,train +2311,1,train +2445,1,train +2228,3,train +2665,4,train +2524,1,train +2699,2,train +2441,3,train +2000,1,train +2179,3,train +1783,3,train +2220,4,train +2616,4,train +2737,1,train +2912,2,train +2213,1,train +2695,4,train +1996,3,train +2991,2,train +2688,1,train +3125,2,train +2426,1,train +2030,1,train +293,1,train +427,1,train +3121,4,train +2243,1,train +2680,2,train +2463,4,train +2597,4,train +244,1,train +3417,2,train +423,3,train +3155,2,train +161,3,train +2456,1,train +2893,2,train +2414,4,train +719,1,train +457,1,train +61,1,train +591,1,train +3368,2,train +811,4,train +415,4,train +2669,1,train +2710,2,train +3106,2,train +2493,4,train +2627,4,train +3705,1,train +670,1,train +3488,3,train +408,1,train +3622,3,train +232,4,train +2527,2,train +366,4,train +487,1,train +3701,3,train +621,1,train +662,2,train +3398,2,train +3573,3,train +579,4,train +183,4,train +3869,1,train +875,2,train +479,2,train +4089,4,train +176,1,train +3390,3,train +262,4,train +658,4,train +2953,2,train +396,4,train +3948,1,train +1350,2,train +4082,1,train +3686,1,train +1088,2,train +255,1,train +3906,4,train +692,2,train +3469,3,train +475,4,train +871,4,train +3207,3,train +213,4,train +347,4,train +1167,2,train +1208,3,train +3899,1,train +468,1,train +509,2,train +905,2,train +3682,3,train +643,2,train +3420,3,train +3816,3,train +3554,3,train +560,4,train +1421,3,train +3716,1,train +1118,2,train +722,2,train +1555,3,train +3454,1,train +3936,4,train +4070,4,train +3237,3,train +639,4,train +1851,1,train +1238,3,train +1768,3,train +935,2,train +3667,1,train +3846,3,train +3746,1,train +1585,3,train +3704,4,train +1747,1,train +1664,3,train +1536,3,train +3917,4,train +4051,4,train +2094,1,train +2135,2,train +1832,1,train +1436,1,train +2052,4,train +1219,3,train +1353,3,train +2045,1,train +1649,1,train +1432,3,train +1869,4,train +1566,3,train +2427,2,train +2124,1,train +1728,1,train +2561,2,train +1862,1,train +2344,4,train +1686,4,train +1820,4,train +2640,2,train +2378,2,train +2075,1,train +1679,1,train +2116,2,train +1813,1,train +1899,4,train +2295,4,train +1637,4,train +76,1,train +2591,2,train +2195,2,train +1933,2,train +2112,4,train +1850,4,train +27,1,train +2408,2,train +2105,1,train +2542,2,train +2325,4,train +1884,2,train +2063,4,train +147,2,train +2621,2,train +3058,3,train +1963,2,train +2097,2,train +3092,1,train +57,1,train +98,2,train +2572,2,train +2176,2,train +2613,3,train +573,2,train +177,2,train +311,2,train +94,4,train +2826,3,train +2564,3,train +786,2,train +390,2,train +3122,1,train +87,1,train +128,2,train +2860,1,train +3301,3,train +3342,4,train +2602,2,train +2643,3,train +3039,3,train +45,4,train +3080,4,train +603,2,train +644,3,train +341,2,train +778,3,train +2990,3,train +1074,1,train +3810,1,train +3851,2,train +3548,1,train +3152,1,train +991,3,train +158,2,train +3372,4,train +3768,4,train +3506,4,train +75,4,train +4064,2,train +1070,3,train +808,3,train +3103,1,train +3499,1,train +3981,4,train +3282,3,train +3323,4,train +3061,4,train +1500,1,train +1104,1,train +842,1,train +3578,1,train +3619,2,train +625,3,train +1062,4,train +3753,2,train +322,2,train +3536,4,train +3670,4,train +3274,4,train +3832,2,train +1275,4,train +3570,2,train +3966,2,train +972,3,train +576,3,train +3353,4,train +3749,4,train +1571,2,train +3649,2,train +1092,4,train +3783,2,train +393,3,train +3566,4,train +1347,1,train +1481,1,train +1085,1,train +1567,4,train +3862,2,train +1701,4,train +823,1,train +3600,2,train +606,3,train +1043,4,train +3734,2,train +1560,1,train +1997,2,train +1298,1,train +902,1,train +1735,2,train +1518,4,train +819,3,train +2210,2,train +1814,2,train +1511,1,train +1115,1,train +1552,2,train +1249,1,train +1335,4,train +4067,3,train +1032,3,train +2027,2,train +1765,2,train +1369,2,train +4018,3,train +2240,2,train +1978,2,train +2019,3,train +1716,2,train +2494,3,train +1399,2,train +1929,2,train +1316,4,train +2528,1,train +2311,3,train +2445,3,train +1612,2,train +2049,3,train +1787,3,train +2607,1,train +3137,1,train +2741,1,train +2524,3,train +2699,4,train +2000,3,train +2995,2,train +1,3,train +2296,1,train +2737,3,train +2778,4,train +2912,4,train +2213,3,train +1817,3,train +3033,1,train +3167,1,train +3208,2,train +2509,1,train +2991,4,train +2688,3,train +3125,4,train +2426,3,train +2030,3,train +293,3,train +3421,2,train +427,3,train +2722,1,train +2808,4,train +2546,4,train +2243,3,train +2680,4,train +2801,1,train +3238,2,train +244,3,train +2539,1,train +2935,1,train +2976,2,train +3155,4,train +3417,4,train +2456,3,train +2893,4,train +540,1,train +719,3,train +3451,2,train +3055,2,train +457,3,train +61,3,train +498,4,train +3189,2,train +2576,4,train +3106,4,train +2710,4,train +753,1,train +887,1,train +491,1,train +3268,2,train +3664,2,train +670,3,train +2965,1,train +3705,3,train +408,3,train +2744,2,train +2527,4,train +570,1,train +308,1,train +3481,2,train +487,3,train +3219,2,train +662,4,train +2957,2,train +783,1,train +521,1,train +655,1,train +3869,3,train +259,1,train +3036,2,train +3473,3,train +875,4,train +479,4,train +3170,2,train +176,3,train +2953,4,train +734,1,train +338,1,train +3948,3,train +4082,3,train +558,4,train +3686,3,train +1088,4,train +255,3,train +692,4,train +3383,2,train +1250,2,train +3982,1,train +947,1,train +551,1,train +988,2,train +685,1,train +1167,4,train +3462,2,train +3503,3,train +468,3,train +509,4,train +905,4,train +3241,3,train +643,4,train +247,4,train +3899,3,train +764,1,train +1201,2,train +3933,1,train +939,2,train +3716,3,train +722,4,train +3454,3,train +1676,2,train +4012,1,train +1851,3,train +1018,2,train +1455,3,train +3750,1,train +1152,2,train +756,2,train +935,4,train +3667,3,train +1231,2,train +3963,1,train +969,2,train +3746,3,train +3921,4,train +1747,3,train +4042,1,train +1485,3,train +1182,2,train +2043,1,train +2177,1,train +1915,1,train +2094,3,train +2135,4,train +1832,3,train +1436,3,train +2390,1,train +1994,1,train +2128,1,train +1732,1,train +2214,4,train +1515,3,train +1649,3,train +2207,1,train +1945,1,train +2427,4,train +2124,3,train +1728,3,train +2561,4,train +1862,3,train +1903,4,train +2158,1,train +1762,1,train +2640,4,train +1896,1,train +2378,4,train +1679,3,train +2116,4,train +76,3,train +2371,1,train +2412,2,train +2591,4,train +2195,4,train +1933,4,train +1671,4,train +2887,2,train +2491,2,train +2625,2,train +1792,1,train +2408,4,train +2542,4,train +1884,4,train +189,1,train +147,4,train +2838,2,train +2879,3,train +2621,4,train +2180,2,train +1963,4,train +2097,4,train +2917,2,train +2655,2,train +3092,3,train +98,4,train +2572,4,train +2176,4,train +3388,1,train +353,1,train +91,1,train +177,4,train +573,4,train +2909,3,train +311,4,train +2606,2,train +473,2,train +3601,1,train +607,2,train +390,4,train +3122,3,train +128,4,train +2819,2,train +2860,3,train +686,2,train +3156,1,train +603,4,train +341,4,train +2677,3,train +4027,1,train +3631,1,train +637,2,train +1074,3,train +3851,4,train +771,2,train +375,2,train +3152,3,train +3548,3,train +158,4,train +3844,1,train +3448,1,train +3885,2,train +454,2,train +891,3,train +4064,4,train +588,2,train +192,2,train +3103,3,train +1500,3,train +1104,3,train +3399,1,train +3795,1,train +842,3,train +3578,3,train +3619,4,train +3753,4,train +3357,4,train +322,4,train +1138,1,train +3874,1,train +4049,2,train +3216,1,train +3832,4,train +3966,4,train +3570,4,train +1613,1,train +1351,1,train +1571,4,train +3429,1,train +3825,1,train +831,2,train +3649,4,train +3783,4,train +1826,1,train +1564,1,train +1168,1,train +1347,3,train +4079,2,train +1085,3,train +689,3,train +3862,4,train +823,3,train +3600,4,train +3734,4,train +2039,1,train +1381,1,train +1560,3,train +1997,4,train +1298,3,train +902,3,train +1735,4,train +1856,1,train +1594,1,train +2031,2,train +1332,1,train +1418,4,train +1814,4,train +1115,3,train +1552,4,train +1249,3,train +2110,2,train +1807,1,train +1411,1,train +1848,2,train +2244,2,train +2027,4,train +1765,4,train +1369,4,train +1107,4,train +2323,2,train +1927,2,train +1624,1,train +1978,4,train +1716,4,train +2536,2,train +1878,2,train +2315,3,train +1399,4,train +2528,3,train +2225,2,train +1829,2,train +1612,4,train +2607,3,train +2304,2,train +2741,3,train +2042,2,train +3037,1,train +2995,4,train +2255,2,train +2296,3,train +3250,1,train +2854,1,train +3033,3,train +2592,1,train +3208,4,train +2375,3,train +2509,3,train +3463,1,train +3067,1,train +73,2,train +2805,1,train +207,2,train +3421,4,train +2722,3,train +3280,1,train +286,2,train +327,3,train +2622,1,train +24,2,train +2801,3,train +3238,4,train +2539,3,train +2976,4,train +3097,1,train +540,3,train +2969,1,train +2573,1,train +3055,4,train +3451,4,train +3189,4,train +836,1,train +574,1,train +753,3,train +3485,2,train +357,3,train +2652,1,train +3048,1,train +2786,1,train +54,2,train +95,3,train +491,3,train +3268,4,train +2744,4,train +1049,1,train +787,1,train +3960,2,train +570,3,train +308,3,train +2999,1,train +3481,4,train +3219,4,train +2823,4,train +2957,4,train +604,1,train +3777,2,train +783,3,train +3515,2,train +3911,2,train +521,3,train +125,3,train +655,3,train +259,3,train +3036,4,train +3170,4,train +1475,1,train +1079,1,train +1213,1,train +4031,3,train +951,1,train +3728,2,train +3769,3,train +3332,2,train +734,3,train +338,3,train +775,4,train +3070,2,train +3466,2,train +1333,2,train +1030,1,train +1467,2,train +1250,4,train +3545,2,train +3982,3,train +551,3,train +988,4,train +3679,2,train +685,3,train +3462,4,train +1546,2,train +1680,2,train +981,1,train +1022,2,train +3758,2,train +764,3,train +1201,4,train +3933,3,train +939,4,train +543,4,train +1759,2,train +1497,2,train +798,1,train +4012,3,train +1018,4,train +3750,3,train +1152,4,train +756,4,train +1972,2,train +4046,1,train +3829,3,train +1231,4,train +3963,3,train +969,4,train +1527,2,train +1661,2,train +1265,2,train +4042,3,train +1182,4,train +2260,1,train +2043,3,train +2177,3,train +1478,2,train +1082,2,train +1915,3,train +2211,1,train +2390,3,train +1994,3,train +1691,2,train +1295,2,train +1732,3,train +2128,3,train +2686,1,train +2290,1,train +2207,3,train +1811,3,train +1945,3,train +2503,1,train +2637,1,train +1979,1,train +1721,2,train +1762,3,train +2158,3,train +1896,3,train +2716,1,train +2454,1,train +2412,4,train +193,1,train +2929,1,train +2970,2,train +2667,1,train +2271,1,train +2708,2,train +2887,4,train +2491,4,train +2625,4,train +1792,3,train +1967,4,train +406,1,train +189,3,train +2484,1,train +2088,1,train +2921,2,train +3317,2,train +2838,4,train +2180,4,train +223,1,train +2697,1,train +2738,2,train +181,4,train +2476,2,train +2917,4,train +2655,4,train +2259,4,train +436,1,train +40,1,train +174,1,train +2951,2,train +3388,3,train +91,3,train +2606,4,train +3684,1,train +253,1,train +690,2,train +3467,3,train +473,4,train +3205,3,train +3601,3,train +607,4,train +2902,2,train +2506,2,train +466,1,train +70,1,train +903,2,train +686,4,train +2981,2,train +3377,2,train +3115,2,train +2719,2,train +3156,3,train +720,2,train +417,1,train +3631,3,train +637,4,train +241,4,train +2932,2,train +375,4,train +3927,1,train +1329,2,train +3665,1,train +1067,2,train +3844,3,train +3448,3,train +3885,4,train +454,4,train +3145,2,train +588,4,train +192,4,train +3744,1,train +1146,2,train +750,2,train +1187,3,train +3964,4,train +488,2,train +3399,3,train +9,4,train +1138,3,train +3874,3,train +4049,4,train +3216,3,train +1613,3,train +1217,3,train +1351,3,train +3646,1,train +3429,3,train +1826,3,train +1127,2,train +731,2,train +1168,3,train +1564,3,train +865,2,train +906,3,train +4079,4,train +1860,1,train +3938,1,train +944,2,train +1381,3,train +2073,1,train +1677,1,train +1856,3,train +1415,1,train +1594,3,train +2031,4,train +1332,3,train +936,3,train +2152,1,train +1890,1,train +1494,1,train +1628,1,train +2110,4,train +2244,4,train +1411,3,train +1848,4,train +2144,2,train +1841,1,train +1445,1,train +1927,4,train +2323,4,train +1624,3,train +2753,2,train +1920,1,train +1878,4,train +2012,4,train +2133,1,train +1871,1,train +2308,2,train +1695,4,train +1829,4,train +1433,4,train +6,1,train +2387,2,train +2304,4,train +2042,4,train +85,1,train +3037,3,train +2641,3,train +2076,2,train +339,2,train +3250,3,train +2854,3,train +2155,2,train +2592,3,train +3150,1,train +115,1,train +3284,1,train +290,2,train +3067,3,train +2671,3,train +73,4,train +2805,3,train +765,2,train +503,2,train +3280,3,train +286,4,train +2581,2,train +2622,3,train +3059,4,train +24,4,train +3576,1,train +3180,1,train +582,2,train +623,3,train +3314,1,train +320,2,train +3097,3,train +2969,3,train +2573,3,train +795,2,train +836,3,train +3131,1,train +137,2,train +574,3,train +3747,4,train +3485,4,train +3048,3,train +2652,3,train +54,4,train +2786,3,train +1266,1,train +1049,3,train +653,3,train +2948,1,train +3344,1,train +787,3,train +3082,1,train +3478,1,train +3781,2,train +88,2,train +3960,4,train +2999,3,train +3994,2,train +3598,2,train +563,2,train +604,3,train +1041,4,train +3295,1,train +301,2,train +3515,4,train +3119,4,train +3777,4,train +1162,1,train +900,1,train +4073,2,train +1079,3,train +951,3,train +3728,4,train +3332,4,train +3466,4,train +3070,4,train +1247,1,train +1333,4,train +3628,2,train +4024,2,train +1030,3,train +1467,4,train +3545,4,train +1763,2,train +930,1,train +1546,4,train +3841,2,train +1064,1,train +1680,4,train +3975,2,train +981,3,train +1022,4,train +3758,4,train +1539,1,train +1143,1,train +1580,2,train +1976,2,train +1759,4,train +1497,4,train +3792,2,train +798,3,train +2189,2,train +1793,2,train +1490,1,train +1094,1,train +1228,1,train +4005,2,train +4046,3,train +1610,2,train +1307,1,train +1348,2,train +1527,4,train +1265,4,train +869,4,train +2219,2,train +1823,2,train +2260,3,train +1478,4,train +1082,4,train +2077,3,train +2211,3,train +1295,4,train +2507,1,train +2686,3,train +2290,3,train +1987,2,train +2720,1,train +2503,3,train +2107,3,train +2637,3,train +1804,2,train +1979,3,train +2933,1,train +2716,3,train +2275,1,train +2017,2,train +2454,3,train +2495,4,train +2750,1,train +193,3,train +2488,1,train +2970,4,train +2667,3,train +2271,3,train +2708,4,train +3400,2,train +3004,2,train +406,3,train +2701,1,train +2305,1,train +2484,3,train +2088,3,train +2921,4,train +3613,2,train +2780,1,train +3217,2,train +223,3,train +2518,1,train +2738,4,train +2476,4,train +519,1,train +257,1,train +3430,2,train +436,3,train +40,3,train +477,4,train +2335,1,train +174,3,train +2951,4,train +2772,2,train +2731,1,train +3168,2,train +732,1,train +470,1,train +3247,2,train +3684,3,train +253,3,train +690,4,train +2985,2,train +3381,2,train +2902,4,train +2506,4,train +287,1,train +3460,2,train +466,3,train +70,3,train +903,4,train +2761,1,train +2981,4,train +2719,4,train +896,1,train +3673,2,train +720,4,train +417,3,train +2932,4,train +975,1,train +1016,2,train +713,1,train +3927,3,train +451,1,train +537,4,train +3665,3,train +3362,2,train +926,1,train +967,2,train +1363,2,train +3744,3,train +664,1,train +750,4,train +1146,4,train +3441,2,train +488,4,train +4040,1,train +1442,2,train +1046,2,train +1180,2,train +1259,2,train +997,2,train +1434,3,train +3729,1,train +1131,2,train +3949,4,train +3646,3,train +814,2,train +3942,1,train +731,4,train +865,4,train +4021,1,train +1860,3,train +1027,2,train +3759,1,train +1161,2,train +1202,3,train +3938,3,train +944,4,train +2022,1,train +2156,1,train +2073,3,train +1677,3,train +1415,3,train +2152,3,train +1711,1,train +1890,3,train +1494,3,train +1931,4,train +1628,3,train +4009,4,train +2448,1,train +2320,1,train +2144,4,train +1841,3,train +1445,3,train +2399,1,train +2003,1,train +2440,2,train +2223,4,train +1920,3,train +1961,4,train +1954,1,train +1871,3,train +2308,4,train +2470,2,train +2167,1,train +1771,1,train +2604,2,train +2387,4,train +1991,4,train +302,1,train +3079,2,train +2380,1,train +2421,2,train +2159,2,train +2076,4,train +381,1,train +339,4,train +2634,2,train +2238,2,train +2372,2,train +2155,4,train +198,1,train +332,1,train +373,2,train +3109,2,train +3150,3,train +2847,2,train +2888,3,train +3284,3,train +290,4,train +2585,2,train +3446,1,train +3580,1,train +586,2,train +2664,2,train +3397,1,train +362,1,train +799,2,train +3180,3,train +3576,3,train +582,4,train +3314,3,train +2918,3,train +320,4,train +2656,3,train +3872,1,train +3476,1,train +878,2,train +3610,1,train +4006,1,train +179,1,train +220,2,train +616,2,train +3348,1,train +354,2,train +3131,3,train +137,4,train +4085,1,train +1091,2,train +1266,3,train +3561,1,train +567,2,train +3344,3,train +2948,3,train +3385,4,train +3781,4,train +3082,3,train +88,4,train +4036,1,train +3640,1,train +3774,1,train +780,2,train +3994,4,train +3598,4,train +3295,3,train +301,4,train +1379,1,train +1162,3,train +3894,2,train +859,2,train +900,3,train +3195,1,train +3591,1,train +597,2,train +201,2,train +3415,4,train +3811,4,train +4073,4,train +1330,1,train +3804,1,train +3408,1,train +1247,3,train +4024,4,train +3628,4,train +1805,1,train +1409,1,train +1543,1,train +1763,4,train +930,3,train +4058,2,train +627,2,train +668,3,train +1064,3,train +3841,4,train +3975,4,train +1622,1,train +1360,1,train +1539,3,train +1143,3,train +1580,4,train +1976,4,train +3792,4,train +1876,2,train +1793,4,train +915,1,train +1397,4,train +4088,2,train +1094,3,train +4005,4,train +2089,2,train +1786,1,train +1827,2,train +1524,1,train +1128,1,train +1610,4,train +1307,3,train +1348,4,train +1086,4,train +2302,2,train +1906,2,train +1603,1,train +1207,1,train +1341,1,train +1823,4,train +2253,2,train +2294,3,train +2507,3,train +1674,2,train +1808,2,train +2283,2,train +1887,2,train +2324,3,train +2720,3,train +2021,2,train +1625,2,train +1804,4,train +22,2,train +2933,3,train +2275,3,train +235,2,train +2313,2,train +2354,3,train +2750,3,train +2051,2,train +2488,3,train +314,2,train +3046,1,train +3442,1,train +2784,1,train +186,2,train +3400,4,train +3004,4,train +2264,2,train +2305,3,train +2701,3,train +3259,1,train +2863,1,train +3300,2,train +306,3,train +3083,4,train +2780,3,train +3217,4,train +2518,3,train +2122,3,train +3076,1,train +3513,2,train +82,2,train +519,3,train +2814,1,train +216,2,train +257,3,train +2552,1,train +3430,4,train +2731,3,train +2335,3,train +2772,4,train +3168,4,train +553,1,train +3289,1,train +3330,2,train +295,2,train +732,3,train +2631,1,train +3027,1,train +470,3,train +2765,1,train +2851,4,train +3247,4,train +3381,4,train +2985,4,train +3464,2,train +1028,1,train +766,1,train +3543,2,train +3939,2,train +3240,1,train +2844,1,train +287,3,train +2978,1,train +3460,4,train +2761,3,train +845,1,train +979,1,train +803,4,train +3494,2,train +104,3,train +1058,1,train +975,3,train +534,1,train +1016,4,train +3311,2,train +713,3,train +3707,2,train +3049,2,train +3748,3,train +451,3,train +1446,2,train +747,1,train +1363,4,train +967,4,train +134,3,train +3262,2,train +3658,2,train +3441,4,train +1659,2,train +826,1,train +1263,2,train +4040,3,train +960,1,train +564,1,train +1046,4,train +1442,4,train +1180,4,train +3778,3,train +1738,2,train +1342,2,train +1476,2,train +777,1,train +1259,4,train +997,4,train +3688,2,train +3729,3,train +1131,4,train +1951,2,train +1252,1,train +1689,2,train +4025,1,train +814,4,train +3942,3,train +1506,2,train +1640,2,train +1244,2,train +4021,3,train +1027,4,train +3759,3,train +1161,4,train +2022,3,train +2156,3,train +1323,2,train +4055,1,train +2452,1,train +1670,2,train +1711,3,train +2665,1,train +2448,3,train +2007,1,train +1487,2,train +1528,3,train +2616,1,train +2220,1,train +2399,3,train +2003,3,train +2440,4,train +2695,1,train +2736,2,train +2037,1,train +1954,3,train +1558,3,train +2949,2,train +2687,2,train +2470,4,train +2167,3,train +1771,3,train +2604,4,train +2766,2,train +2463,1,train +2287,4,train +2421,4,train +2159,4,train +3375,2,train +381,3,train +3113,2,train +2414,1,train +2455,2,train +2634,4,train +2238,4,train +2372,4,train +281,1,train +415,1,train +3192,2,train +198,3,train +239,4,train +2493,1,train +3326,2,train +373,4,train +2668,2,train +2847,4,train +2585,4,train +232,1,train +669,2,train +3446,3,train +366,1,train +3143,2,train +3580,3,train +586,4,train +2485,2,train +2664,4,train +882,2,train +49,1,train +183,1,train +269,4,train +2960,2,train +799,4,train +3094,2,train +2698,2,train +3397,3,train +4089,1,train +658,1,train +3872,3,train +262,1,train +699,2,train +1095,2,train +396,1,train +437,2,train +878,4,train +3610,3,train +179,3,train +220,4,train +616,4,train +2911,2,train +354,4,train +3348,3,train +3906,1,train +475,1,train +912,2,train +4085,3,train +213,1,train +650,2,train +347,1,train +3561,3,train +567,4,train +3723,1,train +729,2,train +1166,3,train +3461,1,train +863,2,train +467,2,train +3244,3,train +3640,3,train +3936,1,train +1379,3,train +4070,1,train +3894,4,train +3591,3,train +3195,3,train +3632,4,train +597,4,train +201,4,train +1196,3,train +893,2,train +497,2,train +1330,3,train +3408,3,train +1805,3,train +1409,3,train +3704,1,train +1543,3,train +710,2,train +844,2,train +4058,4,train +627,4,train +1705,1,train +1443,1,train +1622,3,train +1226,3,train +3917,1,train +923,2,train +964,3,train +1360,3,train +2052,1,train +1876,4,train +3909,2,train +915,3,train +4088,4,train +1869,1,train +1473,1,train +2089,4,train +1827,4,train +1524,3,train +1128,3,train +2344,1,train +2519,2,train +1686,1,train +1820,1,train +1906,4,train +2302,4,train +1603,3,train +1207,3,train +1644,4,train +1341,3,train +2202,2,train +2732,2,train +1899,1,train +1503,1,train +2336,2,train +1637,1,train +2253,4,train +2415,2,train +2112,1,train +2153,2,train +2549,2,train +2590,3,train +1850,1,train +1891,2,train +1674,4,train +1808,4,train +1412,4,train +2628,2,train +2500,2,train +2104,2,train +2283,4,train +1887,4,train +2021,4,train +1625,4,train +22,4,train +2317,2,train +1921,2,train +235,4,train +2134,2,train +2313,4,train +2051,4,train +3129,1,train +94,1,train +2867,1,train +314,4,train +3046,3,train +2650,3,train +2347,2,train +2784,3,train +3342,1,train +348,2,train +3080,1,train +482,2,train +86,2,train +2863,3,train +3259,3,train +3300,4,train +2560,2,train +2897,1,train +299,2,train +3076,3,train +3513,4,train +82,4,train +2814,3,train +2552,3,train +3768,1,train +3372,1,train +3506,1,train +512,2,train +3726,4,train +553,3,train +2848,1,train +3289,3,train +295,4,train +3027,3,train +2631,3,train +3068,4,train +2765,3,train +3330,4,train +3464,4,train +849,1,train +1028,3,train +632,3,train +2927,1,train +3323,1,train +766,3,train +3061,1,train +3543,4,train +3939,4,train +2844,3,train +2978,3,train +1062,1,train +3839,2,train +845,3,train +3536,1,train +3973,2,train +979,3,train +146,2,train +3274,1,train +3494,4,train +2836,4,train +1275,1,train +3656,2,train +1058,3,train +3353,1,train +3790,2,train +359,2,train +3528,2,train +534,3,train +3311,4,train +3707,4,train +3049,4,train +1092,1,train +4003,2,train +3566,1,train +3607,2,train +1446,4,train +3741,2,train +747,3,train +3128,4,train +3262,4,train +1567,1,train +909,1,train +1043,1,train +3820,2,train +1659,4,train +826,3,train +1263,4,train +3558,2,train +960,3,train +564,3,train +3954,2,train +1518,1,train +1738,4,train +1342,4,train +4074,3,train +1476,4,train +1080,4,train +3771,2,train +777,3,train +1638,2,train +1335,1,train +1772,2,train +1689,4,train +4025,3,train +1985,2,train +1723,2,train +890,1,train +1327,2,train +1506,4,train +1244,4,train +2198,2,train +1802,2,train +1323,4,train +4055,3,train +2452,3,train +1316,1,train +2665,3,train +2007,3,train +1487,4,train +2699,1,train +2086,3,train +1783,2,train +2220,3,train +2778,1,train +2912,1,train +2695,3,train +2736,4,train +1996,2,train +2037,3,train +2474,4,train +2991,1,train +2595,1,train +2949,4,train +2687,4,train +2808,1,train +2546,1,train +2983,2,train +2680,1,train +2284,1,train +2766,4,train +2463,3,train +3196,2,train +2363,1,train +2893,1,train +3375,4,train +3113,4,train +2414,3,train +2455,4,train +498,1,train +281,3,train +2576,1,train +3013,2,train +415,3,train +2710,1,train +2314,1,train +2751,2,train +3192,4,train +2493,3,train +2668,4,train +3488,2,train +3622,2,train +3226,2,train +232,3,train +669,4,train +2527,1,train +366,3,train +3143,4,train +2485,4,train +3701,2,train +662,1,train +3043,2,train +882,4,train +49,3,train +2781,2,train +183,3,train +2960,4,train +2698,4,train +875,1,train +479,1,train +4089,3,train +1095,4,train +262,3,train +699,4,train +3390,2,train +396,3,train +437,4,train +2911,4,train +3989,1,train +558,1,train +995,2,train +3772,3,train +692,1,train +733,2,train +3469,2,train +3906,3,train +475,3,train +34,1,train +516,4,train +912,4,train +213,3,train +650,4,train +2811,2,train +3207,2,train +1208,2,train +3940,1,train +509,1,train +946,2,train +3682,2,train +643,1,train +247,1,train +729,4,train +3420,2,train +863,4,train +467,4,train +3461,3,train +3723,3,train +4019,1,train +1421,2,train +722,1,train +763,2,train +3540,3,train +3936,3,train +4070,3,train +3237,2,train +284,4,train +1238,2,train +3970,1,train +976,2,train +714,2,train +3928,4,train +893,4,train +497,4,train +793,2,train +3921,1,train +3704,3,train +710,4,train +844,4,train +1922,1,train +1664,2,train +1705,3,train +4000,1,train +1443,3,train +3738,1,train +3917,3,train +3958,4,train +923,4,train +2135,1,train +1522,3,train +3817,1,train +2052,3,train +1219,2,train +3909,4,train +2214,1,train +1952,1,train +1690,1,train +1432,2,train +1473,3,train +1869,3,train +1211,3,train +3988,4,train +2427,1,train +1769,1,train +1903,1,train +2519,4,train +1686,3,train +1820,3,train +2640,1,train +2378,1,train +2116,1,train +2202,4,train +1899,3,train +1503,3,train +1940,4,train +2336,4,train +1637,3,train +2195,1,train +1933,1,train +2415,4,train +2549,4,train +1671,1,train +2153,4,train +1850,3,train +1891,4,train +2408,1,train +2449,2,train +2628,4,train +1884,1,train +1970,4,train +2104,4,train +147,1,train +3058,2,train +1963,1,train +2400,2,train +2097,1,train +2183,4,train +2317,4,train +1921,4,train +98,1,train +2479,2,train +2176,1,train +2613,2,train +2134,4,train +177,1,train +311,1,train +3129,3,train +2826,2,train +2867,3,train +2564,2,train +2347,4,train +390,1,train +128,1,train +169,2,train +3342,3,train +348,4,train +2643,2,train +3080,3,train +86,4,train +644,2,train +778,2,train +382,2,train +2897,3,train +299,4,train +3851,1,train +3455,1,train +158,1,train +3372,3,train +3506,3,train +2848,3,train +4064,1,train +1070,2,train +3843,2,train +3406,1,train +808,2,train +849,3,train +3626,4,train +3323,3,train +2927,3,train +3364,4,train +3061,3,train +3619,1,train +625,2,train +1062,3,train +3357,1,train +3753,1,train +3536,3,train +3839,4,train +3973,4,train +146,4,train +3274,3,train +3832,1,train +3436,1,train +3873,2,train +1275,3,train +442,2,train +3174,1,train +3570,1,train +576,2,train +180,2,train +3353,3,train +3394,4,train +359,4,train +3528,4,train +3656,4,train +3790,4,train +1571,1,train +3649,1,train +1092,3,train +3783,1,train +393,2,train +3607,4,train +4003,4,train +3741,4,train +1567,3,train +1126,1,train +3862,1,train +3903,2,train +909,3,train +3600,1,train +606,2,train +647,3,train +1043,3,train +3820,4,train +3558,4,train +1735,1,train +3854,2,train +3771,4,train +1814,1,train +1418,1,train +1552,1,train +1638,4,train +1335,3,train +1772,4,train +3671,2,train +4067,2,train +677,3,train +2068,2,train +1765,1,train +1369,1,train +1985,4,train +1107,1,train +1723,4,train +890,3,train +1327,4,train +4018,2,train +1885,2,train +2019,2,train +1186,1,train +1802,4,train +2494,2,train +2098,2,train +1399,1,train +1836,2,train +1316,3,train +2311,2,train +1612,1,train +1653,2,train +2049,2,train +1787,2,train +1174,4,train +2524,2,train +2699,3,train +1866,2,train +2000,2,train +1604,2,train +1783,4,train +2995,1,train +1,2,train +2778,3,train +2912,3,train +1683,2,train +2213,2,train +1817,2,train +80,2,train +2812,1,train +3208,1,train +2991,3,train +2595,3,train +2770,4,train +2030,2,train +2071,3,train +293,2,train +3421,1,train +2808,3,train +2546,3,train +2983,4,train +2680,3,train +2284,3,train +3238,1,train +2842,1,train +244,2,train +2976,1,train +2580,1,train +3196,4,train +2363,3,train +3055,1,train +3492,2,train +61,2,train +498,3,train +3189,1,train +2576,3,train +3013,4,train +2710,3,train +2314,3,train +2751,4,train +3705,2,train +3268,1,train +3309,2,train +3488,4,train +2744,1,train +2830,4,train +3226,4,train +2527,3,train +3522,2,train +3219,1,train +2823,1,train +3260,2,train +662,3,train +2957,1,train +3043,4,train +3701,4,train +2781,4,train +824,1,train +3036,1,train +3473,2,train +479,3,train +83,3,train +775,1,train +3552,2,train +3948,2,train +3989,3,train +3686,2,train +558,3,train +995,4,train +3290,2,train +692,3,train +733,4,train +3028,2,train +3469,4,train +34,3,train +2811,4,train +3207,4,train +1250,1,train +854,1,train +988,1,train +592,1,train +1208,4,train +330,1,train +812,4,train +3503,2,train +509,3,train +946,4,train +3241,2,train +3940,3,train +247,3,train +1201,1,train +1242,2,train +4019,3,train +939,1,train +543,1,train +1421,4,train +3320,2,train +722,3,train +763,4,train +3454,2,train +3716,2,train +3237,4,train +1018,1,train +622,1,train +1059,2,train +1455,2,train +756,1,train +1238,4,train +3970,3,train +976,4,train +3667,2,train +714,4,train +1534,2,train +1231,1,train +4004,1,train +969,1,train +1010,2,train +3746,2,train +3787,3,train +793,4,train +3921,3,train +531,4,train +1747,2,train +1485,2,train +1922,3,train +4000,3,train +3738,3,train +2135,3,train +1302,2,train +1739,3,train +1436,2,train +1040,2,train +3817,3,train +1219,4,train +2214,3,train +1515,2,train +1952,3,train +1649,2,train +1690,3,train +2248,1,train +2427,3,train +1728,2,train +1769,3,train +1903,3,train +2378,3,train +2116,3,train +2278,1,train +2412,1,train +2016,1,train +2195,3,train +2236,4,train +1933,3,train +1537,3,train +1671,3,train +2491,1,train +2625,1,train +2408,3,train +1967,1,train +2449,4,train +1884,3,train +2745,2,train +147,3,train +2879,2,train +2046,1,train +2180,1,train +1963,3,train +2400,4,train +181,1,train +2655,1,train +2259,1,train +3092,2,train +98,3,train +2479,4,train +2176,3,train +2613,4,train +1955,4,train +260,1,train +177,3,train +2909,2,train +2826,4,train +2564,4,train +473,1,train +607,1,train +390,3,train +3122,2,train +2726,2,train +128,3,train +169,4,train +2464,2,train +2860,2,train +2643,4,train +686,1,train +644,4,train +2543,2,train +778,4,train +382,4,train +2677,2,train +3672,1,train +637,1,train +241,1,train +1074,2,train +3455,3,train +375,1,train +3152,2,train +2756,2,train +3193,3,train +158,3,train +3851,3,train +757,2,train +3885,1,train +454,1,train +891,2,train +192,1,train +3406,3,train +3843,4,train +3103,2,train +3964,1,train +3702,1,train +1104,2,train +708,2,train +3922,4,train +1145,3,train +842,2,train +9,1,train +446,2,train +3223,3,train +625,4,train +3357,3,train +2961,3,train +3440,1,train +3619,3,train +4049,1,train +525,2,train +3832,3,train +3436,3,train +3873,4,train +442,4,train +3174,3,train +3570,3,train +576,4,train +180,4,train +1571,3,train +738,2,train +3470,1,train +476,2,train +913,3,train +3649,3,train +393,4,train +4079,1,train +1085,2,train +689,2,train +1126,3,train +3862,3,train +823,2,train +3600,3,train +3903,4,train +606,4,train +1422,1,train +902,2,train +943,3,train +3720,4,train +3854,4,train +2031,1,train +1814,3,train +1418,3,train +1552,3,train +3888,2,train +4067,4,train +3671,4,train +2110,1,train +1714,1,train +1848,1,train +2068,4,train +1369,3,train +1107,3,train +4018,4,train +1927,1,train +2102,2,train +1403,1,train +1885,4,train +2019,4,train +1186,3,train +2181,2,train +1878,1,train +2315,2,train +2098,4,train +1220,1,train +1702,4,train +1399,3,train +1836,4,train +2528,2,train +1695,1,train +2132,2,train +1829,1,train +1433,1,train +1870,2,train +2311,4,train +1612,3,train +1653,4,train +2049,4,train +1787,4,train +2607,2,train +1866,4,train +2000,4,train +1604,4,train +2995,3,train +1,4,train +2296,2,train +1683,4,train +1817,4,train +80,4,train +2375,2,train +2812,3,train +3208,3,train +2509,2,train +2113,2,train +2030,4,train +3108,1,train +73,1,train +114,2,train +293,4,train +2629,3,train +2367,3,train +3187,1,train +327,2,train +3059,1,train +65,2,train +2842,3,train +3238,3,train +2539,2,train +2580,3,train +2976,3,train +3138,1,train +540,2,train +144,2,train +2876,1,train +3055,3,train +2659,3,train +3492,4,train +61,4,train +2397,3,train +3747,1,train +357,2,train +3485,1,train +491,2,train +95,2,train +3268,3,train +3309,4,train +3705,4,train +3047,4,train +2744,3,train +2906,1,train +308,2,train +349,3,train +3522,4,train +2823,3,train +3260,4,train +2957,3,train +1041,1,train +3777,1,train +824,3,train +3119,1,train +3515,1,train +521,2,train +125,2,train +2857,1,train +3556,2,train +259,2,train +3036,3,train +3077,4,train +3473,4,train +2815,4,train +1120,1,train +858,1,train +4031,2,train +3769,2,train +3332,1,train +338,2,train +775,3,train +3070,1,train +3552,4,train +3686,4,train +3290,4,train +3028,4,train +1333,1,train +1467,1,train +1250,3,train +854,3,train +3545,1,train +3586,2,train +551,2,train +592,3,train +988,3,train +3324,2,train +3982,2,train +330,3,train +3503,4,train +3241,4,train +1546,1,train +888,1,train +1022,1,train +1242,4,train +409,3,train +3933,2,train +939,3,train +543,3,train +3320,4,train +3716,4,train +3537,2,train +3454,4,train +1759,1,train +1497,1,train +4012,2,train +3616,2,train +1018,3,train +622,3,train +1059,4,train +1455,4,train +756,3,train +3750,2,train +918,1,train +1534,4,train +656,1,train +3829,2,train +3963,2,train +4004,3,train +1010,4,train +3746,4,train +1830,2,train +1527,1,train +1568,2,train +1265,1,train +869,1,train +1747,4,train +4042,2,train +1485,4,train +2043,2,train +1915,2,train +1082,1,train +1519,2,train +1302,4,train +1436,4,train +1040,4,train +1994,2,train +1598,2,train +1295,1,train +1336,2,train +1732,2,train +1515,4,train +1811,2,train +2248,3,train +1945,2,train +1549,2,train +2065,3,train +1762,2,train +2495,1,train +2278,3,train +2412,3,train +2016,3,train +2970,1,train +2574,1,train +2708,1,train +2312,1,train +2491,3,train +1792,2,train +1833,3,train +1967,3,train +2921,1,train +2263,1,train +2745,4,train +2879,4,train +2046,3,train +2180,3,train +264,1,train +47,3,train +2738,1,train +181,3,train +2476,1,train +3092,4,train +2259,3,train +477,1,train +260,3,train +2951,1,train +3388,2,train +2293,1,train +2909,4,train +2513,4,train +690,1,train +3467,2,train +473,3,train +3205,2,train +3601,2,train +2506,1,train +3122,4,train +2726,4,train +2860,4,train +2464,4,train +903,1,train +686,3,train +2981,1,train +3022,2,train +2719,1,train +2760,2,train +3156,2,train +2543,4,train +2677,4,train +720,1,train +324,1,train +3631,2,train +3672,3,train +1074,4,train +241,3,train +375,3,train +3152,4,train +2756,4,train +3968,1,train +537,1,train +275,1,train +757,4,train +3448,2,train +454,3,train +891,4,train +2790,2,train +3885,3,train +192,3,train +750,1,train +1187,2,train +3964,3,train +488,1,train +3702,3,train +1104,4,train +708,4,train +3440,3,train +3003,2,train +3399,2,train +842,4,train +9,3,train +446,4,train +1004,2,train +3736,1,train +1138,2,train +742,2,train +525,4,train +3216,2,train +263,4,train +1217,2,train +3949,1,train +1351,2,train +955,2,train +738,4,train +3429,2,train +3470,3,train +476,4,train +4028,1,train +1034,2,train +1471,3,train +3766,1,train +731,1,train +772,2,train +1168,2,train +906,2,train +510,2,train +689,4,train +1381,2,train +1422,3,train +3717,1,train +723,2,train +3937,4,train +902,4,train +1718,1,train +1501,3,train +3796,1,train +936,2,train +3888,4,train +1931,1,train +2110,3,train +1714,3,train +4009,1,train +1411,2,train +1848,3,train +1190,3,train +3967,4,train +2144,1,train +1748,1,train +1927,3,train +2102,4,train +1269,3,train +1403,3,train +2223,1,train +1961,1,train +2398,2,train +2181,4,train +1878,3,train +1919,4,train +2315,4,train +1220,3,train +2611,2,train +1778,1,train +2308,1,train +2528,4,train +1695,3,train +2132,4,train +1829,3,train +1870,4,train +1433,3,train +2387,1,train +1991,1,train +2607,4,train +1729,1,train +2166,2,train +3037,2,train +2641,2,train +2379,2,train +2076,1,train +2296,4,train +339,1,train +2854,2,train +2155,1,train +2592,2,train +2375,4,train +2113,4,train +1717,4,train +3067,2,train +2671,2,train +3108,3,train +114,4,train +2409,2,train +2805,2,train +2147,2,train +3187,3,train +148,2,train +327,4,train +2622,2,train +3059,3,train +65,4,train +623,2,train +3355,1,train +3138,3,train +540,4,train +144,4,train +2876,3,train +2573,2,train +836,2,train +137,1,train +178,2,train +574,2,train +357,4,train +2652,2,train +95,4,train +653,2,train +3385,1,train +3781,1,train +787,2,train +3123,1,train +88,1,train +129,2,train +2906,3,train +308,4,train +907,3,train +3598,1,train +604,2,train +1041,3,train +3119,3,train +3556,4,train +125,4,train +2857,3,train +4073,1,train +1120,3,train +3415,1,train +3852,2,train +4031,4,train +421,2,train +858,3,train +3153,1,train +3332,3,train +3373,4,train +3769,4,train +338,4,train +3070,3,train +1333,3,train +937,3,train +3232,1,train +3628,1,train +3982,4,train +3586,4,train +3324,4,train +1763,1,train +1546,3,train +3841,1,train +3882,2,train +847,2,train +888,3,train +3620,2,train +1022,3,train +626,3,train +3403,4,train +3537,4,train +3141,4,train +1580,1,train +1184,1,train +3792,1,train +4012,4,train +3616,4,train +3750,4,train +1793,1,train +1397,1,train +1834,2,train +1135,1,train +3912,2,train +918,3,train +1355,4,train +3650,2,train +4046,2,train +656,3,train +3829,4,train +1610,1,train +1214,1,train +2047,2,train +1348,1,train +1830,4,train +1086,1,train +1568,4,train +3863,2,train +1265,3,train +869,3,train +4042,4,train +1823,1,train +1864,2,train +2260,2,train +2043,4,train +1602,2,train +1385,4,train +1082,3,train +1519,4,train +2077,2,train +2211,2,train +1994,4,train +1598,4,train +1295,3,train +1336,4,train +1732,4,train +4068,3,train +2290,2,train +2331,3,train +1811,4,train +1549,4,train +2503,2,train +2107,2,train +1845,2,train +1979,2,train +1762,4,train +2495,3,train +193,2,train +2970,3,train +2574,3,train +2271,2,train +1875,2,train +2312,3,train +2708,3,train +1792,4,train +2870,1,train +3004,1,train +2921,3,train +2088,2,train +2263,3,train +3083,1,train +3217,1,train +3258,2,train +223,2,train +264,3,train +2559,1,train +2738,3,train +2779,4,train +2476,3,train +3471,2,train +40,2,train +477,3,train +2772,1,train +3168,1,train +3388,4,train +2293,3,train +3247,1,train +3288,2,train +3684,2,train +253,2,train +690,3,train +2985,1,train +3467,4,train +32,3,train +3205,4,train +2506,3,train +70,2,train +3022,4,train +2719,3,train +2760,4,train +3156,4,train +803,1,train +720,3,train +324,3,train +761,4,train +2619,1,train +62,3,train +2839,4,train +1016,1,train +620,1,train +3927,2,train +3968,3,train +537,3,train +3269,2,train +3665,2,train +275,3,train +3448,4,train +2790,4,train +967,1,train +3744,2,train +750,3,train +791,4,train +1187,4,train +488,3,train +3003,4,train +1046,1,train +1180,1,train +1004,4,train +3736,3,train +1138,4,train +742,4,train +3216,4,train +1259,1,train +997,1,train +1038,2,train +1434,2,train +1217,4,train +821,4,train +3949,3,train +955,4,train +559,4,train +814,1,train +4028,3,train +1034,4,train +3766,3,train +731,3,train +772,4,train +1168,4,train +3504,3,train +906,4,train +510,4,train +1027,1,train +1068,2,train +1202,2,train +589,4,train +3717,3,train +723,4,train +1677,2,train +1718,3,train +4013,1,train +1415,2,train +3796,3,train +936,4,train +1797,3,train +1494,2,train +1098,2,train +1931,3,train +4009,3,train +2227,1,train +2144,3,train +1748,3,train +1445,2,train +2306,1,train +2440,1,train +2223,3,train +1961,3,train +2398,4,train +2611,4,train +1778,3,train +1516,3,train +2470,1,train +2604,1,train +1991,3,train +2166,4,train +1729,3,train +2287,1,train +2724,2,train +2421,1,train +2025,1,train +2462,2,train +2159,1,train +2641,4,train +2379,4,train +2937,2,train +2634,1,train +2238,1,train +2675,2,train +2372,1,train +2854,4,train +2155,3,train +2592,4,train +1934,4,train +239,1,train +373,1,train +3150,2,train +197,4,train +2055,1,train +2888,2,train +2671,4,train +2409,4,train +2147,4,train +56,1,train +586,1,train +2967,2,train +2664,1,train +2705,2,train +148,4,train +2443,2,train +2622,4,train +269,1,train +7,1,train +444,2,train +3180,2,train +623,4,train +227,4,train +2918,2,train +3355,3,train +2656,2,train +2573,4,train +3651,1,train +616,1,train +220,1,train +657,2,train +354,1,train +836,4,train +3131,2,train +3172,3,train +137,3,train +178,4,train +574,4,train +2652,4,train +3730,1,train +736,2,train +653,4,train +2948,2,train +3385,3,train +3781,3,train +3123,3,train +129,4,train +3681,1,train +687,2,train +3598,3,train +604,4,train +1162,2,train +3894,1,train +900,2,train +3632,1,train +201,1,train +3415,3,train +3852,4,train +421,4,train +25,4,train +3153,3,train +717,2,train +3628,3,train +3232,3,train +3669,4,train +1233,3,train +1763,3,train +930,2,train +4058,1,train +668,2,train +3841,3,train +3882,4,train +3620,4,train +1143,2,train +1184,3,train +1580,3,train +485,2,train +3699,4,train +1876,1,train +1793,3,train +1397,3,train +1834,4,train +4088,1,train +1135,3,train +3912,4,train +4046,4,train +3650,4,train +2089,1,train +1693,1,train +1827,1,train +1610,3,train +1214,3,train +1651,4,train +2047,4,train +1348,3,train +952,3,train +1086,3,train +3863,4,train +1906,1,train +1644,1,train +2260,4,train +1864,4,train +1602,4,train +2294,2,train +2077,4,train +1681,4,train +3976,2,train +982,3,train +2507,2,train +1674,1,train +2111,2,train +1808,1,train +1412,1,train +2290,4,train +1887,1,train +1928,2,train +2324,2,train +1625,1,train +2107,4,train +1845,4,train +1979,4,train +22,1,train +2141,2,train +2275,2,train +2354,2,train +1958,2,train +2488,2,train +1875,4,train +3087,1,train +93,2,train +2870,3,train +3004,3,train +2171,2,train +2305,2,train +1909,2,train +2346,3,train +2088,4,train +172,2,train +3300,1,train +306,2,train +3083,3,train +3217,3,train +3258,4,train +2518,2,train +2122,2,train +2559,3,train +385,2,train +3117,1,train +3513,1,train +82,1,train +519,2,train +2855,1,train +257,2,train +3471,4,train +40,4,train +2335,2,train +2376,3,train +2772,3,train +3726,1,train +3330,1,train +3464,1,train +3068,1,train +470,2,train +3247,3,train +2851,3,train +3288,4,train +3684,4,train +2985,3,train +3543,1,train +3584,2,train +153,2,train +2885,1,train +3367,4,train +287,2,train +328,3,train +3105,4,train +70,4,train +3797,2,train +803,3,train +3494,1,train +104,2,train +2836,1,train +2619,3,train +1099,1,train +837,1,train +3614,2,train +1016,3,train +620,3,train +3311,1,train +3748,2,train +358,3,train +3049,1,train +3665,4,train +3269,4,train +1446,1,train +3128,1,train +967,3,train +134,2,train +3262,1,train +3744,4,train +1263,1,train +867,1,train +4040,2,train +1046,3,train +605,1,train +1087,4,train +3778,2,train +3516,2,train +1342,1,train +1476,1,train +1080,1,train +1259,3,train +997,3,train +1038,4,train +1434,4,train +3729,2,train +1596,2,train +897,1,train +635,1,train +1117,4,train +3412,2,train +814,3,train +3942,2,train +1809,2,train +1506,1,train +1547,2,train +1244,1,train +4021,2,train +4062,3,train +1027,3,train +1068,4,train +3759,2,train +1202,4,train +2022,2,train +1323,1,train +1364,2,train +4013,3,train +1415,4,train +1711,2,train +1315,2,train +4092,3,train +1494,4,train +1098,4,train +2227,3,train +1528,2,train +1445,4,train +2523,1,train +2306,3,train +2003,2,train +2044,3,train +2440,3,train +1345,2,train +2736,1,train +2474,1,train +1954,2,train +1558,2,train +2949,1,train +2553,1,train +2687,1,train +2291,1,train +2470,3,train +1771,2,train +1812,3,train +2766,1,train +2287,3,train +2724,4,train +2421,3,train +2025,3,train +2462,4,train +2159,3,train +2583,1,train +3020,2,train +26,3,train +2321,1,train +2455,1,train +2541,4,train +2937,4,train +2238,3,train +1842,3,train +2675,4,train +3233,2,train +239,3,train +373,3,train +2668,1,train +3150,4,train +2888,4,train +2055,3,train +669,1,train +3446,2,train +56,3,train +2351,1,train +2485,1,train +2967,4,train +2705,4,train +2443,4,train +882,1,train +269,3,train +2960,1,train +3001,2,train +3397,2,train +7,3,train +444,4,train +2698,1,train +2739,2,train +2918,4,train +3180,4,train +2656,4,train +699,1,train +3476,2,train +437,1,train +41,1,train +3651,3,train +220,3,train +657,4,train +2952,2,train +3348,2,train +3131,4,train +912,1,train +516,1,train +953,2,train +3730,3,train +650,1,train +736,4,train +3031,2,train +3468,3,train +2769,2,train +2948,4,train +729,1,train +1166,2,train +467,1,train +71,1,train +3244,2,train +3681,3,train +687,4,train +1379,2,train +983,2,train +1162,4,train +284,1,train +3498,3,train +3894,3,train +900,4,train +3195,2,train +3236,3,train +3632,3,train +201,3,train +242,4,train +1196,2,train +3928,1,train +1330,2,train +497,1,train +934,2,train +717,4,train +3408,2,train +4007,1,train +1409,2,train +710,1,train +751,2,train +930,4,train +489,2,train +668,4,train +1226,2,train +3958,1,train +1360,2,train +964,2,train +3696,1,train +702,2,train +3916,4,train +485,4,train +1876,3,train +1480,3,train +3909,1,train +915,2,train +2089,3,train +1693,3,train +3988,1,train +1827,3,train +1128,2,train +3946,4,train +1989,1,train +1727,1,train +1906,3,train +1207,2,train +1644,3,train +2202,1,train +2336,1,train +1940,1,train +1678,1,train +2294,4,train +3976,4,train +2415,1,train +2153,1,train +1757,1,train +2590,2,train +1891,1,train +1977,4,train +2507,4,train +1674,3,train +2111,4,train +1808,3,train +1412,3,train +2628,1,train +1970,1,train +2104,1,train +1708,1,train +1887,3,train +1928,4,train +2324,4,train +1625,3,train +1666,4,train +2486,2,train +1921,1,train +2141,4,train +2275,4,train +2437,2,train +2134,1,train +2175,2,train +2354,4,train +1958,4,train +1696,4,train +2650,2,train +3087,3,train +93,4,train +2784,2,train +2171,4,train +2305,4,train +1909,4,train +348,1,train +86,1,train +172,4,train +2863,2,train +3300,3,train +306,4,train +2122,4,train +385,4,train +3117,3,train +3513,3,train +519,4,train +2814,2,train +2855,3,train +257,4,train +2552,2,train +2335,4,train +553,2,train +3330,3,train +2631,2,train +3068,3,train +3626,1,train +632,2,train +3364,1,train +766,2,train +3543,3,train +3584,4,train +153,4,train +2844,2,train +2885,3,train +287,4,train +3839,1,train +845,2,train +449,2,train +146,1,train +187,2,train +3797,4,train +2702,3,train +104,4,train +2836,3,train +3656,1,train +1099,3,train +3394,1,train +3790,1,train +837,3,train +3528,1,train +3614,4,train +534,2,train +3311,3,train +3352,4,train +3748,4,train +3049,3,train +1133,1,train +3910,2,train +916,3,train +3211,1,train +3607,1,train +3128,3,train +134,4,train +3262,3,train +3820,1,train +3861,2,train +826,2,train +4040,4,train +3599,2,train +867,3,train +1263,3,train +564,2,train +605,3,train +3558,1,train +3778,4,train +3516,4,train +3120,4,train +1425,1,train +1342,3,train +4074,2,train +1080,3,train +684,3,train +3729,4,train +1638,1,train +1772,1,train +1596,4,train +897,3,train +4025,2,train +635,3,train +3412,4,train +1193,1,train +1327,1,train +1809,4,train +1547,4,train +1244,3,train +1285,4,train +4021,4,train +3759,4,train +1802,1,train +1843,2,train +2022,4,train +1323,3,train +1364,4,train +4055,2,train +1102,4,train +2452,2,train +961,1,train +1711,4,train +1315,4,train +1873,2,train +2007,2,train +1174,1,train +1528,4,train +2086,2,train +2523,3,train +2220,2,train +1824,2,train +2003,4,train +1345,4,train +2736,3,train +2340,3,train +2037,2,train +1641,2,train +2474,3,train +1558,4,train +2770,1,train +2949,3,train +2553,3,train +2687,3,train +1854,2,train +2291,3,train +1771,4,train +2983,1,train +2766,3,train +2370,3,train +3196,1,train +2583,3,train +3020,4,train +2321,3,train +2455,3,train +2059,3,train +281,2,train +3013,1,train +2617,1,train +2751,1,train +3233,4,train +2138,3,train +2668,3,train +3488,1,train +3226,1,train +2830,1,train +3267,2,train +232,2,train +669,3,train +2568,1,train +3446,4,train +2351,3,train +2788,4,train +2485,3,train +3346,2,train +352,3,train +3043,1,train +49,2,train +90,3,train +2781,1,train +3397,4,train +3001,4,train +2698,3,train +2739,4,train +3559,2,train +3297,2,train +262,2,train +699,3,train +740,4,train +2598,1,train +437,3,train +41,3,train +3035,2,train +3476,4,train +2952,4,train +995,1,train +599,1,train +3772,2,train +733,1,train +3906,2,train +516,3,train +120,3,train +953,4,train +650,3,train +2811,1,train +3031,4,train +2769,4,train +1208,1,train +812,1,train +946,1,train +3723,2,train +3764,3,train +729,3,train +770,4,train +1166,4,train +3065,2,train +467,3,train +71,3,train +3244,4,train +3461,2,train +629,1,train +763,1,train +3540,2,train +3936,2,train +1379,4,train +983,4,train +3278,2,train +284,3,train +3195,4,train +1238,1,train +976,1,train +3794,3,train +714,1,train +800,4,train +1196,4,train +3928,3,train +497,3,train +934,4,train +793,1,train +1230,2,train +4007,3,train +1409,4,train +531,1,train +3704,2,train +751,4,train +489,4,train +1705,2,train +1443,2,train +1226,4,train +3958,3,train +964,4,train +3696,3,train +702,4,train +1522,2,train +3992,1,train +3909,3,train +915,4,train +4071,1,train +1473,2,train +1077,2,train +1211,2,train +3988,3,train +1989,3,train +1686,2,train +1727,3,train +4022,1,train +1290,2,train +1465,3,train +1207,4,train +2285,1,train +2202,3,train +1503,2,train +1940,3,train +1678,3,train +2236,1,train +2415,3,train +1974,1,train +2153,3,train +1757,3,train +2194,4,train +2590,4,train +1891,3,train +2449,1,train +2053,1,train +1970,3,train +2104,3,train +1708,3,train +2703,2,train +2400,1,train +2004,1,train +2486,4,train +2224,4,train +1921,3,train +1962,4,train +5,1,train +2782,2,train +2479,1,train +2613,1,train +1955,1,train +2437,4,train +2134,3,train +2175,4,train +3129,2,train +2733,2,train +2867,2,train +2034,1,train +2471,2,train +2650,4,train +2254,4,train +1992,4,train +169,1,train +3342,2,train +3080,2,train +2684,2,train +86,3,train +2863,4,train +644,1,train +382,1,train +2763,2,train +206,4,train +2897,2,train +2552,4,train +636,2,train +3372,2,train +553,4,train +2848,2,train +2631,4,train +3843,1,train +849,2,train +3626,3,train +16,1,train +453,2,train +632,4,train +236,4,train +2927,2,train +3364,3,train +3922,1,train +3660,1,train +1062,2,train +3839,3,train +845,4,train +449,4,train +3618,4,train +146,3,train +187,4,train +2919,3,train +3873,1,train +442,1,train +3656,3,train +180,1,train +3394,3,train +3528,3,train +534,4,train +3690,1,train +1092,2,train +696,2,train +1133,3,train +3428,1,train +393,1,train +434,2,train +3211,3,train +3607,3,train +3648,4,train +3910,4,train +3903,1,train +3507,1,train +909,2,train +513,2,train +647,2,train +251,2,train +3861,4,train +3558,3,train +3599,4,train +1425,3,train +3720,1,train +3854,1,train +3458,1,train +3895,2,train +901,3,train +4074,4,train +1638,3,train +4067,1,train +3671,1,train +677,2,train +4025,4,train +2068,1,train +1193,3,train +890,2,train +1327,3,train +1885,1,train +1489,1,train +2019,1,train +1843,4,train +3876,2,train +4055,4,train +2098,1,train +1702,1,train +2139,2,train +1836,1,train +1440,1,train +3955,2,train +961,3,train +2352,2,train +2049,1,train +1653,1,train +1787,1,train +1873,4,train +2007,4,train +1174,3,train +1866,1,train +1470,1,train +1604,1,train +2086,4,train +1824,4,train +1,1,train +2778,2,train +1683,1,train +1817,1,train +1858,2,train +2037,4,train +1641,4,train +80,1,train +2595,2,train +2770,3,train +2071,2,train +1854,4,train +3066,1,train +72,2,train +2808,2,train +2546,2,train +2983,3,train +2284,2,train +1888,2,train +151,2,train +2666,3,train +3196,3,train +2363,2,train +3492,1,train +498,2,train +281,4,train +2576,2,train +3054,4,train +2617,3,train +3013,3,train +2314,2,train +2751,3,train +3309,1,train +3047,1,train +3226,3,train +2830,3,train +3267,4,train +2568,3,train +3522,1,train +3563,2,train +3260,1,train +3346,4,train +3043,3,train +3084,4,train +49,4,train +2781,3,train +2385,3,train +3776,2,train +2943,1,train +3473,1,train +3077,1,train +3559,4,train +83,2,train +2815,1,train +3297,4,train +2598,3,train +3035,4,train +3552,1,train +3593,2,train +3989,2,train +558,2,train +599,3,train +995,3,train +3290,1,train +733,3,train +337,3,train +3114,4,train +3028,1,train +34,2,train +2811,3,train +3772,4,train +3806,2,train +3940,2,train +812,3,train +3503,1,train +3544,2,train +3723,4,train +946,3,train +3241,1,train +247,2,train +3461,4,train +3065,4,train +1242,1,train +846,1,train +4019,2,train +629,3,train +1066,4,train +3320,1,train +763,3,train +3361,2,train +3540,4,train +3278,4,train +1455,1,train +1059,1,train +3970,2,train +4011,3,train +3574,2,train +976,3,train +3312,2,train +714,3,train +1534,1,train +876,1,train +1313,2,train +1010,1,train +1096,4,train +3391,2,train +3787,2,train +793,3,train +397,3,train +1230,4,train +3921,2,train +531,3,train +1788,2,train +1485,1,train +1922,2,train +1705,4,train +4000,2,train +4041,3,train +3604,2,train +1443,4,train +3738,2,train +3779,3,train +785,4,train +1605,2,train +1302,1,train +1343,2,train +1739,2,train +1040,1,train +1522,4,train +3817,2,train +3992,3,train +2214,2,train +1818,2,train +1515,1,train +1993,3,train +1690,2,train +4071,3,train +1473,4,train +1077,4,train +1211,4,train +2072,3,train +1769,2,train +1903,2,train +1290,4,train +4022,3,train +2285,3,train +1324,2,train +1503,4,train +2236,3,train +1537,2,train +1974,3,train +1671,2,train +2449,3,train +2053,3,train +2490,4,train +1791,3,train +2745,1,train +2879,1,train +2703,4,train +2400,3,train +2004,3,train +2562,1,train +5,3,train +2782,4,train +2479,3,train +1955,3,train +2909,1,train +2513,1,train +2950,2,train +3129,4,train +2733,4,train +2867,4,train +2034,3,train +2471,4,train +3029,2,train +2726,1,train +169,3,train +2464,1,train +2684,4,train +2543,1,train +2980,2,train +382,3,train +2677,1,train +2763,4,train +2897,4,train +544,1,train +3455,2,train +2756,1,train +2797,2,train +3193,2,train +636,4,train +2848,4,train +757,1,train +891,1,train +932,2,train +3406,2,train +3010,2,train +3843,3,train +849,4,train +16,3,train +453,4,train +2927,4,train +708,1,train +312,1,train +1145,2,train +3922,3,train +446,1,train +532,4,train +2827,2,train +3223,2,train +3357,2,train +2961,2,train +3660,3,train +525,1,train +962,2,train +3873,3,train +263,1,train +700,2,train +3436,2,train +442,3,train +3174,2,train +3215,3,train +3477,3,train +180,3,train +4035,1,train +738,1,train +779,2,train +476,1,train +913,2,train +3690,3,train +696,4,train +3428,3,train +434,4,train +3986,1,train +992,2,train +1429,3,train +3724,1,train +689,1,train +3903,3,train +3944,4,train +730,2,train +1126,2,train +3507,3,train +909,4,train +513,4,train +3245,3,train +647,4,train +251,4,train +3937,1,train +943,2,train +3720,3,train +681,2,train +3458,3,train +3854,3,train +3895,4,train +4016,1,train +1418,2,train +3754,1,train +760,2,train +3888,1,train +3671,3,train +677,4,train +2068,3,train +3967,1,train +1107,2,train +890,4,train +3663,4,train +2102,1,train +1706,1,train +1885,3,train +1489,3,train +3784,1,train +1186,2,train +3876,4,train +2181,1,train +2315,1,train +1919,1,train +2098,3,train +1702,3,train +2139,4,train +1836,3,train +1440,3,train +3955,4,train +2132,1,train +1870,1,train +1956,4,train +2352,4,train +1653,3,train +1257,3,train +1866,3,train +1470,3,train +1604,3,train +2465,2,train +1766,1,train +1504,1,train +1683,3,train +1858,4,train +2678,2,train +80,3,train +2375,1,train +2812,2,train +2113,1,train +1717,1,train +2154,2,train +2595,4,train +2071,4,train +1675,4,train +114,1,train +2629,2,train +3066,3,train +72,4,train +2367,2,train +2284,4,train +1888,4,train +327,1,train +65,1,train +151,4,train +2842,2,train +2883,3,train +2580,2,train +2363,4,train +144,1,train +3492,3,train +2659,2,train +2397,2,train +2314,4,train +357,1,train +95,1,train +136,2,train +2913,3,train +3309,3,train +3047,3,train +2651,3,train +215,2,train +349,2,train +3522,3,train +3563,4,train +2823,2,train +3260,3,train +824,2,train +3556,1,train +125,1,train +166,2,train +2943,3,train +3776,4,train +3077,3,train +83,4,train +2815,3,train +4031,1,train +3769,1,train +3373,1,train +775,2,train +3552,3,train +3111,1,train +3593,4,train +3989,4,train +117,2,train +3290,3,train +3028,3,train +34,4,train +3889,2,train +854,2,train +895,3,train +3586,1,train +592,2,train +3806,4,train +196,2,train +633,3,train +3324,1,train +330,2,train +3410,4,train +3544,4,train +3940,4,train +3403,1,train +3840,2,train +1242,3,train +3537,1,train +409,2,train +846,3,train +3141,1,train +543,2,train +3320,3,train +3361,4,train +4019,4,train +3099,4,train +1142,1,train +3919,2,train +3616,1,train +622,2,train +1059,3,train +3970,4,train +3574,4,train +3312,4,train +1355,1,train +1534,3,train +3829,1,train +3870,2,train +876,3,train +1313,4,train +4004,2,train +1010,3,train +3787,4,train +3391,4,train +1830,1,train +1568,1,train +1172,1,train +1788,4,train +1922,4,train +3821,2,train +4000,4,train +3604,4,train +3738,4,train +1385,1,train +1519,1,train +1605,4,train +1302,3,train +1343,4,train +1739,4,train +1040,3,train +1081,4,train +3817,4,train +1598,1,train +2035,2,train +1336,1,train +1818,4,train +1952,4,train +1690,4,train +1811,1,train +1852,2,train +2248,2,train +1549,1,train +1769,4,train +2065,2,train +1669,2,train +1803,2,train +1324,4,train +2278,2,train +1882,2,train +2319,3,train +2016,2,train +1620,2,train +2057,3,train +1537,4,train +1833,2,train +1967,2,train +2828,1,train +2745,3,train +2349,3,train +2046,2,train +1650,2,train +47,2,train +2779,1,train +181,2,train +2562,3,train +2259,2,train +2858,1,train +260,2,train +2596,1,train +2513,3,train +2950,4,train +3467,1,train +3205,1,train +2547,1,train +3029,4,train +2726,3,train +2464,3,train +331,3,train +2626,1,train +3022,1,train +69,3,train +2760,1,train +2846,4,train +2543,3,train +2980,4,train +761,1,train +3538,2,train +544,3,train +3276,2,train +2839,1,train +241,2,train +3455,4,train +2577,1,train +3014,2,train +3672,2,train +2756,3,train +2797,4,train +3193,4,train +578,1,train +757,3,train +932,4,train +99,3,train +2790,1,train +3227,2,train +3406,4,train +3010,4,train +1187,1,train +791,1,train +3964,2,train +529,1,train +3306,2,train +3702,2,train +708,3,train +3440,2,train +3044,2,train +312,3,train +1145,4,train +3003,1,train +9,2,train +446,3,train +2827,4,train +3223,4,train +2961,4,train +1004,1,train +742,1,train +525,3,train +962,4,train +263,3,train +700,4,train +3436,4,train +3174,4,train +1217,1,train +821,1,train +4035,3,train +955,1,train +559,1,train +996,2,train +738,3,train +3470,2,train +297,1,train +779,4,train +476,3,train +517,4,train +913,4,train +1034,1,train +1471,2,train +772,1,train +3986,3,train +376,1,train +1209,2,train +906,1,train +3724,3,train +510,1,train +992,4,train +1126,4,train +730,4,train +4020,1,train +1422,2,train +589,1,train +723,1,train +3937,3,train +943,4,train +681,4,train +1501,2,train +1239,2,train +4016,3,train +936,1,train +3754,3,train +760,4,train +3888,3,train +1714,2,train +1056,2,train +1190,2,train +794,2,train +3967,3,train +2102,3,train +1269,2,train +4001,1,train +1706,3,train +1403,2,train +1007,2,train +3784,3,train +1186,4,train +3959,4,train +2398,1,train +2181,3,train +4080,1,train +1919,3,train +1220,2,train +2611,1,train +1695,2,train +2132,3,train +1433,2,train +1870,3,train +2032,1,train +2166,1,train +2641,1,train +2682,2,train +2379,1,train +1983,1,train +2465,4,train +1766,3,train +1941,4,train +1504,3,train +2062,1,train +2678,4,train +2812,4,train +1934,1,train +2113,3,train +1717,3,train +2154,4,train +197,1,train +2974,2,train +2671,1,train +2712,2,train +3108,2,train +114,3,train +2409,1,train +2013,1,train +2450,2,train +2147,1,train +2629,4,train +2367,4,train +1971,4,train +3187,2,train +148,1,train +3059,2,train +65,3,train +2842,4,train +2580,4,train +623,1,train +227,1,train +3138,2,train +2742,2,train +3179,3,train +144,3,train +2876,2,train +2659,4,train +2218,2,train +2397,4,train +44,1,train +178,1,train +2693,2,train +136,4,train +2431,2,train +653,1,train +694,2,train +129,1,train +215,4,train +2510,2,train +2906,2,train +349,4,train +907,2,train +1041,2,train +824,4,train +3119,2,train +2723,2,train +3556,3,train +166,4,train +2857,2,train +1120,2,train +724,2,train +3852,1,train +421,1,train +25,1,train +858,2,train +3373,3,train +3111,3,train +117,4,train +937,2,train +3669,1,train +3407,1,train +3889,4,train +854,4,train +413,2,train +3586,3,train +3627,4,train +592,4,train +196,4,train +3324,3,train +330,4,train +1408,1,train +1191,3,train +3486,1,train +3882,1,train +888,2,train +3620,1,train +626,2,train +230,2,train +3403,3,train +3840,4,train +3537,3,train +3141,3,train +409,4,train +3699,1,train +705,2,train +1142,3,train +3919,4,train +3616,3,train +3657,4,train +622,4,train +1834,1,train +3912,1,train +918,2,train +959,3,train +1355,3,train +3650,1,train +656,2,train +3870,4,train +4004,4,train +2047,1,train +1651,1,train +1830,3,train +1568,3,train +1172,3,train +3863,1,train +869,2,train +3687,4,train +3821,4,train +3425,4,train +1864,1,train +1468,1,train +1602,1,train +1385,3,train +989,3,train +1519,3,train +2077,1,train +1681,1,train +1419,1,train +1598,3,train +1157,1,train +2035,4,train +3934,2,train +1336,3,train +1377,4,train +4068,2,train +2331,2,train +2069,2,train +2248,4,train +1852,4,train +1549,3,train +2107,1,train +1845,1,train +1886,2,train +2065,4,train +1669,4,train +1803,4,train +2495,2,train +2278,4,train +1882,4,train +2016,4,train +1620,4,train +2574,2,train +2178,2,train +2615,3,train +1875,1,train +1916,2,train +2312,2,train +1833,4,train +2828,3,train +2129,2,train +2263,2,train +1867,2,train +2046,4,train +1650,4,train +3258,1,train +264,2,train +2645,3,train +47,4,train +2779,3,train +1946,2,train +3471,1,train +477,2,train +2858,3,train +260,4,train +2596,3,train +2293,2,train +2334,3,train +3154,1,train +3288,1,train +32,2,train +2547,3,train +3367,1,train +3105,1,train +111,2,train +2843,1,train +3022,3,train +2626,3,train +2760,3,train +2364,3,train +3755,2,train +2922,1,train +324,2,train +761,3,train +3538,4,train +62,2,train +2839,3,train +3276,4,train +3672,4,train +2577,3,train +3014,4,train +3968,2,train +3572,2,train +537,2,train +578,3,train +3269,1,train +3310,2,train +275,2,train +2790,3,train +3227,4,train +791,3,train +529,3,train +3306,4,train +3702,4,train +3003,3,train +3440,4,train +3044,4,train +1087,1,train +3602,2,train +4039,3,train +1004,3,train +3736,2,train +2903,1,train +3340,2,train +742,3,train +84,3,train +904,1,train +1434,1,train +1038,1,train +821,3,train +3553,2,train +3949,2,train +955,3,train +559,3,train +996,4,train +3291,2,train +297,3,train +3470,4,train +1117,1,train +855,1,train +4069,3,train +1292,2,train +1034,3,train +3766,2,train +1075,4,train +1471,4,train +772,3,train +813,4,train +376,3,train +3504,2,train +510,3,train +1209,4,train +1068,1,train +1505,2,train +1202,1,train +3583,2,train +4020,3,train +1422,4,train +589,3,train +3717,2,train +723,3,train +1584,2,train +1718,2,train +885,1,train +1322,2,train +1501,4,train +3796,2,train +1239,4,train +1797,2,train +1931,2,train +1098,1,train +1714,4,train +4009,2,train +1056,4,train +3788,3,train +1190,4,train +794,4,train +1748,2,train +1352,2,train +1269,4,train +873,4,train +4001,3,train +1403,4,train +1007,4,train +2223,2,train +1961,2,train +2398,3,train +4080,3,train +1220,4,train +2081,3,train +2611,3,train +1778,2,train +1516,2,train +2511,1,train +2249,1,train +1991,2,train +2032,3,train +1729,2,train +2166,3,train +2724,1,train +2328,1,train +2462,1,train +2682,4,train +2379,3,train +1983,3,train +2937,1,train +2541,1,train +2675,1,train +2062,3,train +2499,4,train +1800,3,train +1934,3,train +197,3,train +2888,1,train +2974,4,train +3108,4,train +2712,4,train +2409,3,train +2013,3,train +2450,4,train +2147,3,train +2967,1,train +2705,1,train +2309,1,train +3187,4,train +148,3,train +2443,1,train +2529,4,train +444,1,train +3221,2,train +227,3,train +2918,1,train +3355,2,train +2656,1,train +2742,4,train +3138,4,train +2876,4,train +2218,4,train +657,1,train +261,1,train +3038,2,train +44,3,train +481,4,train +3172,2,train +178,3,train +2693,4,train +2431,4,train +736,1,train +694,4,train +2989,2,train +3385,2,train +3426,3,train +3123,2,train +2727,2,train +129,3,train +2906,4,train +2510,4,train +687,1,train +291,1,train +907,4,train +29,1,train +249,4,train +2723,4,train +2857,4,train +3935,1,train +941,2,train +1120,4,train +242,1,train +724,4,train +3019,2,train +421,3,train +25,3,train +858,4,train +3153,2,train +3194,3,train +3415,2,train +3852,3,train +1020,2,train +717,1,train +937,4,train +59,1,train +3232,2,train +3669,3,train +3407,3,train +413,4,train +1233,2,train +3965,1,train +971,2,train +1408,3,train +668,1,train +709,2,train +3486,3,train +3882,3,train +888,4,train +3620,3,train +3224,3,train +3923,4,train +626,4,train +230,4,train +1184,2,train +3916,1,train +485,1,train +3699,3,train +705,4,train +1397,2,train +1834,3,train +1135,2,train +1176,3,train +3912,3,train +3953,4,train +918,4,train +3650,3,train +656,4,train +2047,3,train +1214,2,train +1651,3,train +3946,1,train +952,2,train +556,2,train +1086,2,train +3863,3,train +1947,1,train +1864,3,train +1468,3,train +1905,4,train +3763,1,train +1602,3,train +3983,4,train +2294,1,train +1681,3,train +3976,1,train +982,2,train +1419,3,train +1157,3,train +3934,4,train +4068,4,train +1977,1,train +2111,1,train +2331,4,train +1453,1,train +2069,4,train +1236,3,train +2324,1,train +1928,1,train +1666,1,train +1845,3,train +1886,4,train +2141,1,train +2182,2,train +1965,4,train +2657,2,train +2354,1,train +1958,1,train +2395,2,train +2574,4,train +1696,1,train +2178,4,train +1875,3,train +1916,4,train +2312,4,train +93,1,train +2870,2,train +2171,1,train +2212,2,train +1909,1,train +2346,2,train +2129,4,train +1733,4,train +2263,4,train +1867,4,train +172,1,train +306,1,train +3083,2,train +3258,3,train +2425,2,train +264,4,train +2122,1,train +2559,2,train +1946,4,train +385,1,train +164,2,train +3471,3,train +2242,2,train +2376,2,train +2293,4,train +3371,1,train +377,2,train +3154,3,train +2851,2,train +3288,3,train +2193,2,train +32,4,train +3584,1,train +153,1,train +194,2,train +3367,3,train +328,2,train +3105,3,train +111,4,train +2843,3,train +3797,1,train +803,2,train +407,2,train +3139,1,train +104,1,train +3755,4,train +2922,3,train +324,4,train +2619,2,train +2660,3,train +62,4,train +3614,1,train +620,2,train +224,2,train +3352,1,train +3748,1,train +358,2,train +3572,4,train +3968,4,train +96,2,train +3269,3,train +3310,4,train +275,4,train +3431,1,train +134,1,train +175,2,train +2907,1,train +3389,4,train +4081,2,train +1087,3,train +3778,1,train +3516,1,train +3120,1,train +3602,4,train +3736,4,train +2903,3,train +3340,4,train +3898,2,train +904,3,train +1038,3,train +205,2,train +3553,4,train +3291,4,train +1596,1,train +1117,3,train +3412,1,train +3849,2,train +855,3,train +1292,4,train +3587,2,train +4028,4,train +3766,4,train +3504,4,train +1809,1,train +1413,1,train +1547,1,train +1151,1,train +1285,1,train +889,1,train +1371,4,train +3666,2,train +1068,3,train +1505,4,train +4062,2,train +3583,4,train +3717,4,train +1566,1,train +1364,1,train +1801,2,train +1102,1,train +1584,4,train +3879,2,train +1718,4,train +885,3,train +1322,4,train +3617,2,train +4013,2,train +1060,4,train +3796,4,train +1880,2,train +1181,1,train +1618,2,train +1315,1,train +1797,4,train +4092,2,train +1098,3,train +2227,2,train +1831,2,train +1528,1,train +1748,4,train +1352,4,train +4084,3,train +1090,4,train +2306,2,train +2044,2,train +1648,2,train +1345,1,train +2298,3,train +1558,1,train +1778,4,train +1516,4,train +2511,3,train +3726,2,train +1812,2,train +2249,3,train +1729,4,train +2287,2,train +2328,3,train +2724,3,train +2025,2,train +1629,2,train +2462,3,train +3020,1,train +26,2,train +2937,3,train +2541,3,train +2675,3,train +1842,2,train +3233,1,train +239,2,train +2575,1,train +2795,4,train +2055,2,train +2096,3,train +56,2,train +2788,1,train +2967,3,train +2705,3,train +2309,3,train +2443,3,train +527,1,train +3304,2,train +269,2,train +3001,1,train +7,2,train +48,3,train +444,3,train +2343,1,train +2739,1,train +2825,4,train +2126,3,train +3221,4,train +3355,4,train +740,1,train +3651,2,train +657,3,train +261,3,train +2952,1,train +3038,4,train +3172,4,train +2514,4,train +953,1,train +557,1,train +3730,2,train +736,3,train +3031,1,train +3468,2,train +78,3,train +2769,1,train +2989,4,train +3123,4,train +2727,4,train +1166,1,train +770,1,train +3547,2,train +3244,1,train +3722,3,train +3285,2,train +687,3,train +291,3,train +3023,2,train +3681,2,train +29,3,train +2940,4,train +983,1,train +587,1,train +3498,2,train +3935,3,train +3102,2,train +941,4,train +108,3,train +3236,2,train +3632,2,train +242,3,train +3019,4,train +3153,4,train +1196,1,train +800,1,train +1237,2,train +934,1,train +1020,4,train +717,3,train +59,3,train +496,4,train +3232,4,train +751,1,train +1233,4,train +3965,3,train +489,1,train +971,4,train +709,4,train +1226,1,train +3999,1,train +964,1,train +1005,2,train +3782,3,train +702,1,train +1184,4,train +3916,3,train +485,3,train +526,4,train +1480,2,train +1135,4,train +1693,2,train +1297,2,train +1734,3,train +4029,1,train +1035,2,train +1472,3,train +1214,4,train +773,2,train +3946,3,train +952,4,train +556,4,train +1947,3,train +1644,2,train +986,2,train +3763,3,train +1981,1,train +1065,2,train +3976,3,train +982,4,train +2590,1,train +2194,1,train +1977,3,train +2111,3,train +1412,2,train +1453,3,train +2273,1,train +2011,1,train +1928,3,train +1532,3,train +2486,1,train +2224,1,train +1962,1,train +2141,3,train +2182,4,train +2437,1,train +2041,1,train +2175,1,train +1779,1,train +2657,4,train +1958,3,train +2395,4,train +1696,3,train +3087,2,train +2650,1,train +2254,1,train +2691,2,train +93,3,train +1992,1,train +2429,2,train +2870,4,train +2171,3,train +2212,4,train +1909,3,train +1950,4,train +2346,4,train +172,3,train +2642,2,train +2425,4,train +2559,4,train +206,1,train +385,3,train +3117,2,train +2721,2,train +164,4,train +2855,2,train +2242,4,train +2376,4,train +1980,4,train +23,1,train +3371,3,train +2538,2,train +377,4,train +2672,2,train +3068,2,train +2193,4,train +632,1,train +236,1,train +673,2,train +411,2,train +3584,3,train +153,3,train +194,4,train +2489,2,train +2885,2,train +328,4,train +2926,3,train +449,1,train +3618,1,train +3797,3,train +187,1,train +624,2,train +407,4,train +2702,2,train +3139,3,train +2836,2,train +2619,4,train +3697,1,train +1099,2,train +3435,1,train +837,2,train +3614,3,train +441,2,train +620,4,train +224,4,train +3352,3,train +358,4,train +96,4,train +3910,1,train +916,2,train +520,2,train +3648,1,train +3431,3,train +392,2,train +3128,2,train +3606,4,train +175,4,train +2907,3,train +1170,3,train +3861,1,train +867,2,train +3599,1,train +908,3,train +4081,4,train +605,2,train +2986,3,train +3516,3,train +3120,3,train +4074,1,train +1080,2,train +684,2,train +3416,1,train +3898,4,train +3636,4,train +205,4,train +3374,4,train +1596,3,train +897,2,train +635,2,train +3412,3,train +3849,4,train +3587,4,train +1809,3,train +1413,3,train +1547,3,train +1151,3,train +1588,4,train +889,3,train +3666,4,train +4062,4,train +1843,1,train +1667,4,train +1364,3,train +968,3,train +1801,4,train +1102,3,train +3879,4,train +4013,4,train +3617,4,train +1398,1,train +1880,4,train +1181,3,train +1618,4,train +3913,2,train +1315,3,train +1356,4,train +4092,4,train +1873,1,train +2227,4,train +1831,4,train +2086,1,train +2523,2,train +1824,1,train +2306,4,train +2044,4,train +1648,4,train +1345,3,train +2340,2,train +2474,2,train +1641,1,train +2078,2,train +2553,2,train +1854,1,train +2291,2,train +1633,2,train +1812,4,train +2370,2,train +2108,2,train +2025,4,train +1629,4,train +2841,1,train +2583,2,train +2624,3,train +3020,3,train +26,4,train +2321,2,train +2059,2,train +1842,4,train +3054,1,train +3233,3,train +2138,2,train +2575,3,train +2055,4,train +3133,1,train +139,2,train +2871,1,train +3267,1,train +56,4,train +2351,2,train +2392,3,train +2788,3,train +3346,1,train +352,2,train +3084,1,train +90,2,train +527,3,train +2822,1,train +3304,4,train +3001,3,train +3042,4,train +7,4,train +2739,3,train +2343,3,train +3559,1,train +3297,1,train +2901,1,train +740,3,train +344,3,train +3035,1,train +41,2,train +3651,4,train +2422,3,train +2952,3,train +3772,1,train +3114,1,train +3551,2,train +516,2,train +120,2,train +557,3,train +953,3,train +2852,1,train +3031,3,train +3468,4,train +3730,4,train +2769,3,train +2810,4,train +853,1,train +3764,2,train +770,3,train +3065,1,train +3547,4,train +71,2,train +3285,4,train +3681,4,train +3023,4,train +1066,1,train +804,1,train +3540,1,train +983,3,train +587,3,train +3278,1,train +3319,2,train +284,2,train +3498,4,train +3102,4,train +3236,4,train +2840,4,train +3794,2,train +800,3,train +404,3,train +1237,4,train +934,3,train +3928,2,train +1096,1,train +1230,1,train +834,1,train +4007,2,train +4048,3,train +572,1,train +3349,2,train +751,3,train +792,4,train +489,3,train +651,1,train +785,1,train +3958,2,train +3999,3,train +1005,4,train +3696,2,train +702,3,train +1522,1,train +4078,3,train +1480,4,train +3379,2,train +822,4,train +1077,1,train +1211,1,train +1297,4,train +1693,4,train +3592,2,train +3988,2,train +1035,4,train +3767,3,train +4029,3,train +773,4,train +1989,2,train +1290,1,train +1331,2,train +1727,2,train +1465,2,train +1069,2,train +986,4,train +1940,2,train +1981,3,train +1678,2,train +1282,2,train +1065,4,train +2277,1,train +2060,3,train +1757,2,train +1361,2,train +2194,3,train +2490,1,train +2273,3,train +1970,2,train +2011,3,train +1708,2,train +2703,1,train +2486,3,train +2224,3,train +1962,3,train +2782,1,train +2258,1,train +2437,3,train +2041,3,train +2175,3,train +1779,3,train +2733,1,train +2471,1,train +3087,4,train +2254,3,train +2691,4,train +1992,3,train +2429,4,train +2684,1,train +2288,1,train +2026,1,train +2508,4,train +2642,4,train +289,1,train +2763,1,train +206,3,train +2938,2,train +3117,4,train +2721,4,train +2855,4,train +636,1,train +3017,2,train +23,3,train +2538,4,train +2672,4,train +319,1,train +453,1,train +3626,2,train +236,3,train +673,4,train +2968,2,train +3364,2,train +411,4,train +2706,2,train +2885,4,train +2489,4,train +532,1,train +270,1,train +449,3,train +3618,3,train +187,3,train +624,4,train +2919,2,train +2702,4,train +3914,1,train +920,2,train +3697,3,train +1099,4,train +3394,2,train +2998,2,train +3435,3,train +837,4,train +441,4,train +3993,1,train +696,1,train +300,1,train +737,2,train +1133,2,train +434,1,train +38,1,train +520,4,train +916,4,train +3211,2,train +3514,3,train +3648,3,train +392,4,train +3944,1,train +513,1,train +647,1,train +251,1,train +3861,3,train +3902,4,train +867,4,train +3599,3,train +605,4,train +1425,2,train +767,2,train +3895,1,train +901,2,train +684,4,train +3416,3,train +980,2,train +3712,1,train +677,1,train +718,2,train +897,4,train +635,4,train +1496,3,train +3791,1,train +1193,2,train +535,2,train +3663,1,train +1843,3,train +748,2,train +3876,1,train +3962,4,train +2139,1,train +1264,3,train +3955,1,train +961,2,train +1398,3,train +3913,4,train +2352,1,train +1956,1,train +1873,3,train +1914,4,train +1174,2,train +1652,4,train +2523,4,train +1824,3,train +2423,2,train +2161,2,train +1858,1,train +1944,4,train +2340,4,train +1641,3,train +2078,4,train +2770,2,train +2071,1,train +1675,1,train +2553,4,train +1854,3,train +2291,4,train +1633,4,train +72,1,train +2453,2,train +2191,2,train +1888,1,train +2370,4,train +2108,4,train +1712,4,train +151,1,train +2666,2,train +2404,2,train +2841,3,train +2583,4,train +2142,2,train +2321,4,train +2059,4,train +2617,2,train +2221,2,train +3054,3,train +2138,4,train +356,2,train +3133,3,train +139,4,train +2830,2,train +2871,3,train +3267,3,train +2568,2,train +2172,2,train +2351,4,train +3563,1,train +3346,3,train +352,4,train +3084,3,train +90,4,train +2385,2,train +2822,3,train +3776,1,train +386,2,train +3559,3,train +83,1,train +124,2,train +2901,3,train +3297,3,train +2598,2,train +3035,3,train +41,4,train +3593,1,train +3197,1,train +599,2,train +203,2,train +337,2,train +3114,3,train +3551,4,train +120,4,train +2852,3,train +3806,1,train +3410,1,train +3847,2,train +812,2,train +3544,1,train +416,2,train +853,3,train +591,3,train +2886,1,train +3368,4,train +3764,4,train +3065,3,train +2669,3,train +71,4,train +4060,2,train +629,2,train +1066,3,train +3361,1,train +804,3,train +3099,1,train +3278,3,train +3319,4,train +1100,1,train +3574,1,train +3615,2,train +4011,2,train +184,2,train +621,3,train +3312,1,train +3398,4,train +3794,4,train +1313,1,train +4090,2,train +1096,3,train +3391,1,train +3787,1,train +1230,3,train +397,2,train +834,3,train +3828,2,train +531,2,train +572,3,train +3349,4,train +4007,4,train +1788,1,train +3907,2,train +1350,4,train +3604,1,train +4041,2,train +651,3,train +3779,2,train +785,3,train +3696,4,train +1605,1,train +1739,1,train +1343,1,train +1780,2,train +1081,1,train +3992,2,train +3596,2,train +3379,4,train +1818,1,train +1993,2,train +1597,2,train +898,1,train +3675,2,train +4071,2,train +1077,3,train +1118,4,train +3592,4,train +2072,2,train +1989,4,train +1290,3,train +1331,4,train +1727,4,train +4022,2,train +1465,4,train +1069,4,train +2285,2,train +1627,2,train +1324,1,train +1678,4,train +1282,4,train +2236,2,train +1840,2,train +2277,3,train +1537,1,train +1578,2,train +1974,2,train +1757,4,train +1361,4,train +2053,2,train +1657,2,train +2490,3,train +1791,2,train +1708,4,train +2703,3,train +2004,2,train +2045,3,train +5,2,train +2782,3,train +2258,3,train +1955,2,train +2950,1,train +2733,3,train +2034,2,train +2075,3,train +2471,3,train +1813,3,train +3029,1,train +2684,3,train +2288,3,train +2026,3,train +2846,1,train +289,3,train +2584,1,train +2980,1,train +27,3,train +2322,1,train +2763,3,train +2938,4,train +2105,3,train +3496,2,train +3193,1,train +2797,1,train +3234,2,train +636,3,train +3017,4,train +932,1,train +319,3,train +3010,1,train +3051,2,train +16,2,train +57,3,train +453,3,train +2968,4,train +2706,4,train +1145,1,train +3922,2,train +3660,2,train +532,3,train +2827,1,train +3223,1,train +270,3,train +2961,1,train +3002,2,train +3264,2,train +2919,4,train +962,1,train +566,1,train +700,1,train +304,1,train +786,4,train +3081,2,train +920,4,train +87,3,train +3215,2,train +3477,2,train +3914,3,train +2998,4,train +2602,4,train +779,1,train +3993,3,train +913,1,train +3690,2,train +517,1,train +3294,2,train +696,3,train +300,3,train +737,4,train +1133,4,train +434,3,train +38,3,train +3211,4,train +3428,2,train +992,1,train +596,1,train +1033,2,train +1429,2,train +730,1,train +3507,2,train +3810,3,train +3944,3,train +513,3,train +3245,2,train +251,3,train +1246,2,train +3978,1,train +943,1,train +1425,4,train +3720,2,train +681,1,train +767,4,train +3458,2,train +3499,3,train +901,4,train +3895,3,train +760,1,train +980,4,train +3712,3,train +718,4,train +1014,2,train +3791,3,train +1193,4,train +752,2,train +535,4,train +3663,3,train +1489,2,train +3959,1,train +965,2,train +748,4,train +3876,3,train +1960,1,train +1702,2,train +2139,3,train +4038,1,train +1440,2,train +1044,2,train +1481,3,train +3955,3,train +961,4,train +2352,3,train +1956,3,train +1257,2,train +2252,1,train +2210,4,train +1470,2,train +1511,3,train +2465,1,train +1941,1,train +2423,4,train +2161,4,train +1858,3,train +2678,1,train +2020,1,train +2154,1,train +1758,1,train +2240,4,train +1675,3,train +2629,1,train +2670,2,train +3066,2,train +72,3,train +2367,1,train +1971,1,train +2453,4,train +2191,4,train +1888,3,train +1929,4,train +2749,2,train +151,3,train +2883,2,train +2666,4,train +2404,4,train +2142,4,train +2962,2,train +2659,1,train +3137,3,train +2397,1,train +2617,4,train +2221,4,train +136,1,train +2913,2,train +2517,2,train +356,4,train +2651,2,train +3047,2,train +2568,4,train +2172,4,train +215,1,train +349,1,train +3563,3,train +2730,2,train +3167,3,train +2468,2,train +2385,4,train +166,1,train +2943,2,train +3776,3,train +386,4,train +3077,2,train +124,4,train +2815,2,train +2598,4,train +3676,1,train +682,2,train +3414,1,train +420,2,train +3197,3,train +3593,3,train +117,1,train +203,4,train +599,4,train +2935,3,train +337,4,train +3889,1,train +895,2,train +3627,1,train +196,1,train +633,2,train +3410,3,train +3806,3,train +416,4,train +3544,3,train +3847,4,train +2886,3,train +712,2,train +3444,1,train +3840,1,train +409,1,train +4060,4,train +450,2,train +846,2,train +887,3,train +629,4,train +2965,3,train +3361,3,train +3664,4,train +3099,3,train +3919,1,train +3657,1,train +1100,3,train +401,2,train +3574,3,train +3615,4,train +4011,4,train +184,4,train +3312,3,train +3870,1,train +3474,1,train +876,2,train +480,2,train +1313,3,train +3212,1,train +4090,4,train +3391,3,train +3828,4,train +397,4,train +1788,3,train +3687,1,train +3821,1,train +3425,1,train +3907,4,train +3604,3,train +4041,4,train +3779,4,train +3383,4,train +1688,1,train +1426,1,train +1605,3,train +1343,3,train +947,3,train +1780,4,train +4075,2,train +1081,3,train +3992,4,train +3596,4,train +2035,1,train +1818,3,train +1377,1,train +1993,4,train +1597,4,train +898,3,train +3675,4,train +4071,4,train +1852,1,train +1456,1,train +2072,4,train +1194,1,train +1676,4,train +3971,2,train +4022,4,train +2065,1,train +1669,1,train +1803,1,train +2285,4,train +1627,4,train +1324,3,train +1882,1,train +1923,2,train +2319,2,train +1620,1,train +1224,1,train +2057,2,train +1840,4,train +1974,4,train +1578,4,train +2136,2,train +1833,1,train +2053,4,train +1657,4,train +1791,4,train +2349,2,train +1953,2,train +1650,1,train +1825,2,train +2004,4,train +47,1,train +2562,2,train +5,4,train +1904,2,train +2513,2,train +2950,3,train +2034,4,train +118,2,train +2850,1,train +3029,3,train +2371,3,train +331,2,train +69,2,train +2846,3,train +2980,3,train +2584,3,train +2322,3,train +3538,1,train +3142,1,train +544,2,train +3276,1,train +2880,1,train +3014,1,train +3496,4,train +2797,3,train +3234,4,train +3530,2,train +932,3,train +99,2,train +3227,1,train +3010,3,train +3051,4,train +16,4,train +3306,1,train +312,2,train +353,3,train +2648,1,train +3044,1,train +3660,4,train +2827,3,train +3264,4,train +3002,4,train +3822,2,train +962,3,train +566,3,train +263,2,train +304,3,train +700,3,train +3081,4,train +3477,4,train +3215,4,train +2819,4,train +862,1,train +4035,2,train +996,1,train +779,3,train +3511,2,train +517,3,train +3294,4,train +3690,4,train +3428,4,train +1471,1,train +1075,1,train +1209,1,train +813,1,train +4027,3,train +3590,2,train +3986,2,train +992,3,train +596,3,train +1033,4,train +1429,4,train +730,3,train +771,4,train +3328,2,train +3507,4,train +3245,4,train +3724,2,train +1246,4,train +3541,2,train +3937,2,train +3978,3,train +681,3,train +3458,4,train +1501,1,train +1542,2,train +1239,1,train +4016,2,train +3754,2,train +3358,2,train +3795,3,train +760,3,train +1359,2,train +1056,1,train +660,1,train +1190,1,train +794,1,train +3967,2,train +1014,4,train +752,4,train +1572,2,train +1269,1,train +873,1,train +1706,2,train +1007,1,train +1489,4,train +3784,2,train +3825,3,train +831,4,train +3959,3,train +965,4,train +1919,2,train +1960,3,train +1261,2,train +4038,3,train +1440,4,train +1044,4,train +2256,1,train +2039,3,train +1340,2,train +1078,2,train +1257,4,train +2252,3,train +1470,4,train +2682,1,train +2465,3,train +1766,2,train +1807,3,train +1504,2,train +1941,3,train +2499,1,train +2678,3,train +2237,1,train +2020,3,train +1717,2,train +1758,3,train +2154,3,train +2974,1,train +2712,1,train +2450,1,train +2536,4,train +3066,4,train +2670,4,train +1971,3,train +2529,1,train +2966,2,train +2749,4,train +2883,4,train +2225,4,train +268,1,train +3045,2,train +2742,1,train +3179,2,train +2962,4,train +2218,1,train +481,1,train +219,1,train +2693,1,train +2734,2,train +136,3,train +2431,1,train +2517,4,train +2913,4,train +2651,4,train +2255,4,train +694,1,train +36,1,train +215,3,train +2510,1,train +2730,4,train +2468,4,train +907,1,train +249,1,train +3026,2,train +3463,3,train +2723,1,train +166,3,train +207,4,train +2502,2,train +2943,4,train +724,1,train +66,1,train +3676,3,train +682,4,train +3373,2,train +3414,3,train +420,4,train +2715,2,train +3111,2,train +117,3,train +937,1,train +978,2,train +3889,3,train +413,1,train +17,1,train +895,4,train +2794,2,train +196,3,train +633,4,train +3627,3,train +1191,2,train +3923,1,train +626,1,train +230,1,train +712,4,train +3403,2,train +846,4,train +450,4,train +3141,2,train +3444,3,train +3840,3,train +4002,1,train +705,1,train +746,2,train +1142,2,train +3919,3,train +484,2,train +3657,3,train +401,4,train +3953,1,train +1355,2,train +959,2,train +3691,1,train +3870,3,train +3474,3,train +3911,4,train +876,4,train +480,4,train +3212,3,train +1692,1,train +1475,3,train +1172,2,train +1213,3,train +514,2,train +3687,3,train +3821,3,train +3425,3,train +1905,1,train +1688,3,train +3983,1,train +1385,2,train +989,2,train +1426,3,train +3721,1,train +4075,4,train +3679,4,train +3934,1,train +1377,3,train +4068,1,train +2331,1,train +2069,1,train +1852,3,train +1456,3,train +1194,3,train +3971,4,train +1752,1,train +1886,1,train +1972,4,train +1669,3,train +1803,3,train +1965,1,train +1703,1,train +1882,3,train +1923,4,train +2319,4,train +1620,3,train +1224,3,train +1661,4,train +2057,4,train +2178,1,train +2615,2,train +1916,1,train +1520,1,train +2353,2,train +2136,4,train +2828,2,train +2432,2,train +2129,1,train +1733,1,train +1867,1,train +1953,4,train +2349,4,train +1650,3,train +1691,4,train +1825,4,train +2645,2,train +2779,2,train +1946,1,train +2562,4,train +1904,4,train +122,2,train +2858,2,train +2596,2,train +2334,2,train +1721,4,train +32,1,train +118,4,train +2413,2,train +2850,3,train +2547,2,train +2151,2,train +111,1,train +152,2,train +2929,3,train +331,4,train +2626,2,train +69,4,train +2364,2,train +4028,2,train +3755,1,train +761,2,train +3538,3,train +3142,3,train +62,1,train +103,2,train +544,4,train +2839,2,train +2880,3,train +2577,2,train +3014,3,train +3276,3,train +3317,4,train +3572,1,train +3176,1,train +578,2,train +182,2,train +3310,1,train +3530,4,train +2697,3,train +99,4,train +3227,3,train +3389,1,train +3826,2,train +791,2,train +395,2,train +3127,1,train +529,2,train +133,2,train +3306,3,train +312,4,train +3044,3,train +2648,3,train +1349,3,train +3602,1,train +3206,1,train +4039,2,train +3340,1,train +3822,4,train +84,2,train +821,2,train +4035,4,train +3553,1,train +862,3,train +3157,1,train +559,2,train +996,3,train +3291,1,train +3377,4,train +297,2,train +3511,4,train +3115,4,train +1292,1,train +4069,2,train +1075,3,train +1209,3,train +376,2,train +813,3,train +3504,1,train +3590,4,train +3724,4,train +3328,4,train +3986,4,train +1371,1,train +1505,1,train +1109,1,train +1329,4,train +3583,1,train +3624,2,train +589,2,train +1067,4,train +4020,2,train +3541,4,train +3145,4,train +1584,1,train +1188,1,train +1322,1,train +1060,1,train +1542,4,train +3837,2,train +1239,3,train +4016,4,train +3575,2,train +3754,4,train +3358,4,train +1797,1,train +1576,2,train +877,1,train +1359,4,train +1056,3,train +660,3,train +3788,2,train +794,3,train +1352,1,train +1789,2,train +1090,1,train +1572,4,train +3867,2,train +1706,4,train +873,3,train +4001,2,train +1007,3,train +3784,4,train +1868,2,train +4080,2,train +1127,4,train +1261,4,train +2081,2,train +2256,3,train +1516,1,train +1340,4,train +1078,4,train +2032,2,train +1636,2,train +1374,2,train +2682,3,train +1849,2,train +1983,2,train +1587,2,train +1766,4,train +1504,4,train +2062,2,train +2499,3,train +1800,2,train +2237,3,train +1934,2,train +2795,1,train +197,2,train +2974,3,train +2533,1,train +2712,3,train +2753,4,train +2013,2,train +2450,3,train +2529,3,train +2133,3,train +2966,4,train +3221,1,train +2825,1,train +227,2,train +268,3,train +2563,1,train +3045,4,train +6,3,train +2742,3,train +3179,4,train +2218,3,train +3038,1,train +44,2,train +85,3,train +481,3,train +3172,1,train +219,3,train +2514,1,train +2693,3,train +2734,4,train +2431,3,train +515,1,train +3292,2,train +694,3,train +2989,1,train +2593,1,train +3426,2,train +36,3,train +2727,1,train +2510,3,train +594,1,train +115,3,train +3243,2,train +249,3,train +3026,4,train +2723,3,train +2502,4,train +941,1,train +545,1,train +3322,2,train +724,3,train +283,1,train +765,4,train +3019,1,train +25,2,train +66,3,train +503,4,train +3060,2,train +3194,2,train +2581,4,train +3111,4,train +2715,4,train +1020,1,train +1195,2,train +496,1,train +978,4,train +3273,2,train +3669,2,train +3407,2,train +3011,2,train +413,3,train +17,3,train +2794,4,train +1233,1,train +971,1,train +1408,2,train +709,1,train +795,4,train +1191,4,train +3486,2,train +3923,3,train +3224,2,train +230,3,train +4002,3,train +526,1,train +3699,2,train +705,3,train +746,4,train +1142,4,train +3478,3,train +484,4,train +1304,2,train +1176,2,train +3953,3,train +959,4,train +563,4,train +3691,3,train +1651,2,train +1255,2,train +1692,3,train +3987,1,train +952,1,train +556,1,train +993,2,train +1172,4,train +514,4,train +4066,1,train +1468,2,train +1072,2,train +1905,3,train +810,2,train +3983,3,train +989,4,train +3721,3,train +1681,2,train +4017,1,train +982,1,train +1419,2,train +1157,2,train +3934,3,train +2018,1,train +2069,3,train +1236,2,train +1969,1,train +1752,3,train +2189,4,train +4047,1,train +1886,3,train +1490,3,train +1228,3,train +2048,1,train +2182,1,train +1965,3,train +1703,3,train +2657,1,train +2395,1,train +2178,3,train +1737,1,train +2219,4,train +2615,4,train +1916,3,train +1520,3,train +2353,4,train +2212,1,train +2649,2,train +2346,1,train +1950,1,train +2432,4,train +2828,4,train +2129,3,train +1733,3,train +1867,3,train +2728,2,train +2425,1,train +2029,1,train +2645,4,train +1767,1,train +1946,3,train +1987,4,train +164,1,train +2242,1,train +2679,2,train +122,4,train +1980,1,train +2376,1,train +2858,4,train +2596,4,train +2334,4,train +377,1,train +3154,2,train +2496,2,train +2193,1,train +2413,4,train +2017,4,train +2547,4,train +2151,4,train +194,1,train +3367,2,train +328,1,train +3105,2,train +2709,2,train +111,3,train +152,4,train +2843,2,train +2626,4,train +2364,4,train +407,1,train +11,1,train +3755,3,train +2922,2,train +2660,2,train +103,4,train +2577,4,train +3655,1,train +224,1,train +661,2,train +358,1,train +3572,3,train +3176,3,train +3613,4,train +96,1,train +182,4,train +578,4,train +3310,3,train +478,2,train +3606,1,train +175,1,train +3389,3,train +3826,4,train +395,4,train +3127,3,train +529,4,train +133,4,train +4081,1,train +3685,1,train +1087,2,train +3602,3,train +3206,3,train +4039,4,train +2903,2,train +3340,3,train +84,4,train +3898,1,train +904,2,train +3636,1,train +205,1,train +3374,1,train +3553,3,train +3157,3,train +3291,3,train +297,4,train +1375,1,train +1117,2,train +3849,1,train +3453,1,train +3890,2,train +855,2,train +896,3,train +1292,3,train +3191,1,train +3587,1,train +3673,4,train +4069,4,train +376,4,train +1588,1,train +1371,3,train +3666,1,train +4062,1,train +1505,3,train +1109,3,train +3583,3,train +3624,4,train +4020,4,train +3362,4,train +1667,1,train +1801,1,train +1405,1,train +1584,3,train +1188,3,train +3879,1,train +3920,2,train +885,2,train +926,3,train +1322,3,train +3617,1,train +1060,3,train +664,3,train +3837,4,train +3575,4,train +1880,1,train +1484,1,train +1618,1,train +1356,1,train +4092,1,train +1576,4,train +3871,2,train +877,3,train +3788,4,train +1831,1,train +1435,1,train +1872,2,train +3950,2,train +1352,3,train +1789,4,train +4084,2,train +1090,3,train +3867,4,train +4001,4,train +2044,1,train +1648,1,train +1868,4,train +3901,2,train +4080,4,train +2164,2,train +2298,2,train +2081,4,train +1203,1,train +2511,2,train +2115,2,train +1812,1,train +2249,2,train +2032,4,train +1636,4,train +1374,4,train +2328,2,train +1932,2,train +1629,1,train +1849,4,train +1983,4,train +1587,4,train +26,1,train +2541,2,train +2145,2,train +1842,1,train +1883,2,train +2320,3,train +2062,4,train +1800,4,train +2795,3,train +2096,2,train +2533,3,train +2013,4,train +2309,2,train +3304,1,train +3042,1,train +48,2,train +2825,3,train +3221,3,train +2126,2,train +2563,3,train +3121,1,train +127,2,train +261,2,train +302,3,train +2597,1,train +3038,3,train +44,4,train +3079,4,train +2380,3,train +2514,3,train +3468,1,train +3509,2,train +78,2,train +515,3,train +2810,1,train +3292,4,train +2989,3,train +2593,3,train +3426,4,train +2727,3,train +811,1,train +3547,1,train +594,3,train +3285,1,train +3722,2,train +291,2,train +332,3,train +2627,1,train +3023,1,train +29,2,train +3109,4,train +3243,4,train +3801,2,train +3498,1,train +3539,2,train +3102,1,train +941,3,train +108,2,train +545,3,train +2840,1,train +242,2,train +283,3,train +3019,3,train +3060,4,train +3236,1,train +3194,4,train +3322,4,train +1237,1,train +1020,3,train +579,1,train +1195,4,train +362,3,train +59,2,train +496,3,train +3273,4,train +3407,4,train +3011,4,train +792,1,train +4006,3,train +3569,2,train +3965,2,train +971,3,train +1408,4,train +3307,2,train +709,3,train +3486,4,train +3224,4,train +871,1,train +1005,1,train +1091,4,train +3386,2,train +3782,2,train +3916,2,train +526,3,train +1480,1,train +1521,2,train +822,1,train +1304,4,train +4036,3,train +560,1,train +3337,2,train +3774,3,train +1176,4,train +780,4,train +1297,1,train +1338,2,train +1734,2,train +1035,1,train +639,1,train +1472,2,train +773,1,train +859,4,train +1255,4,train +3946,2,train +556,3,train +993,4,train +3987,3,train +1947,2,train +1551,2,train +1289,2,train +4066,3,train +986,1,train +1072,4,train +1468,4,train +3763,2,train +3804,3,train +810,4,train +1368,2,train +1065,1,train +4017,3,train +1419,4,train +1157,4,train +1977,2,train +2018,3,train +4051,1,train +1453,2,train +1057,2,train +1236,4,train +1532,2,train +1969,3,train +4047,3,train +2048,3,train +2182,3,train +1349,2,train +1786,3,train +2657,3,train +2395,3,train +1696,2,train +1737,3,train +2691,1,train +2295,1,train +2429,1,train +2212,3,train +2649,4,train +1950,3,train +2508,1,train +2945,2,train +2642,1,train +2728,4,train +2425,3,train +2029,3,train +1767,3,train +2721,1,train +2325,1,train +164,3,train +2063,1,train +2242,3,train +2679,4,train +1980,3,train +3371,2,train +2538,1,train +377,3,train +2672,1,train +3154,4,train +2496,4,train +2193,3,train +673,1,train +411,1,train +194,3,train +2489,1,train +2926,2,train +2709,4,train +2843,4,train +624,1,train +3005,2,train +3442,3,train +407,3,train +11,3,train +2702,1,train +3139,2,train +186,4,train +2481,2,train +2922,4,train +2660,4,train +2264,4,train +744,2,train +441,1,train +45,1,train +3655,3,train +224,3,train +661,4,train +3352,2,train +96,3,train +916,1,train +520,1,train +3431,2,train +392,1,train +478,4,train +2773,2,train +3606,3,train +175,3,train +216,4,train +2907,2,train +1170,2,train +774,2,train +3902,1,train +4081,3,train +75,1,train +908,2,train +3685,3,train +2986,2,train +3120,2,train +2903,4,train +3981,1,train +684,1,train +3898,3,train +725,2,train +904,4,train +463,2,train +3240,3,train +3636,3,train +205,3,train +3374,3,train +1375,3,train +3670,1,train +676,2,train +3453,3,train +3849,3,train +855,4,train +3587,3,train +3191,3,train +3890,4,train +1413,2,train +3749,1,train +1151,2,train +1588,3,train +889,2,train +493,2,train +3666,3,train +1667,3,train +3962,1,train +1801,3,train +968,2,train +1405,3,train +1102,2,train +3879,3,train +3920,4,train +885,4,train +3617,3,train +3658,4,train +1701,1,train +1880,3,train +1484,3,train +1181,2,train +1618,3,train +3913,1,train +1356,3,train +3871,4,train +1914,1,train +1652,1,train +1831,3,train +1435,3,train +1872,4,train +3950,4,train +4084,4,train +3688,4,train +1951,4,train +1648,3,train +1252,3,train +3901,4,train +2340,1,train +1944,1,train +2381,2,train +2078,1,train +2164,4,train +2298,4,train +1203,3,train +1640,4,train +2511,4,train +1633,1,train +2115,4,train +2249,4,train +2370,1,train +2411,2,train +2108,1,train +1712,1,train +2328,4,train +1932,4,train +1629,3,train +1670,4,train +2624,2,train +2228,2,train +2059,1,train +2145,4,train +1883,4,train +2441,2,train +2138,1,train +2179,2,train +2575,2,train +2616,3,train +2096,4,train +139,1,train +2788,2,train +2392,2,train +2309,4,train +352,1,train +3125,1,train +90,1,train +527,2,train +3304,3,train +3042,3,train +48,4,train +2343,2,train +2126,4,train +740,2,train +344,2,train +3121,3,train +127,4,train +2422,2,train +261,4,train +2597,3,train +3417,1,train +423,2,train +3155,1,train +3551,1,train +120,1,train +161,2,train +557,2,train +3509,4,train +78,4,train +2810,3,train +3764,1,train +3368,1,train +770,2,train +811,3,train +3106,1,train +3547,3,train +3285,3,train +3326,4,train +3722,4,train +291,4,train +3023,3,train +2627,3,train +29,4,train +587,2,train +3319,1,train +3801,4,train +3935,4,train +3102,3,train +3539,4,train +108,4,train +2840,3,train +3794,1,train +3398,1,train +800,2,train +404,2,train +1237,3,train +3573,2,train +579,3,train +3094,4,train +59,4,train +4048,2,train +658,3,train +2953,1,train +3349,1,train +792,3,train +3569,4,train +3965,4,train +3307,4,train +1350,1,train +1088,1,train +871,3,train +3999,2,train +1005,3,train +3782,4,train +3386,4,train +347,3,train +1167,1,train +905,1,train +4078,2,train +1521,4,train +3379,1,train +3816,2,train +822,3,train +3554,2,train +560,3,train +3337,4,train +1118,1,train +1555,2,train +1297,3,train +4029,2,train +1338,4,train +1734,4,train +1035,3,train +639,3,train +1472,4,train +3592,1,train +773,3,train +3767,2,train +1331,1,train +935,1,train +1768,2,train +1465,1,train +1069,1,train +1551,4,train +1947,4,train +3846,2,train +1289,4,train +986,3,train +3763,4,train +1981,2,train +1585,2,train +1282,1,train +1368,4,train +1065,3,train +2060,2,train +2194,2,train +1361,1,train +1536,2,train +4051,3,train +1453,4,train +1057,4,train +2273,2,train +2011,2,train +1353,2,train +1532,4,train +2224,2,train +1962,2,train +1566,2,train +1349,4,train +2561,1,train +2344,3,train +2041,2,train +1779,2,train +3476,3,train +2254,2,train +2295,3,train +2691,3,train +2732,4,train +1992,2,train +2429,3,train +2591,1,train +2508,3,train +2112,3,train +2945,4,train +2642,3,train +206,2,train +2938,1,train +2542,1,train +2721,3,train +2325,3,train +2063,3,train +2500,4,train +3017,1,train +2621,1,train +23,2,train +3371,4,train +2538,3,train +2672,3,train +236,2,train +673,3,train +2572,1,train +2968,1,train +411,3,train +2706,1,train +2489,3,train +2926,4,train +573,1,train +3618,2,train +94,3,train +624,3,train +2919,1,train +3005,4,train +3139,4,train +2481,4,train +786,1,train +920,1,train +3697,2,train +3301,2,train +744,4,train +2602,1,train +2998,1,train +441,3,train +45,3,train +482,4,train +3039,2,train +3435,2,train +2560,4,train +603,1,train +737,1,train +341,1,train +3514,2,train +520,3,train +3648,2,train +3431,4,train +2990,2,train +392,3,train +2773,4,train +2907,4,train +991,2,train +3768,3,train +1170,4,train +774,4,train +3902,3,train +908,4,train +75,3,train +512,4,train +2986,4,train +767,1,train +3981,3,train +901,1,train +3282,2,train +725,4,train +3416,2,train +463,4,train +980,1,train +718,1,train +322,1,train +3670,3,train +676,4,train +1496,2,train +3966,1,train +1413,4,train +535,1,train +972,2,train +3749,3,train +1151,4,train +889,4,train +493,4,train +748,1,train +3962,3,train +3566,3,train +968,4,train +1264,2,train +1701,3,train +1398,2,train +3734,1,train +1181,4,train +3913,3,train +3954,4,train +1997,1,train +1914,3,train +1518,3,train +1652,3,train +819,2,train +2210,1,train +1032,2,train +2423,1,train +2027,1,train +2161,1,train +1944,3,train +2381,4,train +2078,3,train +2240,1,train +1978,1,train +1716,1,train +2198,4,train +1633,3,train +2453,1,train +2191,1,train +1929,1,train +2411,4,train +2108,3,train +1712,3,train +2666,1,train +2404,1,train +2445,2,train +2841,2,train +2142,1,train +2228,4,train +2624,4,train +3054,2,train +2221,1,train +2441,4,train +2575,4,train +2179,4,train +356,1,train +3133,2,train +2737,2,train +139,3,train +2871,2,train +2172,1,train +2392,4,train +1996,4,train +3084,2,train +2688,2,train +3125,3,train +527,4,train +2385,1,train +2426,2,train +2822,2,train +2343,4,train +386,1,train +427,2,train +124,1,train +2901,2,train +344,4,train +2243,2,train +2422,4,train +203,1,train +3417,3,train +337,1,train +423,4,train +3114,2,train +3155,3,train +557,4,train +161,4,train +2456,2,train +2852,2,train +2893,3,train +3551,3,train +719,2,train +3451,1,train +3847,1,train +416,1,train +457,2,train +853,2,train +591,2,train +3368,3,train +2669,2,train +3106,3,train +4060,1,train +3664,1,train +1066,2,train +670,2,train +804,2,train +408,2,train +3622,4,train +587,4,train +3319,3,train +3481,1,train +4011,1,train +487,2,train +3615,1,train +184,1,train +621,2,train +3398,3,train +404,4,train +3573,4,train +4090,1,train +1096,2,train +3828,1,train +3869,2,train +397,1,train +4048,4,train +834,2,train +875,3,train +572,2,train +176,2,train +2953,3,train +3170,1,train +3349,3,train +3390,4,train +3907,1,train +1350,3,train +4041,1,train +4082,2,train +651,2,train +255,2,train +1088,3,train +785,2,train +3383,1,train +3779,1,train +3999,4,train +1780,1,train +1167,3,train +3462,1,train +3899,2,train +468,2,train +905,3,train +3596,1,train +3682,4,train +643,3,train +3379,3,train +3420,4,train +3816,4,train +3554,4,train +4078,4,train +1993,1,train +1597,1,train +3675,1,train +1118,3,train +1555,4,train +3592,3,train +4029,4,train +3767,4,train +2072,1,train +1676,1,train +1851,2,train +1152,1,train +1331,3,train +935,3,train +1768,4,train +1069,3,train +3846,4,train +1627,1,train +1981,4,train +1585,4,train +1282,3,train +1840,1,train +2277,2,train +1578,1,train +1182,1,train +1664,4,train +2060,4,train +1361,3,train +1536,4,train +2490,2,train +1657,1,train +2094,2,train +1791,1,train +1832,2,train +2273,4,train +2011,4,train +1353,4,train +2045,2,train +1432,4,train +1566,4,train +2124,2,train +2561,3,train +2258,2,train +1862,2,train +2041,4,train +1779,4,train +2640,3,train +2075,2,train +1679,2,train +1813,2,train +76,2,train +2591,3,train +2288,2,train +2026,2,train +2887,1,train +289,2,train +27,2,train +2938,3,train +2105,2,train +2542,3,train +3496,1,train +3234,1,train +2838,1,train +3017,3,train +2621,3,train +3058,4,train +23,4,train +2097,3,train +2917,1,train +319,2,train +3051,1,train +57,2,train +2968,3,train +2572,3,train +2706,3,train +532,2,train +573,3,train +3264,1,train +270,2,train +311,3,train +2606,1,train +3002,1,train +3914,2,train +786,3,train +3081,1,train +3477,1,train +920,3,train +87,2,train +2819,1,train +3215,1,train +3301,4,train +2998,3,train +2602,3,train +3039,4,train +3435,4,train +3697,4,train +3993,2,train +603,3,train +3294,1,train +300,2,train +341,3,train +737,3,train +3514,4,train +38,2,train +2990,4,train +1429,1,train +1033,1,train +3810,2,train +771,1,train +3548,2,train +3944,2,train +991,4,train +3245,1,train +1246,1,train +4064,3,train +588,1,train +1070,4,train +767,3,train +808,4,train +3499,2,train +3282,4,train +3416,4,train +1500,2,train +3578,2,train +980,3,train +3712,2,train +3753,3,train +718,3,train +322,3,train +1014,1,train +1496,4,train +3791,2,train +752,1,train +3966,3,train +535,3,train +972,4,train +3663,2,train +831,1,train +965,1,train +3783,3,train +748,3,train +1347,2,train +1044,1,train +1481,2,train +1264,4,train +1398,4,train +3734,3,train +1956,2,train +1560,2,train +1997,3,train +1257,1,train +1298,2,train +1735,3,train +819,4,train +2210,3,train +1511,2,train +1115,2,train +1249,2,train +1032,4,train +2244,1,train +2423,3,train +2027,3,train +2161,3,train +1765,3,train +2323,1,train +2240,3,train +1978,3,train +1675,2,train +1716,3,train +2536,1,train +2670,1,train +2453,3,train +2494,4,train +2191,3,train +1929,3,train +2749,1,train +2883,1,train +2225,1,train +2404,3,train +2445,4,train +2841,4,train +2142,3,train +2962,1,train +3137,2,train +2304,1,train +2741,2,train +2042,1,train +2524,4,train +2221,3,train +2913,1,train +2517,1,train +356,3,train +2651,1,train +2255,1,train +2737,4,train +3133,4,train +2871,4,train +2172,3,train +2213,4,train +3033,2,train +2730,1,train +3167,2,train +2468,1,train +2688,4,train +2822,4,train +2426,4,train +207,1,train +3421,3,train +386,3,train +427,4,train +2722,2,train +124,3,train +2901,4,train +2243,4,train +682,1,train +286,1,train +420,1,train +24,1,train +2801,2,train +3197,2,train +203,3,train +244,4,train +2935,2,train +2852,4,train +2456,4,train +895,1,train +633,1,train +3847,3,train +3451,3,train +719,4,train +3410,2,train +416,3,train +457,4,train +853,4,train +591,4,train +2886,2,train +3189,3,train +2669,4,train +712,1,train +753,2,train +4060,3,train +450,1,train +54,1,train +887,2,train +3664,3,train +670,4,train +2965,2,train +804,4,train +408,4,train +3099,2,train +3960,1,train +1100,2,train +3481,3,train +401,1,train +487,4,train +3219,3,train +3615,3,train +184,3,train +621,4,train +783,2,train +3911,1,train +480,1,train +4090,3,train +655,2,train +3828,3,train +3869,4,train +834,4,train +3170,3,train +572,4,train +176,4,train +3728,1,train +734,2,train +3466,1,train +3907,3,train +3948,4,train +4082,4,train +651,4,train +255,4,train +3383,3,train +1780,3,train +947,2,train +3679,1,train +4075,1,train +1081,2,train +685,2,train +3462,3,train +3899,4,train +468,4,train +3596,3,train +1680,1,train +3758,1,train +1597,3,train +764,2,train +1201,3,train +898,2,train +3675,3,train +1676,3,train +3971,1,train +1851,4,train +1152,3,train +3667,4,train +1972,1,train +1627,3,train +1231,3,train +969,3,train +2319,1,train +1923,1,train +2057,1,train +1661,1,train +1840,3,train +2277,4,train +1578,3,train +1182,3,train +2136,1,train +2177,2,train +1478,1,train +1657,3,train +2094,4,train +1832,4,train +2349,1,train +1953,1,train +2390,2,train +1691,1,train +2128,2,train +1825,1,train +2045,4,train +1649,4,train +2207,2,train +1904,1,train +2124,4,train +1728,4,train +2258,4,train +1862,4,train +1721,1,train +2158,2,train +1896,2,train +2075,4,train +1679,4,train +1813,4,train +118,1,train +76,4,train +2371,2,train +2288,4,train +2026,4,train +331,1,train +69,1,train +2846,2,train +2887,3,train +289,4,train +2584,2,train +2625,3,train +27,4,train +2322,2,train +2105,4,train +189,2,train +3317,1,train +3496,3,train +3234,3,train +2838,3,train +3530,1,train +99,1,train +2917,3,train +319,4,train +3051,3,train +2655,3,train +57,4,train +353,2,train +91,2,train +3264,3,train +270,4,train +3002,3,train +2606,3,train +3822,1,train +566,2,train +607,3,train +2902,1,train +304,2,train +3081,3,train +3914,4,train +87,4,train +2819,3,train +3910,3,train +3377,1,train +3993,4,train +3115,1,train +3511,1,train +517,2,train +3294,3,train +300,4,train +38,4,train +3590,1,train +4027,2,train +596,2,train +637,3,train +1033,3,train +2932,1,train +771,3,train +3328,1,train +3548,4,train +3810,4,train +1329,1,train +1067,1,train +3844,2,train +1246,3,train +3541,1,train +3145,1,train +3978,2,train +588,3,train +3499,4,train +3103,4,train +1542,1,train +1146,1,train +1500,4,train +3358,1,train +3795,2,train +3578,4,train +3712,4,train +1359,1,train +3874,2,train +4049,3,train +1014,3,train +3791,4,train +752,3,train +1572,1,train +1613,2,train +3825,2,train +831,3,train +3959,2,train +965,3,train +1826,2,train +1960,2,train +1127,1,train +1564,2,train +1261,1,train +865,1,train +1347,4,train +4038,2,train +1044,3,train +1085,4,train +1481,4,train +4079,3,train +823,4,train +2039,2,train +1340,1,train +944,1,train +1078,1,train +1560,4,train +1298,4,train +2252,2,train +1856,2,train +1594,2,train +2031,3,train +1332,2,train +1511,4,train +1115,4,train +1249,4,train +1807,2,train +2244,3,train +1941,2,train +2323,3,train +2020,2,train +1624,2,train +1758,2,train +2753,1,train +2536,3,train +2670,3,train +1837,2,train +1971,2,train +2966,1,train +2749,3,train +2225,3,train +3045,1,train +3179,1,train +2962,3,train +3137,4,train +2304,3,train +2741,4,train +2042,3,train +2734,1,train +2517,3,train +2255,3,train +3250,2,train +3033,4,train +2730,3,train +3167,4,train +2468,3,train +2509,4,train +290,1,train +3026,1,train +3463,2,train +73,3,train +207,3,train +2502,1,train +2722,4,train +765,1,train +503,1,train +3280,2,train +3676,2,train +682,3,train +286,3,train +2581,1,train +3414,2,train +420,3,train +24,3,train +2715,1,train +2801,4,train +3197,4,train +2935,4,train +2539,4,train +978,1,train +582,1,train +320,1,train +3097,2,train +3627,2,train +2794,1,train +2969,2,train +2886,4,train +1191,1,train +795,1,train +3747,3,train +712,3,train +753,4,train +3048,2,train +3444,2,train +450,3,train +54,3,train +491,4,train +887,4,train +2786,2,train +2965,4,train +3485,3,train +1049,2,train +746,1,train +3960,3,train +484,1,train +3657,2,train +1100,4,train +2999,2,train +401,3,train +3994,1,train +959,1,train +563,1,train +3777,3,train +3911,3,train +301,1,train +783,4,train +480,3,train +521,4,train +3212,2,train +3474,2,train +655,4,train +259,4,train +3515,3,train +1475,2,train +1079,2,train +1213,2,train +514,1,train +951,2,train +3687,2,train +3728,3,train +734,4,train +3425,2,train +3466,3,train +1688,2,train +4024,1,train +989,1,train +1030,2,train +1426,2,train +1467,3,train +3545,3,train +947,4,train +551,4,train +3679,3,train +4075,3,train +685,4,train +1680,3,train +3975,1,train +1377,2,train +981,2,train +3758,3,train +764,4,train +3933,4,train +898,4,train +1976,1,train +1759,3,train +1456,2,train +1497,3,train +1194,2,train +798,2,train +3971,3,train +2189,1,train +1972,3,train +4005,1,train +3963,4,train +1923,3,train +1527,3,train +1224,2,train +1661,3,train +2615,1,train +2219,1,train +2353,1,train +2136,3,train +2177,4,train +1478,3,train +1915,4,train +2432,1,train +1953,3,train +2390,4,train +1691,3,train +2128,4,train +1825,3,train +2645,1,train +2686,2,train +1987,1,train +2207,4,train +1904,3,train +1945,4,train +122,1,train +2637,2,train +1804,1,train +2334,1,train +1721,3,train +2158,4,train +1896,4,train +2716,2,train +118,3,train +2413,1,train +2017,1,train +2454,2,train +2850,2,train +2151,1,train +2371,4,train +152,1,train +2929,2,train +2667,2,train +2364,1,train +2584,4,train +2322,4,train +3400,1,train +406,2,train +3142,2,train +103,1,train +189,4,train +2484,2,train +2880,2,train +3317,3,train +3613,1,train +182,1,train +3530,3,train +2697,2,train +3826,1,train +3430,1,train +395,1,train +436,2,train +133,1,train +174,2,train +2951,3,train +353,4,train +2648,2,train +91,4,train +4039,1,train +3822,3,train +3381,1,train +3601,4,train +84,1,train +566,4,train +2902,3,train +304,4,train +3460,1,train +862,2,train +466,2,train +903,3,train +3377,3,train +2981,3,train +3511,3,train +3115,3,train +4069,1,train +3673,1,train +1075,2,train +813,2,train +417,2,train +3590,3,train +3631,4,train +596,4,train +3328,3,train +2932,3,train +4027,4,train +1329,3,train +3624,1,train +1067,3,train +3362,1,train +3844,4,train +3541,3,train +3145,3,train +3978,4,train +1363,1,train +1542,3,train +1146,3,train +3441,1,train +3837,1,train +3575,1,train +3358,3,train +3399,4,train +3795,4,train +1442,1,train +1576,1,train +1359,3,train +660,2,train +3788,1,train +3874,4,train +1789,1,train +1572,3,train +1131,1,train +1613,4,train +3867,1,train +873,2,train +1351,4,train +3646,2,train +3825,4,train +3429,4,train +1868,1,train +1826,4,train +1960,4,train +1127,3,train +1564,4,train +1261,3,train +865,3,train +4038,4,train +2081,1,train +2256,2,train +1860,2,train +2039,4,train +1161,1,train +3938,2,train +1340,3,train +944,3,train +1381,4,train +1078,3,train +1636,1,train +2073,2,train +2252,4,train +1374,1,train +1856,4,train +1594,4,train +1332,4,train +2152,2,train +1849,1,train +1890,2,train +1587,1,train +1628,2,train +1807,4,train +1411,4,train +2499,2,train +1800,1,train +1841,2,train +2237,2,train +2020,4,train +1624,4,train +1758,4,train +2753,3,train +1920,2,train +2529,2,train +2133,2,train +2966,3,train +1871,2,train +2308,3,train +268,2,train +3045,3,train +6,2,train +2387,3,train +3079,1,train +481,2,train +85,2,train +219,2,train +3037,4,train +2734,3,train +2076,3,train +3292,1,train +339,3,train +36,2,train +3250,4,train +3109,1,train +115,2,train +3284,2,train +2847,1,train +3243,1,train +249,2,train +290,3,train +2585,1,train +3026,3,train +3067,4,train +2805,4,train +3463,4,train +2502,3,train +3322,1,train +765,3,train +3060,1,train +66,2,train +503,3,train +3194,1,train +3280,4,train +3414,4,train +2581,3,train +3676,4,train +2715,3,train +1195,1,train +799,1,train +3576,2,train +978,3,train +582,3,train +3273,1,train +3314,2,train +320,3,train +3011,1,train +3097,4,train +17,2,train +2794,3,train +2969,4,train +878,1,train +795,3,train +3923,2,train +3224,1,train +3444,4,train +3048,4,train +2786,4,train +1091,1,train +1266,2,train +4002,2,train +567,1,train +1049,4,train +3344,2,train +746,3,train +787,4,train +3082,2,train +3478,2,train +484,3,train +88,3,train +2999,4,train +1304,1,train +1176,1,train +780,1,train +3953,2,train +3994,3,train +563,3,train +3295,2,train +3691,2,train +301,3,train +3474,4,train +3212,4,train +1255,1,train +859,1,train +1692,2,train +4073,3,train +993,1,train +597,1,train +1079,4,train +1475,4,train +1213,4,train +514,3,train +951,4,train +1905,2,train +1072,1,train +1688,4,train +810,1,train +1247,2,train +3983,2,train +1426,4,train +1030,4,train +3721,2,train +4024,3,train +627,1,train +1064,2,train +847,4,train +3975,3,train +981,4,train +1539,2,train +1976,3,train +1236,1,train +1456,4,train +3792,3,train +1194,4,train +798,4,train +1752,2,train +2189,3,train +1490,2,train +1094,2,train +1228,2,train +4005,3,train +1965,2,train +1703,2,train +1307,2,train +1224,4,train +2302,1,train +2219,3,train +1823,3,train +2353,3,train +1520,2,train +2649,1,train +2253,1,train +2432,3,train +1733,2,train +2211,4,train +2728,1,train +2686,4,train +1987,3,train +2679,1,train +2283,1,train +2720,2,train +122,3,train +2021,1,train +2503,4,train +2637,4,train +1804,3,train +2496,1,train +2933,2,train +2716,4,train +2413,3,train +2017,3,train +2454,4,train +2850,4,train +2151,3,train +235,1,train +2709,1,train +2313,1,train +2750,2,train +152,3,train +193,4,train +2051,1,train +2929,4,train +2667,4,train +2271,4,train +314,1,train +186,1,train +3400,3,train +406,4,train +2264,1,train +2660,1,train +103,3,train +2701,2,train +2484,4,train +2880,4,train +3142,4,train +661,1,train +3176,2,train +2780,2,train +3613,3,train +182,3,train +223,4,train +2697,4,train +478,1,train +3826,3,train +3430,3,train +216,1,train +3389,2,train +395,3,train +436,4,train +2731,2,train +133,3,train +174,4,train +3127,2,train +3168,3,train +2648,4,train +295,1,train +732,2,train +3206,2,train +253,4,train +3381,3,train +3939,1,train +3460,3,train +862,4,train +466,4,train +2761,2,train +3157,2,train +3890,1,train +896,2,train +3673,3,train +417,4,train +1371,2,train +975,2,train +3707,1,train +1109,2,train +713,2,train +3927,4,train +451,2,train +3624,3,train +3362,3,train +1188,2,train +3920,1,train +926,2,train +1363,3,train +3658,1,train +1060,2,train +664,2,train +3441,3,train +3837,3,train +3575,3,train +1659,1,train +1442,3,train +3935,2,train +1576,3,train +1180,3,train +3871,1,train +877,2,train +3695,4,train +660,4,train +1738,1,train +1872,1,train +3950,1,train +1789,3,train +4084,1,train +3688,1,train +1090,2,train +1131,3,train +3867,3,train +3646,4,train +1951,1,train +1689,1,train +1868,3,train +3901,1,train +2164,1,train +2298,1,train +1640,1,train +2256,4,train +1860,4,train +1161,3,train +3938,4,train +2115,1,train +2156,2,train +1636,3,train +1677,4,train +2073,4,train +1374,3,train +1932,1,train +1670,1,train +2152,4,train +1849,3,train +1890,4,train +1587,3,train +1628,4,train +2448,2,train +2145,1,train +1883,1,train +1487,1,train +2320,2,train +2237,4,train +1841,4,train +2795,2,train +2399,2,train +2096,1,train +2533,2,train +1920,4,train +2133,4,train +1871,4,train +48,1,train +2825,2,train +268,4,train +2126,1,train +2167,2,train +2563,2,train +6,4,train +2604,3,train +127,1,train +302,2,train +3079,3,train +85,4,train +2380,2,train +219,4,train +2514,2,train +3375,1,train +381,2,train +3113,1,train +3509,1,train +78,1,train +515,2,train +3292,3,train +2593,2,train +2634,3,train +36,4,train +2372,3,train +3192,1,train +594,2,train +198,2,train +3326,1,train +3722,1,train +332,2,train +3109,3,train +115,4,train +2847,3,train +3243,3,train +3284,4,train +2585,3,train +3801,1,train +3539,1,train +3143,1,train +3580,2,train +108,1,train +545,2,train +586,3,train +3322,3,train +283,2,train +3060,3,train +2664,3,train +66,4,train +1195,3,train +362,2,train +799,3,train +3094,1,train +496,2,train +3273,3,train +3314,4,train +3576,4,train +3011,3,train +17,4,train +1095,1,train +3872,2,train +4006,2,train +878,3,train +3610,2,train +179,2,train +616,3,train +2911,1,train +3307,1,train +354,3,train +4085,2,train +1091,3,train +3386,1,train +3782,1,train +4002,4,train +1266,4,train +3561,2,train +526,2,train +567,3,train +3344,4,train +3478,4,train +3082,4,train +1521,1,train +1304,3,train +863,1,train +3640,2,train +4036,2,train +3337,1,train +3774,2,train +780,3,train +3691,4,train +3295,4,train +1734,1,train +1338,1,train +1472,1,train +1255,3,train +859,3,train +1692,4,train +3591,2,train +993,3,train +597,3,train +3987,2,train +1551,1,train +1289,1,train +893,1,train +4066,2,train +1072,3,train +3804,2,train +810,3,train +1247,4,train +3721,4,train +1368,1,train +1805,2,train +1543,2,train +844,1,train +4017,2,train +4058,3,train +627,3,train +1064,4,train +2018,2,train +1622,2,train +923,1,train +1057,1,train +1143,4,train +1539,4,train +1532,1,train +1969,2,train +1752,4,train +4047,2,train +4088,3,train +1490,4,train +1094,4,train +1228,4,train +2048,2,train +1349,1,train +1786,2,train +1524,2,train +1703,4,train +1307,4,train +2519,1,train +2302,3,train +1603,2,train +1737,2,train +1341,2,train +1520,4,train +2732,1,train +2649,3,train +2253,3,train +1950,2,train +2945,1,train +2549,1,train +2728,3,train +2029,2,train +1767,2,train +2500,1,train +2679,3,train +2283,3,train +2720,4,train +1980,2,train +2021,3,train +22,3,train +2317,1,train +2496,3,train +2933,4,train +235,3,train +2926,1,train +2709,3,train +2313,3,train +2750,4,train +2051,3,train +2488,4,train +314,3,train +3005,1,train +3046,2,train +11,2,train +3442,2,train +2347,1,train +186,3,train +2481,1,train +2264,3,train +2701,4,train +744,1,train +3655,2,train +482,1,train +3259,2,train +661,3,train +2560,1,train +3176,4,train +2780,4,train +2518,4,train +299,1,train +3076,2,train +478,3,train +82,3,train +2773,1,train +3606,2,train +216,3,train +3127,4,train +2731,4,train +1170,1,train +774,1,train +908,1,train +512,1,train +3289,2,train +3685,2,train +3726,3,train +295,3,train +3464,3,train +732,4,train +2986,1,train +3027,2,train +470,4,train +2765,2,train +3206,4,train +1028,2,train +725,1,train +3939,3,train +463,1,train +3240,2,train +3636,2,train +3374,2,train +2978,2,train +3157,4,train +2761,4,train +3973,1,train +1375,2,train +979,2,train +676,1,train +3453,2,train +3494,3,train +3890,3,train +896,4,train +3191,2,train +1058,2,train +1588,2,train +359,1,train +493,1,train +975,4,train +3707,3,train +1109,4,train +713,4,train +451,4,train +1667,2,train +4003,1,train +968,1,train +1405,2,train +1446,3,train +3741,1,train +1188,4,train +747,2,train +3920,3,train +926,4,train +3658,3,train +664,4,train +1484,2,train +1659,3,train +3954,1,train +1356,2,train +960,2,train +3871,3,train +877,4,train +1738,3,train +1435,2,train +1476,3,train +1872,3,train +3771,1,train +777,2,train +3950,3,train +3688,3,train +1951,3,train +1252,2,train +1689,3,train +3901,3,train +3942,4,train +2381,1,train +1985,1,train +2164,3,train +1723,1,train +1506,3,train +1203,2,train +1640,3,train +2198,1,train +2115,3,train +2156,4,train +2411,1,train +1932,3,train +1670,3,train +2624,1,train +2228,1,train +2665,2,train +2448,4,train +2145,3,train +1883,3,train +1487,3,train +2320,4,train +2441,1,train +2179,1,train +1783,1,train +2616,2,train +2399,4,train +2533,4,train +2695,2,train +2392,1,train +1996,1,train +1954,4,train +3042,2,train +2563,4,train +2167,4,train +344,1,train +3121,2,train +127,3,train +2422,1,train +2463,2,train +302,4,train +2597,2,train +2380,4,train +423,1,train +161,1,train +3375,3,train +381,4,train +3113,3,train +3509,3,train +515,4,train +2810,2,train +2414,2,train +2593,4,train +811,2,train +415,2,train +3192,3,train +594,4,train +198,4,train +2493,2,train +3326,3,train +332,4,train +2627,2,train +3622,1,train +3801,3,train +366,2,train +3143,3,train +3539,3,train +545,4,train +2840,2,train +3580,4,train +283,4,train +3701,1,train +404,1,train +882,3,train +3573,1,train +579,2,train +183,2,train +2960,3,train +362,4,train +3094,3,train +4048,1,train +4089,2,train +658,2,train +3872,4,train +1095,3,train +3390,1,train +792,2,train +396,2,train +3610,4,train +4006,4,train +179,4,train +2911,3,train +3307,3,train +3348,4,train +3469,1,train +871,2,train +475,2,train +912,3,train +3207,1,train +4085,4,train +213,2,train +3386,3,train +347,2,train +3561,4,train +4078,1,train +3682,1,train +1521,3,train +3816,1,train +3420,1,train +822,2,train +863,3,train +3554,1,train +3640,4,train +560,2,train +3337,3,train +3774,4,train +4036,4,train +1421,1,train +1555,1,train +1338,3,train +4070,2,train +3237,1,train +639,2,train +3767,1,train +3987,4,train +3591,4,train +1768,1,train +1551,3,train +3846,1,train +1289,3,train +893,3,train +1330,4,train +4066,4,train +3804,4,train +3408,4,train +1585,1,train +1368,3,train +1805,4,train +1543,4,train +710,3,train +844,3,train +4017,4,train +2060,1,train +1664,1,train +1536,1,train +1622,4,train +2018,4,train +3917,2,train +923,3,train +1360,4,train +4051,2,train +1057,3,train +2052,2,train +1219,1,train +1353,1,train +1969,4,train +4047,4,train +1432,1,train +1869,2,train +2048,4,train +1786,4,train +1524,4,train +958,1,validate +3339,2,validate +782,4,validate +2478,2,validate +3256,4,validate +3819,1,validate +825,2,validate +167,2,validate +2944,3,validate +346,4,validate +1553,3,validate +296,3,validate +3502,1,validate +2033,2,validate +2895,2,validate +3807,4,validate +805,1,validate +2845,1,validate +1454,1,validate +3886,4,validate +806,2,validate +2233,4,validate +3533,2,validate +539,3,validate +2713,3,validate +3321,2,validate +2663,2,validate +2446,4,validate +1451,4,validate +1189,4,validate +3484,1,validate +1089,2,validate +1006,4,validate +1140,4,validate +1655,4,validate +3392,3,validate +398,4,validate +3130,3,validate +2085,2,validate +2997,4,validate +1782,1,validate +2002,4,validate +1169,3,validate +3605,3,validate +3209,3,validate +1344,4,validate +3343,3,validate +2644,2,validate +957,3,validate +1253,2,validate +1861,1,validate +1599,1,validate +1819,4,validate +645,2,validate +1557,4,validate +1466,2,validate +1507,3,validate +462,2,validate +2461,1,validate +3635,3,validate +1770,4,validate +379,4,validate +2419,4,validate +546,1,validate +3502,4,validate +3931,1,validate +67,3,validate +675,2,validate +2279,2,validate +1325,3,validate +2711,4,validate +2845,4,validate +1234,1,validate +4052,3,validate +1454,4,validate +796,4,validate +3833,1,validate +2704,1,validate +839,2,validate +2442,1,validate +3395,4,validate +1051,1,validate +1488,2,validate +2266,4,validate +3091,1,validate +2829,1,validate +1009,4,validate +1438,1,validate +1617,3,validate +1093,3,validate +2696,2,validate +2393,1,validate +1305,2,validate +2217,4,validate +3438,1,validate +2959,3,validate +2301,3,validate +394,1,validate +1609,4,validate +910,3,validate +218,4,validate +2430,4,validate +1256,2,validate +4033,3,validate +3213,4,validate +211,1,validate +431,4,validate +3900,4,validate +1731,2,validate +2247,4,validate +3072,1,validate +3984,3,validate +2118,2,validate +861,2,validate +1639,4,validate +248,4,validate +2939,2,validate +3073,2,validate +2460,4,validate +1420,2,validate +2806,3,validate +1632,1,validate +678,2,validate +1590,4,validate +2931,3,validate +1936,3,validate +2544,2,validate +3751,1,validate +1449,1,validate +495,2,validate +674,4,validate +2232,1,validate +412,4,validate +3144,3,validate +2015,3,validate +546,4,validate +150,4,validate +4014,2,validate +2757,2,validate +1796,1,validate +405,1,validate +1054,1,validate +1966,3,validate +3703,2,validate +3915,1,validate +921,2,validate +3653,1,validate +1055,2,validate +1437,4,validate +2482,4,validate +3520,2,validate +130,3,validate +1175,3,validate +872,2,validate +2475,1,validate +2079,1,validate +3091,4,validate +2829,4,validate +89,1,validate +2130,3,validate +1438,4,validate +1042,4,validate +2342,2,validate +2292,1,validate +2512,4,validate +2250,4,validate +1684,1,validate +2992,3,validate +31,1,validate +3071,3,validate +1156,3,validate +894,3,validate +202,4,validate +3805,4,validate +1502,2,validate +3542,2,validate +3239,1,validate +245,2,validate +1023,4,validate +3926,1,validate +973,3,validate +3409,3,validate +711,2,validate +12,1,validate +2923,2,validate +2365,3,validate +1270,2,validate +3751,4,validate +2873,1,validate +1449,4,validate +3489,4,validate +1482,1,validate +1616,1,validate +2232,4,validate +2661,1,validate +2265,1,validate +2444,3,validate +142,3,validate +1745,2,validate +1483,2,validate +2091,1,validate +3652,3,validate +3256,3,validate +2478,1,validate +2261,3,validate +825,1,validate +1045,4,validate +3299,1,validate +346,3,validate +3257,4,validate +389,1,validate +2033,1,validate +2515,4,validate +1258,4,validate +2820,2,validate +2079,4,validate +2904,1,validate +3857,4,validate +2466,4,validate +2163,3,validate +1684,4,validate +806,1,validate +1288,4,validate +2417,4,validate +1026,4,validate +31,4,validate +539,2,validate +2713,2,validate +3321,1,validate +802,3,validate +3279,4,validate +1847,3,validate +1451,3,validate +1189,3,validate +3534,1,validate +1232,1,validate +2447,4,validate +1798,3,validate +1839,4,validate +1140,3,validate +145,3,validate +2185,3,validate +1486,2,validate +3006,3,validate +12,4,validate +2956,2,validate +2002,3,validate +3605,2,validate +2873,4,validate +1482,4,validate +2131,4,validate +957,2,validate +2265,4,validate +3868,3,validate +612,4,validate +2215,3,validate +958,3,validate +3339,4,validate +1466,1,validate +1600,1,validate +3382,2,validate +3819,3,validate +825,4,validate +3635,2,validate +167,4,validate +1770,3,validate +379,3,validate +3502,3,validate +2033,4,validate +2279,1,validate +2895,4,validate +805,3,validate +2845,3,validate +1454,3,validate +106,1,validate +839,1,validate +3533,4,validate +2359,2,validate +4096,1,validate +1617,2,validate +1314,1,validate +2663,4,validate +2959,2,validate +3567,1,validate +1089,4,validate +2127,1,validate +1731,1,validate +2085,4,validate +3335,1,validate +2644,4,validate +3073,1,validate +1253,4,validate +1861,3,validate +1420,1,validate +1599,3,validate +3202,2,validate +2806,2,validate +645,4,validate +1466,4,validate +292,2,validate +1895,1,validate +1337,2,validate +504,1,validate +2544,1,validate +638,1,validate +462,4,validate +2461,3,validate +674,3,validate +3365,1,validate +2807,2,validate +546,3,validate +4014,1,validate +1846,1,validate +3931,3,validate +2757,1,validate +675,4,validate +1579,2,validate +4015,2,validate +1367,2,validate +3703,1,validate +2279,4,validate +1055,1,validate +1234,3,validate +2837,2,validate +3183,1,validate +922,2,validate +1700,4,validate +3833,3,validate +2704,3,validate +839,4,validate +2442,3,validate +872,1,validate +1354,4,validate +1051,3,validate +1488,4,validate +3091,3,validate +2829,3,validate +2130,2,validate +1438,3,validate +3175,2,validate +2342,1,validate +2696,4,validate +2393,3,validate +1305,4,validate +2992,2,validate +394,3,validate +2689,1,validate +1122,4,validate +1256,4,validate +3071,2,validate +1165,2,validate +2768,1,validate +211,3,validate +1731,4,validate +2160,1,validate +3805,3,validate +3072,3,validate +2118,4,validate +3680,2,validate +245,1,validate +861,4,validate +2939,4,validate +374,2,validate +1420,4,validate +1935,4,validate +1632,3,validate +458,1,validate +3235,2,validate +678,4,validate +3581,1,validate +2190,1,validate +2365,2,validate +2544,4,validate +3751,3,validate +1449,3,validate +3489,3,validate +495,4,validate +3186,2,validate +1795,2,validate +2232,3,validate +1533,2,validate +4014,4,validate +2444,2,validate +142,2,validate +1745,1,validate +1483,1,validate +2008,2,validate +1054,3,validate +3703,4,validate +3915,3,validate +921,4,validate +3653,3,validate +3562,1,validate +2608,2,validate +3520,4,validate +2820,1,validate +2954,1,validate +872,4,validate +2475,3,validate +2079,3,validate +2163,2,validate +2342,4,validate +1776,1,validate +2292,3,validate +1684,3,validate +2984,1,validate +31,3,validate +74,1,validate +3980,2,validate +1198,2,validate +3634,2,validate +802,2,validate +1847,2,validate +1502,4,validate +2327,1,validate +3542,4,validate +3239,3,validate +245,4,validate +1889,4,validate +3926,3,validate +1798,2,validate +1495,1,validate +145,2,validate +711,4,validate +3006,2,validate +12,3,validate +2923,4,validate +1270,4,validate +2873,3,validate +1482,3,validate +1616,3,validate +2661,3,validate +1828,2,validate +3827,1,validate +3868,2,validate +2265,3,validate +1745,4,validate +612,3,validate +1483,4,validate +917,1,validate +958,2,validate +2478,3,validate +3382,1,validate +3819,2,validate +825,3,validate +3299,3,validate +2033,3,validate +126,1,validate +2725,1,validate +2895,3,validate +805,2,validate +3200,1,validate +806,3,validate +1414,2,validate +3533,3,validate +539,4,validate +2713,4,validate +369,1,validate +3321,3,validate +3230,1,validate +3534,3,validate +3484,2,validate +2785,1,validate +1486,4,validate +2956,4,validate +1782,2,validate +1169,4,validate +3605,4,validate +2865,2,validate +3343,4,validate +999,1,validate +2644,3,validate +1253,3,validate +957,4,validate +2257,2,validate +1861,2,validate +1599,2,validate +3202,1,validate +2341,1,validate +1212,1,validate +1466,3,validate +292,1,validate +1600,3,validate +1337,1,validate +2420,1,validate +2461,2,validate +3635,4,validate +2807,1,validate +3678,2,validate +634,2,validate +4015,1,validate +2109,1,validate +1417,2,validate +1367,1,validate +2279,3,validate +1325,4,validate +3579,1,validate +1234,2,validate +2837,1,validate +323,1,validate +3833,2,validate +2704,2,validate +106,3,validate +2401,1,validate +2442,2,validate +839,3,validate +1051,2,validate +2359,4,validate +4096,3,validate +1617,4,validate +1314,3,validate +1093,4,validate +2393,2,validate +3438,2,validate +1744,1,validate +2959,4,validate +790,2,validate +394,2,validate +3567,3,validate +1215,2,validate +1561,1,validate +1165,1,validate +2127,3,validate +1731,3,validate +3984,4,validate +3680,1,validate +3814,1,validate +1512,1,validate +861,3,validate +3335,3,validate +2939,3,validate +3073,3,validate +1420,3,validate +3202,4,validate +2806,4,validate +1632,2,validate +2374,1,validate +292,4,validate +1895,3,validate +721,1,validate +1936,4,validate +1337,4,validate +504,3,validate +2544,3,validate +3582,1,validate +3186,1,validate +3365,3,validate +2807,4,validate +4014,3,validate +1846,3,validate +2757,3,validate +1796,2,validate +1579,4,validate +405,2,validate +4015,4,validate +2008,1,validate +1013,1,validate +1054,2,validate +1966,4,validate +3703,3,validate +3915,2,validate +921,3,validate +3612,1,validate +618,2,validate +1055,3,validate +2837,4,validate +3520,3,validate +922,4,validate +872,3,validate +2475,2,validate +781,1,validate +89,2,validate +2130,4,validate +3175,4,validate +2342,3,validate +435,1,validate +173,1,validate +3296,1,validate +1431,2,validate +2992,4,validate +2689,3,validate +3980,1,validate +3071,4,validate +1165,4,validate +2768,3,validate +1198,1,validate +3634,1,validate +2160,3,validate +1502,3,validate +1199,2,validate +3680,4,validate +3239,2,validate +245,3,validate +1545,1,validate +3926,2,validate +374,4,validate +3714,2,validate +3015,1,validate +458,3,validate +3235,4,validate +1362,1,validate +3581,3,validate +105,1,validate +2882,2,validate +2190,3,validate +2923,3,validate +1150,1,validate +754,1,validate +2365,4,validate +3186,4,validate +1616,2,validate +1795,4,validate +2661,2,validate +1533,4,validate +2444,4,validate +142,4,validate +1745,3,validate +1483,3,validate +2091,2,validate +2008,4,validate +3652,4,validate +2261,4,validate +3957,2,validate +3299,2,validate +389,2,validate +3562,3,validate +2608,4,validate +3512,2,validate +2820,3,validate +2954,3,validate +2904,2,validate +1647,2,validate +2163,4,validate +3725,2,validate +1726,2,validate +1464,2,validate +3201,1,validate +2984,3,validate +1414,1,validate +3980,4,validate +1198,4,validate +802,4,validate +1847,4,validate +2327,3,validate +3534,2,validate +1232,2,validate +1798,4,validate +321,1,validate +3098,2,validate +145,4,validate +970,1,validate +2185,4,validate +1486,3,validate +3006,4,validate +3831,1,validate +2956,3,validate +1183,1,validate +3261,1,validate +2865,1,validate +2569,2,validate +1828,4,validate +3827,3,validate +2653,1,validate +2257,1,validate +3868,4,validate +2391,1,validate +1262,1,validate +2215,4,validate +958,4,validate +430,1,validate +1600,2,validate +3382,3,validate +3819,4,validate +3990,2,validate +2337,2,validate +3678,1,validate +2683,1,validate +126,3,validate +634,1,validate +1417,1,validate +2725,3,validate +3021,1,validate +805,4,validate +1110,2,validate +106,2,validate +1414,4,validate +1581,1,validate +452,1,validate +2359,3,validate +4096,2,validate +2268,1,validate +1314,2,validate +2056,1,validate +665,1,validate +141,1,validate +790,1,validate +3567,2,validate +3484,4,validate +8,2,validate +2785,3,validate +1215,1,validate +2127,2,validate +1782,4,validate +1216,1,validate +999,3,validate +3335,2,validate +1775,1,validate +1861,4,validate +2257,4,validate +1599,4,validate +2424,1,validate +3202,3,validate +292,3,validate +1895,2,validate +1337,3,validate +504,2,validate +638,2,validate +2420,3,validate +2461,4,validate +3365,2,validate +2807,3,validate +1846,2,validate +3845,1,validate +3931,4,validate +634,4,validate +2192,1,validate +1579,3,validate +68,1,validate +2109,3,validate +4015,3,validate +1417,4,validate +1367,3,validate +3579,3,validate +1276,1,validate +1713,2,validate +618,1,validate +1234,4,validate +2837,3,validate +2534,2,validate +3183,2,validate +922,3,validate +3833,4,validate +2222,1,validate +2704,4,validate +2442,4,validate +1227,1,validate +1051,4,validate +3175,3,validate +1743,2,validate +2393,4,validate +3438,4,validate +1431,1,validate +3905,1,validate +911,2,validate +790,4,validate +394,4,validate +2689,2,validate +565,2,validate +1215,4,validate +649,1,validate +1561,3,validate +1165,3,validate +3164,2,validate +2768,2,validate +211,4,validate +2160,2,validate +3072,4,validate +1199,1,validate +3680,3,validate +204,1,validate +3814,3,validate +1462,2,validate +374,3,validate +2070,1,validate +3714,1,validate +1632,4,validate +458,2,validate +3235,3,validate +2374,3,validate +3977,2,validate +3581,2,validate +2882,1,validate +2190,2,validate +721,3,validate +3582,3,validate +3186,3,validate +1279,1,validate +1017,1,validate +1795,3,validate +1533,3,validate +2799,2,validate +2100,1,validate +1838,1,validate +3878,1,validate +884,2,validate +2487,1,validate +1796,4,validate +405,4,validate +2008,3,validate +101,1,validate +1013,3,validate +1054,4,validate +3957,1,validate +4091,1,validate +3915,4,validate +2700,1,validate +3612,3,validate +3653,4,validate +2438,1,validate +618,4,validate +1047,1,validate +3562,2,validate +2567,2,validate +2608,3,validate +3512,1,validate +2954,2,validate +1697,2,validate +2475,4,validate +781,3,validate +89,4,validate +1647,1,validate +3725,1,validate +435,3,validate +173,3,validate +1776,2,validate +2292,4,validate +3296,3,validate +1726,1,validate +1431,4,validate +1464,1,validate +469,1,validate +2984,2,validate +3118,2,validate +74,2,validate +3980,3,validate +1198,3,validate +3634,3,validate +549,2,validate +2327,2,validate +1199,4,validate +3239,4,validate +1545,3,validate +3926,4,validate +1495,2,validate +3098,1,validate +3714,4,validate +238,2,validate +3015,3,validate +1362,3,validate +2882,4,validate +754,3,validate +2569,1,validate +1616,4,validate +2661,4,validate +1828,3,validate +3827,2,validate +55,1,validate +3961,2,validate +2091,4,validate +917,2,validate +2478,4,validate +3990,1,validate +3299,4,validate +2337,1,validate +389,4,validate +126,2,validate +3512,4,validate +2725,2,validate +2904,4,validate +1647,4,validate +2289,2,validate +3200,2,validate +1943,2,validate +1110,1,validate +1726,4,validate +1464,4,validate +3201,3,validate +2368,2,validate +806,4,validate +1414,3,validate +3151,2,validate +369,2,validate +3497,1,validate +3321,4,validate +1844,1,validate +3230,2,validate +1274,1,validate +3534,4,validate +1232,4,validate +666,1,validate +3484,3,validate +8,1,validate +2785,2,validate +3789,1,validate +3527,1,validate +533,2,validate +970,3,validate +3831,3,validate +1741,2,validate +1782,3,validate +1183,3,validate +350,2,validate +2865,3,validate +2569,4,validate +999,2,validate +2653,3,validate +2257,3,validate +2391,3,validate +1262,3,validate +2341,2,validate +1212,2,validate +1600,4,validate +1296,1,validate +3990,4,validate +2420,2,validate +2554,2,validate +2337,4,validate +2900,1,validate +3678,3,validate +2683,3,validate +634,3,validate +2633,2,validate +2109,2,validate +1417,3,validate +1114,2,validate +2717,1,validate +1326,1,validate +1460,1,validate +3579,2,validate +1713,1,validate +3021,3,validate +3925,1,validate +2930,1,validate +2534,1,validate +4054,2,validate +323,2,validate +106,4,validate +2401,2,validate +1581,3,validate +452,3,validate +4096,4,validate +2268,3,validate +1314,4,validate +1743,1,validate +665,3,validate +3438,3,validate +141,3,validate +1744,2,validate +911,1,validate +615,2,validate +3743,1,validate +790,3,validate +3567,4,validate +565,1,validate +8,4,validate +1215,3,validate +1561,2,validate +3164,1,validate +2169,1,validate +1907,1,validate +2127,4,validate +2036,2,validate +1774,2,validate +3814,2,validate +1512,2,validate +1216,3,validate +3335,4,validate +3073,4,validate +1462,1,validate +3378,2,validate +2424,3,validate +2374,2,validate +3977,1,validate +1895,4,validate +721,2,validate +504,4,validate +638,4,validate +3582,2,validate +3365,4,validate +2799,1,validate +1846,4,validate +3845,3,validate +2757,4,validate +884,1,validate +2192,3,validate +1796,3,validate +2800,2,validate +405,3,validate +1013,2,validate +3012,1,validate +1276,3,validate +1713,4,validate +3612,2,validate +618,3,validate +1055,4,validate +3225,1,validate +2567,1,validate +3183,4,validate +2222,3,validate +1697,1,validate +781,2,validate +89,3,validate +435,2,validate +1743,4,validate +569,2,validate +173,2,validate +3296,2,validate +1431,3,validate +2993,1,validate +3905,3,validate +911,4,validate +2689,4,validate +782,2,validate +3118,1,validate +565,4,validate +2944,1,validate +2548,1,validate +3164,4,validate +2768,4,validate +1553,1,validate +1990,2,validate +2160,4,validate +549,1,validate +1199,3,validate +204,3,validate +1545,2,validate +1462,4,validate +3714,3,validate +238,1,validate +3015,2,validate +458,4,validate +3149,2,validate +1362,2,validate +3977,4,validate +3581,4,validate +105,2,validate +2882,3,validate +2190,4,validate +1150,2,validate +754,2,validate +1279,3,validate +1017,3,validate +3961,1,validate +3878,3,validate +884,4,validate +2487,3,validate +2091,3,validate +101,3,validate +3957,3,validate +4091,3,validate +2700,3,validate +1526,1,validate +2438,3,validate +135,1,validate +1047,3,validate +389,3,validate +1655,2,validate +3562,4,validate +2567,4,validate +3512,3,validate +2820,4,validate +2954,4,validate +1697,4,validate +2904,3,validate +1647,3,validate +3209,1,validate +1344,2,validate +3725,3,validate +2289,1,validate +1776,4,validate +1943,1,validate +1726,3,validate +1464,3,validate +469,3,validate +3201,2,validate +2368,1,validate +2984,4,validate +3118,4,validate +1507,1,validate +3151,1,validate +74,4,validate +1586,1,validate +67,1,validate +2327,4,validate +1232,3,validate +3577,1,validate +1495,4,validate +321,2,validate +3098,3,validate +533,1,validate +970,2,validate +4052,1,validate +3831,2,validate +796,2,validate +1741,1,validate +1183,2,validate +350,1,validate +3261,2,validate +2569,3,validate +3395,2,validate +2266,2,validate +613,2,validate +3827,4,validate +2653,2,validate +55,3,validate +3961,4,validate +2391,2,validate +1262,2,validate +1396,2,validate +917,4,validate +430,2,validate +3382,4,validate +1609,2,validate +3990,3,validate +218,2,validate +2554,1,validate +2337,3,validate +2683,2,validate +126,4,validate +2633,1,validate +2725,4,validate +1114,1,validate +2197,1,validate +1639,2,validate +3242,1,validate +248,2,validate +2289,4,validate +3021,2,validate +3200,4,validate +1943,4,validate +1110,3,validate +4054,1,validate +2368,4,validate +2931,1,validate +3151,4,validate +1581,2,validate +452,2,validate +149,1,validate +369,4,validate +3497,3,validate +2268,2,validate +3709,2,validate +1844,3,validate +3230,4,validate +2056,2,validate +1357,1,validate +665,2,validate +141,2,validate +2877,2,validate +615,1,validate +666,3,validate +2269,2,validate +8,3,validate +1570,1,validate +2785,4,validate +3527,3,validate +3739,2,validate +1437,2,validate +829,2,validate +1741,4,validate +130,1,validate +2036,1,validate +2170,1,validate +1774,1,validate +350,4,validate +1175,1,validate +1216,2,validate +999,4,validate +2299,2,validate +1775,2,validate +3378,1,validate +2424,2,validate +2341,4,validate +1212,4,validate +2250,2,validate +3853,1,validate +1296,3,validate +638,3,validate +1642,2,validate +2420,4,validate +2554,4,validate +335,1,validate +3845,2,validate +2633,4,validate +2192,2,validate +68,2,validate +2800,1,validate +2109,4,validate +202,2,validate +1114,4,validate +2717,3,validate +1326,3,validate +1367,4,validate +3579,4,validate +1276,2,validate +1713,3,validate +973,1,validate +1410,2,validate +3925,3,validate +2534,3,validate +3183,3,validate +4054,4,validate +323,4,validate +2222,2,validate +2401,4,validate +1227,2,validate +1743,3,validate +569,1,validate +1178,2,validate +3905,2,validate +1744,4,validate +911,3,validate +615,4,validate +782,1,validate +3693,2,validate +565,3,validate +3256,1,validate +1045,2,validate +649,2,validate +1561,4,validate +3164,3,validate +1990,1,validate +2169,3,validate +1907,3,validate +2515,2,validate +2036,4,validate +1774,4,validate +204,2,validate +3814,4,validate +1512,4,validate +1462,3,validate +2070,2,validate +3807,1,validate +3149,1,validate +2374,4,validate +3977,3,validate +721,4,validate +3886,1,validate +2233,1,validate +3582,4,validate +1279,2,validate +1017,2,validate +2799,3,validate +2100,2,validate +1838,2,validate +3878,2,validate +884,3,validate +2446,1,validate +2487,2,validate +101,2,validate +1013,4,validate +3012,3,validate +4091,2,validate +3096,2,validate +2700,2,validate +3612,4,validate +2438,2,validate +1006,1,validate +1047,2,validate +1655,1,validate +2567,3,validate +398,1,validate +1697,3,validate +2997,1,validate +3,2,validate +781,4,validate +1344,1,validate +435,4,validate +569,4,validate +173,4,validate +1776,3,validate +3296,4,validate +2993,3,validate +1819,1,validate +1557,1,validate +469,2,validate +3118,3,validate +1424,2,validate +33,2,validate +74,3,validate +2548,3,validate +1770,1,validate +1990,4,validate +379,1,validate +2419,1,validate +3634,4,validate +549,3,validate +3677,2,validate +2286,2,validate +1545,4,validate +1495,3,validate +238,3,validate +3015,4,validate +3149,4,validate +2711,1,validate +1362,4,validate +796,1,validate +105,4,validate +1150,4,validate +754,4,validate +2316,2,validate +3395,1,validate +2266,1,validate +1009,1,validate +613,1,validate +3961,3,validate +55,2,validate +1396,1,validate +2267,2,validate +917,3,validate +2217,1,validate +1609,1,validate +2084,2,validate +218,1,validate +1526,3,validate +135,3,validate +2430,1,validate +3213,1,validate +431,1,validate +3900,1,validate +2247,1,validate +1639,1,validate +248,1,validate +2289,3,validate +3200,3,validate +2460,1,validate +1943,3,validate +3201,4,validate +1590,1,validate +2368,3,validate +3151,3,validate +1719,2,validate +369,3,validate +3497,2,validate +3709,1,validate +674,1,validate +1844,2,validate +1586,3,validate +412,1,validate +3230,3,validate +150,1,validate +1274,2,validate +2877,1,validate +666,2,validate +2269,1,validate +3577,3,validate +321,4,validate +3789,2,validate +3527,2,validate +533,3,validate +2532,2,validate +970,4,validate +3739,1,validate +1437,1,validate +2482,1,validate +3831,4,validate +829,1,validate +1700,2,validate +1741,3,validate +1183,4,validate +350,3,validate +3261,4,validate +1354,2,validate +2865,4,validate +2299,1,validate +613,4,validate +2653,4,validate +1042,1,validate +2391,4,validate +1262,4,validate +1396,4,validate +2300,2,validate +2341,3,validate +1212,3,validate +2038,2,validate +2512,1,validate +2250,1,validate +430,4,validate +1296,2,validate +1642,1,validate +2554,3,validate +1122,2,validate +2900,2,validate +3678,4,validate +2683,4,validate +2633,3,validate +202,1,validate +1114,3,validate +3805,1,validate +2717,2,validate +1722,2,validate +1326,2,validate +2197,3,validate +1023,1,validate +1460,2,validate +3242,3,validate +3021,4,validate +1410,1,validate +3925,2,validate +2930,2,validate +1935,2,validate +1673,2,validate +4054,3,validate +282,2,validate +323,3,validate +2401,3,validate +1581,4,validate +452,4,validate +149,3,validate +2268,4,validate +3489,1,validate +3709,4,validate +2056,4,validate +1178,1,validate +1357,3,validate +665,4,validate +141,4,validate +2877,4,validate +1744,3,validate +615,3,validate +3743,2,validate +3693,1,validate +2269,4,validate +1570,3,validate +3173,2,validate +1045,1,validate +3739,4,validate +3257,1,validate +2169,2,validate +1907,2,validate +2515,1,validate +829,4,validate +1258,1,validate +2036,3,validate +2170,3,validate +1774,3,validate +1216,4,validate +1512,3,validate +2516,2,validate +2299,4,validate +3857,1,validate +2466,1,validate +1775,4,validate +3378,3,validate +2424,4,validate +3853,3,validate +2417,1,validate +1288,1,validate +1026,1,validate +1642,4,validate +335,3,validate +3845,4,validate +3279,1,validate +2192,4,validate +285,2,validate +68,4,validate +2800,3,validate +3012,2,validate +3146,2,validate +2447,1,validate +1889,2,validate +3096,1,validate +1276,4,validate +1410,4,validate +1839,1,validate +3225,2,validate +577,2,validate +2222,4,validate +1227,4,validate +3,1,validate +569,3,validate +2131,1,validate +1178,4,validate +612,1,validate +2993,2,validate +3905,4,validate +3339,1,validate +782,3,validate +3693,4,validate +1424,1,validate +33,1,validate +167,1,validate +649,4,validate +2548,2,validate +2944,2,validate +1553,2,validate +1990,3,validate +296,2,validate +3677,1,validate +2286,1,validate +204,4,validate +2070,4,validate +2895,1,validate +3807,3,validate +3149,3,validate +105,3,validate +1150,3,validate +3886,3,validate +2316,1,validate +2233,3,validate +1279,4,validate +3533,1,validate +1017,4,validate +2100,4,validate +1838,4,validate +2663,1,validate +2267,1,validate +3878,4,validate +2446,3,validate +2487,4,validate +101,4,validate +3957,4,validate +4091,4,validate +2084,1,validate +3096,4,validate +2700,4,validate +1089,1,validate +1526,2,validate +2438,4,validate +135,2,validate +1006,3,validate +1047,4,validate +1655,3,validate +3392,2,validate +398,3,validate +3130,2,validate +2085,1,validate +2997,3,validate +3,4,validate +1169,2,validate +3209,2,validate +1344,3,validate +3343,2,validate +3725,4,validate +2644,1,validate +1253,1,validate +1819,3,validate +645,1,validate +1557,3,validate +469,4,validate +1507,2,validate +1424,4,validate +1719,1,validate +33,4,validate +462,1,validate +2419,3,validate +1586,2,validate +67,2,validate +3677,4,validate +2286,4,validate +675,1,validate +3577,2,validate +321,3,validate +3098,4,validate +1325,2,validate +2532,1,validate +2711,3,validate +4052,2,validate +796,3,validate +1700,1,validate +2316,4,validate +3261,3,validate +1354,1,validate +3395,3,validate +2266,3,validate +1488,1,validate +1009,3,validate +613,3,validate +55,4,validate +1396,3,validate +2267,4,validate +1093,2,validate +2696,1,validate +2300,1,validate +1305,1,validate +2038,1,validate +430,3,validate +2301,2,validate +1609,3,validate +2084,4,validate +910,2,validate +218,3,validate +1122,1,validate +2430,3,validate +1256,1,validate +4033,2,validate +3213,3,validate +431,3,validate +3900,3,validate +2247,3,validate +3984,2,validate +2118,1,validate +1722,1,validate +2197,2,validate +861,1,validate +1639,3,validate +3242,2,validate +248,3,validate +2939,1,validate +2460,3,validate +1110,4,validate +1935,1,validate +1673,1,validate +678,1,validate +282,1,validate +1590,3,validate +2931,2,validate +1936,2,validate +1719,4,validate +149,2,validate +3497,4,validate +495,1,validate +3709,3,validate +1844,4,validate +412,3,validate +3144,2,validate +2015,2,validate +2056,3,validate +150,3,validate +1357,2,validate +1274,4,validate +2877,3,validate +666,4,validate +2269,3,validate +1966,2,validate +1570,2,validate +3173,1,validate +3789,4,validate +3527,4,validate +2532,4,validate +921,1,validate +3739,3,validate +1437,3,validate +2482,3,validate +829,3,validate +3520,1,validate +130,2,validate +2170,2,validate +1175,2,validate +2516,1,validate +2299,3,validate +1775,3,validate +1042,3,validate +2300,4,validate +2038,4,validate +2512,3,validate +2250,3,validate +3853,2,validate +1296,4,validate +1642,3,validate +2900,4,validate +335,2,validate +285,1,validate +1156,2,validate +68,3,validate +894,2,validate +202,3,validate +2717,4,validate +1502,1,validate +3542,1,validate +3146,1,validate +1722,4,validate +1326,4,validate +1023,3,validate +1460,4,validate +1889,1,validate +973,2,validate +3409,2,validate +1410,3,validate +3925,4,validate +2930,4,validate +2534,4,validate +1673,4,validate +577,1,validate +282,4,validate +711,1,validate +1227,3,validate +2923,1,validate +1270,1,validate +1178,3,validate +3743,4,validate +3652,2,validate +3256,2,validate +3693,3,validate +2261,2,validate +3173,4,validate +1045,3,validate +649,3,validate +346,2,validate +3257,3,validate +2169,4,validate +1907,4,validate +296,1,validate +2515,3,validate +1258,3,validate +2516,4,validate +3857,3,validate +2466,3,validate +2070,3,validate +3807,2,validate +3886,2,validate +2417,3,validate +1288,3,validate +1026,3,validate +2233,2,validate +539,1,validate +2713,1,validate +2799,4,validate +2100,3,validate +1838,3,validate +3279,3,validate +2446,2,validate +285,4,validate +1451,2,validate +1189,2,validate +3012,4,validate +3146,4,validate +2447,3,validate +3096,3,validate +1839,3,validate +1006,2,validate +1140,2,validate +3225,4,validate +2185,2,validate +3392,1,validate +1486,1,validate +398,2,validate +3130,1,validate +577,4,validate +2956,1,validate +2997,2,validate +3,3,validate +2002,2,validate +1169,1,validate +3605,1,validate +3343,1,validate +2131,3,validate +957,1,validate +2215,2,validate +1819,2,validate +2993,4,validate +1557,2,validate +3339,3,validate +1424,3,validate +33,3,validate +3635,1,validate +167,3,validate +1770,2,validate +2944,4,validate +2548,4,validate +1553,4,validate +379,2,validate +2419,2,validate +296,4,validate +3502,2,validate +3677,3,validate +549,4,validate +2286,3,validate +1325,1,validate +238,4,validate +2711,2,validate +2845,2,validate +1454,2,validate +2316,3,validate +2359,1,validate +1009,2,validate +1617,1,validate +2663,3,validate +2267,3,validate +1093,1,validate +2217,2,validate +2959,1,validate +2301,1,validate +2084,3,validate +910,1,validate +1089,3,validate +1526,4,validate +135,4,validate +2430,2,validate +4033,1,validate +3213,2,validate +3392,4,validate +3130,4,validate +431,2,validate +3900,2,validate +2247,2,validate +2085,3,validate +3984,1,validate +3209,4,validate +2460,2,validate +2806,1,validate +645,3,validate +1590,2,validate +1507,4,validate +1936,1,validate +1719,3,validate +462,3,validate +674,2,validate +1586,4,validate +412,2,validate +3144,1,validate +2015,1,validate +546,2,validate +150,2,validate +3931,2,validate +67,4,validate +1274,3,validate +675,3,validate +1579,1,validate +3577,4,validate +1966,1,validate +3789,3,validate +533,4,validate +2532,3,validate +4052,4,validate +2482,2,validate +922,1,validate +1700,3,validate +1354,3,validate +1488,3,validate +3091,2,validate +2829,2,validate +2130,1,validate +1438,2,validate +1042,2,validate +3175,1,validate +2696,3,validate +2300,3,validate +1305,3,validate +2038,3,validate +2512,2,validate +2992,1,validate +2301,4,validate +910,4,validate +1122,3,validate +1256,3,validate +4033,4,validate +2900,3,validate +3071,1,validate +211,2,validate +1156,1,validate +894,1,validate +3805,2,validate +3072,2,validate +2118,3,validate +1722,3,validate +2197,4,validate +1023,2,validate +1460,3,validate +3242,4,validate +3409,1,validate +374,1,validate +2930,3,validate +1935,3,validate +1673,3,validate +3235,1,validate +678,3,validate +282,3,validate +2931,4,validate +2365,1,validate +149,4,validate +3751,2,validate +1449,2,validate +3489,2,validate +495,3,validate +1795,1,validate +2232,2,validate +3144,4,validate +1533,1,validate +2015,4,validate +2444,1,validate +1357,4,validate +142,1,validate +3743,3,validate +3652,1,validate +2261,1,validate +1570,4,validate +3173,3,validate +346,1,validate +3653,2,validate +3257,2,validate +2608,1,validate +1258,2,validate +130,4,validate +2170,4,validate +1175,4,validate +2079,2,validate +2516,3,validate +3857,2,validate +2466,2,validate +2163,1,validate +3378,4,validate +2292,2,validate +3853,4,validate +1684,2,validate +1288,2,validate +2417,2,validate +1026,2,validate +31,2,validate +335,4,validate +802,1,validate +3279,2,validate +285,3,validate +1847,1,validate +1156,4,validate +1451,1,validate +2800,4,validate +894,4,validate +1189,1,validate +3542,3,validate +3146,3,validate +2447,2,validate +1889,3,validate +973,4,validate +3409,4,validate +1798,1,validate +1839,2,validate +1140,1,validate +3225,3,validate +145,1,validate +2185,1,validate +577,3,validate +711,3,validate +3006,1,validate +12,2,validate +2002,1,validate +1270,3,validate +2873,2,validate +1482,2,validate +2131,2,validate +1828,1,validate +2265,2,validate +3868,1,validate +612,2,validate +2215,1,validate +741,3,test +345,3,test +2082,2,test +1999,4,test +388,1,test +2428,1,test +2386,4,test +2083,3,test +246,2,test +3856,4,test +380,2,test +3594,4,test +2203,4,test +3765,2,test +2246,2,test +2458,1,test +593,2,test +3757,3,test +1159,4,test +326,3,test +2366,3,test +3800,1,test +2891,4,test +1321,2,test +64,2,test +2796,1,test +2226,1,test +1668,2,test +1272,2,test +3271,1,test +277,2,test +3009,1,test +2014,1,test +361,1,test +3088,1,test +1223,2,test +3222,1,test +2093,1,test +1569,1,test +2872,4,test +307,2,test +2694,3,test +391,1,test +1303,3,test +3555,2,test +3689,2,test +2856,1,test +1902,2,test +3422,3,test +342,1,test +428,4,test +1986,1,test +857,1,test +595,1,test +378,3,test +2377,2,test +3718,1,test +1416,1,test +641,4,test +2936,2,test +2199,1,test +1982,3,test +3585,2,test +2066,2,test +4065,1,test +4023,4,test +1283,1,test +1241,4,test +492,2,test +2229,1,test +2146,3,test +3487,2,test +2358,2,test +4095,1,test +1101,2,test +1538,3,test +3437,1,test +2796,4,test +1185,1,test +3700,2,test +3008,3,test +706,3,test +2746,3,test +2958,2,test +310,2,test +3904,2,test +2775,2,test +523,2,test +3384,2,test +1123,3,test +3163,3,test +1073,2,test +3030,4,test +3376,3,test +1370,1,test +1986,4,test +857,4,test +595,4,test +1103,2,test +807,3,test +3718,4,test +3802,3,test +841,1,test +2149,3,test +3752,2,test +1491,3,test +758,3,test +3053,1,test +100,3,test +667,1,test +3881,3,test +363,4,test +575,3,test +313,3,test +2262,1,test +2878,4,test +788,3,test +51,2,test +2525,2,test +3437,4,test +3866,1,test +3952,4,test +4086,4,test +2609,1,test +3824,4,test +1863,4,test +131,3,test +3641,4,test +4037,4,test +2646,4,test +2384,4,test +3550,2,test +1205,3,test +3500,1,test +3896,1,test +210,3,test +2639,1,test +1248,1,test +2201,4,test +294,2,test +1206,4,test +2809,3,test +1855,4,test +2718,1,test +2759,2,test +1764,2,test +2676,4,test +2280,4,test +507,2,test +548,3,test +3325,4,test +1240,2,test +3459,4,test +1452,1,test +1806,4,test +3056,1,test +840,4,test +1665,1,test +1623,4,test +3531,1,test +316,3,test +3052,3,test +3093,4,test +3918,1,test +2831,4,test +841,4,test +2740,2,test +3177,3,test +874,1,test +741,2,test +438,1,test +2874,1,test +1391,4,test +1221,1,test +1999,3,test +2345,2,test +1646,1,test +2083,2,test +2262,4,test +3865,3,test +1300,1,test +3815,2,test +43,1,test +3765,1,test +2246,1,test +1251,1,test +2204,4,test +593,1,test +3287,4,test +1159,3,test +856,2,test +3633,3,test +3674,4,test +2459,1,test +2891,3,test +3025,3,test +3500,4,test +3929,1,test +4063,1,test +3450,3,test +1281,1,test +843,4,test +1668,1,test +977,4,test +277,1,test +1148,2,test +1626,4,test +3838,4,test +2143,1,test +1452,4,test +1881,1,test +3401,2,test +2872,3,test +307,1,test +1656,4,test +3218,2,test +399,4,test +2694,2,test +3564,1,test +2477,4,test +1303,2,test +3302,1,test +745,3,test +3689,1,test +874,4,test +3253,1,test +2082,4,test +471,1,test +209,1,test +2428,3,test +1254,1,test +2469,4,test +641,3,test +2936,1,test +1383,2,test +1121,2,test +246,4,test +380,4,test +2853,2,test +4023,3,test +3765,4,test +1892,1,test +1200,2,test +938,2,test +2458,3,test +1284,1,test +593,4,test +1108,4,test +2804,2,test +2146,2,test +3883,1,test +3487,1,test +2358,1,test +1101,1,test +1538,2,test +1235,1,test +1321,4,test +64,4,test +2796,3,test +3700,1,test +3008,2,test +706,2,test +2746,2,test +2226,3,test +1668,4,test +1272,4,test +3271,3,test +277,4,test +3009,3,test +310,1,test +2522,1,test +361,3,test +3305,1,test +3088,3,test +1223,4,test +3222,3,test +2093,3,test +523,1,test +1569,3,test +3780,1,test +3384,1,test +2297,4,test +3518,1,test +307,4,test +391,3,test +3731,1,test +3555,4,test +3689,4,test +2856,3,test +1902,4,test +425,1,test +511,4,test +1986,3,test +857,3,test +595,3,test +3110,4,test +2377,4,test +3718,3,test +1416,3,test +2936,4,test +2199,3,test +3802,2,test +371,2,test +3585,4,test +2149,2,test +758,2,test +2066,4,test +4065,3,test +3881,2,test +1283,3,test +3316,1,test +363,3,test +3140,4,test +1105,2,test +492,4,test +1317,1,test +2229,3,test +2878,3,test +3487,4,test +2358,4,test +788,2,test +2787,1,test +4095,3,test +2525,1,test +3437,3,test +4045,2,test +3000,1,test +698,1,test +2958,4,test +1863,3,test +4037,3,test +131,2,test +310,4,test +2646,3,test +3904,4,test +2775,4,test +210,2,test +3813,2,test +2818,2,test +294,1,test +1206,3,test +4026,2,test +1764,1,test +1073,4,test +2676,3,test +507,1,test +3459,3,test +465,4,test +508,2,test +1370,3,test +1541,1,test +3405,4,test +1103,4,test +325,2,test +671,1,test +3052,2,test +233,4,test +841,3,test +3752,4,test +276,2,test +3053,3,test +2924,1,test +355,2,test +2092,1,test +1400,2,test +1654,4,test +2262,3,test +3865,2,test +1959,2,test +568,2,test +51,4,test +3124,4,test +222,2,test +3866,3,test +856,1,test +3633,2,test +1076,4,test +3550,4,test +3025,2,test +1119,2,test +3896,3,test +3500,3,test +3329,4,test +294,4,test +2718,3,test +2759,4,test +1148,1,test +1764,4,test +1240,4,test +2406,2,test +1452,3,test +3401,1,test +541,2,test +3056,3,test +1665,3,test +3531,3,test +966,1,test +3918,3,test +528,4,test +2740,4,test +833,2,test +874,3,test +571,2,test +3303,1,test +1912,1,test +741,4,test +3432,2,test +438,3,test +2082,3,test +1221,3,test +388,2,test +2824,2,test +2428,2,test +522,2,test +2125,1,test +2345,4,test +1646,3,test +2083,4,test +1383,1,test +1517,1,test +1121,1,test +1300,3,test +3815,4,test +1942,1,test +2853,1,test +3765,3,test +2246,3,test +1251,3,test +77,1,test +2458,2,test +593,3,test +2804,1,test +856,4,test +2459,3,test +3800,2,test +3929,3,test +64,3,test +2755,1,test +1281,3,test +2884,2,test +2226,2,test +1668,3,test +3271,2,test +1365,2,test +277,3,test +3009,2,test +1577,1,test +2014,2,test +361,2,test +2835,2,test +2143,3,test +1881,3,test +707,1,test +1223,3,test +3222,2,test +2093,2,test +3401,4,test +1790,1,test +1569,2,test +4043,2,test +1395,2,test +307,3,test +4,2,test +3218,4,test +2694,4,test +391,2,test +3564,3,test +1303,4,test +3302,3,test +3689,3,test +3860,1,test +1995,2,test +866,2,test +3336,1,test +342,2,test +3253,3,test +3727,2,test +2377,3,test +471,3,test +209,3,test +817,2,test +1254,3,test +3549,1,test +555,2,test +2936,3,test +1982,4,test +371,1,test +1383,4,test +1121,4,test +2066,3,test +4065,2,test +3366,1,test +2853,4,test +1283,2,test +1892,3,test +1200,4,test +938,4,test +1105,1,test +1284,3,test +110,1,test +585,2,test +2188,1,test +2146,4,test +931,1,test +3883,3,test +3487,3,test +2358,3,test +4095,2,test +1101,3,test +1538,4,test +1235,3,test +1709,2,test +4045,1,test +1185,2,test +3700,3,test +3008,4,test +706,4,test +2746,4,test +310,3,test +2522,3,test +3305,3,test +1477,2,test +523,3,test +2818,1,test +1299,1,test +170,1,test +3384,3,test +3780,3,test +4076,2,test +3518,3,test +1123,4,test +4026,1,test +1378,1,test +820,2,test +508,1,test +3893,1,test +425,3,test +899,2,test +2636,1,test +1458,2,test +325,1,test +807,4,test +3802,4,test +371,4,test +2149,4,test +3752,3,test +276,1,test +758,4,test +3053,2,test +4057,1,test +667,2,test +3881,4,test +3316,3,test +355,1,test +2791,1,test +3662,2,test +1400,1,test +1105,4,test +1317,3,test +2355,1,test +1959,1,test +1401,2,test +568,1,test +10,2,test +2787,3,test +788,4,test +2525,3,test +222,1,test +3866,2,test +4045,4,test +2434,1,test +2609,2,test +3000,3,test +131,4,test +3034,1,test +3550,3,test +1777,1,test +1119,1,test +3896,2,test +4030,2,test +210,4,test +3813,4,test +2639,2,test +1248,2,test +294,3,test +2809,4,test +2718,2,test +4026,4,test +1764,3,test +3064,1,test +507,3,test +2802,1,test +154,1,test +541,1,test +3056,2,test +367,1,test +325,4,test +3531,2,test +3228,1,test +671,3,test +3052,4,test +3877,1,test +1575,1,test +833,1,test +571,1,test +276,4,test +2924,3,test +3432,1,test +438,2,test +2874,2,test +355,4,test +784,1,test +1221,2,test +2824,1,test +1400,4,test +522,1,test +2345,3,test +1646,2,test +3645,1,test +3865,4,test +2388,1,test +1300,2,test +3815,3,test +735,1,test +43,2,test +3858,1,test +2205,1,test +1251,2,test +1859,1,test +856,3,test +3633,4,test +2459,2,test +3025,4,test +1119,4,test +1810,1,test +419,1,test +3929,2,test +4063,2,test +3450,4,test +1281,2,test +2884,1,test +1365,1,test +370,1,test +1148,3,test +2623,2,test +3493,1,test +2406,4,test +3231,1,test +2835,1,test +2143,2,test +237,2,test +1881,2,test +3401,3,test +541,4,test +4043,1,test +1395,1,test +4,1,test +3218,3,test +138,1,test +2915,2,test +3564,2,test +966,3,test +3302,2,test +745,4,test +4044,1,test +1050,2,test +1995,1,test +866,1,test +571,4,test +3303,3,test +1912,3,test +3253,2,test +2520,2,test +3432,4,test +3727,1,test +471,2,test +209,2,test +388,4,test +2824,4,test +2428,4,test +817,1,test +1254,2,test +2125,3,test +555,1,test +1383,3,test +1517,3,test +1121,3,test +3812,1,test +818,2,test +1942,3,test +2853,3,test +1892,2,test +1200,3,test +938,3,test +77,3,test +2458,4,test +1284,2,test +585,1,test +2804,3,test +2239,2,test +3883,2,test +3800,4,test +1893,2,test +1235,2,test +1709,1,test +2755,3,test +3363,2,test +2884,4,test +1710,2,test +1011,1,test +2226,4,test +3271,4,test +1794,1,test +3009,4,test +1577,3,test +2014,4,test +2522,2,test +361,4,test +3305,2,test +707,3,test +3088,4,test +1477,1,test +3222,4,test +2093,4,test +1569,4,test +4043,4,test +2869,2,test +1003,1,test +4076,1,test +3780,2,test +3518,2,test +171,1,test +391,4,test +820,1,test +3731,2,test +3032,1,test +2856,4,test +646,1,test +3860,3,test +1995,4,test +866,4,test +425,2,test +3161,2,test +899,1,test +3336,3,test +342,4,test +3727,4,test +1458,1,test +1416,4,test +3549,3,test +555,4,test +2199,4,test +371,3,test +1113,2,test +851,2,test +4065,4,test +3366,3,test +1283,4,test +3316,2,test +3662,1,test +1105,3,test +110,3,test +2405,1,test +585,4,test +1317,2,test +2188,3,test +2229,4,test +1401,1,test +10,1,test +2787,2,test +4095,4,test +1709,4,test +4045,3,test +273,2,test +1185,4,test +3396,2,test +3000,2,test +698,2,test +3480,1,test +3347,2,test +3085,2,test +4030,1,test +1477,4,test +303,2,test +3813,3,test +2040,1,test +2818,3,test +1299,3,test +170,3,test +4076,4,test +3510,1,test +4026,3,test +2119,1,test +1378,3,test +820,4,test +3327,1,test +508,3,test +679,1,test +1116,2,test +3893,3,test +899,4,test +1370,4,test +1541,2,test +3715,2,test +325,3,test +671,2,test +368,1,test +3095,1,test +2537,2,test +276,3,test +3053,4,test +2924,2,test +667,4,test +3308,1,test +3745,2,test +355,3,test +2092,2,test +1400,3,test +1959,3,test +1401,4,test +568,3,test +10,4,test +222,3,test +3866,4,test +2434,3,test +1260,1,test +2609,4,test +998,1,test +1910,2,test +3034,3,test +1119,3,test +3896,4,test +4030,4,test +2639,4,test +1248,4,test +2718,4,test +3064,3,test +2623,1,test +2802,3,test +2406,3,test +499,1,test +237,1,test +3148,2,test +154,3,test +541,3,test +3056,4,test +1665,4,test +188,1,test +2915,1,test +317,2,test +3531,4,test +1658,1,test +966,2,test +3877,3,test +3918,4,test +1575,3,test +1312,1,test +1050,1,test +833,3,test +571,3,test +3303,2,test +1912,2,test +1179,2,test +2916,1,test +2520,1,test +2654,1,test +3432,3,test +438,4,test +2874,4,test +784,3,test +388,3,test +2824,3,test +1221,4,test +522,3,test +2521,2,test +2125,2,test +1392,2,test +1130,2,test +1646,4,test +868,2,test +3645,3,test +1517,2,test +2388,3,test +818,1,test +1300,4,test +735,3,test +43,4,test +1942,2,test +3858,3,test +1293,1,test +2205,3,test +2246,4,test +1251,4,test +77,2,test +1859,3,test +1160,2,test +2501,1,test +2635,1,test +2239,1,test +2459,4,test +3800,3,test +1893,1,test +1810,3,test +419,3,test +3929,4,test +2755,2,test +4063,4,test +3363,1,test +1061,1,test +1281,4,test +3972,2,test +2884,3,test +2106,1,test +1710,1,test +715,1,test +1365,3,test +370,3,test +1577,2,test +2014,3,test +2623,4,test +3231,3,test +2835,3,test +2143,4,test +1881,4,test +707,2,test +1790,2,test +3265,1,test +2869,1,test +4043,3,test +1874,1,test +617,1,test +1395,3,test +4,3,test +3132,2,test +138,3,test +2915,4,test +3564,4,test +3302,4,test +3860,2,test +1995,3,test +866,3,test +3161,1,test +3336,2,test +342,3,test +3253,4,test +3727,3,test +471,4,test +209,4,test +817,3,test +1254,4,test +3549,2,test +39,1,test +555,3,test +3812,3,test +1113,1,test +851,1,test +3366,2,test +2767,2,test +1376,2,test +1892,4,test +1284,4,test +110,2,test +585,3,test +2188,2,test +931,2,test +3883,4,test +1101,4,test +1235,4,test +1709,3,test +1406,2,test +273,1,test +1185,3,test +3700,4,test +3396,1,test +1710,4,test +536,2,test +1011,3,test +3659,2,test +1794,3,test +2522,4,test +3347,1,test +3085,1,test +3305,4,test +1477,3,test +303,1,test +523,4,test +1957,2,test +2869,4,test +1299,2,test +4076,3,test +170,2,test +1003,3,test +3384,4,test +2303,1,test +3518,4,test +3780,4,test +171,3,test +1378,2,test +820,3,test +3731,4,test +3032,3,test +1116,1,test +425,4,test +3893,2,test +899,3,test +2636,2,test +1937,1,test +942,1,test +3715,1,test +1458,3,test +3803,1,test +547,2,test +2537,1,test +851,4,test +4057,2,test +667,3,test +2101,1,test +3316,4,test +3745,1,test +3662,3,test +1755,1,test +1493,1,test +2405,3,test +1317,4,test +3571,1,test +2355,2,test +1401,3,test +10,3,test +2787,4,test +2525,4,test +1310,1,test +53,1,test +2434,2,test +273,4,test +2609,3,test +3396,4,test +2914,1,test +3000,4,test +698,4,test +1785,1,test +132,1,test +2647,2,test +1910,1,test +1390,2,test +3034,2,test +1777,2,test +4030,3,test +303,4,test +2639,3,test +1248,3,test +1291,1,test +2119,3,test +683,1,test +3064,2,test +507,4,test +2802,2,test +2203,2,test +3148,1,test +550,2,test +154,2,test +3327,3,test +500,1,test +1116,4,test +3411,2,test +3757,1,test +1541,4,test +367,2,test +2366,1,test +2803,2,test +3715,4,test +317,1,test +3228,2,test +671,4,test +3877,2,test +1575,2,test +318,2,test +3095,3,test +2537,4,test +530,1,test +1179,1,test +2924,4,test +2874,3,test +3308,3,test +3745,4,test +784,2,test +2092,4,test +2521,1,test +1392,1,test +1130,1,test +868,1,test +3645,2,test +2388,2,test +2996,1,test +735,2,test +43,3,test +3858,2,test +1260,3,test +998,3,test +2601,2,test +2205,2,test +1210,2,test +2947,1,test +1859,2,test +1160,1,test +2206,2,test +1810,2,test +378,1,test +419,2,test +4063,3,test +3972,1,test +370,2,test +1148,4,test +2623,3,test +3493,2,test +499,3,test +3231,2,test +237,3,test +3148,4,test +2186,1,test +188,3,test +3132,1,test +138,2,test +2915,3,test +1008,1,test +317,4,test +1658,3,test +966,4,test +1312,3,test +4044,2,test +1742,2,test +1050,3,test +3303,4,test +1912,4,test +697,1,test +1179,4,test +2916,3,test +2520,3,test +2654,3,test +2866,2,test +2125,4,test +1130,4,test +1559,1,test +868,4,test +168,1,test +3637,1,test +1517,4,test +3812,2,test +818,3,test +1984,1,test +1942,4,test +35,2,test +2767,1,test +3163,1,test +1164,2,test +1376,1,test +1293,3,test +77,4,test +1160,4,test +2804,4,test +2501,3,test +2239,3,test +1893,3,test +1406,1,test +2755,4,test +3363,3,test +1061,3,test +2106,3,test +1710,3,test +536,1,test +715,3,test +1011,2,test +2748,1,test +3659,1,test +1794,2,test +3793,1,test +1491,1,test +1577,4,test +100,1,test +707,4,test +1790,4,test +1957,1,test +3265,3,test +2869,3,test +1003,2,test +1874,3,test +1387,1,test +3132,4,test +171,2,test +3952,2,test +3731,3,test +3032,2,test +646,2,test +3860,4,test +3161,3,test +3336,4,test +1988,2,test +3549,4,test +1205,1,test +1938,1,test +547,1,test +1592,1,test +2067,2,test +1113,3,test +851,3,test +3366,4,test +2280,2,test +110,4,test +2405,2,test +2188,4,test +19,2,test +931,4,test +273,3,test +1835,1,test +2964,1,test +3396,3,test +316,1,test +698,3,test +3093,2,test +536,4,test +2831,2,test +3480,2,test +2647,1,test +1390,1,test +832,2,test +2910,2,test +3347,3,test +3085,3,test +1391,2,test +303,3,test +2040,2,test +2818,4,test +1957,4,test +2386,1,test +1299,4,test +170,4,test +3510,2,test +2119,2,test +3856,1,test +3594,1,test +1378,4,test +2203,1,test +550,1,test +3327,2,test +2332,2,test +508,4,test +2204,2,test +679,2,test +3893,4,test +1116,3,test +3411,1,test +2636,4,test +1937,3,test +1541,3,test +2803,1,test +3674,2,test +3715,3,test +368,2,test +318,1,test +3095,2,test +3491,2,test +2537,3,test +843,2,test +4057,4,test +581,2,test +1626,2,test +3308,2,test +3745,3,test +2092,3,test +1493,3,test +2834,2,test +2355,4,test +1959,4,test +568,4,test +1310,3,test +222,4,test +1656,2,test +1260,2,test +2434,4,test +998,2,test +2601,1,test +1210,1,test +132,3,test +2864,2,test +2647,4,test +1910,3,test +3034,4,test +428,1,test +1777,4,test +2206,1,test +2469,2,test +641,1,test +1291,3,test +683,3,test +3064,4,test +2802,4,test +499,2,test +3148,3,test +1241,1,test +550,4,test +154,4,test +3756,2,test +500,3,test +3411,4,test +1108,2,test +188,2,test +367,4,test +2803,4,test +317,3,test +3445,2,test +3228,4,test +1658,2,test +3877,4,test +1575,4,test +1312,2,test +1742,1,test +318,4,test +833,4,test +530,3,test +1179,3,test +2916,2,test +614,2,test +2654,2,test +2866,1,test +784,4,test +3475,2,test +522,4,test +2521,3,test +1392,3,test +1130,3,test +868,3,test +3645,4,test +2388,4,test +2996,3,test +735,4,test +2297,2,test +1164,1,test +35,1,test +3858,4,test +1293,2,test +2601,4,test +1427,2,test +2205,4,test +3030,1,test +1210,4,test +2947,3,test +1859,4,test +1160,3,test +2501,2,test +2635,2,test +511,2,test +2206,4,test +1810,4,test +419,4,test +3110,2,test +1457,2,test +1061,2,test +3972,3,test +2106,2,test +715,2,test +1365,4,test +370,4,test +3493,4,test +3231,4,test +2835,4,test +363,1,test +3140,2,test +2186,3,test +1790,3,test +3265,2,test +1874,2,test +2878,1,test +617,2,test +1395,4,test +4,4,test +3132,3,test +138,4,test +1008,3,test +3952,1,test +4086,1,test +3824,1,test +830,2,test +4044,4,test +1742,4,test +697,3,test +1863,1,test +4037,1,test +3641,1,test +2646,1,test +2384,1,test +1988,1,test +2866,4,test +3770,2,test +39,2,test +817,4,test +1559,3,test +860,2,test +168,3,test +3637,3,test +2067,1,test +3812,4,test +2201,1,test +1984,3,test +1206,1,test +252,2,test +1855,1,test +1164,4,test +35,4,test +2330,2,test +2767,3,test +1376,3,test +2676,1,test +2280,1,test +3325,1,test +3459,1,test +465,2,test +1806,1,test +19,1,test +931,3,test +840,1,test +20,2,test +1623,1,test +1406,3,test +3405,2,test +3093,1,test +536,3,test +2831,1,test +233,2,test +1011,4,test +2748,3,test +3659,3,test +1794,4,test +3793,3,test +832,1,test +2910,1,test +1441,2,test +1391,1,test +1957,3,test +3956,2,test +1654,2,test +1003,4,test +2565,2,test +2303,2,test +1387,3,test +3124,2,test +171,4,test +3032,4,test +2332,1,test +646,4,test +2204,1,test +3287,1,test +2636,3,test +1937,2,test +942,2,test +3674,1,test +1076,2,test +1458,4,test +1988,4,test +3803,2,test +1938,3,test +547,3,test +1155,2,test +1592,3,test +3491,1,test +2067,4,test +3329,2,test +843,1,test +4057,3,test +977,1,test +581,1,test +1459,4,test +1626,1,test +2101,2,test +3838,1,test +3662,4,test +1755,2,test +1493,2,test +2405,4,test +3571,2,test +2834,1,test +19,4,test +2355,3,test +1310,2,test +53,2,test +1656,1,test +2964,3,test +1835,3,test +399,1,test +2477,1,test +1785,2,test +2914,2,test +528,2,test +132,2,test +2864,1,test +3480,4,test +2647,3,test +1390,3,test +832,4,test +2910,4,test +1777,3,test +345,2,test +2082,1,test +2040,4,test +2469,1,test +2386,3,test +1291,2,test +3510,4,test +2119,4,test +3856,3,test +246,1,test +683,2,test +380,1,test +3594,3,test +2203,3,test +550,3,test +3327,4,test +3756,1,test +2332,4,test +500,2,test +679,4,test +3411,3,test +1108,1,test +3757,2,test +326,2,test +367,3,test +2366,2,test +2803,3,test +3445,1,test +3228,3,test +1321,1,test +368,4,test +64,1,test +318,3,test +3095,4,test +3491,4,test +530,2,test +1272,1,test +581,4,test +614,1,test +3308,4,test +3475,1,test +2834,4,test +1223,1,test +2996,2,test +2297,1,test +1260,4,test +998,4,test +2601,3,test +1427,1,test +1210,3,test +2947,2,test +3555,1,test +2864,4,test +1902,1,test +511,1,test +3422,2,test +428,3,test +2206,3,test +378,2,test +3110,1,test +2377,1,test +1457,1,test +1982,2,test +3585,1,test +2066,1,test +3493,3,test +499,4,test +237,4,test +1241,3,test +3140,1,test +3756,4,test +2186,2,test +492,1,test +188,4,test +1008,2,test +3445,4,test +1658,4,test +830,1,test +1312,4,test +4044,3,test +1742,3,test +1050,4,test +2958,1,test +697,2,test +2916,4,test +2520,4,test +614,4,test +2654,4,test +2866,3,test +3475,4,test +3770,1,test +3904,1,test +2775,1,test +1559,2,test +860,1,test +3637,2,test +168,2,test +818,4,test +1984,2,test +252,1,test +1123,2,test +1164,3,test +35,3,test +2330,1,test +3163,2,test +1073,1,test +1293,4,test +1427,4,test +3030,3,test +465,1,test +3376,2,test +2501,4,test +2635,4,test +2239,4,test +1893,4,test +20,1,test +3405,1,test +1103,1,test +807,2,test +3363,4,test +1457,4,test +1061,4,test +2106,4,test +233,1,test +715,4,test +2748,2,test +3752,1,test +3793,2,test +1491,2,test +100,2,test +1441,1,test +575,2,test +313,2,test +3956,1,test +3265,4,test +1654,1,test +2565,1,test +1874,4,test +617,4,test +1387,2,test +51,1,test +3124,1,test +3952,3,test +4086,3,test +3824,3,test +830,4,test +646,3,test +3161,4,test +3641,3,test +1076,1,test +2384,3,test +1988,3,test +3550,1,test +3770,4,test +39,4,test +1205,2,test +1938,2,test +860,4,test +1155,1,test +1592,2,test +2067,3,test +3329,1,test +2201,3,test +1113,4,test +2809,2,test +252,4,test +1855,3,test +2330,4,test +2759,1,test +2280,3,test +1240,1,test +548,2,test +3325,3,test +1806,3,test +19,3,test +840,3,test +20,4,test +1623,3,test +2964,2,test +1835,2,test +316,2,test +3093,3,test +2831,3,test +528,1,test +3480,3,test +2740,1,test +3177,2,test +832,3,test +2910,3,test +3347,4,test +1441,4,test +3085,4,test +741,1,test +345,1,test +1391,3,test +1999,2,test +2040,3,test +3956,4,test +2345,1,test +2386,2,test +2083,1,test +2565,4,test +2303,4,test +3510,3,test +3815,1,test +3856,2,test +3594,2,test +2332,3,test +2204,3,test +679,3,test +3287,3,test +1159,2,test +326,1,test +1937,4,test +942,4,test +3674,3,test +2891,2,test +3803,4,test +368,3,test +1155,4,test +3450,2,test +3491,3,test +843,3,test +977,3,test +581,3,test +1626,3,test +2101,4,test +3838,3,test +1755,4,test +1493,4,test +3571,4,test +2834,3,test +1310,4,test +2872,2,test +53,4,test +1656,3,test +3218,1,test +399,3,test +2694,1,test +2477,3,test +1303,1,test +1785,4,test +2914,4,test +745,2,test +132,4,test +2864,3,test +1910,4,test +3422,1,test +428,2,test +345,4,test +2469,3,test +641,2,test +1982,1,test +1291,4,test +246,3,test +683,4,test +380,3,test +1200,1,test +1241,2,test +938,1,test +3756,3,test +500,4,test +1108,3,test +3757,4,test +2146,1,test +326,4,test +2366,4,test +3445,3,test +1538,1,test +1321,3,test +2796,2,test +3008,1,test +706,1,test +2746,1,test +530,4,test +1272,3,test +614,3,test +3475,3,test +2521,4,test +1392,4,test +3088,2,test +2996,4,test +2297,3,test +1123,1,test +1427,3,test +3030,2,test +2947,4,test +3376,1,test +3555,3,test +2856,2,test +2635,3,test +1902,3,test +511,3,test +3422,4,test +1986,2,test +857,2,test +595,2,test +378,4,test +3110,3,test +807,1,test +3718,2,test +1416,2,test +1457,3,test +3972,4,test +2199,2,test +3802,1,test +3585,3,test +2149,1,test +758,1,test +3881,1,test +363,2,test +3140,3,test +2186,4,test +575,1,test +313,1,test +492,3,test +2229,2,test +2878,2,test +617,3,test +788,1,test +1008,4,test +3437,2,test +4086,2,test +3824,2,test +830,3,test +2958,3,test +697,4,test +1863,2,test +4037,2,test +3641,2,test +131,1,test +2646,2,test +2384,2,test +3770,3,test +3904,3,test +39,3,test +2775,3,test +210,1,test +1559,4,test +3813,1,test +860,3,test +3637,4,test +168,4,test +2201,2,test +1206,2,test +1984,4,test +2809,1,test +252,3,test +1855,2,test +3163,4,test +2330,3,test +2767,4,test +1376,4,test +1073,3,test +2676,2,test +548,1,test +3325,2,test +3459,2,test +465,3,test +3376,4,test +1806,2,test +840,2,test +1370,2,test +20,3,test +1623,2,test +1406,4,test +3405,3,test +1103,3,test +3052,1,test +233,3,test +2748,4,test +841,2,test +3177,1,test +3659,4,test +3793,4,test +1491,4,test +100,4,test +1441,3,test +1999,1,test +575,4,test +313,4,test +3956,3,test +1654,3,test +2565,3,test +2262,2,test +2303,3,test +3865,1,test +1387,4,test +51,3,test +3124,3,test +3287,2,test +1159,1,test +942,3,test +3633,1,test +1076,3,test +2891,1,test +3025,1,test +3803,3,test +1205,4,test +3500,2,test +1938,4,test +547,4,test +1155,3,test +1592,4,test +3450,1,test +3329,3,test +977,2,test +2759,3,test +2101,3,test +3838,2,test +1240,3,test +548,4,test +2406,1,test +1755,3,test +1452,2,test +3571,3,test +1665,2,test +2872,1,test +53,3,test +2964,4,test +1835,4,test +399,2,test +2477,2,test +1785,3,test +316,4,test +2914,3,test +745,1,test +3918,2,test +528,3,test +2740,3,test +3177,4,test +874,2,test +1390,4,test diff --git a/pyproject.toml b/pyproject.toml index 46c921a..970de9a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,14 +26,24 @@ dependencies = [ "pandas>=1.3.0", "xgboost>=1.6.0", "scipy>=1.7.0", + "jax>=0.10.1", + "flax>=0.12.7", + "jaxtyping>=0.3.10", + "omegaconf>=2.3", + "orbax-checkpoint>=0.12.0", ] [project.optional-dependencies] train = [ "duckdb>=0.8.0", + "grain>=0.2.16", + "hydra-core>=1.3.2", + "optax>=0.2.8", + "tqdm>=4.67.3", "scikit-learn>=1.0.0", "pyarrow>=10.0.0", ] +gpu = ["jax[cuda12]>=0.10.1"] viz = [ "matplotlib>=3.4.0", ] diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml new file mode 100644 index 0000000..b002caf --- /dev/null +++ b/src/estimint/v2/conf/train_config.yaml @@ -0,0 +1,13 @@ +data_file: "datasets/estimint_simulations_y9.parquet" +split_file: "datasets/split.csv" +num_workers: 0 +use_existing_split: false + +# General +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: false +output_dir: "train_outputs/" +wandb: + project: "estimint/" + name: "train-${cur_time}" \ No newline at end of file diff --git a/src/estimint/v2/data/features.py b/src/estimint/v2/data/features.py new file mode 100644 index 0000000..fa061f0 --- /dev/null +++ b/src/estimint/v2/data/features.py @@ -0,0 +1,72 @@ +import numpy as np + +# TODO: update to handle eir-> hbr, hbr -> eir +FEATURES_BASE = ["dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use", "prev_y9"] + +class StandardScaler: + def __init__(self): + """ + Initialize an unfitted scaler. + + Returns: + None. + """ + self.mean_: np.ndarray | None = None + self.scale_: np.ndarray | None = None + + def fit(self, X: np.ndarray) -> "StandardScaler": + """ + Fit feature means and scales. + + Args: + X: Feature matrix. + + Returns: + Fitted scaler. + """ + self.mean_ = np.mean(X, axis=0) + # To avoid division by zero, set scale to 1.0 for any feature with zero variance + scale = np.std(X, axis=0) + scale[scale == 0] = 1.0 + self.scale_ = scale + return self + + def transform(self, X: np.ndarray) -> np.ndarray: + """ + Standardize features. + + Args: + X: Feature matrix. + + Returns: + Standardized features. + """ + if self.mean_ is None or self.scale_ is None: + raise ValueError("StandardScaler instance is not fitted yet.") + return (X - self.mean_) / self.scale_ + + def fit_transform(self, X: np.ndarray) -> np.ndarray: + """ + Fit and standardize features. + + Args: + X: Feature matrix. + + Returns: + Standardized features. + """ + return self.fit(X).transform(X) + + def inverse_transform(self, X: np.ndarray) -> np.ndarray: + """ + Restore standardized features. + + Args: + X: Standardized feature matrix. + + Returns: + Features in the original scale. + """ + if self.mean_ is None or self.scale_ is None: + raise ValueError("StandardScaler instance is not fitted yet.") + return X * self.scale_ + self.mean_ diff --git a/src/estimint/v2/data/preprocess.py b/src/estimint/v2/data/preprocess.py new file mode 100644 index 0000000..2107c3e --- /dev/null +++ b/src/estimint/v2/data/preprocess.py @@ -0,0 +1,246 @@ + + +from omegaconf import DictConfig +import random +import pandas as pd +import logging +from pathlib import Path +import numpy as np +from .features import StandardScaler, FEATURES_BASE +import pickle +from dataclasses import dataclass, field + +log = logging.getLogger(__name__) + +@dataclass +class PreparedData: + train_data: list + val_data: list + test_data: list + input_size: int + scaler: StandardScaler + train_param_sims: set[tuple[int, int]] = field(default_factory=set) + val_param_sims: set[tuple[int, int]] = field(default_factory=set) + test_param_sims: set[tuple[int, int]] = field(default_factory=set) + +def _filter_by_threshold(df: pd.DataFrame) -> pd.DataFrame: + """ + Filter parameter-simulation pairs where the mean target value is below the threshold. + + Args: + df: Input dataframe. + + Returns: + Filtered dataframe. + """ + prev_threshold = 0.01 # TODO: make this configurable + group_means = df.groupby(["parameter_index", "simulation_index"])["prev_y9"].mean() + valid = set(map(tuple, group_means[group_means >= prev_threshold].index.tolist())) + df["_ps"] = list(zip(df["parameter_index"], df["simulation_index"])) + + log.info( + f"Filtering with prev_threshold {prev_threshold} on {"prevalence"}: {len(valid)} valid parameter-simulation pairs out of {len(group_means)}" + ) + + return df[df["_ps"].isin(valid)] + + +def _load_split( + split_file: str, df: pd.DataFrame +) -> tuple[set[tuple[int, int]], set[tuple[int, int]], set[tuple[int, int]]]: + """ + Load an existing train/val/test split. + + Args: + split_file: Split CSV path. + df: Filtered dataframe. + + Returns: + Train, validation, and test parameter-simulation sets. + """ + split_df = pd.read_csv(split_file) + present = set(df[["parameter_index", "simulation_index"]].itertuples(index=False, name=None)) + train_ps = { + (r.parameter_index, r.simulation_index) for r in split_df[split_df["split"] == "train"].itertuples() + } & present + val_ps = { + (r.parameter_index, r.simulation_index) for r in split_df[split_df["split"] == "validate"].itertuples() + } & present + test_ps = { + (r.parameter_index, r.simulation_index) for r in split_df[split_df["split"] == "test"].itertuples() + } & present + return train_ps, val_ps, test_ps # type: ignore + + +def _create_split( + df: pd.DataFrame, seed: int +) -> tuple[set[tuple[int, int]], set[tuple[int, int]], set[tuple[int, int]]]: + """ + Create a train/val/test split by parameter. + + Args: + df: Filtered dataframe. + seed: Shuffle seed. + + Returns: + Train, validation, and test parameter-simulation sets. + """ + random.seed(seed) + params = list(df["parameter_index"].unique()) + random.shuffle(params) + n = len(params) + n_train = int(0.70 * n) + n_val = int(0.15 * n) + train_p = set(params[:n_train]) + val_p = set(params[n_train : n_train + n_val]) + test_p = set(params[n_train + n_val :]) + all_ps = set(df[["parameter_index", "simulation_index"]].itertuples(index=False, name=None)) + return ( + {ps for ps in all_ps if ps[0] in train_p}, + {ps for ps in all_ps if ps[0] in val_p}, + {ps for ps in all_ps if ps[0] in test_p}, + ) + + +def _save_split(path, train_ps, val_ps, test_ps, df): + """ + Save parameter-simulation split assignments. + + Args: + path: Output CSV path. + train_ps: Training pairs. + val_ps: Validation pairs. + test_ps: Test pairs. + df: Source dataframe. + + Returns: + None. + """ + rows = [] + for ps, split in ( + [(p, "train") for p in train_ps] + [(p, "validate") for p in val_ps] + [(p, "test") for p in test_ps] + ): + rows.append( + {"parameter_index": ps[0], "simulation_index": ps[1], "split": split} + ) + pd.DataFrame(rows).to_csv(path, index=False) + log.info(f"Split saved to {path}") + +def _fit_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: str) -> StandardScaler: + """ + Fit and save the static covariate scaler. + + Args: + df: Filtered dataframe. + train_ps: Training pairs. + output_dir: Directory for scaler output. + + Returns: + Fitted scaler. + """ + train_mask = df["_ps"].isin(train_ps) + train_static = ( + df.loc[train_mask, ["_ps"] + FEATURES_BASE] + .drop_duplicates(subset=["_ps"])[FEATURES_BASE] + .astype(np.float32) + .values + ) + scaler = StandardScaler() + scaler.fit(train_static) + + save_path = Path(output_dir) / "static_scaler.pkl" + save_path.parent.mkdir(parents=True, exist_ok=True) + with open(save_path, "wb") as f: + pickle.dump(scaler, f) + + return scaler + +def _build_data( + df: pd.DataFrame, + param_sims: set[tuple[int, int]], + scaler: StandardScaler, + cfg: DictConfig, +) -> list[dict[str, np.ndarray]]: + """ + + """ + groups = df.groupby(["parameter_index", "simulation_index"]) + data = [] + + for ps in param_sims: + if ps not in groups.groups: + continue + + df["eir_log10"] = np.log10(df["eir"]) + X = ( + df.loc[groups.groups[ps], FEATURES_BASE] + .astype(np.float32) + .values + ) + Y = df.loc[groups.groups[ps], "eir_log10"].values.astype(np.float32) + data.append( + { + "x": X, + "y": Y, + "ps": np.asarray(ps, dtype=np.int32), # (2,) parameter_index, simulation_index + } + ) + + return data + +def prepare_data(df: pd.DataFrame, cfg: DictConfig): + """ + Split and transform raw simulation data. + + Filters out low-signal parameter-simulation pairs, creates or loads the + train/val/test split, fits static covariate scaling on the train split only, + and builds per-sequence records for each split. + + Note: each malariasimulation run covers TOTAL_DAYS days: a MODEL_START_DAY's warmup followed by + TOTAL_DAYS - MODEL_START_DAY days of actual simulation. Only the latter are used here; the + warmup has already been discarded in the input `df` parameter. + The intervention is applied at INTERVENTION_DAY. + + Args: + df: Raw simulation dataframe. + cfg: Data preparation config. + + Returns: + Prepared train, validation, and test data. + """ + random.seed(cfg.seed) + + # Filter by threshold + df = _filter_by_threshold(df) + + + # split data + if cfg.use_existing_split and Path(cfg.split_file).exists(): + log.info(f"Loading existing split from {cfg.split_file}") + train_ps, val_ps, test_ps = _load_split(cfg.split_file, df) + else: + log.info("Creating new train/val/test split (70/15/15)") + train_ps, val_ps, test_ps = _create_split(df, cfg.seed) + if cfg.split_file: + log.info(f"Saving split to {cfg.split_file}") + _save_split(cfg.split_file, train_ps, val_ps, test_ps, df) + + log.info(f"Split — train: {len(train_ps)}, val: {len(val_ps)}, test: {len(test_ps)}") + + scaler = _fit_scaler(df, train_ps, cfg.output_dir) # TODO fix scaling + + train_data = _build_data(df, train_ps, scaler, cfg) + val_data = _build_data(df, val_ps, scaler, cfg) + test_data = _build_data(df, test_ps, scaler, cfg) + + return PreparedData( + train_data=train_data, + val_data=val_data, + test_data=test_data, + input_size=len(FEATURES_BASE), + scaler=scaler, + train_param_sims=train_ps, + val_param_sims=val_ps, + test_param_sims=test_ps, + ) + diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py new file mode 100644 index 0000000..4789c79 --- /dev/null +++ b/src/estimint/v2/train_base.py @@ -0,0 +1,31 @@ +import logging +import time +from pathlib import Path + +import duckdb +import hydra +import jax +import jax.numpy as jnp +from hydra.utils import get_method +from omegaconf import DictConfig, OmegaConf +from tqdm import tqdm + +from .data.preprocess import PreparedData, prepare_data + +log = logging.getLogger(__name__) + +@hydra.main(version_base=None, config_path="conf", config_name="train_config") +def main(cfg: DictConfig) -> None: + log.info(OmegaConf.to_yaml(cfg)) + log.info("JAX devices: %s", jax.devices()) + + Path(cfg.output_dir).mkdir(parents=True, exist_ok=True) + + raw_df = duckdb.read_parquet(cfg.data_file).df() + + prepared_data = prepare_data(raw_df, cfg) + + print(f"train data len: {len(prepared_data.train_data)}") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/uv.lock b/uv.lock index 657798c..249cf97 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.12" resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", @@ -68,6 +68,26 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128", size = 9566, upload-time = "2020-05-11T07:59:49.499Z" }, ] +[[package]] +name = "array-record" +version = "0.8.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "absl-py", marker = "sys_platform != 'win32'" }, + { name = "etils", extra = ["epath"], marker = "sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/ff/8238c28f9bfda365ba991fc2b8a566c71847fc5a2d0913158aeadafd4e63/array_record-0.8.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dada305fa0dfa3fd6f5f263c43ed37546f815e4f33ce30b066175384dead752e", size = 3989102, upload-time = "2025-11-13T16:15:33.845Z" }, + { url = "https://files.pythonhosted.org/packages/fb/67/4b4cd9891a36aec236e35688b47c44648bb645946e98653a7ad54f890128/array_record-0.8.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:718403dc9a364519a5fc440ed9e2784077e965489d5a44c96970d3101101e1cd", size = 4838611, upload-time = "2025-11-13T16:15:35.016Z" }, + { url = "https://files.pythonhosted.org/packages/50/65/2f60b9ca59e5fce140be36f4136ebcc83385c9e56cd499e2942f9fb4b250/array_record-0.8.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:458f6658de86c9369b23ffe64dcb31393a919b91ae2f15147ee2beb2010b122a", size = 4995925, upload-time = "2025-11-13T16:15:37.091Z" }, + { url = "https://files.pythonhosted.org/packages/d6/63/fd734c5f2be8017d4f33cff0dd3d3e2f91de3ab988f93755cdc54d67b654/array_record-0.8.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fa94fa053c1afaecc183a1c31463fd89d1b7b148cc526095bfc50ab58967e47c", size = 3989122, upload-time = "2025-11-13T16:15:38.375Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b0/9f649781c8e630cbb8724fb56627430b4249b51e8536e6e0a31d6f85f147/array_record-0.8.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:adfe6c92918363747539c0caa579f568f75aac079ad7bbd4ebcf7fdb02e5461b", size = 4838733, upload-time = "2025-11-13T16:15:39.767Z" }, + { url = "https://files.pythonhosted.org/packages/d7/6d/5575a1d64cffecb72de5743b35a1532b1801a0350b9b45f277090d02b3c2/array_record-0.8.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:13df1aec9b38afe98973bf5fe3cf523f83ca904b0423d85319930877145b8f28", size = 4995837, upload-time = "2025-11-13T16:15:40.973Z" }, + { url = "https://files.pythonhosted.org/packages/99/46/1449f2c36f75e563c5bdd59133146a10110bcf3a3cd53d7d74a535579603/array_record-0.8.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:14facb713fc55ea612cf853c0abbc602032ae619eb85037af3aa41dc4e27eed6", size = 3989205, upload-time = "2025-11-13T16:15:42.156Z" }, + { url = "https://files.pythonhosted.org/packages/35/ef/f85d329ac6cdcc8c3e8af832c30a9a0b719c6719a09191056ef7342a3627/array_record-0.8.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:06b17a0a90bc74a80c4ebad0b99f0e039adb01746b673db3d7a5632d8b138ddd", size = 4839320, upload-time = "2025-11-13T16:15:43.617Z" }, + { url = "https://files.pythonhosted.org/packages/f2/89/510594ff506d456d7dc0e8dfa9095f078e5f98da49d1b8f7be1fd9c0717e/array_record-0.8.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:89d2cf5f4709be3c6c2b30c0d366005223375633ffce66dcb13d927a0bdc5228", size = 4995667, upload-time = "2025-11-13T16:15:45.092Z" }, +] + [[package]] name = "black" version = "25.11.0" @@ -175,6 +195,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" }, ] +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + [[package]] name = "colorama" version = "0.4.6" @@ -364,7 +393,12 @@ name = "estimint" version = "1.5.4" source = { editable = "." } dependencies = [ + { name = "flax" }, + { name = "jax" }, + { name = "jaxtyping" }, { name = "numpy" }, + { name = "omegaconf" }, + { name = "orbax-checkpoint" }, { name = "pandas" }, { name = "scipy" }, { name = "xgboost" }, @@ -374,23 +408,34 @@ dependencies = [ all = [ { name = "appdirs" }, { name = "duckdb" }, + { name = "grain" }, + { name = "hydra-core" }, { name = "matplotlib" }, { name = "mintstate" }, + { name = "optax" }, { name = "pyarrow" }, { name = "requests" }, { name = "scikit-learn" }, + { name = "tqdm" }, ] download = [ { name = "appdirs" }, { name = "requests" }, ] +gpu = [ + { name = "jax", extra = ["cuda12"] }, +] scenarios = [ { name = "mintstate" }, ] train = [ { name = "duckdb" }, + { name = "grain" }, + { name = "hydra-core" }, + { name = "optax" }, { name = "pyarrow" }, { name = "scikit-learn" }, + { name = "tqdm" }, ] viz = [ { name = "matplotlib" }, @@ -411,17 +456,27 @@ requires-dist = [ { name = "appdirs", marker = "extra == 'download'", specifier = ">=1.4.0" }, { name = "duckdb", marker = "extra == 'train'", specifier = ">=0.8.0" }, { name = "estimint", extras = ["train", "viz", "download", "scenarios"], marker = "extra == 'all'" }, + { name = "flax", specifier = ">=0.12.7" }, + { name = "grain", marker = "extra == 'train'", specifier = ">=0.2.16" }, + { name = "hydra-core", marker = "extra == 'train'", specifier = ">=1.3.2" }, + { name = "jax", specifier = ">=0.10.1" }, + { name = "jax", extras = ["cuda12"], marker = "extra == 'gpu'", specifier = ">=0.10.1" }, + { name = "jaxtyping", specifier = ">=0.3.10" }, { name = "matplotlib", marker = "extra == 'viz'", specifier = ">=3.4.0" }, { name = "mintstate", marker = "extra == 'scenarios'", specifier = ">=0.3.0" }, { name = "numpy", specifier = ">=1.20.0" }, + { name = "omegaconf", specifier = ">=2.3" }, + { name = "optax", marker = "extra == 'train'", specifier = ">=0.2.8" }, + { name = "orbax-checkpoint", specifier = ">=0.12.0" }, { name = "pandas", specifier = ">=1.3.0" }, { name = "pyarrow", marker = "extra == 'train'", specifier = ">=10.0.0" }, { name = "requests", marker = "extra == 'download'", specifier = ">=2.28.0" }, { name = "scikit-learn", marker = "extra == 'train'", specifier = ">=1.0.0" }, { name = "scipy", specifier = ">=1.7.0" }, + { name = "tqdm", marker = "extra == 'train'", specifier = ">=4.67.3" }, { name = "xgboost", specifier = ">=1.6.0" }, ] -provides-extras = ["train", "viz", "download", "scenarios", "all"] +provides-extras = ["train", "gpu", "viz", "download", "scenarios", "all"] [package.metadata.requires-dev] dev = [ @@ -546,6 +601,34 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl", hash = "sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1", size = 203949, upload-time = "2026-06-16T01:57:26.358Z" }, ] +[[package]] +name = "grain" +version = "0.2.18" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "absl-py" }, + { name = "array-record", marker = "sys_platform != 'win32'" }, + { name = "cloudpickle" }, + { name = "etils", extra = ["epath", "epy"] }, + { name = "numpy" }, + { name = "portpicker" }, + { name = "protobuf" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/20/59fb32fd6aadc40e0dbde586a62903646ad778413c78280ea8d1e18e73de/grain-0.2.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1bcff4c0ec71cee0b8c26076e3b60d83897cd7586b8f182291969743fd79a7b9", size = 554329, upload-time = "2026-06-17T20:57:47.422Z" }, + { url = "https://files.pythonhosted.org/packages/c5/60/13bf95936145419a4673f33262d239477e1dc7da30d1a576945e2cba84af/grain-0.2.18-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1eb8f8424d3844944d1c37248b0430a5598b21f7ec5141119e0a70069edbd943", size = 610874, upload-time = "2026-06-17T20:57:48.907Z" }, + { url = "https://files.pythonhosted.org/packages/56/86/237d99cc246f87536ca3f3764fe94e2e364dababfe382ad227f3153079de/grain-0.2.18-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ecd87427b4050b695f9b9b5a41d8058208586d3f90a2e56f14a64f920aa47f8", size = 610169, upload-time = "2026-06-17T20:57:50.073Z" }, + { url = "https://files.pythonhosted.org/packages/ee/4b/7ec021e2385094ab31f6e6dad3e6f5bb2251dff5c3543934c347ba7ada3e/grain-0.2.18-cp312-cp312-win_amd64.whl", hash = "sha256:c8a29696d98b2e84d8531df211006b2187475af7cebc45408023da6aa3ac1494", size = 539810, upload-time = "2026-06-17T20:57:51.414Z" }, + { url = "https://files.pythonhosted.org/packages/a2/3d/6ad2033ae65145bcef635741c0d351bfe18a6a241b803766490a432551ff/grain-0.2.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bec1c551574d3a1885ea0d1481586b4c2490a1332120bf626b459e2f9a6f1d06", size = 554349, upload-time = "2026-06-17T20:57:52.525Z" }, + { url = "https://files.pythonhosted.org/packages/60/d5/590925b5fdf33218dde9f72322b88b65f4043c6a6a06cd00520465ac6915/grain-0.2.18-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:229683c7714c3275cc4fee6cbc7356d47769eeaa286fbdc6af7a9542dcb468e5", size = 610930, upload-time = "2026-06-17T20:57:53.681Z" }, + { url = "https://files.pythonhosted.org/packages/9b/f3/0d3269dd6796c187f808708b381f6d85a62e5022f45f00c938a7f3a605f2/grain-0.2.18-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61290a4af38fbddac41d6da1d19129df498dece53c3de4cc02e7ec557a0b0024", size = 610204, upload-time = "2026-06-17T20:57:55.104Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ed/d491cd9e6406d4eca43443939c6b303f8cd66386f861988813ed92038e01/grain-0.2.18-cp313-cp313-win_amd64.whl", hash = "sha256:8d74e3f33403146fb9da0b101d7d18148e3979f5adc8d625237524cc144c0d24", size = 539915, upload-time = "2026-06-17T20:57:56.573Z" }, + { url = "https://files.pythonhosted.org/packages/3c/de/14532d47c14bcfaeb79878621ea4f28863df60ec1ce29f43a9781a1a2167/grain-0.2.18-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:5986e756a0803012a74af4d34a506ed2877f6a86b8d1164227e8a67e09af1688", size = 554398, upload-time = "2026-06-17T20:57:57.641Z" }, + { url = "https://files.pythonhosted.org/packages/0f/31/07c861e8b0a782d2b17b3e8a7b9191420d30d4a9ce86a9882502d4d883eb/grain-0.2.18-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09bef4e8290d06e79cfddc71e777d0b5f60316e5a43af61f8a3d0e6a2d9feccc", size = 610928, upload-time = "2026-06-17T20:57:58.901Z" }, + { url = "https://files.pythonhosted.org/packages/b7/60/b257f1173a6c71c67a1de81798427a7e73ceb71cd6573ccccf7f528018f5/grain-0.2.18-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc7204490aff21620fbdbd69e088991a4ae1ebc31586456191c11f9f61a8c0e6", size = 610179, upload-time = "2026-06-17T20:58:00.154Z" }, + { url = "https://files.pythonhosted.org/packages/a2/c8/d3f559b3691559054d57779ce9e9dbb832c7631b622e94c8c092ce26ca18/grain-0.2.18-cp314-cp314-win_amd64.whl", hash = "sha256:fe83461d55e81c9c9cdba3d9d9ed0185db7b41cddb8e28223aa495ca3516877c", size = 547828, upload-time = "2026-06-17T20:58:01.419Z" }, +] + [[package]] name = "h11" version = "0.16.0" @@ -645,6 +728,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203, upload-time = "2025-12-20T20:16:11.67Z" }, ] +[[package]] +name = "hydra-core" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "antlr4-python3-runtime" }, + { name = "omegaconf" }, + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/dd/220f0e91743136725352497e98540772a01fc7c3ab96ff16c3c74424e984/hydra_core-1.3.4.tar.gz", hash = "sha256:ad0f7b05a0242255a8984d5a4ed2f6847f7b783ed727368a2c0155ec52d6c34c", size = 3263348, upload-time = "2026-07-04T16:25:38.891Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/cd/a568610bafe991fdd3f628fb606316b3b2be52ded019284e895d9beb3a1e/hydra_core-1.3.4-py3-none-any.whl", hash = "sha256:e58683692904a09f1fdfffa1a9b86bfd94e215b59f1ee17e7cd7d92738090d33", size = 155478, upload-time = "2026-07-04T16:25:37.291Z" }, +] + [[package]] name = "idna" version = "3.11" @@ -688,6 +785,57 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/89/82/5ab5211079a151b6f661529369c0c8e98ec64cabf5c0cf22a0a05af124d8/jax-0.10.2-py3-none-any.whl", hash = "sha256:724d73c4678d8b06f6a6ab4db1b8a2fea8cd4f1e2c2564f99601634ec7b8d1c6", size = 3219515, upload-time = "2026-06-17T23:42:41.259Z" }, ] +[package.optional-dependencies] +cuda12 = [ + { name = "jax-cuda12-plugin", extra = ["with-cuda"] }, + { name = "jaxlib" }, +] + +[[package]] +name = "jax-cuda12-pjrt" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bf/b0/e1d392ee24ecd53caa202194746cb12058befde5882d1f3307922829783f/jax_cuda12_pjrt-0.10.2-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:b6f2d66548ee1ee910a836b5fe3d0ebbe1da04a62d0f468ba4822189036a32b3", size = 169847949, upload-time = "2026-06-17T23:42:44.729Z" }, + { url = "https://files.pythonhosted.org/packages/77/00/326facd192b7dc0731e43b30f5ada5ef235e2a3325a151d94ed3db041536/jax_cuda12_pjrt-0.10.2-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:806d1fd29038b6acf5a2b289dd62192abea977ee26aef60ea295b1d28a23acf8", size = 174364763, upload-time = "2026-06-17T23:42:49.931Z" }, +] + +[[package]] +name = "jax-cuda12-plugin" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jax-cuda12-pjrt" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/4a/382ec14e57d774148b079c3d251fc9b9e1ed7f92dd2327823f35e0a968a7/jax_cuda12_plugin-0.10.2-cp312-cp312-manylinux_2_27_aarch64.whl", hash = "sha256:767a1482dbf652688403c4e22ff01470e1add13c48f9d817169fd8f7440afce5", size = 8093630, upload-time = "2026-06-17T23:42:57.019Z" }, + { url = "https://files.pythonhosted.org/packages/ca/25/19ee8936b00ca74a12bfaebd4703695cee2407f954a6e4e67cdd7f82b7bf/jax_cuda12_plugin-0.10.2-cp312-cp312-manylinux_2_27_x86_64.whl", hash = "sha256:4eb6e8e0992fd9897db2468da33f276ae414ec84dc436804124404430502eeac", size = 8141521, upload-time = "2026-06-17T23:42:58.483Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/a9c4ea148d31843764383b26fd66b38cfedad9a6dbf08db634a23d9312c3/jax_cuda12_plugin-0.10.2-cp313-cp313-manylinux_2_27_aarch64.whl", hash = "sha256:69776ac849112f4fc2d6fa616f8772106daff38fcdb825c4e39f47e878f27610", size = 8093605, upload-time = "2026-06-17T23:43:00.071Z" }, + { url = "https://files.pythonhosted.org/packages/92/07/3098ae537e68d76bbc98ed61d53e9856f63f4f1bd64f8aeb4d432dad1290/jax_cuda12_plugin-0.10.2-cp313-cp313-manylinux_2_27_x86_64.whl", hash = "sha256:948a988927cb10843b501a215181ccb1daed3fa70531b2f1ae0842fe1c08b05e", size = 8141236, upload-time = "2026-06-17T23:43:01.55Z" }, + { url = "https://files.pythonhosted.org/packages/72/0c/ff1e1975ef108cb2e45deacf5dea812822efaf3210af075f464abd40399c/jax_cuda12_plugin-0.10.2-cp313-cp313t-manylinux_2_27_aarch64.whl", hash = "sha256:febd9d3f488d182090758936042ad647a60470923715b48a385bc312cb943c63", size = 8108408, upload-time = "2026-06-17T23:43:03.398Z" }, + { url = "https://files.pythonhosted.org/packages/09/c2/04c70eb73beb4df23f49b72d159ca74ee31cccb1be95cdab7491a5ebd259/jax_cuda12_plugin-0.10.2-cp313-cp313t-manylinux_2_27_x86_64.whl", hash = "sha256:1f1e20fba0aaa3f28ab0a3273754c8c098fa40b74bf4dac5b76c9f2a70425487", size = 8151184, upload-time = "2026-06-17T23:43:05.106Z" }, + { url = "https://files.pythonhosted.org/packages/95/34/5d5b2993f6b7bbfe781920671de61036faffa5a8bf3740b4ca23d790b6f9/jax_cuda12_plugin-0.10.2-cp314-cp314-manylinux_2_27_aarch64.whl", hash = "sha256:4946ec57ddb795e2da8288ceb1ceddd58c2a204a0f7765af89eae486a1d3ace7", size = 8094107, upload-time = "2026-06-17T23:43:06.546Z" }, + { url = "https://files.pythonhosted.org/packages/02/ac/85bc07d7a0766c7999f9bdfcf7f7cb2487fd0eb5d6bbe2bd41a3a54cd379/jax_cuda12_plugin-0.10.2-cp314-cp314-manylinux_2_27_x86_64.whl", hash = "sha256:0c7a0204155585cc1c4fcb30c66b7f881b38e57e1f0d8e97d48e1654bf0d27f8", size = 8141889, upload-time = "2026-06-17T23:43:08.018Z" }, + { url = "https://files.pythonhosted.org/packages/f3/7d/9fa25e24b96ab06217e1e3dd311a80f3534076bb1b19d46cbc8cf9aa55b9/jax_cuda12_plugin-0.10.2-cp314-cp314t-manylinux_2_27_aarch64.whl", hash = "sha256:c26a7dd5e71c9edf203b95480f02ec4ad60c9c7e11e38b7310b1fd1dd03ba116", size = 8108639, upload-time = "2026-06-17T23:43:09.651Z" }, + { url = "https://files.pythonhosted.org/packages/20/c2/98fa02ba204f5dc88680128129fbc7cd833d5b5ddae2734af93ef85db853/jax_cuda12_plugin-0.10.2-cp314-cp314t-manylinux_2_27_x86_64.whl", hash = "sha256:c539b052056e8181082fa2635f17e098b3f625d87da53ba35470a2c13480801d", size = 8151505, upload-time = "2026-06-17T23:43:11.023Z" }, +] + +[package.optional-dependencies] +with-cuda = [ + { name = "nvidia-cublas-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cuda-cupti-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvcc-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cudnn-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cufft-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cusolver-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cusparse-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform == 'linux'" }, + { name = "nvidia-nvshmem-cu12", marker = "sys_platform == 'linux'" }, +] + [[package]] name = "jaxlib" version = "0.10.2" @@ -1173,6 +1321,113 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fd/6a/d3a169aaf8536cf228d56a09e04bcb713a2fe4410d4e2105b9419b5a9c89/numpy-2.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:016623417bb330d719d579daf2d6b9a01ddc52e41a9ed61a47f39fde46dcd865", size = 10686451, upload-time = "2026-06-21T20:57:49.313Z" }, ] +[[package]] +name = "nvidia-cublas-cu12" +version = "12.9.2.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cuda-nvrtc-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/a2/c96163a0fff1839c0c9548bbdeae7b853b867009e33b9b9264adc238b1cf/nvidia_cublas_cu12-12.9.2.10-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:5572131a59c3eebeeb1c4c8144f772d49372c20124916e072a0e3fc30df421d5", size = 575012079, upload-time = "2026-04-08T18:51:47.303Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c0/0a517bfe63ccd3b92eb254d264e28fca3c7cab75d07daea315250fb1bf73/nvidia_cublas_cu12-12.9.2.10-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:e4f53a8ca8c5d6e8c492d0d0a3d565ecb59a751b19cfdaa4f6da0ab2104c1702", size = 581240110, upload-time = "2026-04-08T18:52:31.532Z" }, +] + +[[package]] +name = "nvidia-cuda-cccl-cu12" +version = "12.9.27" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/7e/82e49956b046bdc506c789235c587d9b3ef58b8bc1782258c1e247229647/nvidia_cuda_cccl_cu12-12.9.27-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d7898b38aa68beaa234d48f0868273702342a196d6e2e9d0ef058dca2390ebea", size = 3152245, upload-time = "2025-05-01T19:32:04.802Z" }, + { url = "https://files.pythonhosted.org/packages/18/2a/d4cd8506d2044e082f8cd921be57392e6a9b5ccd3ffdf050362430a3d5d5/nvidia_cuda_cccl_cu12-12.9.27-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:37869e17ce2e1ecec6eddf1927cca0f8c34e64fd848d40453df559091e2d7117", size = 3152243, upload-time = "2025-05-01T19:32:13.955Z" }, +] + +[[package]] +name = "nvidia-cuda-cupti-cu12" +version = "12.9.79" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/78/351b5c8cdbd9a6b4fb0d6ee73fb176dcdc1b6b6ad47c2ffff5ae8ca4a1f7/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:791853b030602c6a11d08b5578edfb957cadea06e9d3b26adbf8d036135a4afe", size = 10077166, upload-time = "2025-06-05T20:01:01.385Z" }, + { url = "https://files.pythonhosted.org/packages/c1/2e/b84e32197e33f39907b455b83395a017e697c07a449a2b15fd07fc1c9981/nvidia_cuda_cupti_cu12-12.9.79-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:096bcf334f13e1984ba36685ad4c1d6347db214de03dbb6eebb237b41d9d934f", size = 10814997, upload-time = "2025-06-05T20:01:10.168Z" }, +] + +[[package]] +name = "nvidia-cuda-nvcc-cu12" +version = "12.9.86" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/48/b54a06168a2190572a312bfe4ce443687773eb61367ced31e064953dd2f7/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:5d6a0d32fdc7ea39917c20065614ae93add6f577d840233237ff08e9a38f58f0", size = 40546229, upload-time = "2025-06-05T20:01:53.357Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/8cc072436787104bbbcbde1f76ab4a0d89e68f7cebc758dd2ad7913a43d0/nvidia_cuda_nvcc_cu12-12.9.86-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:44e1eca4d08926193a558d2434b1bf83d57b4d5743e0c431c0c83d51da1df62b", size = 39411138, upload-time = "2025-06-05T20:01:43.182Z" }, +] + +[[package]] +name = "nvidia-cuda-nvrtc-cu12" +version = "12.9.86" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/85/e4af82cc9202023862090bfca4ea827d533329e925c758f0cde964cb54b7/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:210cf05005a447e29214e9ce50851e83fc5f4358df8b453155d5e1918094dcb4", size = 89568129, upload-time = "2025-06-05T20:02:41.973Z" }, + { url = "https://files.pythonhosted.org/packages/64/eb/c2295044b8f3b3b08860e2f6a912b702fc92568a167259df5dddb78f325e/nvidia_cuda_nvrtc_cu12-12.9.86-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:096d4de6bda726415dfaf3198d4f5c522b8e70139c97feef5cd2ca6d4cd9cead", size = 44528905, upload-time = "2025-06-05T20:02:29.754Z" }, +] + +[[package]] +name = "nvidia-cuda-runtime-cu12" +version = "12.9.79" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/e0/0279bd94539fda525e0c8538db29b72a5a8495b0c12173113471d28bce78/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:83469a846206f2a733db0c42e223589ab62fd2fabac4432d2f8802de4bded0a4", size = 3515012, upload-time = "2025-06-05T20:00:35.519Z" }, + { url = "https://files.pythonhosted.org/packages/bc/46/a92db19b8309581092a3add7e6fceb4c301a3fd233969856a8cbf042cd3c/nvidia_cuda_runtime_cu12-12.9.79-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25bba2dfb01d48a9b59ca474a1ac43c6ebf7011f1b0b8cc44f54eb6ac48a96c3", size = 3493179, upload-time = "2025-06-05T20:00:53.735Z" }, +] + +[[package]] +name = "nvidia-cudnn-cu12" +version = "9.24.0.43" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/f1/cd42563325fa827f54ff30da05686c747652bdbd4cb5654cea54d7d0ad4f/nvidia_cudnn_cu12-9.24.0.43-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:a42996943f0cd78ddfd61c8bf59361672a19b63e0491aa22a53d6fe63a3f854a", size = 856490582, upload-time = "2026-07-02T16:21:30.924Z" }, + { url = "https://files.pythonhosted.org/packages/10/13/b8887c869cf2471339a24b60d3c28e761facbb534935f572b61423371abb/nvidia_cudnn_cu12-9.24.0.43-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:f424192dd85e7d29f44be18df2dae4c80d32c67a29c0d42f5c283c40cfdf871c", size = 799083985, upload-time = "2026-07-02T16:25:37.467Z" }, +] + +[[package]] +name = "nvidia-cufft-cu12" +version = "11.4.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/2b/76445b0af890da61b501fde30650a1a4bd910607261b209cccb5235d3daa/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1a28c9b12260a1aa7a8fd12f5ebd82d027963d635ba82ff39a1acfa7c4c0fbcf", size = 200822453, upload-time = "2025-06-05T20:05:27.889Z" }, + { url = "https://files.pythonhosted.org/packages/95/f4/61e6996dd20481ee834f57a8e9dca28b1869366a135e0d42e2aa8493bdd4/nvidia_cufft_cu12-11.4.1.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c67884f2a7d276b4b80eb56a79322a95df592ae5e765cf1243693365ccab4e28", size = 200877592, upload-time = "2025-06-05T20:05:45.862Z" }, +] + +[[package]] +name = "nvidia-cusolver-cu12" +version = "11.7.5.82" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cublas-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cusparse-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/99/686ff9bf3a82a531c62b1a5c614476e8dfa24a9d89067aeedf3592ee4538/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:62efa83e4ace59a4c734d052bb72158e888aa7b770e1a5f601682f16fe5b4fd2", size = 337869834, upload-time = "2025-06-05T20:06:53.125Z" }, + { url = "https://files.pythonhosted.org/packages/33/40/79b0c64d44d6c166c0964ec1d803d067f4a145cca23e23925fd351d0e642/nvidia_cusolver_cu12-11.7.5.82-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:15da72d1340d29b5b3cf3fd100e3cd53421dde36002eda6ed93811af63c40d88", size = 338117415, upload-time = "2025-06-05T20:07:16.809Z" }, +] + +[[package]] +name = "nvidia-cusparse-cu12" +version = "12.5.10.65" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/6f/8710fbd17cdd1d0fc3fea7d36d5b65ce1933611c31e1861da330206b253a/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:221c73e7482dd93eda44e65ce567c031c07e2f93f6fa0ecd3ba876a195023e83", size = 366359408, upload-time = "2025-06-05T20:07:42.501Z" }, + { url = "https://files.pythonhosted.org/packages/12/46/b0fd4b04f86577921feb97d8e2cf028afe04f614d17fb5013de9282c9216/nvidia_cusparse_cu12-12.5.10.65-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:73060ce019ac064a057267c585bf1fd5a353734151f87472ff02b2c5c9984e78", size = 366465088, upload-time = "2025-06-05T20:08:20.413Z" }, +] + [[package]] name = "nvidia-nccl-cu12" version = "2.28.9" @@ -1182,6 +1437,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4a/4e/44dbb46b3d1b0ec61afda8e84837870f2f9ace33c564317d59b70bc19d3e/nvidia_nccl_cu12-2.28.9-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:485776daa8447da5da39681af455aa3b2c2586ddcf4af8772495e7c532c7e5ab", size = 296782137, upload-time = "2025-11-18T05:49:34.248Z" }, ] +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.9.86" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/0c/c75bbfb967457a0b7670b8ad267bfc4fffdf341c074e0a80db06c24ccfd4/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:e3f1171dbdc83c5932a45f0f4c99180a70de9bd2718c1ab77d14104f6d7147f9", size = 39748338, upload-time = "2025-06-05T20:10:25.613Z" }, + { url = "https://files.pythonhosted.org/packages/97/bc/2dcba8e70cf3115b400fef54f213bcd6715a3195eba000f8330f11e40c45/nvidia_nvjitlink_cu12-12.9.86-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:994a05ef08ef4b0b299829cde613a424382aff7efb08a7172c1fa616cc3af2ca", size = 39514880, upload-time = "2025-06-05T20:10:04.89Z" }, +] + +[[package]] +name = "nvidia-nvshmem-cu12" +version = "3.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "nvidia-cuda-cccl-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/9a/a60b98b629e3b7c4ef6385b08c0e169f2048382c75476f377da54b83a8ca/nvidia_nvshmem_cu12-3.7.1-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7de83f2aa2b58570b4058543fd3c3e992c19f96571380d46ec9b00e0062c6015", size = 229879072, upload-time = "2026-06-30T19:25:39.671Z" }, + { url = "https://files.pythonhosted.org/packages/61/a2/d1d065914f1860782171c6bd2e5eabcbe4488c66352b468569a6b69d4bf6/nvidia_nvshmem_cu12-3.7.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:faca8717c321f088d3c17490fbfc682bac214986e80b97e232c5ae94f900c45c", size = 230087166, upload-time = "2026-06-30T19:26:24.652Z" }, +] + [[package]] name = "omegaconf" version = "2.3.1" @@ -1403,6 +1679,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "portpicker" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "psutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/d0/cda2fc582f09510c84cd6b7d7b9e22a02d4e45dbad2b2ef1c6edd7847e00/portpicker-1.6.0.tar.gz", hash = "sha256:bd507fd6f96f65ee02781f2e674e9dc6c99bbfa6e3c39992e3916204c9d431fa", size = 25676, upload-time = "2023-08-15T04:37:08.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/2d/440e4d7041fff89f28f483733eb617127aa866135c2dc719e05893f089e1/portpicker-1.6.0-py3-none-any.whl", hash = "sha256:b2787a41404cf7edbe29b07b9e0ed863b09f2665dcc01c1eb0c2261c1e7d0755", size = 16613, upload-time = "2023-08-15T04:37:07.327Z" }, +] + [[package]] name = "prometheus-client" version = "0.25.0" From d3f9d70ff43fd1bb2dadc0a9bcacaa51b7b58d06 Mon Sep 17 00:00:00 2001 From: Anmol Date: Wed, 8 Jul 2026 14:19:58 +0000 Subject: [PATCH 04/32] update data loading --- .coverage | Bin 53248 -> 0 bytes src/estimint/v2/conf/train_config.yaml | 13 +++ src/estimint/v2/data/dataset.py | 77 +++++++++++++ src/estimint/v2/data/preprocess.py | 4 +- src/estimint/v2/train_base.py | 19 +++- src/estimint/v2/training/checkpoint.py | 147 +++++++++++++++++++++++++ 6 files changed, 256 insertions(+), 4 deletions(-) delete mode 100644 .coverage create mode 100644 src/estimint/v2/data/dataset.py create mode 100644 src/estimint/v2/training/checkpoint.py diff --git a/.coverage b/.coverage deleted file mode 100644 index 1a0fcec026e9c9e7548efa780d8c7df37451060d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53248 zcmeI4UyK_^9mi+AYp>V;CVvR#xVEt2sDrqN+Se9sI?!Z}yMvOLA3h zq&xNau58cl%=~74zt8+;#$i}X$ooldmm zf6n=@mrT#SXtsoB zF53-Z+D_fBS%K}Wn8B(@a<_d^mlGYu(Nrfh&W7^xtYX(mDiAAFM9Z_AmbY$xPpnUe z8RFUku@*!TREV%w9GSyB9E(qxo>&&1aB9Mjv^Z?nr*c!5H*$LU;6dez2yL>w8olyc ztf7d$DW{gHpqlH|rS?_Na%!u>pEj+Yg*BJ-Tni#=J-0a*xMst4LNguT4s6#k#hR$K z15v-LfzuLNauB>hYpASq(x7vZWL(z(oxbp0B;)L{@G>dqxCz$2psbpNL!F&=vr5Rn z+itdGRf=wz*4N_U+x$oC$K-qLEbFvCp?fukokNzT|XhhT~3~ z(g^Z^`}3LdqX!j6UMbf6^9}mGRk7NE8(vqa@hkK6QTW0BtX`g&P_CR09Yx})RPDg; zofuo3rWd`9>&W!&{YLhZtxh6)QKMnH%VC$1(q_~+tQ9dEr$)oVZaWgW&b*N+pPbmv zb$TvPneUzEI%65VJU*^;jnIwa)`|mtiwh+!d6!`{NooqqZ+po=@Kied?mOm6;S8r^*p4DSx&_Ok}A|s~&ZC*(d`g zUR)J-6c^1#U$g=d*iB)|ETJ-?V_md-v*rm(q`7ozQvDz|kgZjjm!EQ#oRweYIunXs ze(*u1(~di1G|p6fn$(+CqIP_l+TtX)CHDR03=O#SZD-I=B)b6|@-nJH4sKBkRwD{Y zuK2r7Zb~lj6@G)!3kL{*00@8p2!H?xfB*=900@8p2!O!eBcLiNMVIUU6u-{+U+Dt} z2!H?xfB*=900@8p2!H?xfB*=9z(MS(W1N zF#Znz$4AmYC=CK200JNY0w4eaAOHd&00JNY0wB;MP*CqxlG^~OoH}mAcLC({|3Wd# z_*LHJM@u(LS4+>7PL$N*wc>Nd$0-2^2!H?xfB*=900@8p2!H?x>@fl-3L5JubE|Gs z%+Y`Tt(N7{P8W4CC;Y&E;?&p9&a~EpRo9vGy;>O8q`y$ltPmw{iva`^FP&63dEdGceD;mXLm)`2u5>wkSw>!?GkJ+S`I99J(5EuXCa)1wgYt^c(zYn}Z=*L~;uUmeAS zWc{C_22hP*Z$b>L|FQoc20su00T2KI5C8!X009sH0T2KI5ZKcMR7GV)`TSquHyOQf zfB*=900@8p2!H?xfB*=900@8p2<$-us!G52C%f{cUo!q4{{w%W|APOVKhN8|!qcUH zQ8W$^009sH0T2KI5C8!X009sH0T9?_0>|>2VyvaQZi<=g*)xnyvS$ynO@m$6XiIx~ zs?A#TNsqP9z44a+p95@j>4!gI>}iUlwKbh{n!WOUHTKJZcR*cROy?g5kLs?{O zUuasi_npER#U#h|{p{NBslM=tH^<{iq6}~KE=Z7__*jUTn94U;;n32 zo@w2;`Its$pEXj8rO|zW@cDmyzhlSEK!qRx0w4eaAOHd&00JNY0w4eaAOHe8LqI int: + """ + Return the number of records. + + Returns: + Number of records. + """ + return len(self.data) + + def __getitem__(self, idx: int) -> dict: + """ + Return one record by index. + + Args: + idx: Record index. + + Returns: + Record dictionary. + """ + return self.data[idx] + + +def make_loader( + data: list[dict], + batch_size: int, + shuffle: bool = False, + seed: int = 42, + num_workers: int = 0, + drop_remainder: bool = True, +) -> grain.DataLoader: + """ + Build a Grain data loader. + + Args: + data: Sequence records. + batch_size: Batch size. + shuffle: Whether to shuffle indices. + seed: Sampler seed. + num_workers: Worker count. + drop_remainder: Whether to drop partial batches. + + Returns: + Configured Grain data loader. + """ + data_source = DataSource(data) + + sampler = grain.IndexSampler( + num_records=len(data_source), + num_epochs=1, + shard_options=grain.NoSharding(), + shuffle=shuffle, + seed=seed, + ) + + loader = grain.DataLoader( + data_source=data_source, + sampler=sampler, + operations=[grain.Batch(batch_size=batch_size, drop_remainder=drop_remainder)], + worker_count=num_workers, + ) + return loader diff --git a/src/estimint/v2/data/preprocess.py b/src/estimint/v2/data/preprocess.py index 2107c3e..5755c7e 100644 --- a/src/estimint/v2/data/preprocess.py +++ b/src/estimint/v2/data/preprocess.py @@ -171,13 +171,13 @@ def _build_data( if ps not in groups.groups: continue - df["eir_log10"] = np.log10(df["eir"]) + df["eir_log10"] = np.log10(df["eir"], dtype=np.float32) # TODO: do we need to log10? X = ( df.loc[groups.groups[ps], FEATURES_BASE] .astype(np.float32) .values ) - Y = df.loc[groups.groups[ps], "eir_log10"].values.astype(np.float32) + Y = df.loc[groups.groups[ps], "eir_log10"].values data.append( { "x": X, diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index 4789c79..a5f9505 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -11,6 +11,7 @@ from tqdm import tqdm from .data.preprocess import PreparedData, prepare_data +from .data.dataset import make_loader log = logging.getLogger(__name__) @@ -25,7 +26,21 @@ def main(cfg: DictConfig) -> None: prepared_data = prepare_data(raw_df, cfg) - print(f"train data len: {len(prepared_data.train_data)}") - + val_loader = make_loader( + data=prepared_data.val_data, + batch_size=cfg.batch_size, + seed=cfg.seed, + shuffle=False, + num_workers=cfg.num_workers, + drop_remainder=True, + ) + test_loader = make_loader( + data=prepared_data.test_data, + batch_size=cfg.batch_size, + seed=cfg.seed, + shuffle=False, + num_workers=cfg.num_workers, + drop_remainder=True, + ) if __name__ == "__main__": main() \ No newline at end of file diff --git a/src/estimint/v2/training/checkpoint.py b/src/estimint/v2/training/checkpoint.py new file mode 100644 index 0000000..ee9d85a --- /dev/null +++ b/src/estimint/v2/training/checkpoint.py @@ -0,0 +1,147 @@ +import logging +from contextlib import contextmanager +from dataclasses import dataclass +from os import PathLike +from typing import Any, Iterator + +import flax.nnx as nnx +from orbax.checkpoint import v1 as ocp +from etils import epath + +log = logging.getLogger(__name__) + +# Orbax checkpointing logs verbosely via the absl logger; silence INFO-level noise. +logging.getLogger("absl").setLevel(logging.WARNING) + + +def restore_model( + ckptr: ocp.training.Checkpointer, + model: nnx.Module, + step: int | None = None, +) -> nnx.Module: + """ + Restore model from checkpoint. + + Args: + ckptr: Orbax checkpointer. + model: Model to restore. + step: Checkpoint step to restore. If None, restore the latest checkpoint. + + Returns: + Restored model. + """ + loaded = ckptr.load_checkpointables( + step, + abstract_checkpointables={"model": nnx.state(model)}, + ) + nnx.update(model, loaded["model"]) + return model + + +def init_or_restore_last( + ckptr: ocp.training.Checkpointer, + model: nnx.Module, + optimizer: nnx.Optimizer, + restore_checkpoint: bool = False, +) -> tuple[nnx.Module, nnx.Optimizer, int, float]: + """ + Initialize or restore model and optimizer from checkpoint. + + Args: + ckptr: Orbax checkpointer. + model: Model to restore. + optimizer: Optimizer to restore. + restore_checkpoint: Whether to restore from checkpoint. + + Returns: + Model, optimizer, start epoch, and validation loss from the checkpoint. + """ + if not restore_checkpoint or not ckptr.latest: + log.info("Initializing model and optimizer from scratch.") + return model, optimizer, 0, float("inf") + + log.info(f"Restoring model and optimizer from checkpoint: {ckptr.latest.step}") + loaded_state = ckptr.load_checkpointables( + abstract_checkpointables={ + "model": nnx.state(model), + "optimizer": nnx.state(optimizer), + } + ) + nnx.update(model, loaded_state["model"]) + nnx.update(optimizer, loaded_state["optimizer"]) + metadata = ckptr.metadata() + metrics: dict[str, Any] = metadata.metrics if isinstance(metadata.metrics, dict) else {} + val_loss = float(metrics.get("val/loss", float("inf"))) + + return model, optimizer, ckptr.latest.step + 1, val_loss + + +@dataclass +class CheckpointSession: + ckptr: ocp.training.Checkpointer + model: nnx.Module + optimizer: nnx.Optimizer + start_epoch: int + best_val_loss: float + + def save_if_best(self, epoch: int, val_loss: float) -> bool: + """ + Save a checkpoint when validation loss improves. + + Args: + epoch: Current epoch. + val_loss: Current validation loss. + + Returns: + Whether a checkpoint was saved. + """ + if val_loss >= self.best_val_loss: + return False + + self.best_val_loss = val_loss + self.ckptr.save_checkpointables_async( + epoch, + { + "model": nnx.state(self.model), + "optimizer": nnx.state(self.optimizer), + }, + metrics={"val/loss": self.best_val_loss}, + overwrite=True, + ) + return True + + +@contextmanager +def checkpoint_session( + checkpoint_dir: str | PathLike[str], + max_checkpoints_to_keep: int, + model: nnx.Module, + optimizer: nnx.Optimizer, + restore_checkpoint: bool = False, +) -> Iterator[CheckpointSession]: + """ + Open a checkpointing session. + + Args: + checkpoint_dir: Checkpoint directory. + max_checkpoints_to_keep: Number of checkpoints to keep. + model: Model to checkpoint. + optimizer: Optimizer to checkpoint. + restore_checkpoint: Whether to restore existing state. + + Returns: + Checkpoint session iterator. + """ + ckpt_dir = epath.Path(checkpoint_dir).resolve() + with ocp.training.Checkpointer( + ckpt_dir, + preservation_policy=ocp.training.preservation_policies.LatestN(max_checkpoints_to_keep), # type: ignore[arg-type] + ) as ckptr: + model, optimizer, start_epoch, best_val_loss = init_or_restore_last(ckptr, model, optimizer, restore_checkpoint) + yield CheckpointSession( + ckptr=ckptr, + model=model, + optimizer=optimizer, + start_epoch=start_epoch, + best_val_loss=best_val_loss, + ) From 7ba02b4a258c2bed1f6253d63334741ed600a941 Mon Sep 17 00:00:00 2001 From: anmol thapar Date: Fri, 10 Jul 2026 11:20:34 +0100 Subject: [PATCH 05/32] feat: consolidate "replace XGBoost" findings into a single test file with updated model configurations and calibration methods --- test_estimint_nn.py | 834 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 834 insertions(+) create mode 100644 test_estimint_nn.py diff --git a/test_estimint_nn.py b/test_estimint_nn.py new file mode 100644 index 0000000..c4e9aed --- /dev/null +++ b/test_estimint_nn.py @@ -0,0 +1,834 @@ +""" +============================================================================ + test_estimint_nn.py — REVIEW / SCRATCH FILE (not wired into the package) +============================================================================ +Consolidates the "replace XGBoost" findings into ONE readable file so you can +review before splitting the model code into the real v2 modules. + +DATA code now lives in the package (imported below, not redefined here): + * src/estimint/v2/data/preprocess.py group_split() — leakage-free param split + (+ stratification & calib split), sharing its core with the existing + _create_split()/split.csv pipeline. + * src/estimint/v2/data/features.py resolve_mono(), MONO_FEATURES, StandardScaler + +Fixes applied (from our discussion): + FIX 1 KMeans row split -> group-by-parameter split (no replicate leakage). + FIX 2 10-fold OOF calibration -> QMAP+scale on the VAL split. + FIX 3 monotone feature resolved BY NAME (works with prev_y9-last order). + FIX 4 per-row records: data is 1 row per (parameter, sim); just stack rows. + +GPU-budget upgrades (this pass): + * Residual pre-LayerNorm MLP (`MLP(..., residual=True)`) for depth >= 4. + * Warmup + cosine LR schedule in train_model. + * 4-way split (train/val/calib/test): conformal offset fit on the held-out + CALIB split (not val) for honest coverage. + * TIERS config dicts (smoke / solid / max) + resolve_tier(). + +Run: PYTHONPATH=src python test_estimint_nn.py (fast 'smoke' tier) +Deps: jax, flax(nnx), optax, numpy, pandas — all already in pyproject.toml. +""" + +from __future__ import annotations +from dataclasses import dataclass +import numpy as np +import pandas as pd +import jax +import jax.numpy as jnp +import optax +from flax import nnx + +# Project calibrator helpers. +from estimint.utils import fit_qmap_w, predict_qmap_w, scale_pos, r2, rmse, mae +from estimint.data_processing import make_value_weights + +# DATA code, now living in src/estimint/v2/data/ (SECTIONS 1 & 2 moved there). +# group_split lives in preprocess.py alongside the existing parameter split. +from estimint.v2.data.preprocess import create_splits +from estimint.v2.data.features import resolve_mono, StandardScaler + + +# ============================================================================ +# TIER CONFIGS -> src/estimint/v2/conf/train_config.yaml (or a dataclass) +# ---------------------------------------------------------------------------- +# 'smoke' = fast CPU sanity check. 'solid' = sensible GPU default. 'max' = the +# heavy setting for the hard hbr->EIR map (residual net, big ensemble, long +# training). epochs is a CAP; early-stopping decides the real length. +# ============================================================================ +TIERS = { + "smoke": dict( + width=128, + depth=2, + residual=False, + epochs=60, + patience=20, + batch=512, + lr=3.0e-3, + wd=1e-4, + n_ensemble=1, + n_bins=12, + n_quad=48, + ), + "solid": dict( + width=256, + depth=4, + residual=False, + epochs=2000, + patience=150, + batch=1024, + lr=1.5e-3, + wd=3e-4, + n_ensemble=6, + n_bins=24, + n_quad=96, + ), + "max": dict( + width=512, + depth=6, + residual=True, + epochs=4000, + patience=250, + batch=1024, + lr=1.0e-3, + wd=1e-3, + n_ensemble=10, + n_bins=32, + n_quad=128, + ), +} + + +def resolve_tier(name: str, kind: str): + """Split a flat tier dict into (n_ensemble, model_kwargs, train_kwargs). + + kind: 'flow' (uses n_bins) or 'umnn' (uses n_quad). + """ + t = dict(TIERS[name]) + n_ensemble = t.pop("n_ensemble") + n_bins, n_quad = t.pop("n_bins"), t.pop("n_quad") + model_kw = dict(width=t.pop("width"), depth=t.pop("depth"), residual=t.pop("residual")) + if kind == "flow": + model_kw["n_bins"] = n_bins + elif kind == "umnn": + model_kw["n_quad"] = n_quad + # kind == "fm": width/depth/residual only (no spline/quad params) + train_kw = t # epochs, patience, batch, lr, wd + return n_ensemble, model_kw, train_kw + + +# ============================================================================ +# SECTION 3 -> src/estimint/v2/models/common.py (NEW FILE) +# ---------------------------------------------------------------------------- +# Shared NN plumbing: a GELU MLP that is either a plain stack (residual=False) +# or a pre-LayerNorm residual net (residual=True, use for depth>=4), plus a +# generic AdamW + warmup-cosine trainer with val early-stopping. +# ============================================================================ +class MLP(nnx.Module): + def __init__(self, din, dout, *, width=128, depth=3, residual=False, rngs): + self.residual = residual + self.inp = nnx.Linear(din, width, rngs=rngs) + if residual: + self.norms = nnx.List([nnx.LayerNorm(width, rngs=rngs) for _ in range(depth)]) + self.fc1 = nnx.List([nnx.Linear(width, width, rngs=rngs) for _ in range(depth)]) + self.fc2 = nnx.List([nnx.Linear(width, width, rngs=rngs) for _ in range(depth)]) + else: + self.hidden = nnx.List([nnx.Linear(width, width, rngs=rngs) for _ in range(max(0, depth - 1))]) + self.out = nnx.Linear(width, dout, rngs=rngs) + + def __call__(self, x): + x = self.inp(x) + if self.residual: + for ln, f1, f2 in zip(self.norms, self.fc1, self.fc2): + x = x + f2(nnx.gelu(f1(ln(x)))) # pre-LN residual block + x = nnx.gelu(x) + else: + x = nnx.gelu(x) + for h in self.hidden: + x = nnx.gelu(h(x)) + return self.out(x) + + +def train_model( + model, + loss_fn, + Xtr, + ytr, + wtr, + Xva, + yva, + wva, + *, + epochs=2000, + batch=1024, + lr=1.5e-3, + wd=3e-4, + patience=150, + warmup_frac=0.05, + seed=0, +): + steps = max(1, len(Xtr) // batch) * epochs + warmup = max(1, int(warmup_frac * steps)) + sched = optax.warmup_cosine_decay_schedule( + init_value=lr * 0.01, + peak_value=lr, + warmup_steps=warmup, + decay_steps=steps, + end_value=lr * 0.02, + ) + opt = nnx.Optimizer(model, optax.adamw(sched, weight_decay=wd), wrt=nnx.Param) + + @nnx.jit + def step(model, opt, xb, yb, wb): + loss, grads = nnx.value_and_grad(loss_fn)(model, xb, yb, wb) + opt.update(model, grads) + return loss + + @nnx.jit + def val_loss(model, x, y, w): + return loss_fn(model, x, y, w) + + Xtr, ytr, wtr = map(jnp.asarray, (Xtr, ytr, wtr)) + Xva, yva, wva = map(jnp.asarray, (Xva, yva, wva)) + rng = np.random.default_rng(seed) + best = (np.inf, nnx.state(model)) + bad = 0 + n = len(Xtr) + for _ in range(epochs): + perm = rng.permutation(n) + for i in range(0, n, batch): + idx = perm[i : i + batch] + step(model, opt, Xtr[idx], ytr[idx], wtr[idx]) + vl = float(val_loss(model, Xva, yva, wva)) + if vl < best[0] - 1e-5: + best = (vl, nnx.state(model)) + bad = 0 + else: + bad += 1 + if bad >= patience: + break + nnx.update(model, best[1]) + return model + + +# ============================================================================ +# SECTION 4 -> src/estimint/v2/models/umnn.py (NEW FILE) +# ---------------------------------------------------------------------------- +# CHOICE 1 — MonotoneUMNN. Monotone-by-construction: f(m,c) = b(c) + integral of +# a strictly-positive integrand (softplus MLP) via Gauss-Legendre quadrature => +# smooth AND monotone in m by design. Use on prev_y9->EIR and hbr_y9->EIR; it +# makes run.py's _smooth_staircase / dense sweep obsolete. +# ============================================================================ +class MonotoneUMNN(nnx.Module): + def __init__(self, n_context, *, width=128, depth=3, n_quad=48, residual=False, rngs): + self.bias = MLP(n_context, 1, width=width, depth=depth, residual=residual, rngs=rngs) + self.integrand = MLP(1 + n_context, 1, width=width, depth=depth, residual=residual, rngs=rngs) + nodes, weights = np.polynomial.legendre.leggauss(n_quad) + self.nodes = jnp.asarray(nodes) + self.weights = jnp.asarray(weights) + + def _integral(self, m, c): + m = m[:, None] + half = 0.5 * m + t = half * (self.nodes[None, :] + 1.0) # (N,Q) + cE = jnp.broadcast_to(c[:, None, :], (c.shape[0], t.shape[1], c.shape[1])) + inp = jnp.concatenate([t[..., None], cE], -1) + g = nnx.softplus(self.integrand(inp))[..., 0] # >0 + return half[:, 0] * (self.weights[None, :] * g).sum(1) + + def __call__(self, m, c): + return self.bias(c)[:, 0] + self._integral(m, c) + + +def _umnn_loss(model, X, y, w): + m, c = X[:, 0], X[:, 1:] # X arranged as [mono, *context] + pred = model(m, c) + return jnp.sum(w * (pred - y) ** 2) / jnp.sum(w) + + +# ============================================================================ +# SECTION 5 -> src/estimint/v2/models/flow.py (NEW FILE) +# ---------------------------------------------------------------------------- +# CHOICE 2 (recommended primary) — ConditionalRQS. A conditional +# rational-quadratic-spline normalizing flow (Durkan 2019). Matches/beats +# XGBoost point accuracy via the median AND returns a calibrated posterior with +# exact, non-crossing quantiles: quantile_q = T^{-1}(Phi^{-1}(q)). Works for +# all three maps. The _rqs forward/inverse pair passed an invertibility unit +# check (max error ~1e-6). +# ============================================================================ +_B = 6.0 # spline support half-width (standardized units); linear tails outside + + +def _rqs(x, w_un, h_un, d_un, B, inverse): + N, K = w_un.shape + widths = jax.nn.softmax(w_un, -1) * (2 * B) + heights = jax.nn.softmax(h_un, -1) * (2 * B) + derivs = jax.nn.softplus(d_un) + 1e-3 + cx = jnp.concatenate([jnp.full((N, 1), -B), -B + jnp.cumsum(widths, -1)], -1) + cy = jnp.concatenate([jnp.full((N, 1), -B), -B + jnp.cumsum(heights, -1)], -1) + + inside = (x > -B) & (x < B) + xc = jnp.clip(x, -B + 1e-6, B - 1e-6) + search = cy if inverse else cx + b = jnp.clip(jnp.sum((xc[:, None] >= search[:, :-1]).astype(jnp.int32), -1) - 1, 0, K - 1) + g = lambda A, i: jnp.take_along_axis(A, i[:, None], 1)[:, 0] + xk, xk1 = g(cx, b), g(cx, b + 1) + yk, yk1 = g(cy, b), g(cy, b + 1) + dk, dk1 = g(derivs, b), g(derivs, b + 1) + s = (yk1 - yk) / (xk1 - xk) + + if not inverse: + xi = (xc - xk) / (xk1 - xk) + num = (yk1 - yk) * (s * xi**2 + dk * xi * (1 - xi)) + den = s + (dk1 + dk - 2 * s) * xi * (1 - xi) + y = yk + num / den + dnum = s**2 * (dk1 * xi**2 + 2 * s * xi * (1 - xi) + dk * (1 - xi) ** 2) + logdet = jnp.log(dnum) - 2 * jnp.log(den) + return jnp.where(inside, y, x), jnp.where(inside, logdet, 0.0) + else: + yrel = xc - yk + a = (yk1 - yk) * (s - dk) + yrel * (dk1 + dk - 2 * s) + bb = (yk1 - yk) * dk - yrel * (dk1 + dk - 2 * s) + cc = -s * yrel + xi = 2 * cc / (-bb - jnp.sqrt(jnp.maximum(bb**2 - 4 * a * cc, 0.0))) + xout = xi * (xk1 - xk) + xk + den = s + (dk1 + dk - 2 * s) * xi * (1 - xi) + dnum = s**2 * (dk1 * xi**2 + 2 * s * xi * (1 - xi) + dk * (1 - xi) ** 2) + logdet = -(jnp.log(dnum) - 2 * jnp.log(den)) + return jnp.where(inside, xout, x), jnp.where(inside, logdet, 0.0) + + +class ConditionalRQS(nnx.Module): + def __init__(self, n_context, *, n_bins=12, width=128, depth=3, B=_B, residual=False, rngs): + self.K = n_bins + self.B = B + self.net = MLP( + n_context, + 3 * n_bins + 1, + width=width, + depth=depth, + residual=residual, + rngs=rngs, + ) + + def _params(self, c): + raw = self.net(c) + return jnp.split(raw, [self.K, 2 * self.K], axis=-1) + + def log_prob(self, y0, c): + w, h, d = self._params(c) + z, logdet = _rqs(y0, w, h, d, self.B, inverse=False) + return -0.5 * (z**2 + jnp.log(2 * jnp.pi)) + logdet + + def quantile(self, c, q): + w, h, d = self._params(c) + z = jax.scipy.stats.norm.ppf(jnp.full(c.shape[0], q)) + y0, _ = _rqs(z, w, h, d, self.B, inverse=True) + return y0 + + +def _rqs_loss(model, X, y0, w): + lp = model.log_prob(y0, X) + return -jnp.sum(w * lp) / jnp.sum(w) + + +# ============================================================================ +# SECTION 5b (EXPERIMENTAL) -> src/estimint/v2/models/flow_matching.py +# ---------------------------------------------------------------------------- +# ConditionalFM — conditional flow matching / rectified flow (Lipman 2023). +# ADDED FOR BENCHMARKING, *NOT* RECOMMENDED AS THE PRIMARY for these maps. Why: +# the target is 1-D, and in 1-D the RQS flow already gives an EXACT, monotone, +# invertible CDF => exact non-crossing quantiles + exact log-prob in one forward +# pass, and fast inference. Flow matching needs an ODE solve to draw samples and +# only gives EMPIRICAL quantiles (noisy, needs many samples, monotonicity not +# guaranteed), with no expressiveness gain in 1-D (a monotone RQS can already be +# multimodal). Expect it to match RQS at best while costing more at inference. +# FM earns its keep on JOINT / high-dim posteriors — not scalar-out maps. +# +# Training (simulation-free): y0~N(0,1), y1=standardized target, t~U(0,1), +# yt = (1-t)*y0 + t*y1, regress velocity v(yt,t,c) -> (y1 - y0). +# Sampling: integrate dy/dt = v(y,t,c) from t=0 (y~N(0,1)) to t=1 (Euler). +# ============================================================================ +class ConditionalFM(nnx.Module): + def __init__(self, n_context, *, width=128, depth=3, residual=False, rngs): + # input = [y_t, t, context] -> scalar velocity + self.net = MLP(2 + n_context, 1, width=width, depth=depth, residual=residual, rngs=rngs) + + def velocity(self, y, t, c): + inp = jnp.concatenate([y[..., None], t[..., None], c], -1) + return self.net(inp)[..., 0] + + +def _fm_batch_loss(model, c, y1, w, key): + k1, k2 = jax.random.split(key) + y0 = jax.random.normal(k1, y1.shape) # base sample + t = jax.random.uniform(k2, y1.shape) # random time + yt = (1 - t) * y0 + t * y1 # linear interpolant path + v = model.velocity(yt, t, c) + return jnp.sum(w * (v - (y1 - y0)) ** 2) / jnp.sum(w) + + +@nnx.jit +def _fm_velocity(model, y, t, c): + return model.velocity(y, t, c) + + +def train_fm_one( + model, + Xtr, + ytr, + wtr, + Xva, + yva, + wva, + *, + epochs, + batch, + lr, + wd, + patience, + warmup_frac=0.05, + seed=0, +): + """Dedicated FM trainer (loss is stochastic per step, so it needs its own + key stream rather than the shared train_model).""" + steps = max(1, len(Xtr) // batch) * epochs + warmup = max(1, int(warmup_frac * steps)) + sched = optax.warmup_cosine_decay_schedule( + init_value=lr * 0.01, + peak_value=lr, + warmup_steps=warmup, + decay_steps=steps, + end_value=lr * 0.02, + ) + opt = nnx.Optimizer(model, optax.adamw(sched, weight_decay=wd), wrt=nnx.Param) + + @nnx.jit + def step(model, opt, xb, yb, wb, key): + loss, grads = nnx.value_and_grad(_fm_batch_loss)(model, xb, yb, wb, key) + opt.update(model, grads) + return loss + + @nnx.jit + def vloss(model, x, y, w, key): # average a few noise draws for a stable metric + ks = jax.random.split(key, 8) + return jnp.mean(jnp.stack([_fm_batch_loss(model, x, y, w, k) for k in ks])) + + Xtr, ytr, wtr = map(jnp.asarray, (Xtr, ytr, wtr)) + Xva, yva, wva = map(jnp.asarray, (Xva, yva, wva)) + rng = np.random.default_rng(seed) + key = jax.random.PRNGKey(seed) + val_key = jax.random.PRNGKey(seed + 999) + best = (np.inf, nnx.state(model)) + bad = 0 + n = len(Xtr) + for _ in range(epochs): + perm = rng.permutation(n) + for i in range(0, n, batch): + idx = perm[i : i + batch] + key, sub = jax.random.split(key) + step(model, opt, Xtr[idx], ytr[idx], wtr[idx], sub) + vl = float(vloss(model, Xva, yva, wva, val_key)) + if vl < best[0] - 1e-5: + best = (vl, nnx.state(model)) + bad = 0 + else: + bad += 1 + if bad >= patience: + break + nnx.update(model, best[1]) + return model + + +# ============================================================================ +# SECTION 6 -> src/estimint/v2/calibration.py (NEW FILE) +# ---------------------------------------------------------------------------- +# FIX 2: QMAP + positive-scale calibrator fit on VAL predictions (same objects +# the XGBoost trainers used). Plus split-conformal offset fit on the CALIB split. +# ============================================================================ +def calibrate_on_val(val_pred_raw, val_obs_raw): + cal = fit_qmap_w(val_pred_raw, val_obs_raw, ngrid=1024, round_digits=8) + a = scale_pos(val_obs_raw, predict_qmap_w(val_pred_raw, cal)) + return { + "kind": "qmap+scale", + "qmap": {"xq": cal["xq"], "yq": cal["yq"]}, + "scale": a, + } + + +def apply_cal(raw, cal): + return np.maximum(0.0, cal["scale"] * predict_qmap_w(raw, cal["qmap"])) + + +def conformal_offset(lo, hi, obs, alpha=0.10): + """Split-conformal (CQR, Romano 2019) width correction on a HELD-OUT split. + + Returns offset Q so that widening to [lo-Q, hi+Q] gives >= (1-alpha) + marginal coverage. Fit this on the CALIB split (disjoint from the val split + used for early stopping) so the guarantee is honest. + """ + scores = np.maximum(lo - obs, obs - hi) + n = len(scores) + k = min(max(int(np.ceil((1 - alpha) * (n + 1))), 1), n) + return float(np.sort(scores)[k - 1]) + + +# ============================================================================ +# SECTION 7 -> src/estimint/v2/train_base.py (EXTENDS existing) +# ---------------------------------------------------------------------------- +# Bundles expose the same natural-scale `.predict(X_raw)` contract as run.py's +# `_predict_direct`, plus `.quantile`/`.interval` for the flow. Trainers use the +# group split (v2/data/preprocess), deep ensembling, val calibration, and a 4-way +# split so conformal coverage is fit on held-out CALIB data. +# ============================================================================ +class UMNNBundle: + def __init__(self, models, scaler, cal, features, mono_idx): + self.models, self.scaler, self.cal = models, scaler, cal + self.features, self.mono_idx = features, mono_idx + + def _mc(self, X_raw): + Xs = self.scaler.transform(np.asarray(X_raw, dtype=np.float64)) + ctx = np.delete(Xs, self.mono_idx, axis=1) + return jnp.asarray(Xs[:, self.mono_idx]), jnp.asarray(ctx) + + def predict(self, X_raw): + m, c = self._mc(X_raw) + log10 = np.mean([np.asarray(mdl(m, c)) for mdl in self.models], 0) + return apply_cal(np.power(10.0, log10), self.cal) + + +class RQSBundle: + def __init__(self, models, scaler, y_mu, y_sd, cal, features): + self.models, self.scaler = models, scaler + self.y_mu, self.y_sd, self.cal, self.features = y_mu, y_sd, cal, features + self.conformal = {} # alpha -> offset Q (fit on CALIB split) + + def _q(self, X_raw, q): + c = jnp.asarray(self.scaler.transform(np.asarray(X_raw, dtype=np.float64))) + y0 = np.mean([np.asarray(m.quantile(c, q)) for m in self.models], 0) + return np.power(10.0, y0 * self.y_sd + self.y_mu) + + def predict(self, X_raw): + return apply_cal(self._q(X_raw, 0.5), self.cal) # calibrated median + + def quantile(self, X_raw, q): + return apply_cal(self._q(X_raw, q), self.cal) # raw calibrated band + + def interval(self, X_raw, alpha=0.10): + """Conformalized (1-alpha) band with guaranteed coverage.""" + lo = self.quantile(X_raw, alpha / 2) + hi = self.quantile(X_raw, 1 - alpha / 2) + Q = self.conformal.get(alpha, 0.0) + return np.maximum(0.0, lo - Q), hi + Q + + +class FMBundle: + """EXPERIMENTAL sample-based bundle (see SECTION 5b). Point estimate is the + sample median; quantiles are empirical order statistics of ODE samples.""" + + def __init__( + self, + models, + scaler, + y_mu, + y_sd, + cal, + features, + *, + n_steps=100, + n_samples=256, + seed=0, + ): + self.models, self.scaler = models, scaler + self.y_mu, self.y_sd, self.cal, self.features = y_mu, y_sd, cal, features + self.n_steps, self.n_samples, self.seed = n_steps, n_samples, seed + self.conformal = {} + + def _samples_natural(self, X_raw): + """Draw ODE samples -> raw (uncalibrated) natural-scale target samples.""" + c = jnp.asarray(self.scaler.transform(np.asarray(X_raw, dtype=np.float64))) + N, ctx = c.shape + dt = 1.0 / self.n_steps + cols = [] + for i, m in enumerate(self.models): + key = jax.random.PRNGKey(self.seed + 1000 + i) + y = jax.random.normal(key, (N, self.n_samples)) # base draws + cE = jnp.broadcast_to(c[:, None, :], (N, self.n_samples, ctx)) + for stp in range(self.n_steps): # Euler ODE solve + t = jnp.full((N, self.n_samples), stp * dt) + y = y + dt * _fm_velocity(m, y, t, cE) + cols.append(np.asarray(y)) + S = np.concatenate(cols, axis=1) # (N, n_samples*ens) + return np.power(10.0, S * self.y_sd + self.y_mu) + + def predict(self, X_raw): + return apply_cal(np.median(self._samples_natural(X_raw), axis=1), self.cal) + + def quantile(self, X_raw, q): + return apply_cal(np.quantile(self._samples_natural(X_raw), q, axis=1), self.cal) + + def interval(self, X_raw, alpha=0.10): + lo = self.quantile(X_raw, alpha / 2) + hi = self.quantile(X_raw, 1 - alpha / 2) + Q = self.conformal.get(alpha, 0.0) + return np.maximum(0.0, lo - Q), hi + Q + + +@dataclass +class SplitArrays: + X: np.ndarray + Xs: np.ndarray + ylog: np.ndarray + w: np.ndarray + + +@dataclass +class PrepSplits: + train: SplitArrays + val: SplitArrays + calib: SplitArrays + test: SplitArrays + scaler: StandardScaler + + +def _records_for_split(df, param_sims, scaler, features, target): + groups = df.groupby(["parameter_index", "simulation_index"]) + records = [] + for ps in sorted(param_sims): + if ps not in groups.groups: + continue + + idx = groups.groups[ps] + X = df.loc[idx, features].to_numpy(dtype=np.float64) + y_raw = df.loc[idx, target].to_numpy(dtype=np.float64) + records.append( + { + "x": scaler.transform(X), + "x_raw": X, + "y": np.log10(y_raw), + "y_raw": y_raw, + "w": df.loc[idx, "_weight"].to_numpy(dtype=np.float64), + "ps": np.asarray(ps, dtype=np.int32), + } + ) + return records + + +def _as_arrays(records, n_features): + if not records: + empty_x = np.empty((0, n_features), dtype=np.float64) + empty_y = np.empty((0,), dtype=np.float64) + return SplitArrays(X=empty_x, Xs=empty_x.copy(), ylog=empty_y, w=empty_y.copy()) + + return SplitArrays( + X=np.concatenate([r["x_raw"] for r in records], axis=0), + Xs=np.concatenate([r["x"] for r in records], axis=0), + ylog=np.concatenate([r["y"] for r in records], axis=0), + w=np.concatenate([r["w"] for r in records], axis=0), + ) + + +def _prep(df, features, target, seed, stratify, calib_frac): + df = df.copy() + if np.any(df[target].to_numpy(dtype=np.float64) <= 0): + raise ValueError(f"target {target!r} must be strictly positive for log10 training") + + df["_ps"] = list(zip(df["parameter_index"], df["simulation_index"])) + df["_weight"] = make_value_weights(df[target].to_numpy(dtype=np.float64), digits=3) + splits = create_splits( + df, + seed=seed, + val_frac=0.10, + test_frac=0.10, + calib_frac=calib_frac, + stratify=stratify, + target=target, + ) + + train_mask = df["_ps"].isin(splits.train) + scaler = StandardScaler().fit(df.loc[train_mask, features].to_numpy(dtype=np.float64)) + n_features = len(features) + + return PrepSplits( + train=_as_arrays(_records_for_split(df, splits.train, scaler, features, target), n_features), + val=_as_arrays(_records_for_split(df, splits.val, scaler, features, target), n_features), + calib=_as_arrays(_records_for_split(df, splits.calib, scaler, features, target), n_features), + test=_as_arrays(_records_for_split(df, splits.test, scaler, features, target), n_features), + scaler=scaler, + ) + + +def train_umnn(df, features, target="eir", *, tier="solid", seed=42, stratify=True): + mono_idx = resolve_mono(features) # FIX 3 + assert mono_idx is not None, "UMNN needs a monotone feature (prev_y9/hbr_y9)" + n_ens, model_kw, train_kw = resolve_tier(tier, "umnn") + prep = _prep(df, features, target, seed, stratify, 0.0) + tr, va = prep.train, prep.val + # arrange columns as [mono, *context] + Xtr = np.column_stack([tr.Xs[:, mono_idx], np.delete(tr.Xs, mono_idx, axis=1)]) + Xva = np.column_stack([va.Xs[:, mono_idx], np.delete(va.Xs, mono_idx, axis=1)]) + + models = [] + for e in range(n_ens): + mdl = MonotoneUMNN(len(features) - 1, rngs=nnx.Rngs(seed + e), **model_kw) + mdl = train_model( + mdl, + _umnn_loss, + Xtr, + tr.ylog, + tr.w, + Xva, + va.ylog, + va.w, + seed=seed + e, + **train_kw, + ) + models.append(mdl) + + bundle = UMNNBundle(models, prep.scaler, None, features, mono_idx) + val_pred = np.mean( + [np.asarray(mm(jnp.asarray(Xva[:, 0]), jnp.asarray(Xva[:, 1:]))) for mm in models], + 0, + ) + bundle.cal = calibrate_on_val( + np.power(10.0, val_pred), # FIX 2 + np.power(10.0, va.ylog), + ) + return bundle, (prep.test.X, np.power(10.0, prep.test.ylog)) + + +def train_rqs(df, features, target="eir", *, tier="solid", seed=42, stratify=True): + n_ens, model_kw, train_kw = resolve_tier(tier, "flow") + # 4-way split so conformal is fit on held-out CALIB data + prep = _prep(df, features, target, seed, stratify, calib_frac=0.10) + tr, va, ca, te = prep.train, prep.val, prep.calib, prep.test + y_mu, y_sd = tr.ylog.mean(), tr.ylog.std() + 1e-8 + + models = [] + for e in range(n_ens): + mdl = ConditionalRQS(len(features), rngs=nnx.Rngs(seed + e), **model_kw) + mdl = train_model( + mdl, + _rqs_loss, + tr.Xs, + (tr.ylog - y_mu) / y_sd, + tr.w, + va.Xs, + (va.ylog - y_mu) / y_sd, + va.w, + seed=seed + e, + **train_kw, + ) + models.append(mdl) + + bundle = RQSBundle(models, prep.scaler, y_mu, y_sd, None, features) + val_med = np.mean([np.asarray(mm.quantile(jnp.asarray(va.Xs), 0.5)) for mm in models], 0) * y_sd + y_mu + bundle.cal = calibrate_on_val( + np.power(10.0, val_med), # FIX 2 + np.power(10.0, va.ylog), + ) + # conformal offset fit on CALIB (disjoint from val) for honest coverage + lo, hi = bundle.quantile(ca.X, 0.05), bundle.quantile(ca.X, 0.95) + bundle.conformal[0.10] = conformal_offset(lo, hi, np.power(10.0, ca.ylog), alpha=0.10) + return bundle, (te.X, np.power(10.0, te.ylog)) + + +def train_fm( + df, + features, + target="eir", + *, + tier="solid", + seed=42, + stratify=True, + n_steps=100, + n_samples=256, +): + """EXPERIMENTAL: conditional flow matching. Same 4-way split + conformal as + train_rqs; point estimate = sample median, quantiles = empirical.""" + n_ens, model_kw, train_kw = resolve_tier(tier, "fm") # width/depth/residual only + prep = _prep(df, features, target, seed, stratify, calib_frac=0.10) + tr, va, ca, te = prep.train, prep.val, prep.calib, prep.test + y_mu, y_sd = tr.ylog.mean(), tr.ylog.std() + 1e-8 + + models = [] + for e in range(n_ens): + mdl = ConditionalFM(len(features), rngs=nnx.Rngs(seed + e), **model_kw) + mdl = train_fm_one( + mdl, + tr.Xs, + (tr.ylog - y_mu) / y_sd, + tr.w, + va.Xs, + (va.ylog - y_mu) / y_sd, + va.w, + seed=seed + e, + **train_kw, + ) + models.append(mdl) + + bundle = FMBundle( + models, + prep.scaler, + y_mu, + y_sd, + None, + features, + n_steps=n_steps, + n_samples=n_samples, + seed=seed, + ) + val_med = np.median(bundle._samples_natural(va.X), axis=1) # raw (pre-cal) + bundle.cal = calibrate_on_val(val_med, np.power(10.0, va.ylog)) + lo, hi = bundle.quantile(ca.X, 0.05), bundle.quantile(ca.X, 0.95) + bundle.conformal[0.10] = conformal_offset(lo, hi, np.power(10.0, ca.ylog), alpha=0.10) + return bundle, (te.X, np.power(10.0, te.ylog)) + + +# ============================================================================ +# SECTION 8 -> smoke test (this file's __main__; not shipped) +# ---------------------------------------------------------------------------- +# Fast CPU sanity check on the 'smoke' tier. For real runs use tier="solid" or +# tier="max" on GPU. Also exercises the residual MLP + warmup path. +# ============================================================================ +if __name__ == "__main__": + TIER = "smoke" # switch to "solid" / "max" on GPU + df = pd.read_parquet("models/prevalence/training.parquet") + feats = [ + "dn0_use", + "Q0", + "phi_bednets", + "seasonal", + "itn_use", + "irs_use", + "prev_y9", + ] + + print("== residual MLP path ==") + rm = MLP(7, 1, width=32, depth=3, residual=True, rngs=nnx.Rngs(0)) + print(" output shape", tuple(rm(jnp.zeros((4, 7))).shape)) + + print("== MonotoneUMNN (prev->EIR) ==") + umnn, (Xte, yte) = train_umnn(df, feats, tier=TIER) + p = umnn.predict(Xte) + base = np.tile(Xte[0], (60, 1)) + base[:, -1] = np.linspace(0.02, 0.8, 60) + print(f" test R2={r2(yte, p):.4f} RMSE={rmse(yte, p):.2f} MAE={mae(yte, p):.2f}") + print(f" monotone in prev_y9: {bool(np.all(np.diff(umnn.predict(base)) >= -1e-6))}") + + print("== ConditionalRQS (prev->EIR) ==") + flow, (Xte2, yte2) = train_rqs(df, feats, tier=TIER) + p2 = flow.predict(Xte2) + lo, hi = flow.quantile(Xte2, 0.05), flow.quantile(Xte2, 0.95) + cov_raw = float(np.mean((yte2 >= lo) & (yte2 <= hi))) + clo, chi = flow.interval(Xte2, alpha=0.10) + cov_conf = float(np.mean((yte2 >= clo) & (yte2 <= chi))) + print(f" test R2={r2(yte2, p2):.4f} RMSE={rmse(yte2, p2):.2f} MAE={mae(yte2, p2):.2f}") + print(f" 90% coverage: raw={cov_raw:.3f} conformalized={cov_conf:.3f}") + + print("== ConditionalFM (EXPERIMENTAL, prev->EIR) ==") + fm, (Xte3, yte3) = train_fm(df, feats, tier=TIER, n_steps=50, n_samples=64) + p3 = fm.predict(Xte3) + clo3, chi3 = fm.interval(Xte3, alpha=0.10) + cov3 = float(np.mean((yte3 >= clo3) & (yte3 <= chi3))) + print(f" test R2={r2(yte3, p3):.4f} RMSE={rmse(yte3, p3):.2f} MAE={mae(yte3, p3):.2f}") + print(f" 90% conformalized coverage={cov3:.3f} (vs RQS above — expect FM ~= RQS at best)") + print("SMOKE_OK") From 19d5e2a8654b8b51fcba510cce39e141bd0eadff Mon Sep 17 00:00:00 2001 From: Anmol Date: Mon, 13 Jul 2026 11:32:15 +0000 Subject: [PATCH 06/32] get working umnn --- .gitignore | 6 + datasets/split.csv | 12492 +++++++++++------------ pyproject.toml | 1 + src/estimint/utils.py | 133 +- src/estimint/v2/conf/train_config.yaml | 22 +- src/estimint/v2/data/features.py | 5 +- src/estimint/v2/data/preprocess.py | 309 +- src/estimint/v2/eval/metrics.py | 40 + src/estimint/v2/models/mlp.py | 27 + src/estimint/v2/models/rqs.py | 3 + src/estimint/v2/models/umnn.py | 70 + src/estimint/v2/train_base.py | 150 +- src/estimint/v2/training/checkpoint.py | 38 - src/estimint/v2/training/train_step.py | 44 + uv.lock | 188 + 15 files changed, 7103 insertions(+), 6425 deletions(-) create mode 100644 src/estimint/v2/eval/metrics.py create mode 100644 src/estimint/v2/models/mlp.py create mode 100644 src/estimint/v2/models/rqs.py create mode 100644 src/estimint/v2/models/umnn.py create mode 100644 src/estimint/v2/training/train_step.py diff --git a/.gitignore b/.gitignore index fcbcbeb..829b01b 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,8 @@ uv.lock # Training outputs output/ scripts/output/ +*logs/ +wandb/ # Model training artifacts (regenerable; shipped copies live in src/estimint/data/) models/**/*.parquet @@ -48,6 +50,7 @@ models/**/*.model models/**/plots/ models/**/metrics/ +split.csv # Test / coverage .coverage @@ -56,3 +59,6 @@ htmlcov/ .pytest_cache/ train_outputs/ outputs/ + +# Miscellaneous +slurm.sh diff --git a/datasets/split.csv b/datasets/split.csv index 40d76b4..370de47 100644 --- a/datasets/split.csv +++ b/datasets/split.csv @@ -1,112 +1,106 @@ parameter_index,simulation_index,split 1128,4,train 2344,2,train +2082,2,train 2519,3,train 1820,2,train +1999,4,train 1603,4,train 1737,4,train 1341,4,train -2295,2,train 1899,2,train 2336,3,train -2732,3,train -1637,2,train +2033,2,train 2508,2,train 2112,2,train 2549,3,train 2945,3,train 1850,2,train -2029,4,train 1767,4,train +2845,1,train 2628,3,train 2325,2,train -2063,2,train +2366,3,train 2500,3,train 3058,1,train +2796,1,train +2713,3,train 2317,3,train -94,2,train +3271,1,train +277,2,train +3009,1,train +3484,1,train +3088,1,train 2826,1,train -3005,3,train -2564,1,train -3046,4,train -11,4,train 3442,4,train 2347,3,train 2784,4,train -2481,3,train 3301,1,train -744,3,train +307,2,train 348,3,train +744,3,train 2643,1,train -3039,1,train 45,2,train 482,3,train 3259,4,train -3655,4,train 2560,3,train +2694,3,train 778,1,train 3514,1,train +3555,2,train +957,3,train +3689,2,train +2856,1,train 299,3,train 2990,1,train 3076,4,train 2773,3,train -2814,4,train 991,1,train -3768,2,train -774,3,train -3506,2,train +595,1,train 3902,2,train +378,3,train +3506,2,train 75,2,train -512,3,train 3289,4,train -3685,4,train 3027,4,train 2765,4,train 1070,1,train 808,1,train -3981,2,train +546,1,train 1028,4,train -3282,1,train 3323,2,train 725,3,train 766,4,train -3061,2,train +3502,4,train 463,3,train 3240,4,train 2844,4,train 2978,4,train +1283,1,train 625,1,train -3536,2,train -3973,3,train +1241,4,train 1375,4,train -979,4,train 3274,2,train -3670,2,train -676,3,train -3453,4,train 3191,4,train 1496,1,train -1275,2,train 972,1,train 576,1,train 1058,4,train -3353,2,train -3749,2,train -359,3,train +1454,4,train 3790,3,train -493,3,train +3487,2,train +1185,1,train 3962,2,train 3566,2,train 4003,3,train -1405,4,train +1009,4,train +3700,2,train 3741,3,train -747,4,train -1567,2,train 1264,1,train +1305,2,train 1701,2,train 1484,4,train 606,1,train -1043,2,train 3820,3,train 826,4,train 3954,3,train @@ -115,329 +109,321 @@ parameter_index,simulation_index,split 1914,2,train 1518,2,train 1652,2,train -819,1,train +1256,2,train +4033,3,train 1435,4,train -3771,3,train 777,4,train +1731,2,train 1335,2,train -1772,3,train 1032,1,train +1073,2,train 1252,4,train +3984,3,train 1944,2,train -1985,3,train 2381,3,train 1723,3,train -4018,1,train -1203,4,train -2198,3,train -1802,3,train -2494,1,train -2411,3,train +1936,3,train +1103,2,train 2452,4,train 1712,2,train 1316,2,train +2149,3,train +1491,3,train 2311,1,train 2445,1,train 2228,3,train -2665,4,train +1966,3,train 2524,1,train +2262,1,train 2699,2,train 2441,3,train 2000,1,train -2179,3,train -1783,3,train -2220,4,train +2482,4,train 2616,4,train +1783,3,train 2737,1,train 2912,2,train +2609,1,train 2213,1,train 2695,4,train -1996,3,train +3091,4,train 2991,2,train 2688,1,train +2292,1,train 3125,2,train 2426,1,train 2030,1,train -293,1,train +2250,4,train 427,1,train -3121,4,train +2639,1,train 2243,1,train 2680,2,train -2463,4,train +3121,4,train 2597,4,train +2201,4,train 244,1,train -3417,2,train 423,3,train 3155,2,train -161,3,train 2456,1,train -2893,2,train -2414,4,train +2280,4,train 719,1,train 457,1,train 61,1,train 591,1,train 3368,2,train -811,4,train -415,4,train +3409,3,train +3106,2,train 2669,1,train 2710,2,train -3106,2,train 2493,4,train 2627,4,train 3705,1,train 670,1,train -3488,3,train 408,1,train -3622,3,train -232,4,train +12,1,train +2923,2,train 2527,2,train -366,4,train 487,1,train 3701,3,train 621,1,train 662,2,train 3398,2,train 3573,3,train +3177,3,train +142,3,train 579,4,train -183,4,train +741,2,train 3869,1,train -875,2,train +438,1,train 479,2,train +875,2,train 4089,4,train 176,1,train -3390,3,train -262,4,train -658,4,train 2953,2,train +3390,3,train 396,4,train 3948,1,train 1350,2,train 4082,1,train 3686,1,train 1088,2,train -255,1,train -3906,4,train 692,2,train 3469,3,train -475,4,train -871,4,train +3865,3,train +389,1,train +3906,4,train 3207,3,train -213,4,train 347,4,train +3765,1,train 1167,2,train 1208,3,train 3899,1,train -468,1,train 509,2,train -905,2,train -3682,3,train -643,2,train -3420,3,train 3816,3,train +3420,3,train +3857,4,train 3554,3,train 560,4,train -1421,3,train 3716,1,train -1118,2,train -722,2,train 1555,3,train 3454,1,train -3936,4,train +856,2,train 4070,4,train 3237,3,train -639,4,train +3633,3,train +3674,4,train 1851,1,train 1238,3,train -1768,3,train +3929,1,train 935,2,train +539,2,train 3667,1,train -3846,3,train +3450,3,train +1668,1,train +1847,3,train 3746,1,train +1148,2,train 1585,3,train +1626,4,train 3704,4,train +3838,4,train 1747,1,train -1664,3,train +1881,1,train +1798,3,train +1839,4,train 1536,3,train +1140,3,train 3917,4,train -4051,4,train 2094,1,train 2135,2,train 1832,1,train 1436,1,train 2052,4,train -1219,3,train -1353,3,train +1656,4,train 2045,1,train 1649,1,train +2131,4,train +2265,4,train 1432,3,train -1869,4,train -1566,3,train 2427,2,train 2124,1,train -1728,1,train 2561,2,train -1862,1,train 2344,4,train +1466,1,train +1600,1,train 1686,4,train +2082,4,train 1820,4,train 2640,2,train -2378,2,train 2075,1,train 1679,1,train 2116,2,train -1813,1,train 1899,4,train -2295,4,train -1637,4,train +2033,4,train 76,1,train +2853,2,train 2591,2,train 2195,2,train +1892,1,train 1933,2,train 2112,4,train 1850,4,train -27,1,train -2408,2,train +2845,3,train 2105,1,train +2146,2,train 2542,2,train 2325,4,train 1884,2,train -2063,4,train 147,2,train 2621,2,train 3058,3,train +2359,2,train 1963,2,train +2796,3,train 2097,2,train -3092,1,train 57,1,train 98,2,train +3271,3,train +277,4,train 2572,2,train 2176,2,train -2613,3,train -573,2,train +3009,3,train +3567,1,train 177,2,train -311,2,train -94,4,train +3305,1,train +3088,3,train 2826,3,train -2564,3,train -786,2,train +3384,1,train 390,2,train -3122,1,train 87,1,train 128,2,train 2860,1,train 3301,3,train -3342,4,train +307,4,train 2602,2,train 2643,3,train -3039,3,train -45,4,train 3080,4,train -603,2,train -644,3,train +45,4,train +3342,4,train 341,2,train 778,3,train +3555,4,train +3689,4,train +2856,3,train 2990,3,train -1074,1,train -3810,1,train -3851,2,train -3548,1,train 3152,1,train 991,3,train -158,2,train +595,3,train 3372,4,train -3768,4,train 3506,4,train +3110,4,train 75,4,train -4064,2,train 1070,3,train +674,3,train +371,2,train 808,3,train -3103,1,train 3499,1,train -3981,4,train -3282,3,train +546,3,train 3323,4,train -3061,4,train 1500,1,train 1104,1,train +1283,3,train 842,1,train 3578,1,train -3619,2,train +4015,2,train 625,3,train 1062,4,train 3753,2,train -322,2,train -3536,4,train -3670,4,train +363,3,train +3140,4,train 3274,4,train +1317,1,train +1055,1,train 3832,2,train -1275,4,train -3570,2,train 3966,2,train +3570,2,train 972,3,train 576,3,train -3353,4,train -3749,4,train +3487,4,train 1571,2,train +1354,4,train 3649,2,train +4045,2,train 1092,4,train -3783,2,train -393,3,train 3566,4,train -1347,1,train 1481,1,train 1085,1,train -1567,4,train 3862,2,train 1701,4,train 823,1,train -3600,2,train +1305,4,train +4037,3,train 606,3,train -1043,4,train 3734,2,train 1560,1,train -1997,2,train -1298,1,train 902,1,train -1735,2,train 1518,4,train -819,3,train +1122,4,train +3813,2,train +1256,4,train 2210,2,train 1814,2,train -1511,1,train 1115,1,train 1552,2,train -1249,1,train +1731,4,train 1335,4,train +4026,2,train 4067,3,train 1032,3,train +1073,4,train +3805,3,train 2027,2,train -1765,2,train 1369,2,train -4018,3,train 2240,2,train +1541,1,train 1978,2,train 2019,3,train 1716,2,train -2494,3,train -1399,2,train -1929,2,train +1103,4,train +1795,2,train +1533,2,train 1316,4,train 2528,1,train 2311,3,train -2445,3,train +2008,2,train 1612,2,train 2049,3,train +2445,3,train 1787,3,train 2607,1,train 3137,1,train 2741,1,train 2524,3,train +2262,3,train 2699,4,train +1959,2,train 2000,3,train -2995,2,train -1,3,train -2296,1,train +2954,1,train 2737,3,train 2778,4,train 2912,4,train @@ -449,10 +435,12 @@ parameter_index,simulation_index,split 2509,1,train 2991,4,train 2688,3,train +2292,3,train 3125,4,train 2426,3,train 2030,3,train -293,3,train +2984,1,train +3025,2,train 3421,2,train 427,3,train 2722,1,train @@ -460,109 +448,104 @@ parameter_index,simulation_index,split 2546,4,train 2243,3,train 2680,4,train +3634,2,train 2801,1,train 3238,2,train 244,3,train -2539,1,train -2935,1,train 2976,2,train 3155,4,train -3417,4,train 2456,3,train -2893,4,train 540,1,train 719,3,train 3451,2,train 3055,2,train 457,3,train 61,3,train -498,4,train 3189,2,train 2576,4,train 3106,4,train 2710,4,train 753,1,train -887,1,train -491,1,train -3268,2,train 3664,2,train +3268,2,train +3705,3,train 670,3,train 2965,1,train -3705,3,train +3006,2,train 408,3,train -2744,2,train +12,3,train +2923,4,train 2527,4,train +966,1,train 570,1,train -308,1,train 3481,2,train 487,3,train +528,4,train 3219,2,train 662,4,train 2957,2,train 783,1,train -521,1,train +917,1,train +958,2,train 655,1,train -3869,3,train 259,1,train +741,4,train 3036,2,train -3473,3,train -875,4,train +438,3,train 479,4,train -3170,2,train +875,4,train +3473,3,train 176,3,train 2953,4,train -734,1,train -338,1,train +3869,3,train 3948,3,train 4082,3,train 558,4,train 3686,3,train 1088,4,train -255,3,train 692,4,train 3383,2,train 1250,2,train 3982,1,train -947,1,train 551,1,train 988,2,train -685,1,train +3765,3,train 1167,4,train 3462,2,train 3503,3,train -468,3,train +3899,3,train 509,4,train -905,4,train 3241,3,train -643,4,train -247,4,train -3899,3,train 764,1,train +805,2,train 1201,2,train -3933,1,train 939,2,train 3716,3,train -722,4,train 3454,3,train +856,4,train 1676,2,train -4012,1,train -1851,3,train +1414,2,train 1018,2,train 1455,3,train -3750,1,train +1851,3,train 1152,2,train 756,2,train +3750,1,train +3929,3,train 935,4,train +539,4,train 3667,3,train 1231,2,train -3963,1,train +1668,3,train +1365,2,train 969,2,train 3746,3,train 3921,4,train 1747,3,train -4042,1,train +1881,3,train 1485,3,train 1182,2,train +1223,3,train 2043,1,train 2177,1,train 1915,1,train @@ -570,178 +553,179 @@ parameter_index,simulation_index,split 2135,4,train 1832,3,train 1436,3,train -2390,1,train 1994,1,train -2128,1,train 1732,1,train -2214,4,train 1515,3,train 1649,3,train +1253,3,train 2207,1,train +2341,1,train 1945,1,train 2427,4,train 2124,3,train -1728,3,train 2561,4,train -1862,3,train +1466,3,train 1903,4,train +1600,3,train +2420,1,train 2158,1,train -1762,1,train 2640,4,train 1896,1,train -2378,4,train +1982,4,train 1679,3,train 2116,4,train 76,3,train 2371,1,train 2412,2,train -2591,4,train +2853,4,train +2109,1,train 2195,4,train +2591,4,train +1892,3,train 1933,4,train -1671,4,train +110,1,train 2887,2,train 2491,2,train -2625,2,train +2188,1,train 1792,1,train -2408,4,train +2625,2,train 2542,4,train +2146,4,train 1884,4,train 189,1,train +323,1,train +2704,2,train 147,4,train -2838,2,train +2401,1,train +2442,2,train 2879,3,train 2621,4,train 2180,2,train +2359,4,train 1963,4,train 2097,4,train 2917,2,train -2655,2,train -3092,3,train 98,4,train +2393,2,train 2572,4,train 2176,4,train 3388,1,train 353,1,train -91,1,train +394,2,train +790,2,train +3567,3,train 177,4,train -573,4,train 2909,3,train -311,4,train -2606,2,train -473,2,train +3305,3,train 3601,1,train +170,1,train 607,2,train +3384,3,train 390,4,train -3122,3,train 128,4,train 2819,2,train 2860,3,train +3680,1,train 686,2,train +820,2,train +861,3,train 3156,1,train -603,4,train +2939,3,train 341,4,train 2677,3,train -4027,1,train +899,2,train 3631,1,train +4027,1,train 637,2,train -1074,3,train -3851,4,train -771,2,train 375,2,train 3152,3,train -3548,3,train -158,4,train -3844,1,train -3448,1,train 3885,2,train -454,2,train 891,3,train -4064,4,train +3582,1,train 588,2,train 192,2,train -3103,3,train +371,4,train 1500,3,train 1104,3,train 3399,1,train -3795,1,train +4015,4,train +405,2,train 842,3,train 3578,3,train -3619,4,train 3753,4,train 3357,4,train -322,4,train +1400,1,train 1138,1,train 3874,1,train -4049,2,train +3915,2,train +1317,3,train +921,3,train 3216,1,train +3612,1,train +618,2,train +1055,3,train 3832,4,train +4049,2,train 3966,4,train 3570,4,train -1613,1,train 1351,1,train 1571,4,train -3429,1,train 3825,1,train -831,2,train +3866,2,train +4045,4,train 3649,4,train -3783,4,train 1826,1,train 1564,1,train -1168,1,train -1347,3,train 4079,2,train 1085,3,train 689,3,train 3862,4,train 823,3,train -3600,4,train 3734,4,train -2039,1,train -1381,1,train +1777,1,train 1560,3,train -1997,4,train -1298,3,train +1119,1,train +3896,2,train 902,3,train -1735,4,train +4030,2,train +3813,4,train 1856,1,train 1594,1,train +1198,1,train 2031,2,train 1332,1,train -1418,4,train 1814,4,train 1115,3,train 1552,4,train -1249,3,train +4026,4,train 2110,2,train 1807,1,train -1411,1,train 1848,2,train 2244,2,train +1545,1,train 2027,4,train -1765,4,train 1369,4,train -1107,4,train -2323,2,train -1927,2,train -1624,1,train +1362,1,train 1978,4,train 1716,4,train 2536,2,train 1878,2,train -2315,3,train -1399,4,train +1575,1,train +1795,4,train +1533,4,train 2528,3,train 2225,2,train -1829,2,train +2008,4,train 1612,4,train +2824,1,train 2607,3,train 2304,2,train +2345,3,train 2741,3,train -2042,2,train +1646,2,train 3037,1,train -2995,4,train +2954,3,train 2255,2,train -2296,3,train 3250,1,train 2854,1,train 3033,3,train @@ -753,74 +737,68 @@ parameter_index,simulation_index,split 3067,1,train 73,2,train 2805,1,train -207,2,train +2984,3,train +3025,4,train 3421,4,train 2722,3,train 3280,1,train -286,2,train +2884,1,train 327,3,train 2622,1,train 24,2,train 2801,3,train 3238,4,train -2539,3,train 2976,4,train -3097,1,train +3493,1,train 540,3,train +2835,1,train 2969,1,train -2573,1,train 3055,4,train 3451,4,train 3189,4,train 836,1,train +970,1,train 574,1,train 753,3,train -3485,2,train 357,3,train 2652,1,train -3048,1,train -2786,1,train -54,2,train +3485,2,train 95,3,train -491,3,train +2786,1,train 3268,4,train -2744,4,train -1049,1,train -787,1,train -3960,2,train +3006,4,train +1183,1,train +966,3,train 570,3,train -308,3,train -2999,1,train +2865,1,train +745,4,train 3481,4,train 3219,4,train 2823,4,train 2957,4,train +1262,1,train +866,1,train 604,1,train 3777,2,train 783,3,train 3515,2,train 3911,2,train -521,3,train +958,4,train 125,3,train 655,3,train 259,3,train 3036,4,train -3170,4,train 1475,1,train 1079,1,train -1213,1,train -4031,3,train -951,1,train -3728,2,train -3769,3,train +3990,2,train +555,1,train 3332,2,train -734,3,train -338,3,train -775,4,train -3070,2,train +3728,2,train 3466,2,train +3070,2,train 1333,2,train 1030,1,train +634,1,train 1467,2,train 1250,4,train 3545,2,train @@ -828,134 +806,137 @@ parameter_index,simulation_index,split 551,3,train 988,4,train 3679,2,train -685,3,train 3462,4,train -1546,2,train 1680,2,train +1284,2,train 981,1,train +585,1,train 1022,2,train 3758,2,train 764,3,train +805,4,train 1201,4,train -3933,3,train 939,4,train 543,4,train 1759,2,train -1497,2,train +1893,2,train 798,1,train -4012,3,train +1235,2,train +1414,4,train 1018,4,train 3750,3,train 1152,4,train 756,4,train 1972,2,train +1710,2,train +1314,2,train 4046,1,train 3829,3,train 1231,4,train -3963,3,train 969,4,train -1527,2,train 1661,2,train -1265,2,train -4042,3,train 1182,4,train -2260,1,train 2043,3,train 2177,3,train +4076,1,train 1478,2,train 1082,2,train 1915,3,train 2211,1,train -2390,3,train 1994,3,train 1691,2,train -1295,2,train 1732,3,train -2128,3,train -2686,1,train 2290,1,train +2424,1,train 2207,3,train -1811,3,train 1945,3,train 2503,1,train 2637,1,train +2420,3,train 1979,1,train -1721,2,train -1762,3,train 2158,3,train +2199,4,train 1896,3,train -2716,1,train -2454,1,train 2412,4,train +1579,3,train +2109,3,train 193,1,train -2929,1,train 2970,2,train -2667,1,train 2271,1,train 2708,2,train +110,3,train 2887,4,train 2491,4,train -2625,4,train +2188,3,train 1792,3,train -1967,4,train -406,1,train +2229,4,train +2625,4,train +10,1,train +2787,2,train +3183,2,train 189,3,train 2484,1,train -2088,1,train 2921,2,train 3317,2,train -2838,4,train +2704,4,train +2442,4,train 2180,4,train 223,1,train +3396,2,train 2697,1,train 2738,2,train -181,4,train -2476,2,train +3175,3,train 2917,4,train -2655,4,train +2476,2,train 2259,4,train +2393,4,train 436,1,train -40,1,train -174,1,train 2951,2,train 3388,3,train -91,3,train -2606,4,train +790,4,train +394,4,train +3085,2,train 3684,1,train +649,1,train 253,1,train -690,2,train 3467,3,train -473,4,train -3205,3,train +3164,2,train +2768,2,train 3601,3,train +170,3,train +211,4,train 607,4,train -2902,2,train 2506,2,train +2902,2,train 466,1,train 70,1,train 903,2,train +3680,3,train +204,1,train 686,4,train 2981,2,train -3377,2,train +820,4,train 3115,2,train -2719,2,train 3156,3,train +3377,2,train +3714,1,train +679,1,train 720,2,train +1116,2,train 417,1,train -3631,3,train +458,2,train +899,4,train +3235,3,train 637,4,train 241,4,train -2932,2,train +3631,3,train 375,4,train -3927,1,train 1329,2,train 3665,1,train -1067,2,train -3844,3,train -3448,3,train 3885,4,train -454,4,train +368,1,train 3145,2,train +3582,3,train 588,4,train 192,4,train 3744,1,train @@ -963,559 +944,571 @@ parameter_index,simulation_index,split 750,2,train 1187,3,train 3964,4,train -488,2,train +884,2,train 3399,3,train +405,4,train 9,4,train +3957,1,train +1400,3,train 1138,3,train 3874,3,train -4049,4,train +3915,4,train +3612,3,train 3216,3,train -1613,3,train -1217,3,train +4049,4,train +618,4,train +3512,1,train 1351,3,train 3646,1,train -3429,3,train +3866,4,train 1826,3,train -1127,2,train -731,2,train -1168,3,train +3725,1,train 1564,3,train +731,2,train 865,2,train -906,3,train 4079,4,train -1860,1,train +1726,1,train +1464,1,train 3938,1,train -944,2,train -1381,3,train -2073,1,train -1677,1,train +1119,3,train +3896,4,train +4030,4,train 1856,3,train -1415,1,train 1594,3,train +1198,3,train 2031,4,train 1332,3,train 936,3,train -2152,1,train 1890,1,train 1494,1,train -1628,1,train +2327,2,train 2110,4,train 2244,4,train -1411,3,train 1848,4,train +1545,3,train 2144,2,train 1841,1,train 1445,1,train -1927,4,train -2323,4,train -1624,3,train +1665,4,train +1362,3,train 2753,2,train 1920,1,train +1658,1,train 1878,4,train -2012,4,train +1575,3,train +55,1,train 2133,1,train 1871,1,train +1912,2,train 2308,2,train 1695,4,train -1829,4,train -1433,4,train 6,1,train 2387,2,train +2824,3,train +2521,2,train +2125,2,train 2304,4,train -2042,4,train +1646,4,train 85,1,train +126,2,train 3037,3,train -2641,3,train +1942,2,train 2076,2,train 339,2,train -3250,3,train +77,2,train 2854,3,train -2155,2,train +3250,3,train 2592,3,train -3150,1,train +2289,2,train 115,1,train 3284,1,train -290,2,train 3067,3,train 2671,3,train 73,4,train 2805,3,train +3363,1,train 765,2,train -503,2,train +369,2,train 3280,3,train -286,4,train +2884,3,train +3321,4,train 2581,2,train 2622,3,train -3059,4,train 24,4,train -3576,1,train 3180,1,train 582,2,train 623,3,train 3314,1,train 320,2,train -3097,3,train +2835,3,train 2969,3,train -2573,3,train 795,2,train 836,3,train 3131,1,train +3527,1,train +533,2,train 137,2,train 574,3,train -3747,4,train -3485,4,train -3048,3,train +970,3,train +2869,1,train +3265,1,train 2652,3,train -54,4,train +3485,4,train +3747,4,train 2786,3,train -1266,1,train -1049,3,train -653,3,train -2948,1,train -3344,1,train -787,3,train -3082,1,train -3478,1,train 3781,2,train -88,2,train -3960,4,train -2999,3,train -3994,2,train +1183,3,train +350,2,train +3478,1,train +2865,3,train +3860,2,train +1262,3,train +866,3,train +3161,1,train 3598,2,train 563,2,train +3777,4,train 604,3,train 1041,4,train 3295,1,train 301,2,train -3515,4,train +342,3,train 3119,4,train -3777,4,train +3336,2,train +3515,4,train 1162,1,train -900,1,train 4073,2,train 1079,3,train -951,3,train +3990,4,train 3728,4,train +555,3,train 3332,4,train 3466,4,train 3070,4,train -1247,1,train +1113,1,train +851,1,train 1333,4,train -3628,2,train 4024,2,train 1030,3,train +634,3,train 1467,4,train +3366,2,train 3545,4,train -1763,2,train +1326,1,train 930,1,train -1546,4,train -3841,2,train +1460,1,train 1064,1,train +3841,2,train 1680,4,train -3975,2,train +1284,4,train +3579,2,train 981,3,train +585,3,train 1022,4,train 3758,4,train -1539,1,train +1976,2,train 1143,1,train 1580,2,train -1976,2,train 1759,4,train -1497,4,train +4054,2,train +1101,4,train 3792,2,train 798,3,train -2189,2,train -1793,2,train -1490,1,train +1235,4,train 1094,1,train 1228,1,train -4005,2,train +1314,4,train +1710,4,train 4046,3,train -1610,2,train 1307,1,train -1348,2,train -1527,4,train -1265,4,train +1744,2,train 869,4,train 2219,2,train 1823,2,train -2260,3,train +1561,2,train +4076,3,train 1478,4,train 1082,4,train -2077,3,train +1774,2,train 2211,3,train -1295,4,train 2507,1,train -2686,3,train 2290,3,train 1987,2,train -2720,1,train +2424,3,train 2503,3,train 2107,3,train 2637,3,train 1804,2,train 1979,3,train +2799,1,train 2933,1,train -2716,3,train +2537,1,train 2275,1,train -2017,2,train -2454,3,train -2495,4,train +1796,3,train +3012,1,train 2750,1,train 193,3,train -2488,1,train 2970,4,train -2667,3,train 2271,3,train 2708,4,train 3400,2,train +2567,1,train 3004,2,train -406,3,train -2701,1,train -2305,1,train +10,3,train +2787,4,train +3183,4,train 2484,3,train -2088,3,train +2525,4,train 2921,4,train 3613,2,train +89,3,train 2780,1,train 3217,2,train 223,3,train -2518,1,train +3396,4,train 2738,4,train 2476,4,train 519,1,train +3296,2,train 257,1,train -3430,2,train +2993,1,train +3034,2,train 436,3,train -40,3,train 477,4,train -2335,1,train -174,3,train -2951,4,train -2772,2,train 2731,1,train +2772,2,train 3168,2,train -732,1,train -470,1,train -3247,2,train +2951,4,train +3430,2,train 3684,3,train 253,3,train -690,4,train +2548,1,train +2944,1,train 2985,2,train +3164,4,train +2768,4,train 3381,2,train 2902,4,train 2506,4,train +683,1,train 287,1,train -3460,2,train +3064,2,train 466,3,train 70,3,train +507,4,train 903,4,train -2761,1,train +204,3,train +2802,2,train 2981,4,train -2719,4,train 896,1,train +500,1,train 3673,2,train +3714,3,train +1116,4,train +238,1,train 720,4,train 417,3,train -2932,4,train +3149,2,train +458,4,train 975,1,train 1016,2,train 713,1,train -3927,3,train -451,1,train -537,4,train +317,1,train +754,2,train +3228,2,train 3665,3,train -3362,2,train +3961,1,train 926,1,train +530,1,train 967,2,train 1363,2,train -3744,3,train 664,1,train 750,4,train 1146,4,train 3441,2,train -488,4,train +884,4,train +3744,3,train 4040,1,train 1442,2,train 1046,2,train 1180,2,train +784,2,train +3957,3,train +1655,2,train 1259,2,train -997,2,train 1434,3,train -3729,1,train 1131,2,train +735,2,train +3512,3,train 3949,4,train 3646,3,train +1210,2,train 814,2,train -3942,1,train +3725,3,train 731,4,train 865,4,train +1943,1,train +1726,3,train 4021,1,train -1860,3,train -1027,2,train -3759,1,train +1464,3,train 1161,2,train -1202,3,train 3938,3,train -944,4,train -2022,1,train 2156,1,train -2073,3,train -1677,3,train -1415,3,train -2152,3,train -1711,1,train +3972,1,train 1890,3,train 1494,3,train 1931,4,train -1628,3,train -4009,4,train +2327,4,train +1232,3,train 2448,1,train -2320,1,train 2144,4,train 1841,3,train 1445,3,train -2399,1,train -2003,1,train -2440,2,train +1741,1,train 2223,4,train 1920,3,train 1961,4,train +1658,3,train +55,3,train 1954,1,train +2391,2,train 1871,3,train +1912,4,train 2308,4,train +2866,2,train 2470,2,train 2167,1,train -1771,1,train 2604,2,train 2387,4,train 1991,4,train +2125,4,train +168,1,train 302,1,train 3079,2,train +2683,2,train +126,4,train 2380,1,train 2421,2,train 2159,2,train +1942,4,train 2076,4,train -381,1,train 339,4,train -2634,2,train +2197,1,train 2238,2,train -2372,2,train -2155,4,train +2634,2,train +77,4,train +2289,4,train 198,1,train 332,1,train -373,2,train 3109,2,train -3150,3,train -2847,2,train -2888,3,train 3284,3,train -290,4,train +2888,3,train 2585,2,train 3446,1,train -3580,1,train +149,1,train 586,2,train +3363,3,train +369,4,train 2664,2,train +2268,2,train +3659,1,train +665,2,train 3397,1,train 362,1,train 799,2,train 3180,3,train -3576,3,train +100,1,train 582,4,train -3314,3,train +2877,2,train 2918,3,train 320,4,train +3314,3,train 2656,3,train -3872,1,train 3476,1,train -878,2,train -3610,1,train 4006,1,train -179,1,train -220,2,train +3610,1,train 616,2,train +220,2,train 3348,1,train 354,2,train 3131,3,train +3527,3,train 137,4,train -4085,1,train -1091,2,train -1266,3,train +2869,3,train +3265,3,train 3561,1,train +130,1,train +171,2,train 567,2,train -3344,3,train -2948,3,train 3385,4,train +350,4,train 3781,4,train -3082,3,train -88,4,train 4036,1,train 3640,1,train +646,2,train +3378,1,train 3774,1,train 780,2,train -3994,4,train +3860,4,train +3161,3,train 3598,4,train +3994,4,train 3295,3,train +3336,4,train 301,4,train 1379,1,train 1162,3,train +3853,1,train 3894,2,train -859,2,train -900,3,train -3195,1,train 3591,1,train +4073,4,train 597,2,train -201,2,train -3415,4,train 3811,4,train -4073,4,train +3415,4,train +1592,1,train 1330,1,train -3804,1,train +1113,3,train 3408,1,train -1247,3,train +3804,1,train +3845,2,train +851,3,train 4024,4,train -3628,4,train -1805,1,train -1409,1,train -1543,1,train -1763,4,train +3366,4,train +1326,3,train 930,3,train -4058,2,train 627,2,train -668,3,train 1064,3,train 3841,4,train -3975,4,train +3579,4,train 1622,1,train -1360,1,train -1539,3,train +1976,4,train 1143,3,train 1580,4,train -1976,4,train +4054,4,train 3792,4,train -1876,2,train -1793,4,train +1835,1,train 915,1,train 1397,4,train 4088,2,train 1094,3,train -4005,4,train +698,3,train 2089,2,train -1786,1,train 1827,2,train 1524,1,train 1128,1,train -1610,4,train +3905,2,train 1307,3,train -1348,4,train -1086,4,train +1744,4,train 2302,2,train 1906,2,train 1603,1,train 1207,1,train +2040,2,train 1341,1,train 1823,4,train -2253,2,train +1561,4,train +2515,2,train +2119,2,train 2294,3,train +1774,4,train +2332,2,train +2070,2,train 2507,3,train -1674,2,train +2204,2,train 1808,2,train -2283,2,train 1887,2,train -2324,3,train -2720,3,train 2021,2,train 1625,2,train 1804,4,train 22,2,train +2799,3,train 2933,3,train +2100,2,train +2537,3,train +1838,2,train 2275,3,train +101,2,train 235,2,train -2313,2,train -2354,3,train +3012,3,train 2750,3,train 2051,2,train -2488,3,train +2092,3,train 314,2,train -3046,1,train 3442,1,train 2784,1,train -186,2,train 3400,4,train +2567,3,train 3004,4,train 2264,2,train -2305,3,train -2701,3,train 3259,1,train 2863,1,train 3300,2,train -306,3,train +2601,1,train 3083,4,train 2780,3,train 3217,4,train -2518,3,train 2122,3,train 3076,1,train 3513,2,train 82,2,train +3296,4,train 519,3,train -2814,1,train -216,2,train 257,3,train -2552,1,train +2993,3,train +3034,4,train 3430,4,train 2731,3,train -2335,3,train 2772,4,train 3168,4,train -553,1,train 3289,1,train -3330,2,train +3726,2,train 295,2,train -732,3,train -2631,1,train 3027,1,train -470,3,train +3464,2,train +33,2,train +74,3,train 2765,1,train -2851,4,train -3247,4,train 3381,4,train +2548,3,train 2985,4,train -3464,2,train 1028,1,train 766,1,train 3543,2,train 3939,2,train 3240,1,train 2844,1,train +683,3,train 287,3,train 2978,1,train -3460,4,train -2761,3,train -845,1,train -979,1,train +3064,4,train +2802,4,train +1241,1,train 803,4,train 3494,2,train -104,3,train +500,3,train +238,3,train +3149,4,train 1058,1,train 975,3,train 534,1,train 1016,4,train 3311,2,train 713,3,train -3707,2,train +317,3,train +754,4,train 3049,2,train -3748,3,train -451,3,train -1446,2,train -747,1,train +3445,2,train +3228,4,train +3707,2,train +1009,1,train +613,1,train +833,4,train +3961,3,train 1363,4,train +530,3,train 967,4,train -134,3,train -3262,2,train 3658,2,train 3441,4,train -1659,2,train 826,1,train 1263,2,train 4040,3,train @@ -1524,124 +1517,114 @@ parameter_index,simulation_index,split 1046,4,train 1442,4,train 1180,4,train +784,4,train 3778,3,train +522,4,train 1738,2,train 1342,2,train 1476,2,train 777,1,train 1259,4,train -997,4,train 3688,2,train -3729,3,train 1131,4,train +735,4,train 1951,2,train 1252,1,train +1293,2,train 1689,2,train 4025,1,train +1427,2,train +1210,4,train 814,4,train -3942,3,train 1506,2,train +1943,3,train 1640,2,train 1244,2,train 4021,3,train -1027,4,train -3759,3,train 1161,4,train -2022,3,train -2156,3,train +1719,2,train 1323,2,train +2156,3,train 4055,1,train +1457,2,train +1061,2,train +3972,3,train 2452,1,train 1670,2,train -1711,3,train -2665,1,train 2448,3,train 2007,1,train 1487,2,train -1528,3,train +2482,1,train 2616,1,train -2220,1,train -2399,3,train -2003,3,train -2440,4,train +1700,2,train +1741,3,train 2695,1,train +2299,1,train 2736,2,train -2037,1,train 1954,3,train 1558,3,train -2949,2,train -2687,2,train +2391,4,train +2250,1,train +2866,4,train +1988,1,train 2470,4,train 2167,3,train -1771,3,train 2604,4,train -2766,2,train -2463,1,train +168,3,train +2900,2,train +2201,1,train 2287,4,train +2683,4,train 2421,4,train 2159,4,train 3375,2,train -381,3,train 3113,2,train -2414,1,train -2455,2,train -2634,4,train +2280,1,train +2197,3,train 2238,4,train -2372,4,train +2634,4,train 281,1,train -415,1,train -3192,2,train 198,3,train 239,4,train 2493,1,train -3326,2,train -373,4,train +2930,2,train 2668,2,train -2847,4,train 2585,4,train -232,1,train 669,2,train +3405,2,train 3446,3,train -366,1,train 3143,2,train -3580,3,train +149,3,train 586,4,train -2485,2,train 2664,4,train -882,2,train -49,1,train -183,1,train +2268,4,train +3659,3,train +665,4,train 269,4,train 2960,2,train 799,4,train -3094,2,train -2698,2,train 3397,3,train +2698,2,train +2877,4,train 4089,1,train -658,1,train -3872,3,train -262,1,train -699,2,train 1095,2,train +699,2,train +3476,3,train 396,1,train -437,2,train -878,4,train +3173,2,train 3610,3,train -179,3,train -220,4,train 616,4,train +220,4,train 2911,2,train -354,4,train 3348,3,train +354,4,train 3906,1,train -475,1,train 912,2,train -4085,3,train -213,1,train -650,2,train 347,1,train +3124,2,train 3561,3,train 567,4,train +171,4,train 3723,1,train 729,2,train 1166,3,train @@ -1650,93 +1633,96 @@ parameter_index,simulation_index,split 467,2,train 3244,3,train 3640,3,train -3936,1,train +646,4,train +3378,3,train +3857,1,train +942,2,train 1379,3,train -4070,1,train +3674,1,train +1076,2,train +3853,3,train 3894,4,train +4070,1,train 3591,3,train -3195,3,train 3632,4,train 597,4,train -201,4,train -1196,3,train +1155,2,train +1592,3,train +3491,1,train 893,2,train 497,2,train 1330,3,train 3408,3,train -1805,3,train -1409,3,train +3845,4,train +1626,1,train 3704,1,train -1543,3,train 710,2,train +3838,1,train 844,2,train -4058,4,train +3662,4,train 627,4,train -1705,1,train -1443,1,train +1839,1,train 1622,3,train 1226,3,train 3917,1,train 923,2,train 964,3,train -1360,3,train 2052,1,train -1876,4,train +1656,1,train +1835,3,train 3909,2,train 915,3,train 4088,4,train -1869,1,train +2131,1,train 1473,1,train 2089,4,train 1827,4,train 1524,3,train 1128,3,train +3905,4,train 2344,1,train -2519,2,train +2082,1,train 1686,1,train +2519,2,train 1820,1,train +1424,1,train 1906,4,train 2302,4,train 1603,3,train 1207,3,train -1644,4,train +2040,4,train 1341,3,train 2202,2,train -2732,2,train 1899,1,train 1503,1,train 2336,2,train -1637,1,train -2253,4,train -2415,2,train +2119,4,train 2112,1,train -2153,2,train 2549,2,train 2590,3,train 1850,1,train 1891,2,train -1674,4,train +2332,4,train +2070,4,train 1808,4,train -1412,4,train 2628,2,train +2366,2,train 2500,2,train 2104,2,train -2283,4,train 1887,4,train 2021,4,train 1625,4,train 22,4,train 2317,2,train 1921,2,train +2100,4,train +1838,4,train +101,4,train 235,4,train -2134,2,train -2313,4,train 2051,4,train 3129,1,train -94,1,train 2867,1,train 314,4,train -3046,3,train 2650,3,train 2347,2,train 2784,3,train @@ -1744,489 +1730,487 @@ parameter_index,simulation_index,split 348,2,train 3080,1,train 482,2,train -86,2,train -2863,3,train 3259,3,train +2863,3,train 3300,4,train 2560,2,train +2601,3,train +3555,1,train 2897,1,train 299,2,train 3076,3,train 3513,4,train 82,4,train -2814,3,train -2552,3,train -3768,1,train 3372,1,train +378,2,train +3110,1,train 3506,1,train -512,2,train 3726,4,train -553,3,train 2848,1,train 3289,3,train 295,4,train 3027,3,train -2631,3,train -3068,4,train -2765,3,train -3330,4,train 3464,4,train -849,1,train +33,4,train +2765,3,train 1028,3,train 632,3,train 2927,1,train 3323,1,train 766,3,train -3061,1,train 3543,4,train 3939,4,train 2844,3,train 2978,3,train 1062,1,train -3839,2,train -845,3,train -3536,1,train -3973,2,train -979,3,train +1241,3,train +3140,1,train +3577,2,train 146,2,train 3274,1,train +321,3,train +3098,4,train 3494,4,train -2836,4,train -1275,1,train 3656,2,train 1058,3,train -3353,1,train 3790,2,train -359,2,train 3528,2,train 534,3,train 3311,4,train 3707,4,train +3445,4,train 3049,4,train +1354,1,train 1092,1,train 4003,2,train 3566,1,train -3607,2,train -1446,4,train +4044,3,train +1009,3,train +613,3,train +1050,4,train 3741,2,train -747,3,train 3128,4,train -3262,4,train -1567,1,train +1305,1,train 909,1,train -1043,1,train 3820,2,train -1659,4,train 826,3,train +430,3,train 1263,4,train -3558,2,train 960,3,train 564,3,train +3558,2,train 3954,2,train 1518,1,train -1738,4,train +1122,1,train +1256,1,train 1342,4,train -4074,3,train +1738,4,train +3637,2,train 1476,4,train -1080,4,train -3771,2,train +4033,2,train +4074,3,train 777,3,train -1638,2,train +818,4,train 1335,1,train -1772,2,train +1073,1,train 1689,4,train +1293,4,train +3984,2,train 4025,3,train -1985,2,train +1427,4,train 1723,2,train 890,1,train -1327,2,train 1506,4,train +1110,4,train 1244,4,train -2198,2,train -1802,2,train +1936,2,train +1103,1,train +1719,4,train 1323,4,train 4055,3,train +1457,4,train +1061,4,train 2452,3,train +2056,3,train 1316,1,train -2665,3,train +1491,2,train +1966,2,train 2007,3,train 1487,4,train 2699,1,train +2482,3,train 2086,3,train 1783,2,train -2220,3,train +1387,2,train 2778,1,train 2912,1,train +2516,1,train 2695,3,train +2299,3,train 2736,4,train -1996,2,train -2037,3,train -2474,4,train 2991,1,train 2595,1,train -2949,4,train -2687,4,train +2250,3,train +1988,3,train 2808,1,train 2546,1,train 2983,2,train 2680,1,train 2284,1,train -2766,4,train -2463,3,train -3196,2,train +2900,4,train +2201,3,train +285,1,train +68,3,train 2363,1,train -2893,1,train +3196,2,train 3375,4,train 3113,4,train -2414,3,train -2455,4,train -498,1,train +2280,3,train 281,3,train 2576,1,train 3013,2,train -415,3,train +3409,2,train 2710,1,train 2314,1,train 2751,2,train -3192,4,train 2493,3,train +2534,4,train +2930,4,train 2668,4,train -3488,2,train -3622,2,train +577,1,train 3226,2,train -232,3,train 669,4,train 2527,1,train -366,3,train +2923,1,train +2964,2,train 3143,4,train -2485,4,train +528,1,train 3701,2,train 662,1,train 3043,2,train -882,4,train -49,3,train +3177,2,train 2781,2,train -183,3,train 2960,4,train 2698,4,train +741,1,train +345,1,train 875,1,train 479,1,train 4089,3,train 1095,4,train -262,3,train 699,4,train 3390,2,train 396,3,train -437,4,train +3173,4,train 2911,4,train 3989,1,train 558,1,train 995,2,train 3772,3,train 692,1,train +296,1,train 733,2,train 3469,2,train -3906,3,train -475,3,train +912,4,train 34,1,train 516,4,train -912,4,train -213,3,train -650,4,train 2811,2,train 3207,2,train +3906,3,train 1208,2,train -3940,1,train 509,1,train 946,2,train -3682,2,train -643,1,train -247,1,train +3723,3,train 729,4,train 3420,2,train +3461,3,train 863,4,train 467,4,train -3461,3,train -3723,3,train +3857,3,train 4019,1,train -1421,2,train -722,1,train 763,2,train 3540,3,train -3936,3,train -4070,3,train +942,4,train 3237,2,train +3674,3,train +4070,3,train 284,4,train 1238,2,train 3970,1,train -976,2,train +539,1,train +1155,4,train 714,2,train -3928,4,train +3450,2,train +3491,3,train 893,4,train 497,4,train +1626,3,train 793,2,train 3921,1,train 3704,3,train 710,4,train +3838,3,train 844,4,train 1922,1,train -1664,2,train -1705,3,train 4000,1,train -1443,3,train +1839,3,train +1006,2,train 3738,1,train +1140,2,train 3917,3,train 3958,4,train 923,4,train 2135,1,train -1522,3,train 3817,1,train 2052,3,train -1219,2,train +1656,3,train 3909,4,train -2214,1,train -1952,1,train +2131,3,train 1690,1,train 1432,2,train 1473,3,train -1869,3,train +1910,4,train 1211,3,train -3988,4,train 2427,1,train 1769,1,train 1903,1,train 2519,4,train 1686,3,train 1820,3,train +1424,3,train 2640,1,train -2378,1,train +1982,1,train +2419,2,train 2116,1,train 2202,4,train 1899,3,train 1503,3,train 1940,4,train 2336,4,train -1637,3,train 2195,1,train 1933,1,train -2415,4,train 2549,4,train -1671,1,train -2153,4,train 1850,3,train 1891,4,train -2408,1,train -2449,2,train +2845,2,train +2146,1,train 2628,4,train 1884,1,train 1970,4,train +2366,4,train 2104,4,train 147,1,train 3058,2,train +2359,1,train 1963,1,train 2400,2,train +2796,2,train 2097,1,train -2183,4,train 2317,4,train 1921,4,train 98,1,train 2479,2,train 2176,1,train -2613,2,train -2134,4,train 177,1,train -311,1,train +3088,2,train 3129,3,train 2826,2,train 2867,3,train -2564,2,train 2347,4,train 390,1,train +431,2,train 128,1,train 169,2,train 3342,3,train 348,4,train 2643,2,train +2247,2,train 3080,3,train -86,4,train -644,2,train +3376,1,train 778,2,train 382,2,train +3555,3,train +2856,2,train +2460,2,train 2897,3,train 299,4,train -3851,1,train +2635,3,train 3455,1,train -158,1,train +595,2,train 3372,3,train +378,4,train +3110,3,train 3506,3,train 2848,3,train -4064,1,train 1070,2,train +674,2,train 3843,2,train -3406,1,train 808,2,train -849,3,train -3626,4,train -3323,3,train +412,2,train +546,2,train +150,2,train 2927,3,train -3364,4,train -3061,3,train -3619,1,train +3323,3,train 625,2,train 1062,3,train 3357,1,train 3753,1,train -3536,3,train -3839,4,train -3973,4,train +363,2,train +3140,3,train +3577,4,train 146,4,train 3274,3,train 3832,1,train 3436,1,train 3873,2,train -1275,3,train 442,2,train 3174,1,train 3570,1,train 576,2,train 180,2,train -3353,3,train 3394,4,train -359,4,train -3528,4,train 3656,4,train 3790,4,train +3528,4,train 1571,1,train +1354,3,train 3649,1,train +4086,2,train 1092,3,train -3783,1,train -393,2,train -3607,4,train 4003,4,train 3741,4,train -1567,3,train 1126,1,train 3862,1,train -3903,2,train +1305,3,train 909,3,train -3600,1,train +3641,2,train +4037,2,train 606,2,train 647,3,train -1043,3,train 3820,4,train 3558,4,train -1735,1,train +1122,3,train +3813,1,train 3854,2,train -3771,4,train +1256,3,train +4033,4,train +3637,4,train 1814,1,train -1418,1,train +1855,2,train 1552,1,train -1638,4,train +1156,1,train 1335,3,train -1772,4,train -3671,2,train +894,1,train 4067,2,train +1073,3,train 677,3,train +3805,2,train 2068,2,train -1765,1,train 1369,1,train -1985,4,train -1107,1,train +1806,2,train 1723,4,train 890,3,train -1327,4,train -4018,2,train 1885,2,train 2019,2,train -1186,1,train -1802,4,train -2494,2,train +1623,2,train +1406,4,train +1103,3,train 2098,2,train -1399,1,train +1795,1,train 1836,2,train +1533,1,train 1316,3,train +1491,4,train 2311,2,train 1612,1,train -1653,2,train 2049,2,train 1787,2,train -1174,4,train 2524,2,train +2262,2,train +2303,3,train 2699,3,train -1866,2,train 2000,2,train -1604,2,train 1783,4,train -2995,1,train -1,2,train +1387,4,train 2778,3,train 2912,3,train +2516,3,train 1683,2,train 2213,2,train 1817,2,train 80,2,train -2812,1,train 3208,1,train 2991,3,train 2595,3,train +2292,2,train 2770,4,train 2030,2,train 2071,3,train -293,2,train 3421,1,train +3025,1,train 2808,3,train 2546,3,train 2983,4,train 2680,3,train 2284,3,train 3238,1,train -2842,1,train 244,2,train -2976,1,train +285,3,train 2580,1,train +2976,1,train 3196,4,train 2363,3,train +2800,4,train +2101,3,train 3055,1,train -3492,2,train 61,2,train -498,3,train 3189,1,train +3409,4,train 2576,3,train 3013,4,train 2710,3,train 2314,3,train 2751,4,train 3705,2,train +577,3,train +2872,1,train 3268,1,train -3309,2,train -3488,4,train -2744,1,train +3006,1,train +12,2,train +53,3,train 2830,4,train 3226,4,train 2527,3,train -3522,2,train -3219,1,train +2964,4,train +745,1,train +528,3,train 2823,1,train -3260,2,train +3219,1,train 662,3,train 2957,1,train 3043,4,train +3260,2,train 3701,4,train +3177,4,train 2781,4,train -824,1,train +958,1,train +3339,2,train +741,3,train +345,3,train +782,4,train 3036,1,train -3473,2,train 479,3,train 83,3,train -775,1,train -3552,2,train +3473,2,train 3948,2,train +3552,2,train 3989,3,train 3686,2,train 558,3,train 995,4,train 3290,2,train 692,3,train +296,3,train 733,4,train 3028,2,train 3469,4,train @@ -2234,73 +2218,76 @@ parameter_index,simulation_index,split 2811,4,train 3207,4,train 1250,1,train -854,1,train 988,1,train 592,1,train +3765,2,train 1208,4,train 330,1,train -812,4,train 3503,2,train 509,3,train 946,4,train 3241,2,train -3940,3,train -247,3,train 1201,1,train +805,1,train 1242,2,train 4019,3,train 939,1,train 543,1,train -1421,4,train -3320,2,train -722,3,train +3716,2,train +3757,3,train 763,4,train 3454,2,train -3716,2,train 3237,4,train +1321,2,train 1018,1,train -622,1,train 1059,2,train 1455,2,train 756,1,train 1238,4,train 3970,3,train -976,4,train +539,3,train 3667,2,train 714,4,train 1534,2,train 1231,1,train +1272,2,train +1668,2,train 4004,1,train 969,1,train 1010,2,train 3746,2,train -3787,3,train 793,4,train 3921,3,train 531,4,train 1747,2,train 1485,2,train +1089,2,train 1922,3,train +1223,2,train 4000,3,train +1006,4,train 3738,3,train +1140,4,train 2135,3,train 1302,2,train 1739,3,train 1436,2,train 1040,2,train 3817,3,train -1219,4,train -2214,3,train 1515,2,train -1952,3,train 1649,2,train +1253,2,train 1690,3,train 2248,1,train 2427,3,train -1728,2,train +1986,1,train 1769,3,train +1466,2,train +1507,3,train 1903,3,train -2378,3,train +2199,1,train +1982,3,train +2419,4,train 2116,3,train 2278,1,train 2412,1,train @@ -2308,87 +2295,94 @@ parameter_index,simulation_index,split 2195,3,train 2236,4,train 1933,3,train -1537,3,train -1671,3,train 2491,1,train 2625,1,train -2408,3,train -1967,1,train -2449,4,train +2229,1,train +2845,4,train +2146,3,train 1884,3,train +2704,1,train 2745,2,train 147,3,train +2442,1,train 2879,2,train -2046,1,train 2180,1,train +2796,4,train 1963,3,train 2400,4,train -181,1,train -2655,1,train +2958,2,train 2259,1,train -3092,2,train 98,3,train +2393,1,train 2479,4,train 2176,3,train -2613,4,train 1955,4,train -260,1,train +394,1,train +2775,2,train 177,3,train 2909,2,train 2826,4,train -2564,4,train -473,1,train 607,1,train +211,1,train +3384,2,train 390,3,train -3122,2,train +431,4,train 2726,2,train +3163,3,train 128,3,train 169,4,train 2464,2,train 2860,2,train 2643,4,train +2247,4,train 686,1,train -644,4,train +861,2,train +248,4,train 2543,2,train 778,4,train 382,4,train 2677,2,train +2939,2,train +3376,3,train +2460,4,train 3672,1,train 637,1,train 241,1,train -1074,2,train 3455,3,train 375,1,train 3152,2,train 2756,2,train 3193,3,train -158,3,train -3851,3,train +595,4,train +2931,3,train +3751,1,train 757,2,train 3885,1,train -454,1,train 891,2,train +495,2,train 192,1,train -3406,3,train +674,4,train 3843,4,train -3103,2,train +412,4,train +546,4,train +150,4,train 3964,1,train -3702,1,train 1104,2,train 708,2,train 3922,4,train 1145,3,train -842,2,train +405,1,train 9,1,train 446,2,train -3223,3,train +842,2,train 625,4,train +3223,3,train 3357,3,train -2961,3,train -3440,1,train -3619,3,train +363,4,train +3915,1,train +921,2,train 4049,1,train -525,2,train +1055,2,train 3832,3,train 3436,3,train 3873,4,train @@ -2399,76 +2393,72 @@ parameter_index,simulation_index,split 180,4,train 1571,3,train 738,2,train -3470,1,train -476,2,train -913,3,train +1175,3,train +3866,1,train +3952,4,train 3649,3,train -393,4,train +4086,4,train 4079,1,train 1085,2,train 689,2,train 1126,3,train 3862,3,train 823,2,train -3600,3,train -3903,4,train +4037,4,train +3641,4,train 606,4,train -1422,1,train +1684,1,train +1205,3,train +3896,1,train 902,2,train 943,3,train 3720,4,train 3854,4,train 2031,1,train 1814,3,train -1418,3,train +1855,4,train 1552,3,train +1156,3,train 3888,2,train +894,3,train 4067,4,train -3671,4,train +3805,4,train 2110,1,train 1714,1,train 1848,1,train +1452,1,train 2068,4,train 1369,3,train -1107,3,train -4018,4,train -1927,1,train -2102,2,train -1403,1,train +973,3,train +1806,4,train +1665,1,train 1885,4,train 2019,4,train -1186,3,train +1623,4,train 2181,2,train 1878,1,train -2315,2,train +1482,1,train 2098,4,train 1220,1,train -1702,4,train -1399,3,train 1836,4,train 2528,2,train 1695,1,train -2132,2,train -1829,1,train -1433,1,train -1870,2,train 2311,4,train +1870,2,train 1612,3,train -1653,4,train 2049,4,train 1787,4,train +1391,4,train 2607,2,train -1866,4,train +2345,2,train +1646,1,train +2083,2,train +2262,4,train 2000,4,train -1604,4,train -2995,3,train -1,4,train -2296,2,train 1683,4,train 1817,4,train 80,4,train 2375,2,train -2812,3,train 3208,3,train 2509,2,train 2113,2,train @@ -2476,53 +2466,46 @@ parameter_index,simulation_index,split 3108,1,train 73,1,train 114,2,train -293,4,train +3025,3,train 2629,3,train 2367,3,train 3187,1,train +3321,1,train 327,2,train -3059,1,train 65,2,train -2842,3,train 3238,3,train -2539,2,train -2580,3,train 2976,3,train +2580,3,train 3138,1,train 540,2,train 144,2,train -2876,1,train 3055,3,train 2659,3,train -3492,4,train 61,4,train 2397,3,train 3747,1,train 357,2,train 3485,1,train -491,2,train 95,2,train +2872,3,train 3268,3,train -3309,4,train 3705,4,train -3047,4,train -2744,3,train +3006,3,train +12,4,train 2906,1,train -308,2,train +745,3,train 349,3,train -3522,4,train 2823,3,train 3260,4,train 2957,3,train 1041,1,train 3777,1,train -824,3,train -3119,1,train 3515,1,train -521,2,train +3119,1,train +958,3,train 125,2,train 2857,1,train -3556,2,train +3339,4,train 259,2,train 3036,3,train 3077,4,train @@ -2530,11 +2513,9 @@ parameter_index,simulation_index,split 2815,4,train 1120,1,train 858,1,train -4031,2,train -3769,2,train 3332,1,train -338,2,train -775,3,train +2936,1,train +379,3,train 3070,1,train 3552,4,train 3686,4,train @@ -2543,55 +2524,58 @@ parameter_index,simulation_index,split 1333,1,train 1467,1,train 1250,3,train -854,3,train 3545,1,train +4023,3,train 3586,2,train 551,2,train 592,3,train 988,3,train 3324,2,train -3982,2,train +3765,4,train 330,3,train 3503,4,train 3241,4,train -1546,1,train +1284,1,train 888,1,train 1022,1,train -1242,4,train +1108,4,train +805,3,train 409,3,train -3933,2,train +1242,4,train 939,3,train 543,3,train -3320,4,train 3716,4,train 3537,2,train 3454,4,train 1759,1,train -1497,1,train -4012,2,train +1101,1,train +1538,2,train +1235,1,train +839,1,train +1321,4,train 3616,2,train 1018,3,train -622,3,train +3750,2,train 1059,4,train 1455,4,train 756,3,train -3750,2,train -918,1,train +1617,2,train +1314,1,train 1534,4,train 656,1,train 3829,2,train -3963,2,train +1668,4,train +1272,4,train 4004,3,train 1010,4,train 3746,4,train 1830,2,train -1527,1,train 1568,2,train -1265,1,train -869,1,train 1747,4,train -4042,2,train +869,1,train 1485,4,train +1089,4,train +1223,4,train 2043,2,train 1915,2,train 1082,1,train @@ -2601,179 +2585,181 @@ parameter_index,simulation_index,split 1040,4,train 1994,2,train 1598,2,train -1295,1,train -1336,2,train 1732,2,train +1336,2,train 1515,4,train -1811,2,train +1253,4,train 2248,3,train 1945,2,train -1549,2,train +1986,3,train +1466,4,train 2065,3,train -1762,2,train -2495,1,train +2199,3,train 2278,3,train 2412,3,train +1579,2,train 2016,3,train 2970,1,train 2574,1,train 2708,1,train -2312,1,train 2491,3,train 1792,2,train -1833,3,train -1967,3,train +2229,3,train +3183,1,train +2787,1,train 2921,1,train +2525,1,train +2704,3,train 2263,1,train 2745,4,train +2442,3,train 2879,4,train -2046,3,train 2180,3,train 264,1,train 47,3,train 2738,1,train -181,3,train +3175,2,train 2476,1,train -3092,4,train +2958,4,train 2259,3,train +1863,3,train +2393,3,train 477,1,train -260,3,train 2951,1,train 3388,2,train +394,3,train 2293,1,train +2775,4,train 2909,4,train 2513,4,train -690,1,train 3467,2,train -473,3,train -3205,2,train 3601,2,train +2768,1,train +211,3,train 2506,1,train -3122,4,train 2726,4,train 2860,4,train 2464,4,train 903,1,train +507,1,train +3680,2,train 686,3,train 2981,1,train 3022,2,train -2719,1,train -2760,2,train +3459,3,train +861,4,train 3156,2,train +2760,2,train +2939,4,train 2543,4,train 2677,4,train 720,1,train -324,1,train +458,1,train +3235,2,train 3631,2,train 3672,3,train -1074,4,train 241,3,train 375,3,train 3152,4,train 2756,4,train 3968,1,train -537,1,train -275,1,train +3751,3,train 757,4,train -3448,2,train -454,3,train +3052,2,train +3489,3,train 891,4,train -2790,2,train +495,4,train 3885,3,train 192,3,train +233,4,train 750,1,train 1187,2,train 3964,3,train -488,1,train -3702,3,train 1104,4,train 708,4,train -3440,3,train 3003,2,train 3399,2,train 842,4,train 9,3,train 446,4,train +1400,2,train 1004,2,train 3736,1,train 1138,2,train 742,2,train -525,4,train +3915,3,train +921,4,train 3216,2,train 263,4,train -1217,2,train 3949,1,train 1351,2,train 955,2,train 738,4,train -3429,2,train -3470,3,train -476,4,train +3866,3,train 4028,1,train -1034,2,train 1471,3,train 3766,1,train 731,1,train 772,2,train -1168,2,train -906,2,train -510,2,train 689,4,train -1381,2,train -1422,3,train +1684,3,train 3717,1,train +1119,2,train 723,2,train -3937,4,train +3896,3,train 902,4,train 1718,1,train 1501,3,train 3796,1,train +1198,2,train +802,2,train 936,2,train 3888,4,train +2327,1,train 1931,1,train 2110,3,train 1714,3,train -4009,1,train -1411,2,train 1848,3,train +1452,3,train +1889,4,train 1190,3,train 3967,4,train 2144,1,train -1748,1,train -1927,3,train -2102,4,train +1665,3,train 1269,3,train -1403,3,train 2223,1,train 1961,1,train 2398,2,train 2181,4,train 1878,3,train +1482,3,train 1919,4,train -2315,4,train 1220,3,train 2611,2,train -1778,1,train 2308,1,train +1912,1,train 2528,4,train 1695,3,train -2132,4,train -1829,3,train 1870,4,train -1433,3,train 2387,1,train 1991,1,train -2607,4,train +2428,2,train +2824,2,train +2125,1,train 1729,1,train -2166,2,train +2607,4,train +2345,4,train +1646,3,train +2083,4,train +126,1,train 3037,2,train -2641,2,train +1942,1,train 2379,2,train 2076,1,train -2296,4,train 339,1,train +77,1,train 2854,2,train -2155,1,train +2458,2,train 2592,2,train 2375,4,train 2113,4,train @@ -2782,22 +2768,23 @@ parameter_index,simulation_index,split 2671,2,train 3108,3,train 114,4,train -2409,2,train 2805,2,train 2147,2,train +369,1,train 3187,3,train 148,2,train +2884,2,train +3321,3,train 327,4,train 2622,2,train -3059,3,train 65,4,train 623,2,train 3355,1,train +361,2,train 3138,3,train 540,4,train 144,4,train -2876,3,train -2573,2,train +2835,2,train 836,2,train 137,1,train 178,2,train @@ -2805,281 +2792,296 @@ parameter_index,simulation_index,split 357,4,train 2652,2,train 95,4,train -653,2,train -3385,1,train 3781,1,train -787,2,train +3385,1,train +391,2,train 3123,1,train -88,1,train 129,2,train +2865,2,train 2906,3,train -308,4,train +2644,3,train +3860,1,train +866,2,train 907,3,train +3202,1,train 3598,1,train 604,2,train 1041,3,train +3336,1,train +342,2,train 3119,3,train -3556,4,train 125,4,train 2857,3,train 4073,1,train 1120,3,train 3415,1,train -3852,2,train -4031,4,train 421,2,train 858,3,train 3153,1,train +555,2,train 3332,3,train -3373,4,train -3769,4,train -338,4,train +2936,3,train 3070,3,train 1333,3,train 937,3,train 3232,1,train -3628,1,train +4065,2,train +634,2,train +3366,1,train 3982,4,train 3586,4,train 3324,4,train -1763,1,train -1546,3,train +1105,1,train 3841,1,train 3882,2,train 847,2,train 888,3,train -3620,2,train +1284,3,train +1325,4,train +585,2,train 1022,3,train -626,3,train 3403,4,train +3579,1,train +3620,2,train 3537,4,train -3141,4,train 1580,1,train 1184,1,train +4095,2,train +1101,3,train +1538,4,train 3792,1,train -4012,4,train +1235,3,train +839,3,train 3616,4,train 3750,4,train -1793,1,train 1397,1,train -1834,2,train 1135,1,train +1617,4,train 3912,2,train -918,3,train +1314,3,train 1355,4,train 3650,2,train 4046,2,train 656,3,train 3829,4,train -1610,1,train -1214,1,train 2047,2,train -1348,1,train +1214,1,train +1744,1,train 1830,4,train -1086,1,train 1568,4,train 3863,2,train -1265,3,train 869,3,train -4042,4,train 1823,1,train 1864,2,train -2260,2,train -2043,4,train +1561,1,train 1602,2,train +2043,4,train 1385,4,train +4076,2,train 1082,3,train +1123,4,train 1519,4,train -2077,2,train 2211,2,train 1994,4,train 1598,4,train -1295,3,train -1336,4,train 1732,4,train +1336,4,train 4068,3,train 2290,2,train 2331,3,train -1811,4,train -1549,4,train +1632,2,train 2503,2,train 2107,2,train 1845,2,train 1979,2,train -1762,4,train -2495,3,train +1796,2,train +1579,4,train 193,2,train 2970,3,train 2574,3,train 2271,2,train -1875,2,train -2312,3,train 2708,3,train 1792,4,train 2870,1,train 3004,1,train +10,2,train +2787,3,train 2921,3,train -2088,2,train +2525,3,train 2263,3,train 3083,1,train +89,2,train 3217,1,train 3258,2,train 223,2,train 264,3,train -2559,1,train 2738,3,train -2779,4,train +3175,4,train 2476,3,train -3471,2,train -40,2,train +3296,1,train +3034,1,train 477,3,train 2772,1,train 3168,1,train 3388,4,train 2293,3,train -3247,1,train -3288,2,train 3684,2,train 253,2,train -690,3,train 2985,1,train 3467,4,train 32,3,train -3205,4,train +2768,3,train +2809,4,train 2506,3,train +3064,1,train +3680,4,train 70,2,train +507,3,train +2802,1,train +3239,2,train 3022,4,train -2719,3,train -2760,4,train 3156,4,train +2760,4,train 803,1,train +541,1,train +3714,2,train 720,3,train -324,3,train -761,4,train 2619,1,train +458,3,train 62,3,train 2839,4,train +3235,4,train 1016,1,train 620,1,train -3927,2,train +754,1,train +3531,2,train 3968,3,train -537,3,train +3228,1,train 3269,2,train 3665,2,train -275,3,train -3448,4,train -2790,4,train +3052,4,train +833,1,train 967,1,train +571,1,train 3744,2,train 750,3,train -791,4,train 1187,4,train -488,3,train 3003,4,train 1046,1,train 1180,1,train +784,1,train +3957,2,train +1400,4,train +522,1,train 1004,4,train -3736,3,train +3299,2,train 1138,4,train 742,4,train +3736,3,train 3216,4,train 1259,1,train -997,1,train -1038,2,train 1434,2,train -1217,4,train +1038,2,train +3815,3,train +735,1,train 821,4,train +3512,2,train 3949,3,train 955,4,train 559,4,train 814,1,train +1251,2,train 4028,3,train -1034,4,train +3725,2,train 3766,3,train 731,3,train 772,4,train -1168,4,train 3504,3,train -906,4,train -510,4,train -1027,1,train +1726,2,train +1464,2,train 1068,2,train -1202,2,train -589,4,train 3717,3,train +1119,4,train 723,4,train -1677,2,train +1281,2,train 1718,3,train 4013,1,train -1415,2,train 3796,3,train +1198,4,train +802,4,train 936,4,train 1797,3,train +2327,3,train 1494,2,train 1098,2,train 1931,3,train -4009,3,train +1232,2,train 2227,1,train 2144,3,train -1748,3,train +2185,4,train +4043,1,train 1445,2,train 2306,1,train -2440,1,train 2223,3,train 1961,3,train 2398,4,train +2257,1,train +2391,1,train +1995,1,train 2611,4,train -1778,3,train -1516,3,train +2215,4,train +1912,3,train 2470,1,train 2604,1,train +2824,4,train 1991,3,train -2166,4,train +2428,4,train +2125,3,train 1729,3,train +2683,1,train 2287,1,train 2724,2,train +126,3,train 2421,1,train 2025,1,train 2462,2,train 2159,1,train -2641,4,train +1942,3,train 2379,4,train 2937,2,train 2634,1,train 2238,1,train 2675,2,train -2372,1,train +77,3,train 2854,4,train -2155,3,train +2458,4,train 2592,4,train 1934,4,train 239,1,train -373,1,train -3150,2,train 197,4,train 2055,1,train 2888,2,train 2671,4,train -2409,4,train 2147,4,train -56,1,train 586,1,train +3363,2,train 2967,2,train 2664,1,train -2705,2,train +2268,1,train 148,4,train 2443,2,train +2884,4,train 2622,4,train +665,1,train 269,1,train 7,1,train -444,2,train 3180,2,train 623,4,train -227,4,train 2918,2,train +2522,2,train 3355,3,train +361,4,train 2656,2,train -2573,4,train 3651,1,train 616,1,train 220,1,train @@ -3091,150 +3093,155 @@ parameter_index,simulation_index,split 137,3,train 178,4,train 574,4,train +2869,2,train 2652,4,train 3730,1,train 736,2,train -653,4,train -2948,2,train +171,1,train 3385,3,train 3781,3,train +391,4,train 3123,3,train 129,4,train 3681,1,train -687,2,train -3598,3,train +646,1,train +3860,3,train +866,4,train +425,2,train +3161,2,train +3202,3,train 604,4,train +3336,3,train +3598,3,train +342,4,train 1162,2,train 3894,1,train -900,2,train +504,2,train 3632,1,train -201,1,train 3415,3,train -3852,4,train 421,4,train 25,4,train 3153,3,train -717,2,train -3628,3,train +555,4,train +1113,2,train +3845,1,train +851,2,train +4065,4,train 3232,3,train -3669,4,train +634,4,train +3366,3,train 1233,3,train -1763,3,train 930,2,train -4058,1,train -668,2,train +3662,1,train +1105,3,train 3841,3,train 3882,4,train +3579,3,train 3620,4,train +585,4,train 1143,2,train 1184,3,train 1580,3,train -485,2,train +922,3,train 3699,4,train -1876,1,train -1793,3,train +4095,4,train 1397,3,train -1834,4,train 4088,1,train +698,2,train 1135,3,train 3912,4,train 4046,4,train 3650,4,train 2089,1,train -1693,1,train 1827,1,train -1610,3,train -1214,3,train -1651,4,train +1431,1,train 2047,4,train -1348,3,train +1214,3,train +3905,1,train 952,3,train -1086,3,train 3863,4,train 1906,1,train -1644,1,train -2260,4,train +2040,1,train 1864,4,train +1561,3,train 1602,4,train +4076,4,train +2119,1,train +2160,2,train 2294,2,train -2077,4,train +1199,1,train 1681,4,train 3976,2,train 982,3,train +2070,1,train 2507,2,train -1674,1,train -2111,2,train 1808,1,train -1412,1,train 2290,4,train +1632,4,train +1370,4,train +2190,2,train 1887,1,train 1928,2,train -2324,2,train 1625,1,train 2107,4,train 1845,4,train 1979,4,train 22,1,train +2799,2,train +2100,1,train 2141,2,train +2537,2,train +1838,1,train 2275,2,train -2354,2,train -1958,2,train -2488,2,train -1875,4,train -3087,1,train -93,2,train +1796,4,train +101,1,train +2092,2,train 2870,3,train -3004,3,train +2567,2,train 2171,2,train -2305,2,train +2608,3,train +10,4,train +3004,3,train 1909,2,train 2346,3,train -2088,4,train -172,2,train 3300,1,train -306,2,train 3083,3,train +89,4,train 3217,3,train 3258,4,train -2518,2,train 2122,2,train -2559,3,train 385,2,train 3117,1,train 3513,1,train 82,1,train 519,2,train -2855,1,train +3296,3,train 257,2,train -3471,4,train -40,4,train -2335,2,train -2376,3,train +3034,3,train 2772,3,train +2376,3,train 3726,1,train -3330,1,train 3464,1,train -3068,1,train -470,2,train -3247,3,train -2851,3,train -3288,4,train +74,2,train 3684,4,train 2985,3,train 3543,1,train 3584,2,train 153,2,train 2885,1,train -3367,4,train 287,2,train 328,3,train -3105,4,train +2623,1,train +3064,3,train 70,4,train -3797,2,train +2802,3,train +3239,4,train 803,3,train +3098,1,train 3494,1,train -104,2,train -2836,1,train +541,3,train +3714,4,train +238,2,train 2619,3,train 1099,1,train 837,1,train @@ -3242,81 +3249,90 @@ parameter_index,simulation_index,split 1016,3,train 620,3,train 3311,1,train -3748,2,train +317,2,train 358,3,train +754,3,train 3049,1,train -3665,4,train +3531,4,train 3269,4,train -1446,1,train +3665,4,train +1050,1,train +833,3,train 3128,1,train +3961,2,train 967,3,train -134,2,train -3262,1,train +571,3,train +3303,2,train 3744,4,train 1263,1,train -867,1,train 4040,2,train 1046,3,train 605,1,train -1087,4,train 3778,2,train -3516,2,train +784,3,train +388,3,train +522,3,train +3299,4,train 1342,1,train 1476,1,train -1080,1,train 1259,3,train -997,3,train -1038,4,train +818,1,train 1434,4,train -3729,2,train +1038,4,train +735,3,train +3512,4,train 1596,2,train +1293,1,train 897,1,train 635,1,train 1117,4,train 3412,2,train 814,3,train -3942,2,train +1251,4,train 1809,2,train 1506,1,train +1110,1,train 1547,2,train +1943,2,train 1244,1,train +1726,4,train 4021,2,train 4062,3,train -1027,3,train +1464,4,train 1068,4,train -3759,2,train -1202,4,train -2022,2,train +3800,3,train +806,4,train 1323,1,train 1364,2,train +1061,1,train +1281,4,train +3972,2,train 4013,3,train -1415,4,train -1711,2,train +1577,2,train 1315,2,train 4092,3,train 1494,4,train 1098,4,train +1232,4,train 2227,3,train -1528,2,train +4043,3,train 1445,4,train 2523,1,train 2306,3,train -2003,2,train 2044,3,train -2440,3,train +1741,2,train 1345,2,train +1782,3,train 2736,1,train -2474,1,train +2257,3,train 1954,2,train +2391,3,train 1558,2,train -2949,1,train +1995,3,train 2553,1,train -2687,1,train -2291,1,train 2470,3,train -1771,2,train -1812,3,train -2766,1,train +2900,1,train +2683,3,train 2287,3,train 2724,4,train 2421,3,train @@ -3325,201 +3341,178 @@ parameter_index,simulation_index,split 2159,3,train 2583,1,train 3020,2,train -26,3,train -2321,1,train -2455,1,train -2541,4,train 2937,4,train +2541,4,train 2238,3,train 1842,3,train 2675,4,train 3233,2,train 239,3,train -373,3,train +2534,1,train +2930,1,train 2668,1,train -3150,4,train 2888,4,train 2055,3,train 669,1,train 3446,2,train -56,3,train -2351,1,train -2485,1,train 2967,4,train -2705,4,train +2268,3,train 2443,4,train -882,1,train +3659,2,train +665,3,train 269,3,train 2960,1,train 3001,2,train 3397,2,train 7,3,train -444,4,train 2698,1,train 2739,2,train -2918,4,train 3180,4,train +2918,4,train +2522,4,train 2656,4,train 699,1,train 3476,2,train -437,1,train -41,1,train 3651,3,train 220,3,train 657,4,train 2952,2,train 3348,2,train 3131,4,train +2869,4,train 912,1,train 516,1,train 953,2,train 3730,3,train -650,1,train 736,4,train -3031,2,train 3468,3,train 2769,2,train -2948,4,train +171,3,train 729,1,train 1166,2,train 467,1,train 71,1,train 3244,2,train 3681,3,train -687,4,train -1379,2,train +3378,2,train +425,4,train +3977,1,train +942,1,train 983,2,train +1379,2,train +3715,1,train 1162,4,train 284,1,train +721,2,train 3498,3,train 3894,3,train -900,4,train -3195,2,train +504,4,train 3236,3,train 3632,3,train -201,3,train 242,4,train -1196,2,train -3928,1,train 1330,2,train 497,1,train -934,2,train -717,4,train 3408,2,train +3845,3,train +851,4,train 4007,1,train -1409,2,train +1013,2,train +3745,1,train 710,1,train 751,2,train 930,4,train 489,2,train -668,4,train +3662,3,train 1226,2,train 3958,1,train -1360,2,train 964,2,train 3696,1,train 702,2,train -3916,4,train -485,4,train -1876,3,train 1480,3,train 3909,1,train 915,2,train +698,4,train +1910,1,train 2089,3,train -1693,3,train -3988,1,train 1827,3,train +1431,3,train 1128,2,train +3905,3,train 3946,4,train 1989,1,train -1727,1,train 1906,3,train 1207,2,train -1644,3,train 2202,1,train 2336,1,train 1940,1,train +2119,3,train 1678,1,train +2160,4,train 2294,4,train +1199,3,train 3976,4,train -2415,1,train -2153,1,train -1757,1,train 2590,2,train +1757,1,train 1891,1,train 1977,4,train 2507,4,train -1674,3,train -2111,4,train 1808,3,train -1412,3,train 2628,1,train +2366,1,train 1970,1,train 2104,1,train 1708,1,train +2190,4,train 1887,3,train 1928,4,train -2324,4,train 1625,3,train -1666,4,train 2486,2,train 1921,1,train +2537,4,train 2141,4,train 2275,4,train +101,3,train 2437,2,train -2134,1,train -2175,2,train -2354,4,train -1958,4,train -1696,4,train +2092,4,train 2650,2,train -3087,3,train -93,4,train 2784,2,train +2388,2,train +2567,4,train 2171,4,train -2305,4,train 1909,4,train 348,1,train -86,1,train -172,4,train 2863,2,train +2904,3,train 3300,3,train -306,4,train +2601,2,train 2122,4,train 385,4,train 3117,3,train 3513,3,train 519,4,train -2814,2,train -2855,3,train 257,4,train -2552,2,train -2335,4,train -553,2,train -3330,3,train -2631,2,train -3068,3,train -3626,1,train +378,1,train +419,2,train +3151,1,train +74,4,train 632,2,train -3364,1,train 766,2,train +370,2,train 3543,3,train 3584,4,train 153,4,train 2844,2,train 2885,3,train 287,4,train -3839,1,train -845,2,train +2623,3,train 449,2,train +3577,1,train 146,1,train -187,2,train -3797,4,train -2702,3,train -104,4,train -2836,3,train +321,2,train +3098,3,train 3656,1,train 1099,3,train +3831,2,train 3394,1,train 3790,1,train 837,3,train @@ -3528,131 +3521,122 @@ parameter_index,simulation_index,split 534,2,train 3311,3,train 3352,4,train -3748,4,train +317,4,train 3049,3,train -1133,1,train 3910,2,train 916,3,train -3211,1,train -3607,1,train +4044,2,train +613,2,train +1050,3,train +3961,4,train 3128,3,train -134,4,train -3262,3,train +3303,4,train 3820,1,train 3861,2,train 826,2,train -4040,4,train +3558,1,train 3599,2,train -867,3,train +4040,4,train +430,2,train 1263,3,train 564,2,train 605,3,train -3558,1,train +3382,4,train 3778,4,train -3516,4,train -3120,4,train 1425,1,train 1342,3,train +3637,1,train 4074,2,train -1080,3,train 684,3,train -3729,4,train -1638,1,train -1772,1,train +818,3,train +1114,1,train 1596,4,train +1293,3,train 897,3,train 4025,2,train 635,3,train 3412,4,train 1193,1,train -1327,1,train 1809,4,train +1943,4,train +1110,3,train 1547,4,train 1244,3,train 1285,4,train 4021,4,train -3759,4,train -1802,1,train +1406,1,train 1843,2,train -2022,4,train +1581,2,train 1323,3,train 1364,4,train 4055,2,train +1061,3,train 1102,4,train 2452,2,train +2056,2,train +1794,2,train 961,1,train -1711,4,train +1491,1,train +1577,4,train 1315,4,train -1873,2,train 2007,2,train -1174,1,train -1528,4,train 2086,2,train 2523,3,train -2220,2,train +1387,1,train 1824,2,train -2003,4,train +1741,4,train 1345,4,train -2736,3,train +2299,2,train 2340,3,train -2037,2,train +2736,3,train 1641,2,train -2474,3,train 1558,4,train 2770,1,train -2949,3,train 2553,3,train -2687,3,train +2250,2,train 1854,2,train -2291,3,train -1771,4,train +1988,2,train 2983,1,train -2766,3,train 2370,3,train +68,2,train +2800,1,train 3196,1,train 2583,3,train 3020,4,train -2321,3,train -2455,3,train +2280,2,train 2059,3,train 281,2,train 3013,1,train 2617,1,train 2751,1,train 3233,4,train +2534,3,train 2138,3,train 2668,3,train -3488,1,train 3226,1,train 2830,1,train 3267,2,train -232,2,train 669,3,train -2568,1,train +2964,1,train 3446,4,train -2351,3,train 2788,4,train -2485,3,train -3346,2,train +569,1,train 352,3,train 3043,1,train -49,2,train 90,3,train 2781,1,train 3397,4,train 3001,4,train 2698,3,train 2739,4,train -3559,2,train +782,1,train 3297,2,train -262,2,train 699,3,train 740,4,train 2598,1,train -437,3,train -41,3,train 3035,2,train 3476,4,train +2818,4,train 2952,4,train 995,1,train 599,1,train @@ -3662,105 +3646,103 @@ parameter_index,simulation_index,split 516,3,train 120,3,train 953,4,train -650,3,train 2811,1,train -3031,4,train 2769,4,train 1208,1,train -812,1,train 946,1,train 3723,2,train 3764,3,train 729,3,train +3461,2,train 770,4,train 1166,4,train 3065,2,train 467,3,train 71,3,train +508,4,train 3244,4,train -3461,2,train 629,1,train 763,1,train 3540,2,train -3936,2,train +3977,3,train 1379,4,train 983,4,train 3278,2,train +3674,2,train +3715,3,train 284,3,train -3195,4,train +721,4,train 1238,1,train -976,1,train +1279,2,train +1017,2,train 3794,3,train 714,1,train 800,4,train -1196,4,train -3928,3,train +3095,2,train +3491,2,train 497,3,train -934,4,train +1626,2,train 793,1,train -1230,2,train 4007,3,train -1409,4,train 531,1,train +1013,4,train +3308,2,train 3704,2,train 751,4,train +3745,3,train 489,4,train -1705,2,train -1443,2,train +1006,1,train +1047,2,train 1226,4,train 3958,3,train 964,4,train +568,4,train 3696,3,train 702,4,train -1522,2,train +1656,2,train +1260,2,train 3992,1,train +998,2,train 3909,3,train 915,4,train -4071,1,train +1776,3,train 1473,2,train 1077,2,train +1910,3,train 1211,2,train -3988,3,train +2206,1,train 1989,3,train 1686,2,train -1727,3,train -4022,1,train 1290,2,train +4022,1,train +1424,2,train 1465,3,train 1207,4,train -2285,1,train +2419,1,train 2202,3,train 1503,2,train 1940,3,train 1678,3,train 2236,1,train -2415,3,train -1974,1,train -2153,3,train +2590,4,train 1757,3,train 2194,4,train -2590,4,train 1891,3,train -2449,1,train -2053,1,train +1495,3,train 1970,3,train 2104,3,train 1708,3,train 2703,2,train 2400,1,train -2004,1,train 2486,4,train 2224,4,train 1921,3,train -1962,4,train 5,1,train -2782,2,train 2479,1,train -2613,1,train +2916,2,train +2654,2,train 1955,1,train 2437,4,train -2134,3,train -2175,4,train 3129,2,train 2733,2,train 2867,2,train @@ -3768,163 +3750,193 @@ parameter_index,simulation_index,split 2471,2,train 2650,4,train 2254,4,train +2388,4,train 1992,4,train +431,1,train +35,1,train 169,1,train 3342,2,train 3080,2,train -2684,2,train -86,3,train +2247,1,train 2863,4,train -644,1,train +2601,4,train +248,1,train 382,1,train 2763,2,train 206,4,train +2460,1,train +2501,2,train 2897,2,train -2552,4,train +2635,2,train 636,2,train 3372,2,train -553,4,train +419,4,train +3110,2,train +3151,3,train 2848,2,train -2631,4,train +3709,1,train +674,1,train 3843,1,train -849,2,train -3626,3,train -16,1,train +412,1,train 453,2,train -632,4,train +3230,3,train +150,1,train 236,4,train +632,4,train 2927,2,train -3364,3,train +370,4,train 3922,1,train 3660,1,train 1062,2,train -3839,3,train -845,4,train +363,1,train 449,4,train -3618,4,train +3140,2,train +3577,3,train 146,3,train -187,4,train 2919,3,train +321,4,train +3739,1,train 3873,1,train 442,1,train 3656,3,train 180,1,train 3394,3,train +3831,4,train 3528,3,train +4,4,train 534,4,train +3952,1,train +1354,2,train +4086,1,train 3690,1,train 1092,2,train -696,2,train -1133,3,train 3428,1,train -393,1,train +3910,4,train 434,2,train -3211,3,train -3607,3,train 3648,4,train -3910,4,train -3903,1,train +4044,4,train +613,4,train +1212,3,train 3507,1,train 909,2,train 513,2,train +3641,1,train +4037,1,train 647,2,train 251,2,train 3861,4,train +430,4,train 3558,3,train 3599,4,train +1642,1,train 1425,3,train 3720,1,train +1122,2,train 3854,1,train 3458,1,train -3895,2,train 901,3,train +3637,3,train 4074,4,train -1638,3,train +1855,1,train 4067,1,train -3671,1,train 677,2,train +1114,3,train +3805,1,train 4025,4,train 2068,1,train +1806,1,train 1193,3,train +3925,2,train 890,2,train -1327,3,train +931,3,train 1885,1,train 1489,1,train 2019,1,train +1623,1,train +1406,3,train 1843,4,train +1581,4,train 3876,2,train 4055,4,train 2098,1,train -1702,1,train 2139,2,train 1836,1,train 1440,1,train -3955,2,train +2056,4,train +1178,1,train +1794,4,train 961,3,train 2352,2,train 2049,1,train -1653,1,train 1787,1,train -1873,4,train +1391,1,train 2007,4,train -1174,3,train -1866,1,train +2303,2,train 1470,1,train -1604,1,train +1907,2,train 2086,4,train +1387,3,train 1824,4,train -1,1,train 2778,2,train +2516,2,train 1683,1,train 1817,1,train 1858,2,train -2037,4,train +2299,4,train 1641,4,train 80,1,train 2595,2,train +2636,3,train 2770,3,train +1937,2,train 2071,2,train 1854,4,train +1458,4,train +1988,4,train 3066,1,train -72,2,train 2808,2,train 2546,2,train 2983,3,train 2284,2,train 1888,2,train 151,2,train -2666,3,train -3196,3,train +285,2,train +68,4,train 2363,2,train -3492,1,train -498,2,train +2800,3,train +3196,3,train +2101,2,train +3096,1,train +2834,1,train 281,4,train 2576,2,train -3054,4,train 2617,3,train 3013,3,train 2314,2,train +2355,3,train 2751,3,train -3309,1,train -3047,1,train -3226,3,train +577,2,train +53,2,train 2830,3,train +3226,3,train 3267,4,train -2568,3,train -3522,1,train +2964,3,train 3563,2,train +528,2,train +569,3,train +2864,1,train 3260,1,train -3346,4,train 3043,3,train 3084,4,train -49,4,train 2781,3,train 2385,3,train -3776,2,train +3339,1,train 2943,1,train -3473,1,train +3776,2,train +345,2,train +782,3,train 3077,1,train -3559,4,train +3473,1,train 83,2,train 2815,1,train 3297,4,train @@ -3937,143 +3949,159 @@ parameter_index,simulation_index,split 599,3,train 995,3,train 3290,1,train -733,3,train +296,2,train 337,3,train -3114,4,train +733,3,train 3028,1,train 34,2,train 2811,3,train -3772,4,train -3806,2,train -3940,2,train -812,3,train +3114,4,train 3503,1,train 3544,2,train -3723,4,train 946,3,train +3723,4,train 3241,1,train -247,2,train 3461,4,train 3065,4,train +1108,1,train 1242,1,train 846,1,train 4019,2,train +3757,2,train 629,3,train 1066,4,train -3320,1,train 763,3,train 3361,2,train 3540,4,train 3278,4,train +1321,1,train 1455,1,train 1059,1,train -3970,2,train +1279,4,train 4011,3,train 3574,2,train -976,3,train -3312,2,train +3970,2,train +1017,4,train 714,3,train +3491,4,train +3095,4,train 1534,1,train +1272,1,train 876,1,train 1313,2,train 1010,1,train -1096,4,train +614,1,train 3391,2,train -3787,2,train 793,3,train 397,3,train -1230,4,train 3921,2,train 531,3,train +3308,4,train 1788,2,train 1485,1,train +1089,1,train 1922,2,train -1705,4,train +1223,1,train 4000,2,train 4041,3,train 3604,2,train -1443,4,train +1006,3,train +1047,4,train 3738,2,train 3779,3,train -785,4,train -1605,2,train 1302,1,train -1343,2,train 1739,2,train 1040,1,train -1522,4,train 3817,2,train +1260,4,train 3992,3,train -2214,2,train +998,4,train 1818,2,train 1515,1,train 1993,3,train +1253,1,train 1690,2,train -4071,3,train 1473,4,train 1077,4,train 1211,4,train -2072,3,train 1769,2,train +2206,3,train 1903,2,train +1507,2,train 1290,4,train 4022,3,train -2285,3,train +1424,4,train +1982,2,train +1586,2,train +2419,3,train 1324,2,train 1503,4,train 2236,3,train -1537,2,train -1974,3,train -1671,2,train -2449,3,train -2053,3,train -2490,4,train +2532,1,train 1791,3,train 2745,1,train 2879,1,train 2703,4,train 2400,3,train -2004,3,train +2958,1,train 2562,1,train 5,3,train -2782,4,train 2479,3,train +2038,1,train +2520,4,train +2916,4,train +2654,4,train 1955,3,train +2775,1,train 2909,1,train 2513,1,train -2950,2,train 3129,4,train 2733,4,train 2867,4,train -2034,3,train 2471,4,train +2034,3,train +252,1,train 3029,2,train +431,3,train +35,3,train 2726,1,train +3163,2,train 169,3,train 2464,1,train -2684,4,train +2247,3,train +861,1,train +3242,2,train +248,3,train 2543,1,train -2980,2,train +2939,1,train 382,3,train 2677,1,train 2763,4,train +3376,2,train +2460,3,train +2501,4,train 2897,4,train -544,1,train +2635,4,train +2239,4,train +282,1,train 3455,2,train 2756,1,train -2797,2,train 3193,2,train 636,4,train +2931,2,train 2848,4,train 757,1,train 891,1,train +495,1,train 932,2,train -3406,2,train +3709,3,train +233,1,train 3010,2,train 3843,3,train -849,4,train -16,3,train +412,3,train 453,4,train +2748,2,train +150,3,train 2927,4,train 708,1,train 312,1,train @@ -4084,299 +4112,303 @@ parameter_index,simulation_index,split 2827,2,train 3223,2,train 3357,2,train -2961,2,train 3660,3,train -525,1,train +3956,1,train +921,1,train 962,2,train +3739,3,train 3873,3,train 263,1,train 700,2,train 3436,2,train 442,3,train 3174,2,train -3215,3,train -3477,3,train 180,3,train 4035,1,train 738,1,train 779,2,train -476,1,train -913,2,train +1175,2,train +3952,3,train +4086,3,train 3690,3,train -696,4,train 3428,3,train 434,4,train 3986,1,train -992,2,train 1429,3,train 3724,1,train 689,1,train -3903,3,train -3944,4,train 730,2,train +3944,4,train 1126,2,train 3507,3,train 909,4,train 513,4,train 3245,3,train +3641,3,train 647,4,train 251,4,train -3937,1,train +1205,2,train +1642,3,train 943,2,train 3720,3,train 681,2,train 3458,3,train 3854,3,train -3895,4,train 4016,1,train -1418,2,train -3754,1,train +1855,3,train +1156,2,train 760,2,train 3888,1,train -3671,3,train +894,2,train 677,4,train +1889,1,train 2068,3,train 3967,1,train -1107,2,train +1806,3,train +973,2,train +3925,4,train 890,4,train 3663,4,train -2102,1,train 1706,1,train 1885,3,train 1489,3,train 3784,1,train -1186,2,train +1623,3,train +1227,3,train 3876,4,train 2181,1,train -2315,1,train 1919,1,train 2098,3,train -1702,3,train 2139,4,train 1836,3,train 1440,3,train -3955,4,train -2132,1,train +1178,3,train 1870,1,train -1956,4,train 2352,4,train -1653,3,train 1257,3,train -1866,3,train +1391,3,train +2345,1,train +2386,2,train +2083,1,train +2303,4,train 1470,3,train -1604,3,train +1907,4,train 2465,2,train 1766,1,train 1504,1,train +2516,4,train 1683,3,train 1858,4,train -2678,2,train 80,3,train 2375,1,train -2812,2,train 2113,1,train 1717,1,train 2154,2,train 2595,4,train +1937,4,train 2071,4,train 1675,4,train 114,1,train 2629,2,train +2233,2,train 3066,3,train -72,4,train 2367,2,train 2284,4,train 1888,4,train 327,1,train 65,1,train 151,4,train -2842,2,train 2883,3,train +285,4,train 2580,2,train 2363,4,train +2101,4,train 144,1,train -3492,3,train 2659,2,train +3096,3,train 2397,2,train +2834,3,train 2314,4,train 357,1,train +398,2,train 95,1,train -136,2,train -2913,3,train -3309,3,train -3047,3,train +577,4,train +2872,2,train 2651,3,train -215,2,train +53,4,train +745,2,train 349,2,train -3522,3,train 3563,4,train 2823,2,train +2864,3,train 3260,3,train -824,2,train -3556,1,train +428,2,train 125,1,train 166,2,train 2943,3,train -3776,4,train +3339,3,train +345,4,train 3077,3,train +3776,4,train 83,4,train 2815,3,train -4031,1,train -3769,1,train -3373,1,train -775,2,train -3552,3,train +3989,4,train +379,2,train 3111,1,train +3552,3,train 3593,4,train -3989,4,train 117,2,train 3290,3,train +296,4,train 3028,3,train 34,4,train 3889,2,train -854,2,train 895,3,train 3586,1,train 592,2,train -3806,4,train -196,2,train 633,3,train 3324,1,train -330,2,train 3410,4,train +330,2,train 3544,4,train -3940,4,train +1325,1,train +1108,3,train 3403,1,train 3840,2,train 1242,3,train -3537,1,train 409,2,train 846,3,train -3141,1,train +3537,1,train 543,2,train -3320,3,train +3757,4,train 3361,4,train 4019,4,train 3099,4,train +1538,1,train 1142,1,train 3919,2,train +1321,3,train 3616,1,train -622,2,train 1059,3,train 3970,4,train 3574,4,train -3312,4,train +1617,1,train 1355,1,train 1534,3,train 3829,1,train 3870,2,train +1272,3,train 876,3,train 1313,4,train 4004,2,train 1010,3,train -3787,4,train +614,3,train 3391,4,train 1830,1,train 1568,1,train 1172,1,train 1788,4,train +910,1,train 1922,4,train -3821,2,train +1089,3,train 4000,4,train 3604,4,train 3738,4,train 1385,1,train 1519,1,train -1605,4,train +1123,1,train +3900,2,train 1302,3,train -1343,4,train 1739,4,train 1040,3,train -1081,4,train 3817,4,train 1598,1,train 2035,2,train 1336,1,train 1818,4,train -1952,4,train 1690,4,train -1811,1,train -1852,2,train 2248,2,train -1549,1,train +1852,2,train +1986,2,train +1590,2,train 1769,4,train +1507,4,train 2065,2,train 1669,2,train -1803,2,train +2199,2,train +1586,4,train 1324,4,train 2278,2,train 1882,2,train 2319,3,train -2016,2,train +1579,1,train 1620,2,train +2016,2,train 2057,3,train -1537,4,train -1833,2,train -1967,2,train -2828,1,train +2532,3,train +2229,2,train 2745,3,train 2349,3,train -2046,2,train 1650,2,train 47,2,train -2779,1,train -181,2,train +3175,1,train +2958,3,train 2562,3,train 2259,2,train +1863,2,train +2038,3,train 2858,1,train -260,2,train -2596,1,train +2775,3,train 2513,3,train -2950,4,train 3467,1,train -3205,1,train +2809,1,train +211,2,train +252,3,train 2547,1,train 3029,4,train 2726,3,train +2767,4,train +3163,4,train 2464,3,train -331,3,train -2626,1,train +548,1,train +3325,2,train +3459,2,train 3022,1,train 69,3,train 2760,1,train 2846,4,train +3242,4,train 2543,3,train -2980,4,train -761,1,train +3376,4,train 3538,2,train -544,3,train +3235,1,train 3276,2,train 2839,1,train 241,2,train -3455,4,train +282,3,train 2577,1,train -3014,2,train +3455,4,train 3672,2,train 2756,3,train -2797,4,train 3193,4,train +2931,4,train 578,1,train +3751,2,train 757,3,train +3052,1,train +3489,2,train +495,3,train 932,4,train -99,3,train -2790,1,train 3227,2,train -3406,4,train +233,3,train 3010,4,train +2748,4,train 1187,1,train -791,1,train 3964,2,train 529,1,train 3306,2,train -3702,2,train +3743,3,train 708,3,train -3440,2,train -3044,2,train 312,3,train 1145,4,train 3003,1,train @@ -4384,91 +4416,91 @@ parameter_index,simulation_index,split 446,3,train 2827,4,train 3223,4,train -2961,4,train 1004,1,train 742,1,train -525,3,train +346,1,train +3956,3,train 962,4,train 263,3,train 700,4,train 3436,4,train 3174,4,train -1217,1,train 821,1,train 4035,3,train 955,1,train 559,1,train -996,2,train 738,3,train -3470,2,train -297,1,train 779,4,train -476,3,train +1175,4,train 517,4,train -913,4,train -1034,1,train 1471,2,train 772,1,train -3986,3,train 376,1,train -1209,2,train -906,1,train +3986,3,train +3287,2,train 3724,3,train -510,1,train -992,4,train 1126,4,train 730,4,train +1684,2,train 4020,1,train -1422,2,train -589,1,train +1026,2,train +3803,3,train 723,1,train -3937,3,train +1205,4,train 943,4,train +547,4,train 681,4,train 1501,2,train +802,1,train 1239,2,train 4016,3,train 936,1,train -3754,3,train +977,2,train +1156,4,train 760,4,train 3888,3,train +894,4,train 1714,2,train +1452,2,train 1056,2,train +1889,3,train 1190,2,train 794,2,train +3571,3,train 3967,3,train -2102,3,train +973,4,train +2185,1,train +1665,2,train 1269,2,train 4001,1,train 1706,3,train -1403,2,train 1007,2,train 3784,3,train -1186,4,train 3959,4,train 2398,1,train +2002,1,train 2181,3,train +1785,3,train 4080,1,train +1482,2,train 1919,3,train 1220,2,train 2611,1,train +2215,1,train 1695,2,train -2132,3,train -1433,2,train 1870,3,train -2032,1,train -2166,1,train -2641,1,train +2428,1,train +2386,4,train +1553,3,train +2083,3,train 2682,2,train 2379,1,train -1983,1,train 2465,4,train 1766,3,train -1941,4,train 1504,3,train +1941,4,train +2458,1,train 2062,1,train -2678,4,train -2812,4,train 1934,1,train 2113,3,train 1717,3,train @@ -4476,111 +4508,105 @@ parameter_index,simulation_index,split 197,1,train 2974,2,train 2671,1,train -2712,2,train 3108,2,train 114,3,train -2409,1,train 2013,1,train 2450,2,train 2147,1,train 2629,4,train +2233,4,train 2367,4,train 1971,4,train 3187,2,train 148,1,train -3059,2,train +3321,2,train 65,3,train -2842,4,train 2580,4,train 623,1,train -227,1,train +361,1,train 3138,2,train -2742,2,train 3179,3,train 144,3,train -2876,2,train 2659,4,train 2218,2,train 2397,4,train 44,1,train 178,1,train -2693,2,train -136,4,train +398,4,train +2872,4,train 2431,2,train -653,1,train -694,2,train +391,1,train +3209,3,train 129,1,train -215,4,train -2510,2,train 2906,2,train 349,4,train +2644,2,train 907,2,train 1041,2,train -824,4,train -3119,2,train +645,2,train +342,1,train +428,4,train 2723,2,train -3556,3,train +3119,2,train 166,4,train 2857,2,train 1120,2,train 724,2,train -3852,1,train 421,1,train 25,1,train 858,2,train -3373,3,train +2936,2,train +379,4,train 3111,3,train 117,4,train 937,2,train -3669,1,train +4065,1,train +675,2,train 3407,1,train 3889,4,train -854,4,train -413,2,train 3586,3,train 3627,4,train +4023,4,train 592,4,train -196,4,train 3324,3,train 330,4,train 1408,1,train 1191,3,train -3486,1,train 3882,1,train 888,2,train +492,2,train +1325,3,train 3620,1,train -626,2,train -230,2,train 3403,3,train 3840,4,train -3537,3,train -3141,3,train 409,4,train +3537,3,train +4095,1,train 3699,1,train -705,2,train +1101,2,train 1142,3,train +1538,3,train 3919,4,train +839,2,train 3616,3,train 3657,4,train -622,4,train -1834,1,train +1438,1,train +1617,3,train 3912,1,train -918,2,train -959,3,train 1355,3,train 3650,1,train 656,2,train 3870,4,train 4004,4,train 2047,1,train -1651,1,train 1830,3,train 1568,3,train 1172,3,train +1609,4,train 3863,1,train 869,2,train -3687,4,train -3821,4,train +910,3,train +3904,2,train 3425,4,train 1864,1,train 1468,1,train @@ -4588,246 +4614,236 @@ parameter_index,simulation_index,split 1385,3,train 989,3,train 1519,3,train -2077,1,train +1123,3,train +3900,4,train 1681,1,train 1419,1,train 1598,3,train 1157,1,train +1639,4,train 2035,4,train -3934,2,train 1336,3,train 1377,4,train 4068,2,train +3934,2,train 2331,2,train +1632,1,train 2069,2,train 2248,4,train +1370,1,train 1852,4,train -1549,3,train +1986,4,train +1590,4,train 2107,1,train 1845,1,train +1449,1,train 1886,2,train 2065,4,train 1669,4,train -1803,4,train -2495,2,train +1796,1,train 2278,4,train 1882,4,train 2016,4,train 1620,4,train 2574,2,train -2178,2,train 2615,3,train -1875,1,train -1916,2,train -2312,2,train -1833,4,train -2828,3,train +1437,4,train +51,2,train +2525,2,train 2129,2,train 2263,2,train -1867,2,train -2046,4,train 1650,4,train +89,1,train 3258,1,train 264,2,train -2645,3,train 47,4,train -2779,3,train 1946,2,train -3471,1,train +1863,4,train 477,2,train 2858,3,train -260,4,train -2596,3,train 2293,2,train -2334,3,train -3154,1,train -3288,1,train 32,2,train +2809,3,train 2547,3,train -3367,1,train -3105,1,train +3542,2,train +507,2,train 111,2,train +548,3,train 2843,1,train +3239,1,train 3022,3,train -2626,3,train +3459,4,train +3325,4,train 2760,3,train 2364,3,train 3755,2,train 2922,1,train -324,2,train -761,3,train 3538,4,train 62,2,train 2839,3,train 3276,4,train 3672,4,train 2577,3,train -3014,4,train -3968,2,train +3531,1,train 3572,2,train -537,2,train +3968,2,train 578,3,train +2873,1,train 3269,1,train 3310,2,train -275,2,train -2790,3,train +316,3,train +3052,3,train +3093,4,train +3489,4,train 3227,4,train -791,3,train +2831,4,train 529,3,train 3306,4,train -3702,4,train 3003,3,train -3440,4,train -3044,4,train -1087,1,train +825,1,train 3602,2,train -4039,3,train 1004,3,train -3736,2,train +1045,4,train 2903,1,train -3340,2,train +3299,1,train 742,3,train -84,3,train +346,3,train +3736,2,train 904,1,train 1434,1,train 1038,1,train +3815,2,train 821,3,train 3553,2,train 3949,2,train 955,3,train 559,3,train -996,4,train -3291,2,train -297,3,train -3470,4,train 1117,1,train +1251,1,train 855,1,train 4069,3,train 1292,2,train -1034,3,train -3766,2,train -1075,4,train 1471,4,train +3766,2,train +593,1,train +4028,2,train 772,3,train -813,4,train 376,3,train 3504,2,train -510,3,train -1209,4,train +3287,4,train 1068,1,train 1505,2,train -1202,1,train +1684,4,train +806,1,train 3583,2,train 4020,3,train -1422,4,train -589,3,train +1026,4,train 3717,2,train 723,3,train 1584,2,train -1718,2,train -885,1,train +1281,1,train 1322,2,train +1718,2,train 1501,4,train 3796,2,train +802,3,train 1239,4,train +977,4,train 1797,2,train 1931,2,train 1098,1,train +1232,1,train 1714,4,train -4009,2,train +1452,4,train 1056,4,train 3788,3,train 1190,4,train 794,4,train -1748,2,train +2185,3,train 1352,2,train 1269,4,train 873,4,train 4001,3,train -1403,4,train 1007,4,train 2223,2,train 1961,2,train +2002,3,train 2398,3,train +1303,2,train 4080,3,train +1482,4,train 1220,4,train -2081,3,train 2611,3,train -1778,2,train -1516,2,train +2215,3,train 2511,1,train -2249,1,train 1991,2,train -2032,3,train +2428,3,train +2469,4,train 1729,2,train -2166,3,train 2724,1,train -2328,1,train 2462,1,train 2682,4,train 2379,3,train -1983,3,train 2937,1,train 2541,1,train 2675,1,train +2279,1,train +2458,3,train 2062,3,train 2499,4,train -1800,3,train 1934,3,train +2358,1,train 197,3,train 2888,1,train 2974,4,train 3108,4,train -2712,4,train -2409,3,train -2013,3,train 2450,4,train +2013,3,train 2147,3,train 2967,1,train -2705,1,train -2309,1,train +3008,2,train 3187,4,train +2309,1,train 148,3,train 2443,1,train 2529,4,train -444,1,train -3221,2,train -227,3,train +310,1,train 2918,1,train -3355,2,train +2522,1,train +2959,2,train +361,3,train 2656,1,train -2742,4,train 3138,4,train -2876,4,train +3355,2,train 2218,4,train 657,1,train -261,1,train 3038,2,train 44,3,train 481,4,train 3172,2,train 178,3,train -2693,4,train +2297,4,train 2431,4,train 736,1,train -694,4,train -2989,2,train 3385,2,train 3426,3,train +391,3,train 3123,2,train 2727,2,train 129,3,train 2906,4,train -2510,4,train -687,1,train +2644,4,train 291,1,train +425,1,train +511,4,train 907,4,train -29,1,train +3202,2,train +645,4,train 249,4,train 2723,4,train 2857,4,train 3935,1,train -941,2,train +504,1,train 1120,4,train 242,1,train 724,4,train @@ -4837,59 +4853,56 @@ parameter_index,simulation_index,split 858,4,train 3153,2,train 3194,3,train +2936,4,train 3415,2,train -3852,3,train 1020,2,train -717,1,train +758,2,train 937,4,train 59,1,train 3232,2,train -3669,3,train +4065,3,train +675,4,train 3407,3,train -413,4,train 1233,2,train 3965,1,train -971,2,train 1408,3,train -668,1,train +1105,2,train 709,2,train -3486,3,train 3882,3,train +3923,4,train 888,4,train -3620,3,train +492,4,train 3224,3,train -3923,4,train -626,4,train -230,4,train +3620,3,train 1184,2,train -3916,1,train -485,1,train +788,2,train +922,2,train 3699,3,train -705,4,train +4095,3,train +839,4,train 1397,2,train -1834,3,train +1438,3,train +698,1,train 1135,2,train -1176,3,train 3912,3,train 3953,4,train -918,4,train 3650,3,train 656,4,train 2047,3,train 1214,2,train -1651,3,train 3946,1,train 952,2,train 556,2,train -1086,2,train 3863,3,train -1947,1,train +3904,4,train 1864,3,train 1468,3,train -1905,4,train 3763,1,train 1602,3,train +1206,3,train 3983,4,train +2160,1,train +1764,1,train 2294,1,train 1681,3,train 3976,1,train @@ -4899,120 +4912,118 @@ parameter_index,simulation_index,split 3934,4,train 4068,4,train 1977,1,train -2111,1,train 2331,4,train 1453,1,train -2069,4,train +1632,3,train 1236,3,train -2324,1,train +2069,4,train +1370,3,train +2190,1,train 1928,1,train -1666,1,train +2365,2,train 1845,3,train +1449,3,train 1886,4,train +2444,2,train 2141,1,train +1745,1,train 2182,2,train 1965,4,train 2657,2,train -2354,1,train -1958,1,train -2395,2,train +2092,1,train 2574,4,train -1696,1,train -2178,4,train -1875,3,train -1916,4,train -2312,4,train -93,1,train +1654,4,train 2870,2,train 2171,1,train 2212,2,train +2608,2,train +51,4,train 1909,1,train 2346,2,train 2129,4,train 1733,4,train 2263,4,train -1867,4,train -172,1,train -306,1,train 3083,2,train 3258,3,train 2425,2,train 264,4,train 2122,1,train -2559,2,train 1946,4,train 385,1,train -164,2,train -3471,3,train 2242,2,train 2376,2,train 2293,4,train 3371,1,train 377,2,train -3154,3,train -2851,2,train -3288,3,train +74,1,train +3329,4,train 2193,2,train 32,4,train 3584,1,train 153,1,train 194,2,train -3367,3,train 328,2,train -3105,3,train +3542,4,train 111,4,train 2843,3,train -3797,1,train +3239,3,train +3401,1,train 803,2,train 407,2,train 3139,1,train -104,1,train -3755,4,train +541,2,train +145,2,train 2922,3,train -324,4,train +3755,4,train 2619,2,train 2660,3,train 62,4,train 3614,1,train 620,2,train -224,2,train 3352,1,train -3748,1,train 358,2,train +3531,3,train 3572,4,train 3968,4,train -96,2,train 3269,3,train +2873,3,train 3310,4,train -275,4,train 3431,1,train -134,1,train +3868,2,train +833,2,train +571,2,train 175,2,train 2907,1,train -3389,4,train +3303,1,train 4081,2,train -1087,3,train 3778,1,train -3516,1,train -3120,1,train +3382,1,train +3819,2,train +388,2,train +825,3,train 3602,4,train -3736,4,train +522,2,train +3299,3,train 2903,3,train -3340,4,train +3736,4,train +1383,1,train +1121,1,train 3898,2,train 904,3,train 1038,3,train 205,2,train +3815,4,train 3553,4,train -3291,4,train 1596,1,train 1117,3,train 3412,1,train 3849,2,train +1251,3,train 855,3,train 1292,4,train 3587,2,train 4028,4,train +593,3,train 3766,4,train 3504,4,train 1809,1,train @@ -5020,239 +5031,232 @@ parameter_index,simulation_index,split 1547,1,train 1151,1,train 1285,1,train -889,1,train -1371,4,train -3666,2,train +4062,2,train 1068,3,train 1505,4,train -4062,2,train +3800,2,train +806,3,train 3583,4,train 3717,4,train -1566,1,train 1364,1,train -1801,2,train 1102,1,train 1584,4,train 3879,2,train -1718,4,train -885,3,train +1281,3,train 1322,4,train -3617,2,train +1718,4,train 4013,2,train 1060,4,train 3796,4,train 1880,2,train +1577,1,train 1181,1,train 1618,2,train 1315,1,train 1797,4,train 4092,2,train 1098,3,train +2093,2,train 2227,2,train -1831,2,train -1528,1,train -1748,4,train +1569,2,train 1352,4,train +4043,2,train 4084,3,train 1090,4,train 2306,2,train 2044,2,train 1648,2,train 1345,1,train +1782,2,train +1169,4,train +1303,4,train +2257,2,train +1861,2,train 2298,3,train 1558,1,train -1778,4,train -1516,4,train +1995,2,train +2377,3,train 2511,3,train -3726,2,train -1812,2,train -2249,3,train 1729,4,train +2807,1,train 2287,2,train -2328,3,train 2724,3,train 2025,2,train 1629,2,train +2066,3,train 2462,3,train 3020,1,train -26,2,train 2937,3,train 2541,3,train 2675,3,train 1842,2,train +2279,3,train 3233,1,train 239,2,train 2575,1,train +2358,3,train 2795,4,train 2055,2,train -2096,3,train -56,2,train 2788,1,train 2967,3,train -2705,3,train +3008,4,train 2309,3,train 2443,3,train 527,1,train 3304,2,train 269,2,train +310,3,train 3001,1,train 7,2,train -48,3,train -444,3,train -2343,1,train 2739,1,train 2825,4,train -2126,3,train -3221,4,train 3355,4,train +2522,3,train +2126,3,train +2959,4,train 740,1,train 3651,2,train +2818,1,train 657,3,train -261,3,train 2952,1,train 3038,4,train 3172,4,train 2514,4,train 953,1,train -557,1,train 3730,2,train 736,3,train -3031,1,train 3468,2,train 78,3,train 2769,1,train -2989,4,train 3123,4,train 2727,4,train 1166,1,train 770,1,train -3547,2,train -3244,1,train +508,1,train 3722,3,train +3244,1,train 3285,2,train -687,3,train 291,3,train 3023,2,train 3681,2,train -29,3,train +425,3,train +3202,4,train 2940,4,train 983,1,train 587,1,train +721,1,train 3498,2,train 3935,3,train -3102,2,train -941,4,train +807,4,train +504,3,train 108,3,train +3102,2,train 3236,2,train -3632,2,train 242,3,train 3019,4,train +3632,2,train 3153,4,train -1196,1,train 800,1,train 1237,2,train -934,1,train 1020,4,train -717,3,train +3752,3,train +276,1,train +758,4,train +3053,2,train 59,3,train -496,4,train 3232,4,train +1013,1,train +1054,2,train 751,1,train +355,1,train 1233,4,train 3965,3,train 489,1,train -971,4,train +3662,2,train +1105,4,train 709,4,train 1226,1,train -3999,1,train 964,1,train +568,1,train 1005,2,train 3782,3,train 702,1,train +788,4,train 1184,4,train -3916,3,train -485,3,train -526,4,train +922,4,train 1480,2,train 1135,4,train -1693,2,train -1297,2,train 1734,3,train -4029,1,train +1431,2,train 1035,2,train 1472,3,train 1214,4,train 773,2,train +3550,3,train 3946,3,train 952,4,train 556,4,train -1947,3,train -1644,2,train 986,2,train 3763,3,train -1981,1,train +2160,3,train +1764,3,train 1065,2,train +1502,3,train +1199,2,train 3976,3,train 982,4,train 2590,1,train 2194,1,train 1977,3,train -2111,3,train -1412,2,train 1453,3,train 2273,1,train 2011,1,train +2190,3,train 1928,3,train 1532,3,train +2365,4,train 2486,1,train 2224,1,train -1962,1,train +2444,4,train 2141,3,train +1745,3,train 2182,4,train 2437,1,train 2041,1,train -2175,1,train -1779,1,train 2657,4,train -1958,3,train -2395,4,train -1696,3,train -3087,2,train +1779,1,train +2261,4,train 2650,1,train 2254,1,train 2691,2,train -93,3,train +2388,1,train 1992,1,train 2429,2,train 2870,4,train 2171,3,train 2212,4,train +2608,4,train 1909,3,train 1950,4,train 2346,4,train -172,3,train -2642,2,train +2904,2,train 2425,4,train -2559,4,train 206,1,train 385,3,train 3117,2,train 2721,2,train -164,4,train -2855,2,train 2242,4,train 2376,4,train 1980,4,train -23,1,train +419,1,train 3371,3,train 2538,2,train 377,4,train 2672,2,train -3068,2,train 2193,4,train 632,1,train 236,1,train -673,2,train +370,1,train 411,2,train 3584,3,train 153,3,train @@ -5260,132 +5264,147 @@ parameter_index,simulation_index,split 2489,2,train 2885,2,train 328,4,train +2623,2,train 2926,3,train 449,1,train -3618,1,train -3797,3,train -187,1,train 624,2,train +3401,3,train +321,1,train 407,4,train -2702,2,train +3098,2,train 3139,3,train -2836,2,train +541,4,train +145,4,train 2619,4,train 3697,1,train 1099,2,train -3435,1,train +3831,1,train 837,2,train 3614,3,train +4,1,train 441,2,train +3218,3,train 620,4,train -224,4,train +2956,3,train 3352,3,train 358,4,train -96,4,train 3910,1,train 916,2,train 520,2,train 3648,1,train +1050,2,train +4044,1,train 3431,3,train -392,2,train +3868,4,train 3128,2,train 3606,4,train +571,4,train 175,4,train 2907,3,train -1170,3,train +3303,3,train +3727,1,train 3861,1,train -867,2,train +430,1,train 3599,1,train -908,3,train +471,2,train 4081,4,train 605,2,train +209,2,train 2986,3,train -3516,3,train -3120,3,train +3382,3,train +388,4,train +3819,4,train +1383,3,train 4074,1,train -1080,2,train 684,2,train -3416,1,train +1121,3,train 3898,4,train +818,2,train 3636,4,train 205,4,train 3374,4,train +1417,1,train 1596,3,train 897,2,train +938,3,train 635,2,train 3412,3,train 3849,4,train 3587,4,train 1809,3,train 1413,3,train -1547,3,train +1110,2,train 1151,3,train +1547,3,train 1588,4,train -889,3,train -3666,4,train +3883,2,train 4062,4,train +3800,4,train 1843,1,train +1581,1,train 1667,4,train 1364,3,train 968,3,train -1801,4,train 1102,3,train 3879,4,train 4013,4,train -3617,4,train -1398,1,train +2056,1,train +1794,1,train 1880,4,train +1577,3,train 1181,3,train 1618,4,train 3913,2,train 1315,3,train 1356,4,train 4092,4,train -1873,1,train +1477,1,train +2093,4,train +1215,1,train 2227,4,train -1831,4,train +1569,4,train +4043,4,train 2086,1,train +2127,2,train 2523,2,train 1824,1,train 2306,4,train 2044,4,train 1648,4,train 1345,3,train +1782,4,train 2340,2,train -2474,2,train 1641,1,train 2078,2,train +2257,4,train +1861,4,train +1995,4,train 2553,2,train 1854,1,train -2291,2,train +1458,1,train +1895,2,train 1633,2,train -1812,4,train 2370,2,train +2807,3,train 2108,2,train 2025,4,train 1629,4,train -2841,1,train +68,1,train 2583,2,train 2624,3,train 3020,3,train -26,4,train -2321,2,train 2059,2,train 1842,4,train -3054,1,train 3233,3,train +2534,2,train 2138,2,train 2575,3,train 2055,4,train 3133,1,train 139,2,train -2871,1,train 3267,1,train -56,4,train -2351,2,train -2392,3,train 2788,3,train -3346,1,train +2392,3,train 352,2,train 3084,1,train 90,2,train @@ -5396,15 +5415,11 @@ parameter_index,simulation_index,split 3042,4,train 7,4,train 2739,3,train -2343,3,train -3559,1,train 3297,1,train -2901,1,train 740,3,train -344,3,train 3035,1,train -41,2,train 3651,4,train +2818,3,train 2422,3,train 2952,3,train 3772,1,train @@ -5412,213 +5427,230 @@ parameter_index,simulation_index,split 3551,2,train 516,2,train 120,2,train -557,3,train 953,3,train 2852,1,train -3031,3,train -3468,4,train 3730,4,train +3468,4,train 2769,3,train 2810,4,train 853,1,train 3764,2,train +3751,4,train 770,3,train 3065,1,train -3547,4,train 71,2,train +508,3,train 3285,4,train 3681,4,train 3023,4,train 1066,1,train 804,1,train 3540,1,train +3977,2,train 983,3,train +3715,2,train 587,3,train 3278,1,train -3319,2,train 284,2,train -3498,4,train +721,3,train 3102,4,train +3319,2,train +3498,4,train 3236,4,train 2840,4,train +1279,1,train +1017,1,train 3794,2,train 800,3,train 404,3,train 1237,4,train -934,3,train -3928,2,train -1096,1,train -1230,1,train -834,1,train +3095,1,train +276,3,train +3053,4,train 4007,2,train 4048,3,train +1013,3,train 572,1,train -3349,2,train +1054,4,train +3308,1,train 751,3,train +355,3,train 792,4,train +3745,2,train 489,3,train +1047,1,train 651,1,train -785,1,train 3958,2,train -3999,3,train +3562,2,train +568,3,train 1005,4,train 3696,2,train 702,3,train -1522,1,train -4078,3,train +1260,1,train +998,1,train 1480,4,train -3379,2,train 822,4,train +1776,2,train +1910,2,train 1077,1,train 1211,1,train -1297,4,train -1693,4,train -3592,2,train -3988,2,train +1431,4,train 1035,4,train 3767,3,train -4029,3,train 773,4,train 1989,2,train 1290,1,train -1331,2,train -1727,2,train 1465,2,train 1069,2,train 986,4,train 1940,2,train -1981,3,train 1678,2,train -1282,2,train 1065,4,train +1199,4,train 2277,1,train 2060,3,train 1757,2,train 1361,2,train 2194,3,train -2490,1,train +1495,2,train 2273,3,train 1970,2,train 2011,3,train 1708,2,train +2569,1,train 2703,1,train 2486,3,train 2224,3,train -1962,3,train -2782,1,train +1828,3,train +2916,1,train +2520,1,train +2654,1,train 2258,1,train 2437,3,train 2041,3,train -2175,3,train 1779,3,train 2733,1,train +2337,1,train 2471,1,train -3087,4,train 2254,3,train 2691,4,train +2388,3,train 1992,3,train 2429,4,train -2684,1,train 2288,1,train -2026,1,train +2725,2,train +2904,4,train 2508,4,train -2642,4,train 289,1,train 2763,1,train 206,3,train +2501,1,train 2938,2,train -3117,4,train +2635,1,train +2239,1,train 2721,4,train -2855,4,train +3117,4,train 636,1,train 3017,2,train -23,3,train +419,3,train +3151,2,train +2755,2,train 2538,4,train 2672,4,train 319,1,train 453,1,train -3626,2,train +3230,2,train 236,3,train -673,4,train 2968,2,train -3364,2,train +370,3,train 411,4,train 2706,2,train 2885,4,train 2489,4,train +2623,4,train 532,1,train -270,1,train +707,2,train +3484,3,train 449,3,train -3618,3,train -187,3,train +8,1,train +2785,2,train 624,4,train 2919,2,train -2702,4,train 3914,1,train -920,2,train 3697,3,train 1099,4,train -3394,2,train +3831,3,train 2998,2,train -3435,3,train +3394,2,train 837,4,train +4,3,train 441,4,train 3993,1,train -696,1,train +999,2,train 300,1,train 737,2,train -1133,2,train +3514,3,train 434,1,train 38,1,train 520,4,train 916,4,train -3211,2,train -3514,3,train 3648,3,train -392,4,train +3910,3,train +1212,2,train 3944,1,train 513,1,train +3727,3,train 647,1,train 251,1,train 3861,3,train 3902,4,train -867,4,train +471,4,train 3599,3,train 605,4,train +209,4,train 1425,2,train 767,2,train -3895,1,train 901,2,train 684,4,train -3416,3,train 980,2,train +1417,3,train 3712,1,train 677,1,train 718,2,train +1114,2,train 897,4,train 635,4,train +1713,1,train 1496,3,train 3791,1,train 1193,2,train +3925,1,train +931,2,train 535,2,train 3663,1,train +3883,4,train +1406,2,train 1843,3,train -748,2,train +1581,3,train +1185,3,train 3876,1,train 3962,4,train +3700,4,train 2139,1,train +1743,1,train 1264,3,train -3955,1,train +1794,3,train 961,2,train -1398,3,train 3913,4,train 2352,1,train -1956,1,train -1873,3,train +1477,3,train 1914,4,train -1174,2,train +1215,3,train 1652,4,train +2303,1,train +1907,1,train 2523,4,train +2127,4,train 1824,3,train 2423,2,train 2161,2,train @@ -5627,256 +5659,259 @@ parameter_index,simulation_index,split 2340,4,train 1641,3,train 2078,4,train +2636,2,train 2770,2,train +1937,1,train +2374,2,train 2071,1,train 1675,1,train 2553,4,train 1854,3,train -2291,4,train +1458,3,train +1895,4,train 1633,4,train -72,1,train 2453,2,train -2191,2,train 1888,1,train 2370,4,train 2108,4,train 1712,4,train 151,1,train -2666,2,train -2404,2,train -2841,3,train -2583,4,train +2800,2,train +2101,1,train 2142,2,train -2321,4,train +2583,4,train 2059,4,train 2617,2,train 2221,2,train -3054,3,train +2355,2,train 2138,4,train -356,2,train 3133,3,train +53,1,train 139,4,train +2434,2,train 2830,2,train -2871,3,train 3267,3,train -2568,2,train -2172,2,train -2351,4,train +2609,3,train +435,2,train 3563,1,train -3346,3,train +569,2,train +173,2,train 352,4,train 3084,3,train 90,4,train 2385,2,train 2822,3,train 3776,1,train +782,2,train 386,2,train -3559,3,train +3118,1,train 83,1,train -124,2,train -2901,3,train 3297,3,train 2598,2,train +2639,3,train 3035,3,train -41,4,train 3593,1,train -3197,1,train 599,2,train -203,2,train 337,2,train 3114,3,train 3551,4,train 120,4,train 2852,3,train -3806,1,train 3410,1,train -3847,2,train -812,2,train 3544,1,train 416,2,train 853,3,train +3148,1,train +154,2,train 591,3,train 2886,1,train 3368,4,train -3764,4,train 3065,3,train 2669,3,train +3764,4,train 71,4,train 4060,2,train 629,2,train 1066,3,train 3361,1,train +3757,1,train 804,3,train 3099,1,train +3977,4,train 3278,3,train 3319,4,train +3715,4,train 1100,1,train +3877,2,train +1279,3,train 3574,1,train -3615,2,train 4011,2,train +1017,3,train 184,2,train 621,3,train -3312,1,train 3398,4,train 3794,4,train +3095,3,train +1179,1,train 1313,1,train 4090,2,train -1096,3,train 3391,1,train -3787,1,train -1230,3,train 397,2,train -834,3,train -3828,2,train +4007,4,train 531,2,train 572,3,train -3349,4,train -4007,4,train +3308,3,train +3745,4,train 1788,1,train +1130,1,train 3907,2,train +868,1,train 1350,4,train 3604,1,train -4041,2,train +1047,3,train 651,3,train 3779,2,train -785,3,train +4041,2,train +389,3,train +3562,4,train 3696,4,train -1605,1,train 1739,1,train -1343,1,train 1780,2,train -1081,1,train +1260,3,train 3992,2,train -3596,2,train -3379,4,train +998,3,train 1818,1,train +1859,2,train 1993,2,train +1160,1,train 1597,2,train +1776,4,train 898,1,train 3675,2,train -4071,2,train 1077,3,train -1118,4,train -3592,4,train -2072,2,train +2206,2,train +1810,2,train +1507,1,train 1989,4,train 1290,3,train -1331,4,train -1727,4,train 4022,2,train 1465,4,train 1069,4,train -2285,2,train +1586,1,train 1627,2,train 1324,1,train +1148,4,train 1678,4,train -1282,4,train 2236,2,train -1840,2,train 2277,3,train -1537,1,train 1578,2,train -1974,2,train 1757,4,train 1361,4,train -2053,2,train +1495,4,train 1657,2,train -2490,3,train 1791,2,train 1708,4,train +2569,3,train 2703,3,train -2004,2,train 2045,3,train 5,2,train -2782,3,train +2916,3,train +2520,3,train +2654,3,train 2258,3,train 1955,2,train -2950,1,train 2733,3,train +2337,3,train 2034,2,train 2075,3,train 2471,3,train -1813,3,train 3029,1,train -2684,3,train +35,2,train +2767,1,train +3163,1,train 2288,3,train -2026,3,train +2725,4,train +3242,1,train 2846,1,train +248,2,train 289,3,train 2584,1,train -2980,1,train -27,3,train -2322,1,train +3021,2,train 2763,3,train -2938,4,train +2322,1,train +2501,3,train 2105,3,train +2938,4,train +2239,3,train 3496,2,train 3193,1,train -2797,1,train 3234,2,train 636,3,train +2931,1,train 3017,4,train +3151,4,train +2755,4,train 932,1,train +536,1,train +3709,2,train 319,3,train 3010,1,train -3051,2,train -16,2,train -57,3,train 453,3,train +57,3,train +2748,1,train +3230,4,train 2968,4,train 2706,4,train +615,1,train 1145,1,train 3922,2,train 3660,2,train 532,3,train 2827,1,train 3223,1,train -270,3,train -2961,1,train +707,4,train 3002,2,train 3264,2,train +8,3,train +2785,4,train 2919,4,train 962,1,train -566,1,train +3739,2,train 700,1,train 304,1,train -786,4,train 3081,2,train -920,4,train -87,3,train -3215,2,train -3477,2,train 3914,3,train +87,3,train 2998,4,train 2602,4,train +1175,1,train 779,1,train 3993,3,train -913,1,train +3952,2,train 3690,2,train 517,1,train -3294,2,train -696,3,train +999,4,train 300,3,train 737,4,train -1133,4,train +3032,2,train 434,3,train 38,3,train -3211,4,train 3428,2,train -992,1,train +1429,2,train 596,1,train 1033,2,train -1429,2,train 730,1,train +1212,4,train 3507,2,train -3810,3,train 3944,3,train 513,3,train 3245,2,train 251,3,train -1246,2,train +1205,1,train +1642,2,train 3978,1,train 943,1,train +547,1,train 1425,4,train 3720,2,train 681,1,train @@ -5884,392 +5919,408 @@ parameter_index,simulation_index,split 3458,2,train 3499,3,train 901,4,train -3895,3,train 760,1,train 980,4,train 3712,3,train +1114,4,train 718,4,train -1014,2,train +1713,3,train +973,1,train 3791,3,train 1193,4,train 752,2,train +3925,3,train +931,4,train 535,4,train 3663,3,train 1489,2,train +1227,2,train 3959,1,train 965,2,train -748,4,train 3876,3,train 1960,1,train -1702,2,train 2139,3,train +1743,3,train 4038,1,train 1440,2,train 1044,2,train 1481,3,train -3955,3,train +1178,2,train 961,4,train 2352,3,train -1956,3,train 1257,2,train -2252,1,train +1391,2,train +2386,1,train 2210,4,train 1470,2,train -1511,3,train +1907,3,train 2465,1,train 1941,1,train 2423,4,train 2161,4,train 1858,3,train -2678,1,train 2020,1,train 2154,1,train -1758,1,train 2240,4,train +2636,4,train +1937,3,train +1541,3,train +2374,4,train 1675,3,train 2629,1,train +2233,1,train 2670,2,train 3066,2,train -72,3,train 2367,1,train 1971,1,train 2453,4,train -2191,4,train 1888,3,train -1929,4,train 2749,2,train 151,3,train 2883,2,train -2666,4,train -2404,4,train +2487,2,train 2142,4,train 2962,2,train 2659,1,train +2700,2,train +3096,2,train 3137,3,train 2397,1,train +2834,2,train 2617,4,train 2221,4,train -136,1,train -2913,2,train -2517,2,train -356,4,train +2355,4,train +1959,4,train +398,1,train 2651,2,train -3047,2,train -2568,4,train -2172,4,train -215,1,train +2434,4,train 349,1,train -3563,3,train +435,4,train 2730,2,train 3167,3,train +569,4,train +173,4,train 2468,2,train +2864,2,train +3563,3,train 2385,4,train +428,1,train +469,2,train 166,1,train 2943,2,train 3776,3,train 386,4,train 3077,2,train -124,4,train +3118,3,train 2815,2,train 2598,4,train 3676,1,train -682,2,train 3414,1,train +379,1,train 420,2,train -3197,3,train 3593,3,train +3634,4,train 117,1,train -203,4,train 599,4,train -2935,3,train 337,4,train 3889,1,train 895,2,train +499,2,train 3627,1,train -196,1,train 633,2,train 3410,3,train -3806,3,train 416,4,train +3148,3,train 3544,3,train -3847,4,train +154,4,train 2886,3,train -712,2,train -3444,1,train +1108,2,train 3840,1,train +3444,1,train 409,1,train 4060,4,train 450,2,train 846,2,train -887,3,train 629,4,train -2965,3,train 3361,3,train +2965,3,train 3664,4,train 3099,3,train 3919,1,train 3657,1,train 1100,3,train -401,2,train +3877,4,train 3574,3,train -3615,4,train 4011,4,train 184,4,train -3312,3,train -3870,1,train +1396,1,train +1179,3,train 3474,1,train +3870,1,train 876,2,train -480,2,train +917,3,train 1313,3,train 3212,1,train -4090,4,train +614,2,train 3391,3,train -3828,4,train +4090,4,train 397,4,train +1609,1,train 1788,3,train -3687,1,train -3821,1,train +1130,3,train 3425,1,train 3907,4,train +868,3,train 3604,3,train 4041,4,train 3779,4,train 3383,4,train 1688,1,train 1426,1,train -1605,3,train -1343,3,train -947,3,train +3900,1,train 1780,4,train 4075,2,train -1081,3,train 3992,4,train -3596,4,train 2035,1,train +1639,1,train 1818,3,train 1377,1,train +1859,4,train 1993,4,train +1160,3,train 1597,4,train 898,3,train 3675,4,train -4071,4,train 1852,1,train -1456,1,train -2072,4,train -1194,1,train +1590,1,train 1676,4,train -3971,2,train +2206,4,train +1810,4,train 4022,4,train 2065,1,train 1669,1,train -1803,1,train -2285,4,train +2106,2,train +1844,2,train +1586,3,train 1627,4,train 1324,3,train +1365,4,train 1882,1,train 1923,2,train 2319,2,train 1620,1,train 1224,1,train 2057,2,train -1840,4,train -1974,4,train 1578,4,train +2532,2,train 2136,2,train -1833,1,train -2053,4,train +1437,1,train 1657,4,train 1791,4,train 2349,2,train -1953,2,train 1650,1,train 1825,2,train -2004,4,train 47,1,train 2562,2,train 5,4,train +1863,1,train 1904,2,train +2341,3,train +2038,2,train 2513,2,train -2950,3,train 2034,4,train 118,2,train 2850,1,train +252,2,train 3029,3,train +35,4,train +2767,3,train 2371,3,train -331,2,train +3325,1,train +3459,1,train 69,2,train 2846,3,train -2980,3,train +3242,3,train 2584,3,train +3021,4,train 2322,3,train 3538,1,train 3142,1,train -544,2,train 3276,1,train -2880,1,train -3014,1,train +282,2,train +323,3,train 3496,4,train -2797,3,train 3234,4,train -3530,2,train +2401,3,train +3489,1,train +3093,1,train 932,3,train -99,2,train +536,3,train +2831,1,train 3227,1,train +233,2,train 3010,3,train -3051,4,train -16,4,train +3709,4,train +2748,3,train +832,1,train +615,3,train +2910,1,train 3306,1,train 312,2,train 353,3,train 2648,1,train -3044,1,train +3743,2,train 3660,4,train 2827,3,train 3264,4,train 3002,4,train +1045,1,train 3822,2,train +3956,2,train 962,3,train -566,3,train +3739,4,train 263,2,train 304,3,train 700,3,train 3081,4,train -3477,4,train -3215,4,train 2819,4,train -862,1,train 4035,2,train -996,1,train 779,3,train 3511,2,train 517,3,train -3294,4,train 3690,4,train 3428,4,train +3032,4,train 1471,1,train -1075,1,train -1209,1,train -813,1,train +3986,2,train 4027,3,train 3590,2,train -3986,2,train -992,3,train +1429,4,train 596,3,train 1033,4,train -1429,4,train +3287,1,train 730,3,train -771,4,train 3328,2,train 3507,4,train -3245,4,train 3724,2,train -1246,4,train +3245,4,train +1026,1,train +3803,2,train +1642,4,train 3541,2,train -3937,2,train 3978,3,train +547,3,train 681,3,train 3458,4,train 1501,1,train 1542,2,train 1239,1,train 4016,2,train -3754,2,train +977,1,train +581,1,train +1459,4,train 3358,2,train -3795,3,train 760,3,train -1359,2,train +1889,2,train 1056,1,train 660,1,train 1190,1,train 794,1,train +3571,2,train 3967,2,train -1014,4,train 752,4,train 1572,2,train 1269,1,train 873,1,train +1310,2,train 1706,2,train 1007,1,train 1489,4,train 3784,2,train 3825,3,train -831,4,train +1227,4,train 3959,3,train 965,4,train +1785,2,train 1919,2,train 1960,3,train 1261,2,train 4038,3,train 1440,4,train 1044,4,train +1178,4,train 2256,1,train -2039,3,train 1340,2,train +1777,3,train 1078,2,train 1257,4,train -2252,3,train +2469,1,train +2386,3,train +1553,2,train 1470,4,train 2682,1,train +2286,1,train 2465,3,train 1766,2,train 1807,3,train 1504,2,train 1941,3,train 2499,1,train -2678,3,train 2237,1,train 2020,3,train 1717,2,train -1758,3,train 2154,3,train 2974,1,train -2712,1,train +2316,1,train 2450,1,train 2536,4,train 3066,4,train +2233,3,train 2670,4,train 1971,3,train 2529,1,train 2966,2,train 2749,4,train 2883,4,train +2487,4,train 2225,4,train -268,1,train 3045,2,train -2742,1,train 3179,2,train 2962,4,train +2084,1,train +3096,4,train 2218,1,train +2700,4,train +2834,4,train 481,1,train 219,1,train -2693,1,train +398,3,train +2297,1,train 2734,2,train -136,3,train 2431,1,train -2517,4,train -2913,4,train 2651,4,train 2255,4,train -694,1,train 36,1,train -215,3,train -2510,1,train +3209,2,train +2644,1,train 2730,4,train +2864,4,train 2468,4,train 907,1,train +511,1,train +645,1,train 249,1,train 3026,2,train 3463,3,train +428,3,train +469,4,train 2723,1,train 166,3,train -207,4,train -2502,2,train 2943,4,train +2502,2,train 724,1,train 66,1,train 3676,3,train -682,4,train -3373,2,train 3414,3,train 420,4,train 2715,2,train @@ -6277,199 +6328,193 @@ parameter_index,simulation_index,split 117,3,train 937,1,train 978,2,train +675,1,train 3889,3,train -413,1,train -17,1,train +3493,3,train 895,4,train +17,1,train +499,4,train 2794,2,train -196,3,train 633,4,train 3627,3,train 1191,2,train 3923,1,train -626,1,train -230,1,train -712,4,train +1325,2,train +492,1,train 3403,2,train -846,4,train -450,4,train -3141,2,train 3444,3,train 3840,3,train +846,4,train +450,4,train 4002,1,train -705,1,train -746,2,train +1008,2,train 1142,2,train +746,2,train 3919,3,train 484,2,train 3657,3,train -401,4,train 3953,1,train 1355,2,train -959,2,train -3691,1,train +1396,3,train 3870,3,train 3474,3,train 3911,4,train 876,4,train -480,4,train 3212,3,train +614,4,train 1692,1,train 1475,3,train +3770,1,train 1172,2,train -1213,3,train -514,2,train -3687,3,train -3821,3,train +1609,3,train +3904,1,train +910,2,train 3425,3,train -1905,1,train 1688,3,train 3983,1,train 1385,2,train 989,2,train 1426,3,train 3721,1,train +1123,2,train +3900,3,train 4075,4,train 3679,4,train +1722,1,train +1639,3,train 3934,1,train 1377,3,train 4068,1,train 2331,1,train 2069,1,train 1852,3,train -1456,3,train -1194,3,train -3971,4,train +1893,4,train +1590,3,train 1752,1,train 1886,1,train 1972,4,train 1669,3,train -1803,3,train +2106,4,train +1844,4,train 1965,1,train 1703,1,train 1882,3,train +1441,1,train 1923,4,train 2319,4,train 1620,3,train 1224,3,train 1661,4,train 2057,4,train -2178,1,train 2615,2,train -1916,1,train -1520,1,train 2353,2,train +2532,4,train +1654,1,train 2136,4,train -2828,2,train +1437,3,train +51,1,train 2432,2,train 2129,1,train 1733,1,train -1867,1,train -1953,4,train +2170,2,train 2349,4,train 1650,3,train 1691,4,train 1825,4,train -2645,2,train -2779,2,train 1946,1,train 2562,4,train 1904,4,train +2038,4,train 122,2,train 2858,2,train -2596,2,train -2334,2,train -1721,4,train +1938,2,train +3329,1,train +335,2,train 32,1,train 118,4,train 2413,2,train -2850,3,train +2809,2,train +252,4,train 2547,2,train 2151,2,train +2850,3,train +3542,1,train +3146,1,train 111,1,train 152,2,train -2929,3,train -331,4,train -2626,2,train +548,2,train +3325,3,train 69,4,train 2364,2,train -4028,2,train 3755,1,train -761,2,train 3538,3,train 3142,3,train 62,1,train -103,2,train -544,4,train 2839,2,train -2880,3,train -2577,2,train -3014,3,train 3276,3,train 3317,4,train +282,4,train +2577,2,train 3572,1,train -3176,1,train 578,2,train 182,2,train 3310,1,train -3530,4,train +316,2,train +3093,3,train 2697,3,train -99,4,train 3227,3,train -3389,1,train -3826,2,train -791,2,train +2831,3,train 395,2,train -3127,1,train +832,3,train 529,2,train 133,2,train +2910,3,train 3306,3,train 312,4,train -3044,3,train +3743,4,train 2648,3,train -1349,3,train +3085,4,train 3602,1,train 3206,1,train -4039,2,train -3340,1,train +1045,3,train +649,3,train 3822,4,train -84,2,train +346,2,train +3956,4,train +3815,1,train 821,2,train 4035,4,train 3553,1,train -862,3,train 3157,1,train 559,2,train -996,3,train -3291,1,train +3594,2,train 3377,4,train -297,2,train 3511,4,train 3115,4,train 1292,1,train 4069,2,train -1075,3,train -1209,3,train +679,3,train +3807,2,train 376,2,train -813,3,train 3504,1,train 3590,4,train -3724,4,train -3328,4,train 3986,4,train -1371,1,train +3287,3,train +3328,4,train +3724,4,train 1505,1,train 1109,1,train +3886,2,train 1329,4,train 3583,1,train 3624,2,train -589,2,train -1067,4,train +1026,3,train +3803,4,train 4020,2,train -3541,4,train +368,3,train 3145,4,train +3541,4,train 1584,1,train -1188,1,train 1322,1,train 1060,1,train 1542,4,train @@ -6477,69 +6522,73 @@ parameter_index,simulation_index,split 1239,3,train 4016,4,train 3575,2,train -3754,4,train +977,3,train +581,3,train 3358,4,train 1797,1,train 1576,2,train 877,1,train -1359,4,train 1056,3,train 660,3,train 3788,2,train 794,3,train +3571,4,train +2185,2,train 1352,1,train 1789,2,train 1090,1,train 1572,4,train -3867,2,train 1706,4,train 873,3,train +1310,4,train 4001,2,train 1007,3,train 3784,4,train 1868,2,train +2002,2,train +1169,1,train +1303,1,train +1785,4,train 4080,2,train -1127,4,train 1261,4,train -2081,2,train +2215,2,train 2256,3,train -1516,1,train +1557,2,train 1340,4,train 1078,4,train -2032,2,train +2469,3,train 1636,2,train 1374,2,train +1553,4,train 2682,3,train -1849,2,train -1983,2,train +2286,3,train 1587,2,train 1766,4,train 1504,4,train 2062,2,train 2499,3,train -1800,2,train 2237,3,train 1934,2,train 2795,1,train 197,2,train 2974,3,train -2533,1,train -2712,3,train +2316,3,train 2753,4,train 2013,2,train 2450,3,train +3008,1,train 2529,3,train 2133,3,train 2966,4,train -3221,1,train 2825,1,train -227,2,train -268,3,train +2959,1,train 2563,1,train 3045,4,train 6,3,train -2742,3,train +2301,1,train 3179,4,train +2084,3,train +2521,4,train 2218,3,train 3038,1,train 44,2,train @@ -6548,243 +6597,233 @@ parameter_index,simulation_index,split 3172,1,train 219,3,train 2514,1,train -2693,3,train +3213,2,train +2297,3,train 2734,4,train 2431,3,train -515,1,train 3292,2,train -694,3,train -2989,1,train -2593,1,train 3426,2,train 36,3,train 2727,1,train -2510,3,train -594,1,train +3209,4,train +511,3,train 115,3,train 3243,2,train +645,3,train 249,3,train 3026,4,train 2723,3,train 2502,4,train -941,1,train -545,1,train -3322,2,train +807,1,train 724,3,train -283,1,train 765,4,train 3019,1,train +3060,2,train 25,2,train 66,3,train -503,4,train -3060,2,train 3194,2,train 2581,4,train 3111,4,train 2715,4,train 1020,1,train +758,1,train 1195,2,train -496,1,train 978,4,train 3273,2,train -3669,2,train +675,3,train 3407,2,train 3011,2,train -413,3,train 17,3,train 2794,4,train 1233,1,train -971,1,train 1408,2,train +575,1,train 709,1,train +313,1,train 795,4,train 1191,4,train -3486,2,train -3923,3,train +492,3,train +533,4,train 3224,2,train -230,3,train +3923,3,train +788,1,train 4002,3,train -526,1,train +922,1,train +1008,4,train 3699,2,train -705,3,train -746,4,train 1142,4,train +746,4,train 3478,3,train 484,4,train 1304,2,train -1176,2,train +1438,2,train +1042,2,train 3953,3,train -959,4,train 563,4,train -3691,3,train -1651,2,train 1255,2,train 1692,3,train 3987,1,train 952,1,train 556,1,train 993,2,train +3770,3,train 1172,4,train -514,4,train +3904,3,train +910,4,train 4066,1,train 1468,2,train 1072,2,train -1905,3,train +1206,2,train 810,2,train 3983,3,train 989,4,train 3721,3,train 1681,2,train +1722,3,train 4017,1,train 982,1,train 1419,2,train +1460,3,train 1157,2,train 3934,3,train 2018,1,train 2069,3,train 1236,2,train -1969,1,train +840,2,train +1370,2,train +2365,1,train 1752,3,train -2189,4,train -4047,1,train +1449,2,train 1886,3,train -1490,3,train 1228,3,train +2444,1,train 2048,1,train 2182,1,train 1965,3,train 1703,3,train +1441,3,train 2657,1,train -2395,1,train -2178,3,train +2261,1,train +1999,1,train +2615,4,train 1737,1,train 2219,4,train -2615,4,train -1916,3,train -1520,3,train 2353,4,train +1654,3,train +2608,1,train 2212,1,train 2649,2,train +51,3,train 2346,1,train 1950,1,train 2432,4,train -2828,4,train 2129,3,train 1733,3,train -1867,3,train +2170,4,train 2728,2,train 2425,1,train -2029,1,train -2645,4,train +2466,2,train 1767,1,train 1946,3,train 1987,4,train -164,1,train 2242,1,train 2679,2,train 122,4,train 1980,1,train 2376,1,train 2858,4,train -2596,4,train -2334,4,train +1938,4,train 377,1,train -3154,2,train -2496,2,train +3329,3,train +335,4,train 2193,1,train 2413,4,train -2017,4,train 2547,4,train 2151,4,train 194,1,train -3367,2,train 328,1,train -3105,2,train -2709,2,train +3542,3,train +3146,3,train 111,3,train 152,4,train +548,4,train +2447,2,train 2843,2,train -2626,4,train 2364,4,train 407,1,train -11,1,train -3755,3,train +145,1,train 2922,2,train +3755,3,train 2660,2,train -103,4,train 2577,4,train -3655,1,train -224,1,train -661,2,train 358,1,train +399,2,train 3572,3,train -3176,3,train 3613,4,train -96,1,train -182,4,train 578,4,train +182,4,train +2477,2,train +2873,2,train +316,4,train 3310,3,train +3868,1,train 478,2,train 3606,1,train 175,1,train -3389,3,train -3826,4,train 395,4,train -3127,3,train 529,4,train 133,4,train 4081,1,train -3685,1,train -1087,2,train -3602,3,train +3819,1,train +388,1,train +825,2,train 3206,3,train -4039,4,train +3602,3,train +167,2,train 2903,2,train -3340,3,train -84,4,train +2944,3,train +346,4,train 3898,1,train +3502,1,train 904,2,train 3636,1,train 205,1,train +246,2,train 3374,1,train 3553,3,train 3157,3,train -3291,3,train -297,4,train +3594,4,train 1375,1,train 1117,2,train 3849,1,train -3453,1,train 3890,2,train 855,2,train 896,3,train 1292,3,train 3191,1,train +593,2,train 3587,1,train 3673,4,train -4069,4,train +3807,4,train 376,4,train +4069,4,train +1454,1,train 1588,1,train -1371,3,train -3666,1,train 4062,1,train 1505,3,train 1109,3,train +3800,1,train +3886,4,train +806,2,train 3583,3,train 3624,4,train 4020,4,train -3362,4,train 1667,1,train -1801,1,train -1405,1,train 1584,3,train -1188,3,train 3879,1,train 3920,2,train -885,2,train -926,3,train 1322,3,train -3617,1,train +926,3,train 1060,3,train 664,3,train 3837,4,train @@ -6795,207 +6834,197 @@ parameter_index,simulation_index,split 1356,1,train 4092,1,train 1576,4,train -3871,2,train 877,3,train 3788,4,train -1831,1,train +2093,1,train 1435,1,train -1872,2,train +1569,1,train +1655,4,train 3950,2,train 1352,3,train 1789,4,train 4084,2,train 1090,3,train -3867,4,train 4001,4,train 2044,1,train 1648,1,train +2085,2,train +1782,1,train 1868,4,train +2002,4,train +1169,3,train 3901,2,train +1303,3,train 4080,4,train 2164,2,train +1861,1,train +1902,2,train 2298,2,train -2081,4,train -1203,1,train +1557,4,train +2377,2,train 2511,2,train 2115,2,train -1812,1,train -2249,2,train -2032,4,train 1636,4,train 1374,4,train -2328,2,train -1932,2,train 1629,1,train -1849,4,train -1983,4,train +2066,2,train 1587,4,train -26,1,train 2541,2,train 2145,2,train 1842,1,train 1883,2,train -2320,3,train +2279,2,train 2062,4,train -1800,4,train +2358,2,train 2795,3,train -2096,2,train -2533,3,train 2013,4,train +3091,1,train +3008,3,train 2309,2,train 3304,1,train +310,2,train 3042,1,train -48,2,train 2825,3,train -3221,3,train +2959,3,train 2126,2,train 2563,3,train +2301,3,train 3121,1,train 127,2,train -261,2,train 302,3,train 2597,1,train 3038,3,train 44,4,train 3079,4,train 2380,3,train +3213,4,train 2514,3,train 3468,1,train -3509,2,train 78,2,train -515,3,train 2810,1,train 3292,4,train -2989,3,train -2593,3,train 3426,4,train 2727,3,train -811,1,train -3547,1,train -594,3,train 3285,1,train 3722,2,train 291,2,train 332,3,train 2627,1,train 3023,1,train -29,2,train 3109,4,train 3243,4,train 3801,2,train -3498,1,train +807,3,train 3539,2,train 3102,1,train -941,3,train +3498,1,train 108,2,train -545,3,train 2840,1,train +3236,1,train 242,2,train -283,3,train 3019,3,train 3060,4,train -3236,1,train 3194,4,train -3322,4,train 1237,1,train 1020,3,train 579,1,train -1195,4,train +3752,2,train +758,3,train 362,3,train +1195,4,train +3053,1,train 59,2,train -496,3,train +100,3,train 3273,4,train 3407,4,train 3011,4,train +1054,1,train 792,1,train 4006,3,train -3569,2,train 3965,2,train -971,3,train 1408,4,train +575,3,train 3307,2,train 709,3,train -3486,4,train +313,3,train 3224,4,train -871,1,train 1005,1,train -1091,4,train -3386,2,train 3782,2,train -3916,2,train -526,3,train +788,3,train +130,3,train 1480,1,train -1521,2,train 822,1,train 1304,4,train 4036,3,train +1438,4,train 560,1,train -3337,2,train +1042,4,train 3774,3,train -1176,4,train 780,4,train -1297,1,train -1338,2,train 1734,2,train +1338,2,train 1035,1,train -639,1,train 1472,2,train 773,1,train -859,4,train 1255,4,train +3550,2,train 3946,2,train 556,3,train 993,4,train 3987,3,train -1947,2,train -1551,2,train -1289,2,train 4066,3,train 986,1,train 1072,4,train 1468,4,train 3763,2,train -3804,3,train +1206,4,train 810,4,train +3804,3,train +1764,2,train 1368,2,train 1065,1,train +1502,2,train 4017,3,train 1419,4,train 1157,4,train 1977,2,train 2018,3,train -4051,1,train 1453,2,train 1057,2,train 1236,4,train +840,4,train +2365,3,train 1532,2,train -1969,3,train -4047,3,train +1270,2,train +1449,4,train +2265,1,train +2444,3,train 2048,3,train -2182,3,train +3982,2,train +1745,2,train 1349,2,train -1786,3,train +2182,3,train 2657,3,train -2395,3,train -1696,2,train +2261,3,train +1999,3,train 1737,3,train 2691,1,train -2295,1,train 2429,1,train +2033,1,train +2515,4,train 2212,3,train 2649,4,train 1950,3,train +2904,1,train 2508,1,train 2945,2,train -2642,1,train 2728,4,train 2425,3,train -2029,3,train +2466,4,train 1767,3,train +2204,4,train 2721,1,train 2325,1,train -164,3,train -2063,1,train 2242,3,train 2679,4,train 1980,3,train @@ -7003,92 +7032,91 @@ parameter_index,simulation_index,split 2538,1,train 377,3,train 2672,1,train -3154,4,train -2496,4,train +2713,2,train 2193,3,train -673,1,train +277,1,train 411,1,train 194,3,train 2489,1,train 2926,2,train -2709,4,train 2843,4,train +2447,4,train 624,1,train -3005,2,train +3401,2,train 3442,3,train 407,3,train -11,3,train -2702,1,train 3139,2,train -186,4,train -2481,2,train +145,3,train 2922,4,train 2660,4,train 2264,4,train +307,1,train 744,2,train 441,1,train 45,1,train -3655,3,train -224,3,train -661,4,train +3218,2,train 3352,2,train -96,3,train +2956,2,train +399,4,train +2694,2,train +2873,4,train +2477,4,train 916,1,train 520,1,train +957,2,train +3689,1,train 3431,2,train -392,1,train +3868,3,train 478,4,train 2773,2,train 3606,3,train 175,3,train -216,4,train 2907,2,train -1170,2,train -774,2,train 3902,1,train 4081,3,train +471,1,train 75,1,train -908,2,train -3685,3,train +209,1,train 2986,2,train -3120,2,train +3382,2,train +825,4,train +3819,3,train +167,4,train 2903,4,train -3981,1,train +1383,2,train 684,1,train 3898,3,train 725,2,train +1121,2,train +3502,3,train 904,4,train 463,2,train 3240,3,train 3636,3,train 205,3,train +246,4,train 3374,3,train +938,2,train 1375,3,train -3670,1,train -676,2,train -3453,3,train 3849,3,train +3890,4,train 855,4,train 3587,3,train 3191,3,train -3890,4,train +593,4,train 1413,2,train -3749,1,train +1454,3,train 1151,2,train 1588,3,train -889,2,train -493,2,train -3666,3,train +3487,1,train +3883,1,train 1667,3,train 3962,1,train -1801,3,train 968,2,train -1405,3,train +3700,1,train 1102,2,train 3879,3,train 3920,4,train -885,4,train -3617,3,train 3658,4,train 1701,1,train 1880,3,train @@ -7097,51 +7125,57 @@ parameter_index,simulation_index,split 1618,3,train 3913,1,train 1356,3,train -3871,4,train 1914,1,train +2093,3,train 1652,1,train -1831,3,train 1435,3,train -1872,4,train +1569,3,train 3950,4,train 4084,4,train 3688,4,train +2127,1,train +1731,1,train 1951,4,train 1648,3,train 1252,3,train +2085,4,train 3901,4,train 2340,1,train 1944,1,train 2381,2,train 2078,1,train 2164,4,train +1861,3,train +1902,4,train 2298,4,train -1203,3,train 1640,4,train +1895,1,train +2377,4,train 2511,4,train 1633,1,train 2115,4,train -2249,4,train 2370,1,train -2411,2,train +2807,2,train 2108,1,train 1712,1,train -2328,4,train -1932,4,train +2149,2,train 1629,3,train 1670,4,train +2066,4,train 2624,2,train 2228,2,train 2059,1,train 2145,4,train +2279,4,train 1883,4,train 2441,2,train 2138,1,train -2179,2,train 2575,2,train 2616,3,train -2096,4,train +2358,4,train +1700,4,train 139,1,train +3091,3,train 2788,2,train 2392,2,train 2309,4,train @@ -7150,42 +7184,34 @@ parameter_index,simulation_index,split 90,1,train 527,2,train 3304,3,train +310,4,train 3042,3,train -48,4,train -2343,2,train 2126,4,train 740,2,train -344,2,train 3121,3,train 127,4,train 2422,2,train -261,4,train +2818,2,train 2597,3,train -3417,1,train 423,2,train 3155,1,train 3551,1,train 120,1,train -161,2,train -557,2,train -3509,4,train 78,4,train 2810,3,train 3764,1,train 3368,1,train 770,2,train -811,3,train 3106,1,train -3547,3,train +508,2,train 3285,3,train -3326,4,train 3722,4,train 291,4,train 3023,3,train 2627,3,train -29,4,train 587,2,train 3319,1,train +3405,4,train 3801,4,train 3935,4,train 3102,3,train @@ -7198,232 +7224,239 @@ parameter_index,simulation_index,split 404,2,train 1237,3,train 3573,2,train +142,2,train 579,3,train -3094,4,train +3752,4,train +276,2,train +3053,3,train 59,4,train 4048,2,train -658,3,train +1054,3,train 2953,1,train -3349,1,train +355,2,train 792,3,train -3569,4,train 3965,4,train 3307,4,train 1350,1,train 1088,1,train -871,3,train -3999,2,train +3865,2,train +3562,1,train +568,2,train 1005,3,train 3782,4,train -3386,4,train 347,3,train +3124,4,train 1167,1,train -905,1,train -4078,2,train -1521,4,train -3379,1,train 3816,2,train 822,3,train 3554,2,train 560,3,train -3337,4,train -1118,1,train +1776,1,train 1555,2,train -1297,3,train -4029,2,train -1338,4,train 1734,4,train +856,1,train +1338,4,train +3633,2,train 1035,3,train -639,3,train +1076,4,train 1472,4,train -3592,1,train -773,3,train 3767,2,train -1331,1,train +773,3,train +3550,4,train 935,1,train -1768,2,train 1465,1,train 1069,1,train -1551,4,train -1947,4,train -3846,2,train -1289,4,train 986,3,train 3763,4,train -1981,2,train +1847,2,train +1148,1,train 1585,2,train -1282,1,train +1764,4,train 1368,4,train 1065,3,train +1502,4,train 2060,2,train 2194,2,train 1361,1,train +1798,2,train +1495,1,train 1536,2,train -4051,3,train 1453,4,train 1057,4,train 2273,2,train 2011,2,train -1353,2,train 1532,4,train +1270,4,train 2224,2,train -1962,2,train -1566,2,train +1828,2,train +2265,3,train +1745,4,train 1349,4,train 2561,1,train 2344,3,train 2041,2,train +2082,3,train 1779,2,train -3476,3,train 2254,2,train -2295,3,train 2691,3,train -2732,4,train 1992,2,train +2033,3,train 2429,3,train +2853,1,train 2591,1,train +2725,1,train 2508,3,train 2112,3,train 2945,4,train -2642,3,train 206,2,train 2938,1,train 2542,1,train 2721,3,train 2325,3,train -2063,3,train 2500,4,train 3017,1,train 2621,1,train -23,2,train +2755,1,train 3371,4,train 2538,3,train 2672,3,train +2713,4,train +3230,1,train +3271,2,train 236,2,train -673,3,train +277,3,train 2572,1,train 2968,1,train 411,3,train 2706,1,train +3009,2,train 2489,3,train 2926,4,train -573,1,train -3618,2,train -94,3,train +707,1,train +3484,2,train +2785,1,train 624,3,train 2919,1,train -3005,4,train +3401,4,train 3139,4,train -2481,4,train -786,1,train -920,1,train 3697,2,train 3301,2,train +307,3,train 744,4,train 2602,1,train -2998,1,train -441,3,train +4,2,train 45,3,train +441,3,train 482,4,train -3039,2,train -3435,2,train +2998,1,train +2956,4,train 2560,4,train -603,1,train +3218,4,train +2694,4,train +999,1,train 737,1,train 341,1,train 3514,2,train 520,3,train +957,4,train 3648,2,train +3689,3,train 3431,4,train 2990,2,train -392,3,train 2773,4,train 2907,4,train +1212,1,train 991,2,train -3768,3,train -1170,4,train -774,4,train +3727,2,train 3902,3,train -908,4,train +471,3,train 75,3,train -512,4,train +209,3,train 2986,4,train 767,1,train -3981,3,train +371,1,train 901,1,train -3282,2,train +1383,4,train +1121,4,train 725,4,train -3416,2,train 463,4,train +1283,2,train +4015,1,train 980,1,train +1417,2,train 718,1,train -322,1,train -3670,3,train -676,4,train +938,4,train 1496,2,train 3966,1,train -1413,4,train +931,1,train 535,1,train 972,2,train -3749,3,train +1413,4,train 1151,4,train -889,4,train -493,4,train -748,1,train +3883,3,train +3487,3,train +4045,1,train +1185,2,train 3962,3,train 3566,3,train 968,4,train +3700,3,train 1264,2,train 1701,3,train -1398,2,train 3734,1,train 1181,4,train 3913,3,train 3954,4,train -1997,1,train -1914,3,train +1477,2,train 1518,3,train +1914,3,train +1215,2,train 1652,3,train -819,2,train 2210,1,train +2127,3,train +1731,3,train +4026,1,train 1032,2,train +3984,4,train 2423,1,train 2027,1,train 2161,1,train 1944,3,train 2381,4,train 2078,3,train +2636,1,train 2240,1,train +2374,1,train 1978,1,train 1716,1,train -2198,4,train +1458,2,train +1895,3,train +1936,4,train 1633,3,train 2453,1,train -2191,1,train -1929,1,train -2411,4,train +2807,4,train 2108,3,train 1712,3,train -2666,1,train -2404,1,train +2149,4,train +2008,1,train 2445,2,train -2841,2,train 2142,1,train 2228,4,train 2624,4,train -3054,2,train +1966,4,train 2221,1,train +2355,1,train +1959,1,train 2441,4,train 2575,4,train -2179,4,train -356,1,train 3133,2,train 2737,2,train 139,3,train -2871,2,train -2172,1,train +2434,1,train +2609,2,train 2392,4,train -1996,4,train +435,1,train +173,1,train 3084,2,train 2688,2,train 3125,3,train @@ -7431,32 +7464,25 @@ parameter_index,simulation_index,split 2385,1,train 2426,2,train 2822,2,train -2343,4,train 386,1,train 427,2,train -124,1,train -2901,2,train -344,4,train +2639,2,train 2243,2,train 2422,4,train -203,1,train -3417,3,train +3634,1,train 337,1,train 423,4,train 3114,2,train 3155,3,train -557,4,train -161,4,train -2456,2,train -2852,2,train -2893,3,train 3551,3,train +2852,2,train +2456,2,train 719,2,train 3451,1,train -3847,1,train 416,1,train 457,2,train 853,2,train +154,1,train 591,2,train 3368,3,train 2669,2,train @@ -7467,368 +7493,363 @@ parameter_index,simulation_index,split 670,2,train 804,2,train 408,2,train -3622,4,train 587,4,train 3319,3,train +2923,3,train +3877,1,train 3481,1,train 4011,1,train 487,2,train -3615,1,train 184,1,train 621,2,train 3398,3,train 404,4,train 3573,4,train +142,4,train +276,4,train 4090,1,train -1096,2,train -3828,1,train 3869,2,train 397,1,train 4048,4,train -834,2,train +438,2,train 875,3,train 572,2,train 176,2,train 2953,3,train -3170,1,train -3349,3,train 3390,4,train +355,4,train 3907,1,train 1350,3,train 4041,1,train 4082,2,train 651,2,train -255,2,train 1088,3,train -785,2,train 3383,1,train 3779,1,train -3999,4,train +389,2,train +3562,3,train +3865,4,train 1780,1,train 1167,3,train 3462,1,train 3899,2,train -468,2,train -905,3,train -3596,1,train -3682,4,train -643,3,train -3379,3,train -3420,4,train 3816,4,train +3420,4,train 3554,4,train -4078,4,train +1859,1,train 1993,1,train 1597,1,train 3675,1,train -1118,3,train 1555,4,train -3592,3,train -4029,4,train +856,3,train +3633,4,train 3767,4,train -2072,1,train 1676,1,train +1810,1,train +1414,1,train 1851,2,train 1152,1,train -1331,3,train +3929,2,train 935,3,train -1768,4,train 1069,3,train -3846,4,train +3450,4,train 1627,1,train -1981,4,train +1365,1,train +1847,4,train +1148,3,train 1585,4,train -1282,3,train -1840,1,train 2277,2,train +1881,2,train 1578,1,train 1182,1,train -1664,4,train 2060,4,train 1361,3,train +1798,4,train 1536,4,train -2490,2,train 1657,1,train 2094,2,train 1791,1,train 1832,2,train 2273,4,train 2011,4,train -1353,4,train +2569,2,train 2045,2,train +1828,4,train 1432,4,train -1566,4,train +2520,2,train 2124,2,train 2561,3,train 2258,2,train -1862,2,train 2041,4,train +1600,2,train 1779,4,train 2640,3,train +2337,2,train 2075,2,train 1679,2,train -1813,2,train 76,2,train +2853,3,train 2591,3,train 2288,2,train -2026,2,train +1892,2,train +2725,3,train 2887,1,train 289,2,train -27,2,train +3021,1,train 2938,3,train 2105,2,train 2542,3,train +2239,2,train 3496,1,train 3234,1,train -2838,1,train 3017,3,train 2621,3,train 3058,4,train -23,4,train +2755,3,train +2359,3,train 2097,3,train 2917,1,train 319,2,train -3051,1,train 57,2,train +3271,4,train 2968,3,train 2572,3,train +3009,4,train 2706,3,train +790,1,train +3567,2,train 532,2,train -573,3,train 3264,1,train -270,2,train -311,3,train -2606,1,train +3305,2,train +707,3,train 3002,1,train +3088,4,train +3484,4,train +8,2,train +2785,3,train 3914,2,train -786,3,train 3081,1,train -3477,1,train -920,3,train 87,2,train 2819,1,train -3215,1,train 3301,4,train +3697,4,train 2998,3,train 2602,3,train -3039,4,train -3435,4,train -3697,4,train +820,1,train 3993,2,train -603,3,train -3294,1,train +999,3,train 300,2,train 341,3,train 737,3,train -3514,4,train +3032,1,train 38,2,train +3514,4,train +2856,4,train 2990,4,train +899,1,train 1429,1,train 1033,1,train -3810,2,train -771,1,train -3548,2,train 3944,2,train 991,4,train 3245,1,train -1246,1,train -4064,3,train +3727,4,train 588,1,train 1070,4,train 767,3,train +371,3,train 808,4,train 3499,2,train -3282,4,train -3416,4,train 1500,2,train +1283,4,train 3578,2,train +4015,3,train 980,3,train +1417,4,train 3712,2,train 3753,3,train 718,3,train -322,3,train -1014,1,train +1713,2,train +1317,2,train 1496,4,train +618,1,train 3791,2,train 752,1,train 3966,3,train 535,3,train 972,4,train 3663,2,train -831,1,train +1227,1,train +4045,3,train 965,1,train -3783,3,train -748,3,train -1347,2,train +1185,4,train +1743,2,train 1044,1,train 1481,2,train 1264,4,train -1398,4,train 3734,3,train -1956,2,train 1560,2,train -1997,3,train 1257,1,train -1298,2,train -1735,3,train -819,4,train +4030,1,train +1477,4,train +3813,3,train +1215,4,train 2210,3,train -1511,2,train 1115,2,train -1249,2,train +4026,3,train 1032,4,train 2244,1,train 2423,3,train 2027,3,train 2161,3,train -1765,3,train -2323,1,train 2240,3,train +2374,3,train +1541,2,train 1978,3,train 1675,2,train 1716,3,train 2536,1,train 2670,1,train 2453,3,train -2494,4,train -2191,3,train -1929,3,train +1795,3,train +1533,3,train 2749,1,train 2883,1,train +2487,1,train 2225,1,train -2404,3,train +2008,3,train 2445,4,train -2841,4,train 2142,3,train 2962,1,train -3137,2,train +2700,1,train 2304,1,train 2741,2,train -2042,1,train +3137,2,train 2524,4,train 2221,3,train -2913,1,train -2517,1,train -356,3,train +1959,3,train +2954,2,train 2651,1,train 2255,1,train 2737,4,train 3133,4,train -2871,4,train -2172,3,train +2434,3,train +2609,4,train 2213,4,train 3033,2,train +435,3,train 2730,1,train 3167,2,train +173,3,train 2468,1,train 2688,4,train +2292,4,train 2822,4,train 2426,4,train -207,1,train +469,1,train +2984,2,train 3421,3,train 386,3,train 427,4,train 2722,2,train -124,3,train -2901,4,train +3118,2,train +2639,4,train 2243,4,train -682,1,train -286,1,train 420,1,train 24,1,train 2801,2,train -3197,2,train -203,3,train +3634,3,train 244,4,train -2935,2,train 2852,4,train 2456,4,train 895,1,train +499,1,train 633,1,train -3847,3,train -3451,3,train 719,4,train +3451,3,train 3410,2,train 416,3,train 457,4,train 853,4,train +3148,2,train +154,3,train 591,4,train 2886,2,train 3189,3,train 2669,4,train -712,1,train 753,2,train 4060,3,train 450,1,train -54,1,train -887,2,train 3664,3,train 670,4,train 2965,2,train 804,4,train 408,4,train 3099,2,train -3960,1,train +966,2,train 1100,2,train +3877,3,train 3481,3,train -401,1,train 487,4,train 3219,3,train -3615,3,train 184,3,train 621,4,train +1179,2,train 783,2,train 3911,1,train -480,1,train +917,2,train 4090,3,train 655,2,train -3828,3,train 3869,4,train -834,4,train -3170,3,train +438,4,train 572,4,train 176,4,train +3990,1,train 3728,1,train -734,2,train -3466,1,train +1130,2,train 3907,3,train +3466,1,train 3948,4,train +868,2,train 4082,4,train 651,4,train -255,4,train 3383,3,train +389,4,train 1780,3,train -947,2,train -3679,1,train 4075,1,train -1081,2,train -685,2,train +3679,1,train 3462,3,train 3899,4,train -468,4,train -3596,3,train 1680,1,train +1859,3,train 3758,1,train -1597,3,train +1160,2,train 764,2,train 1201,3,train +1597,3,train 898,2,train 3675,3,train +1893,1,train 1676,3,train -3971,1,train +1810,3,train +1414,3,train 1851,4,train 1152,3,train +3929,4,train 3667,4,train 1972,1,train +2106,1,train +1710,1,train +1844,1,train 1627,3,train 1231,3,train +1365,3,train 969,3,train 2319,1,train 1923,1,train 2057,1,train 1661,1,train -1840,3,train 2277,4,train +1881,4,train 1578,3,train 1182,3,train 2136,1,train @@ -7838,249 +7859,252 @@ parameter_index,simulation_index,split 2094,4,train 1832,4,train 2349,1,train -1953,1,train -2390,2,train +2569,4,train 1691,1,train -2128,2,train 1825,1,train 2045,4,train 1649,4,train 2207,2,train 1904,1,train +2341,2,train 2124,4,train -1728,4,train 2258,4,train -1862,4,train -1721,1,train +1600,4,train +2420,2,train 2158,2,train +2337,4,train 1896,2,train 2075,4,train 1679,4,train -1813,4,train 118,1,train 76,4,train 2371,2,train +2767,2,train +2109,2,train 2288,4,train -2026,4,train -331,1,train +1892,4,train 69,1,train +110,2,train 2846,2,train 2887,3,train 289,4,train 2584,2,train +2188,2,train 2625,3,train -27,4,train +3021,3,train 2322,2,train 2105,4,train 189,2,train 3317,1,train +323,2,train 3496,3,train 3234,3,train -2838,3,train -3530,1,train -99,1,train +2401,2,train +3396,1,train +536,2,train 2917,3,train 319,4,train -3051,3,train -2655,3,train 57,4,train +615,2,train +3743,1,train 353,2,train -91,2,train +790,3,train +3085,1,train +3567,4,train 3264,3,train -270,4,train +3305,4,train 3002,3,train -2606,3,train +8,4,train 3822,1,train -566,2,train +3164,1,train +170,2,train 607,3,train 2902,1,train 304,2,train 3081,3,train +3384,4,train 3914,4,train 87,4,train 2819,3,train -3910,3,train 3377,1,train 3993,4,train +820,3,train 3115,1,train 3511,1,train 517,2,train -3294,3,train 300,4,train +3032,3,train 38,4,train +1116,1,train +899,3,train 3590,1,train 4027,2,train 596,2,train 637,3,train 1033,3,train -2932,1,train -771,3,train 3328,1,train -3548,4,train -3810,4,train 1329,1,train -1067,1,train -3844,2,train -1246,3,train +3803,1,train 3541,1,train 3145,1,train -3978,2,train +3582,2,train +547,2,train 588,3,train +3978,2,train 3499,4,train -3103,4,train 1542,1,train 1146,1,train +884,1,train 1500,4,train 3358,1,train -3795,2,train +405,3,train 3578,4,train 3712,4,train -1359,1,train 3874,2,train +1713,4,train +1317,4,train +3571,1,train +3612,2,train 4049,3,train -1014,3,train +618,3,train +1055,4,train 3791,4,train 752,3,train 1572,1,train -1613,2,train +1310,1,train 3825,2,train -831,3,train 3959,2,train 965,3,train +1785,1,train 1826,2,train 1960,2,train -1127,1,train 1564,2,train 1261,1,train 865,1,train -1347,4,train +1743,4,train 4038,2,train 1044,3,train 1085,4,train 1481,4,train 4079,3,train 823,4,train -2039,2,train 1340,1,train -944,1,train +1777,2,train 1078,1,train 1560,4,train -1298,4,train -2252,2,train +4030,3,train 1856,2,train +1553,1,train 1594,2,train 2031,3,train 1332,2,train -1511,4,train 1115,4,train -1249,4,train 1807,2,train 2244,3,train 1941,2,train -2323,3,train +1545,2,train 2020,2,train -1624,2,train -1758,2,train +1362,2,train +1541,4,train 2753,1,train 2536,3,train 2670,3,train -1837,2,train 1971,2,train +1575,2,train 2966,1,train 2749,3,train +2487,3,train 2225,3,train 3045,1,train 3179,1,train 2962,3,train -3137,4,train +2521,1,train +2700,3,train 2304,3,train 2741,4,train -2042,3,train +3137,4,train 2734,1,train -2517,3,train +2954,4,train 2255,3,train +3209,1,train 3250,2,train 3033,4,train 2730,3,train +2289,1,train 3167,4,train 2468,3,train 2509,4,train -290,1,train 3026,1,train 3463,2,train +469,3,train 73,3,train -207,3,train 2502,1,train +2984,4,train +3118,4,train 2722,4,train 765,1,train -503,1,train -3280,2,train 3676,2,train -682,3,train -286,3,train -2581,1,train +3280,2,train 3414,2,train +2581,1,train 420,3,train 24,3,train 2715,1,train 2801,4,train -3197,4,train -2935,4,train -2539,4,train 978,1,train 582,1,train 320,1,train -3097,2,train -3627,2,train +3493,2,train +499,3,train 2794,1,train +3627,2,train 2969,2,train +3148,4,train 2886,4,train 1191,1,train 795,1,train +533,1,train +970,2,train 3747,3,train -712,3,train 753,4,train -3048,2,train 3444,2,train +3485,3,train 450,3,train -54,3,train -491,4,train -887,4,train 2786,2,train 2965,4,train -3485,3,train -1049,2,train +1008,1,train 746,1,train -3960,3,train +350,1,train +1183,2,train 484,1,train +966,4,train 3657,2,train 1100,4,train -2999,2,train -401,3,train +3994,2,train +1262,2,train 3994,1,train -959,1,train +1396,2,train 563,1,train 3777,3,train +1179,4,train 3911,3,train 301,1,train 783,4,train -480,3,train -521,4,train +917,4,train 3212,2,train 3474,2,train +3515,3,train 655,4,train 259,4,train -3515,3,train 1475,2,train 1079,2,train -1213,2,train -514,1,train -951,2,train -3687,2,train +1609,2,train +3990,3,train 3728,3,train -734,4,train +1130,4,train 3425,2,train 3466,3,train +868,4,train 1688,2,train 4024,1,train 989,1,train @@ -8088,32 +8112,27 @@ parameter_index,simulation_index,split 1426,2,train 1467,3,train 3545,3,train -947,4,train +4075,3,train 551,4,train 3679,3,train -4075,3,train -685,4,train +1639,2,train 1680,3,train -3975,1,train 1377,2,train 981,2,train 3758,3,train +1160,4,train 764,4,train -3933,4,train 898,4,train 1976,1,train 1759,3,train -1456,2,train -1497,3,train -1194,2,train +4054,1,train +1893,3,train 798,2,train -3971,3,train -2189,1,train 1972,3,train -4005,1,train -3963,4,train +2106,3,train +1710,3,train +1844,3,train 1923,3,train -1527,3,train 1224,2,train 1661,3,train 2615,1,train @@ -8121,573 +8140,577 @@ parameter_index,simulation_index,split 2353,1,train 2136,3,train 2177,4,train +1437,2,train 1478,3,train 1915,4,train 2432,1,train -1953,3,train -2390,4,train +2170,1,train +1774,1,train 1691,3,train -2128,4,train 1825,3,train -2645,1,train -2686,2,train 1987,1,train +2424,2,train 2207,4,train 1904,3,train 1945,4,train +2341,4,train 122,1,train 2637,2,train 1804,1,train -2334,1,train -1721,3,train +1938,1,train +2420,4,train 2158,4,train 1896,4,train -2716,2,train +335,1,train 118,3,train 2413,1,train -2017,1,train -2454,2,train 2850,2,train 2151,1,train 2371,4,train +2109,4,train 152,1,train -2929,2,train -2667,2,train +110,4,train 2364,1,train 2584,4,train +2188,4,train 2322,4,train 3400,1,train -406,2,train 3142,2,train -103,1,train +3183,3,train 189,4,train 2484,2,train -2880,2,train 3317,3,train +323,4,train +2401,4,train 3613,1,train 182,1,train -3530,3,train +3396,3,train +316,1,train +3093,2,train 2697,2,train -3826,1,train +536,4,train +2831,2,train 3430,1,train 395,1,train 436,2,train +832,2,train 133,1,train -174,2,train +615,4,train +2910,2,train 2951,3,train 353,4,train 2648,2,train -91,4,train -4039,1,train -3822,3,train +3085,3,train +1045,2,train +649,2,train 3381,1,train +3822,3,train +3164,3,train 3601,4,train -84,1,train -566,4,train +170,4,train 2902,3,train 304,4,train -3460,1,train -862,2,train 466,2,train 903,3,train -3377,3,train +3594,1,train +204,2,train 2981,3,train +3377,3,train 3511,3,train 3115,3,train 4069,1,train 3673,1,train -1075,2,train -813,2,train +3807,1,train +679,2,train +1116,3,train 417,2,train +3149,1,train 3590,3,train -3631,4,train 596,4,train 3328,3,train -2932,3,train +3631,4,train 4027,4,train +3886,1,train 1329,3,train 3624,1,train -1067,3,train -3362,1,train -3844,4,train -3541,3,train +368,2,train 3145,3,train +3541,3,train +3582,4,train 3978,4,train 1363,1,train 1542,3,train 1146,3,train 3441,1,train 3837,1,train +884,3,train 3575,1,train +581,2,train 3358,3,train 3399,4,train -3795,4,train 1442,1,train 1576,1,train -1359,3,train 660,2,train 3788,1,train 3874,4,train +3612,4,train +1655,1,train 1789,1,train 1572,3,train 1131,1,train -1613,4,train -3867,1,train 873,2,train +1310,3,train 1351,4,train 3646,2,train 3825,4,train -3429,4,train 1868,1,train +1210,1,train 1826,4,train 1960,4,train -1127,3,train 1564,4,train 1261,3,train 865,3,train 4038,4,train -2081,1,train 2256,2,train -1860,2,train -2039,4,train +1557,1,train 1161,1,train 3938,2,train 1340,3,train -944,3,train -1381,4,train +1777,4,train 1078,3,train +2469,2,train 1636,1,train -2073,2,train -2252,4,train 1374,1,train 1856,4,train 1594,4,train 1332,4,train -2152,2,train -1849,1,train +2286,2,train 1890,2,train 1587,1,train -1628,2,train 1807,4,train -1411,4,train +1545,4,train 2499,2,train -1800,1,train -1841,2,train 2237,2,train +1841,2,train 2020,4,train -1624,4,train -1758,4,train -2753,3,train +1362,4,train +2316,2,train 1920,2,train +2753,3,train +1658,2,train +1575,4,train +55,2,train 2529,2,train 2133,2,train 2966,3,train 1871,2,train 2308,3,train -268,2,train +2866,1,train 3045,3,train 6,2,train 2387,3,train +2084,2,train +2521,3,train 3079,1,train 481,2,train 85,2,train +3213,1,train 219,2,train 3037,4,train +2297,2,train 2734,3,train 2076,3,train 3292,1,train 339,3,train 36,2,train 3250,4,train +2289,3,train 3109,1,train +511,2,train 115,2,train 3284,2,train -2847,1,train 3243,1,train 249,2,train -290,3,train -2585,1,train 3026,3,train +2585,1,train 3067,4,train -2805,4,train 3463,4,train +2805,4,train 2502,3,train -3322,1,train 765,3,train +369,3,train 3060,1,train 66,2,train -503,3,train 3194,1,train 3280,4,train +3676,4,train 3414,4,train 2581,3,train -3676,4,train 2715,3,train 1195,1,train 799,1,train -3576,2,train 978,3,train 582,3,train +2877,1,train 3273,1,train 3314,2,train 320,3,train 3011,1,train -3097,4,train +3493,4,train 17,2,train 2794,3,train +2835,4,train 2969,4,train -878,1,train 795,3,train +3527,2,train 3923,2,train +533,3,train +970,4,train 3224,1,train +3265,2,train 3444,4,train -3048,4,train 2786,4,train -1091,1,train -1266,2,train 4002,2,train +1008,3,train 567,1,train -1049,4,train -3344,2,train 746,3,train -787,4,train -3082,2,train +350,3,train +1183,4,train 3478,2,train 484,3,train -88,3,train -2999,4,train +2865,4,train 1304,1,train -1176,1,train +1042,1,train 780,1,train +1262,4,train 3953,2,train -3994,3,train +1396,4,train 563,3,train 3295,2,train -3691,2,train +3994,3,train 301,3,train 3474,4,train 3212,4,train 1255,1,train -859,1,train 1692,2,train 4073,3,train 993,1,train 597,1,train 1079,4,train 1475,4,train -1213,4,train -514,3,train -951,4,train -1905,2,train +3770,2,train 1072,1,train -1688,4,train +1206,1,train 810,1,train -1247,2,train +1688,4,train 3983,2,train 1426,4,train 1030,4,train 3721,2,train 4024,3,train +1722,2,train +1326,2,train +1460,2,train 627,1,train 1064,2,train 847,4,train -3975,3,train 981,4,train -1539,2,train 1976,3,train 1236,1,train -1456,4,train +840,1,train +4054,3,train 3792,3,train -1194,4,train 798,4,train 1752,2,train -2189,3,train -1490,2,train 1094,2,train 1228,2,train -4005,3,train 1965,2,train 1703,2,train 1307,2,train +1744,3,train +1441,2,train 1224,4,train 2302,1,train 2219,3,train 1823,3,train 2353,3,train -1520,2,train +1654,2,train +2515,1,train 2649,1,train -2253,1,train 2432,3,train 1733,2,train +1774,3,train +2170,3,train 2211,4,train 2728,1,train -2686,4,train +2332,1,train +2466,1,train +2204,1,train 1987,3,train +2424,4,train 2679,1,train -2283,1,train -2720,2,train 122,3,train 2021,1,train 2503,4,train 2637,4,train 1804,3,train -2496,1,train +1938,3,train +3329,2,train 2933,2,train -2716,4,train +335,3,train 2413,3,train -2017,3,train -2454,4,train 2850,4,train 2151,3,train 235,1,train -2709,1,train -2313,1,train +3012,2,train +3146,2,train 2750,2,train 152,3,train 193,4,train 2051,1,train -2929,4,train -2667,4,train +2447,1,train 2271,4,train 314,1,train -186,1,train 3400,3,train -406,4,train -2264,1,train 2660,1,train -103,3,train -2701,2,train -2484,4,train -2880,4,train +2264,1,train 3142,4,train -661,1,train -3176,2,train -2780,2,train +2484,4,train +399,1,train 3613,3,train +2780,2,train 182,3,train 223,4,train +2477,1,train 2697,4,train 478,1,train -3826,3,train 3430,3,train -216,1,train -3389,2,train +2993,2,train 395,3,train 436,4,train +832,4,train 2731,2,train 133,3,train -174,4,train -3127,2,train +2910,4,train 3168,3,train 2648,4,train 295,1,train -732,2,train +33,1,train 3206,2,train +167,1,train 253,4,train +649,4,train +2548,2,train +2944,2,train 3381,3,train 3939,1,train -3460,3,train -862,4,train +246,1,train +683,2,train 466,4,train -2761,2,train 3157,2,train +3594,3,train +204,4,train 3890,1,train 896,2,train +500,2,train 3673,3,train +679,4,train +3807,3,train 417,4,train -1371,2,train +3149,3,train 975,2,train 3707,1,train 1109,2,train 713,2,train -3927,4,train -451,2,train +3445,1,train +3886,3,train 3624,3,train -3362,3,train -1188,2,train +3228,3,train +368,4,train 3920,1,train 926,2,train +530,2,train 1363,3,train -3658,1,train 1060,2,train 664,2,train 3441,3,train +3658,1,train 3837,3,train 3575,3,train -1659,1,train +581,4,train 1442,3,train 3935,2,train 1576,3,train 1180,3,train -3871,1,train +3957,4,train 877,2,train 3695,4,train 660,4,train 1738,1,train -1872,1,train +1655,3,train 3950,1,train 1789,3,train 4084,1,train 3688,1,train 1090,2,train 1131,3,train -3867,3,train 3646,4,train 1951,1,train +2085,1,train 1689,1,train 1868,3,train +1427,1,train +1169,2,train +1210,3,train 3901,1,train +3725,4,train 2164,1,train 2298,1,train +1902,1,train 1640,1,train 2256,4,train -1860,4,train +1557,3,train 1161,3,train 3938,4,train +2377,1,train 2115,1,train +1719,1,train 2156,2,train +1457,1,train 1636,3,train -1677,4,train -2073,4,train 1374,3,train -1932,1,train +2066,1,train 1670,1,train -2152,4,train -1849,3,train +2286,4,train 1890,4,train 1587,3,train -1628,4,train 2448,2,train 2145,1,train 1883,1,train 1487,1,train -2320,2,train 2237,4,train 1841,4,train 2795,2,train -2399,2,train -2096,1,train -2533,2,train +1700,1,train +2316,4,train 1920,4,train +1658,4,train +55,4,train 2133,4,train 1871,4,train -48,1,train 2825,2,train -268,4,train +2866,3,train 2126,1,train 2167,2,train 2563,2,train 6,4,train +2301,2,train 2604,3,train +2084,4,train 127,1,train +168,2,train 302,2,train 3079,3,train 85,4,train 2380,2,train +3213,3,train 219,4,train 2514,2,train 3375,1,train -381,2,train 3113,1,train -3509,1,train 78,1,train -515,2,train 3292,3,train -2593,2,train +2197,2,train 2634,3,train 36,4,train -2372,3,train -3192,1,train -594,2,train -198,2,train -3326,1,train 3722,1,train +198,2,train 332,2,train 3109,3,train 115,4,train -2847,3,train 3243,3,train 3284,4,train 2585,3,train 3801,1,train +3405,1,train +807,2,train 3539,1,train 3143,1,train -3580,2,train 108,1,train -545,2,train +149,2,train 586,3,train -3322,3,train -283,2,train +3363,4,train 3060,3,train 2664,3,train 66,4,train +3752,1,train 1195,3,train 362,2,train 799,3,train -3094,1,train -496,2,train +100,2,train +2877,3,train 3273,3,train 3314,4,train -3576,4,train 3011,3,train 17,4,train 1095,1,train -3872,2,train 4006,2,train -878,3,train +3173,1,train 3610,2,train -179,2,train +575,2,train 616,3,train 2911,1,train 3307,1,train +313,2,train 354,3,train -4085,2,train -1091,3,train -3386,1,train +3527,4,train +3265,4,train 3782,1,train 4002,4,train -1266,4,train +3124,1,train 3561,2,train -526,2,train +130,2,train 567,3,train -3344,4,train 3478,4,train -3082,4,train -1521,1,train 1304,3,train 863,1,train 3640,2,train 4036,2,train -3337,1,train +1042,3,train +646,3,train 3774,2,train 780,3,train -3691,4,train +3161,4,train 3295,4,train 1734,1,train 1338,1,train 1472,1,train +1076,1,train +3853,2,train 1255,3,train -859,3,train 1692,4,train +3550,1,train 3591,2,train 993,3,train 597,3,train +3770,4,train 3987,2,train -1551,1,train -1289,1,train +1155,1,train +1592,2,train 893,1,train 4066,2,train 1072,3,train +1113,4,train 3804,2,train 810,3,train -1247,4,train 3721,4,train 1368,1,train -1805,2,train -1543,2,train +1502,1,train +1722,4,train 844,1,train +1326,4,train 4017,2,train -4058,3,train +1460,4,train 627,3,train 1064,4,train 2018,2,train @@ -8695,4181 +8718,4158 @@ parameter_index,simulation_index,split 923,1,train 1057,1,train 1143,4,train -1539,4,train +840,3,train +1835,2,train 1532,1,train -1969,2,train +1270,1,train 1752,4,train -4047,2,train 4088,3,train -1490,4,train 1094,4,train 1228,4,train 2048,2,train 1349,1,train -1786,2,train 1524,2,train 1703,4,train 1307,4,train +1441,4,train 2519,1,train +2261,2,train 2302,3,train +1999,2,train 1603,2,train +2040,3,train 1737,2,train 1341,2,train -1520,4,train -2732,1,train +2515,3,train 2649,3,train -2253,3,train 1950,2,train 2945,1,train 2549,1,train 2728,3,train -2029,2,train +2332,3,train +2466,3,train +2070,3,train 1767,2,train +2204,3,train 2500,1,train 2679,3,train -2283,3,train -2720,4,train 1980,2,train 2021,3,train 22,3,train 2317,1,train -2496,3,train +2713,1,train +2799,4,train 2933,4,train +2100,3,train +1838,3,train 235,3,train 2926,1,train -2709,3,train -2313,3,train +3012,4,train +3146,4,train 2750,4,train +2447,3,train 2051,3,train -2488,4,train 314,3,train -3005,1,train -3046,2,train -11,2,train 3442,2,train 2347,1,train -186,3,train -2481,1,train 2264,3,train -2701,4,train 744,1,train -3655,2,train 482,1,train +3218,1,train 3259,2,train -661,3,train +2956,1,train 2560,1,train -3176,4,train +399,3,train +2694,1,train 2780,4,train -2518,4,train +2477,3,train +957,1,train 299,1,train 3076,2,train 478,3,train 82,3,train 2773,1,train 3606,2,train -216,3,train -3127,4,train +2993,4,train 2731,4,train -1170,1,train -774,1,train -908,1,train -512,1,train 3289,2,train -3685,2,train 3726,3,train 295,3,train 3464,3,train -732,4,train 2986,1,train 3027,2,train -470,4,train +33,3,train 2765,2,train 3206,4,train +167,3,train +2944,4,train +2548,4,train 1028,2,train 725,1,train +3502,2,train 3939,3,train 463,1,train 3240,2,train 3636,2,train -3374,2,train +246,3,train +683,4,train 2978,2,train +3374,2,train 3157,4,train -2761,4,train -3973,1,train +1241,2,train +938,1,train 1375,2,train -979,2,train -676,1,train -3453,2,train -3494,3,train 3890,3,train +3494,3,train 896,4,train +500,4,train 3191,2,train +238,4,train +1454,2,train 1058,2,train 1588,2,train -359,1,train -493,1,train 975,4,train 3707,3,train 1109,4,train 713,4,train -451,4,train +3445,3,train 1667,2,train 4003,1,train 968,1,train -1405,2,train -1446,3,train +1009,2,train 3741,1,train -1188,4,train -747,2,train 3920,3,train 926,4,train +530,4,train 3658,3,train 664,4,train 1484,2,train -1659,3,train 3954,1,train 1356,2,train 960,2,train -3871,3,train 877,4,train 1738,3,train +4033,1,train 1435,2,train 1476,3,train -1872,3,train -3771,1,train 777,2,train 3950,3,train 3688,3,train 1951,3,train +2085,3,train 1252,2,train 1689,3,train +3984,1,train +1427,3,train 3901,3,train -3942,4,train 2381,1,train -1985,1,train 2164,3,train 1723,1,train +1902,3,train 1506,3,train -1203,2,train 1640,3,train -2198,1,train +3772,4,train +1936,1,train 2115,3,train +1719,3,train 2156,4,train -2411,1,train -1932,3,train +1457,3,train +3972,4,train +2149,1,train 1670,3,train 2624,1,train 2228,1,train -2665,2,train +1966,1,train 2448,4,train 2145,3,train 1883,3,train 1487,3,train -2320,4,train 2441,1,train -2179,1,train -1783,1,train +2482,2,train 2616,2,train -2399,4,train -2533,4,train +1783,1,train +1700,3,train +3091,2,train 2695,2,train 2392,1,train -1996,1,train 1954,4,train 3042,2,train 2563,4,train 2167,4,train -344,1,train +2301,4,train 3121,2,train 127,3,train +168,4,train 2422,1,train -2463,2,train +2900,3,train 302,4,train 2597,2,train +2201,2,train 2380,4,train 423,1,train -161,1,train 3375,3,train -381,4,train 3113,3,train -3509,3,train -515,4,train 2810,2,train -2414,2,train -2593,4,train -811,2,train -415,2,train -3192,3,train -594,4,train +2197,4,train +3409,1,train 198,4,train 2493,2,train -3326,3,train +2930,3,train 332,4,train 2627,2,train -3622,1,train 3801,3,train -366,2,train -3143,3,train +3405,3,train 3539,3,train -545,4,train +3143,3,train +149,4,train 2840,2,train -3580,4,train -283,4,train 3701,1,train 404,1,train -882,3,train 3573,1,train +3177,1,train +3659,4,train +142,1,train 579,2,train -183,2,train 2960,3,train 362,4,train -3094,3,train +100,4,train 4048,1,train 4089,2,train -658,2,train -3872,4,train 1095,3,train 3390,1,train 792,2,train 396,2,train +3173,3,train 3610,4,train -4006,4,train -179,4,train -2911,3,train +575,4,train 3307,3,train +2911,3,train 3348,4,train +313,4,train +4006,4,train +3865,1,train 3469,1,train -871,2,train -475,2,train 912,3,train 3207,1,train -4085,4,train -213,2,train -3386,3,train 347,2,train +3124,3,train 3561,4,train -4078,1,train -3682,1,train -1521,3,train +130,4,train 3816,1,train 3420,1,train +3857,2,train 822,2,train 863,3,train 3554,1,train 3640,4,train 560,2,train -3337,3,train 3774,4,train +3378,4,train 4036,4,train -1421,1,train 1555,1,train 1338,3,train -4070,2,train +942,3,train 3237,1,train -639,2,train +3633,1,train +1076,3,train 3767,1,train +3853,4,train +4070,2,train 3987,4,train 3591,4,train -1768,1,train -1551,3,train -3846,1,train -1289,3,train +1155,3,train +1592,4,train +3450,1,train 893,3,train 1330,4,train 4066,4,train 3804,4,train 3408,4,train +1847,1,train 1585,1,train 1368,3,train -1805,4,train -1543,4,train 710,3,train +3838,2,train 844,3,train 4017,4,train 2060,1,train -1664,1,train +1798,1,train +1839,2,train 1536,1,train +1140,1,train 1622,4,train 2018,4,train 3917,2,train 923,3,train -1360,4,train -4051,2,train 1057,3,train 2052,2,train -1219,1,train -1353,1,train -1969,4,train -4047,4,train +1835,4,train +1270,3,train +2131,2,train +1828,1,train 1432,1,train -1869,2,train +2265,2,train 2048,4,train -1786,4,train +1349,3,train 1524,4,train -958,1,validate -3339,2,validate -782,4,validate -2478,2,validate -3256,4,validate -3819,1,validate -825,2,validate -167,2,validate -2944,3,validate -346,4,validate -1553,3,validate -296,3,validate -3502,1,validate -2033,2,validate -2895,2,validate -3807,4,validate -805,1,validate -2845,1,validate -1454,1,validate -3886,4,validate -806,2,validate -2233,4,validate +1433,2,validate +1087,2,validate +2032,1,validate +84,4,validate +3856,4,validate +3291,3,validate +2203,4,validate +812,4,validate +247,3,validate +2246,2,validate +3453,1,validate +2029,4,validate +2678,4,validate +2812,4,validate +1421,4,validate +1159,4,validate +2063,2,validate +2409,1,validate +2891,4,validate +64,2,validate 3533,2,validate -539,3,validate -2713,3,validate -3321,2,validate +1801,1,validate +1405,1,validate +885,2,validate +3617,1,validate +3059,2,validate 2663,2,validate +2842,4,validate 2446,4,validate 1451,4,validate +3787,3,validate 1189,4,validate -3484,1,validate -1089,2,validate -1006,4,validate -1140,4,validate -1655,4,validate +227,1,validate +3871,2,validate +2876,2,validate +3046,4,validate +1831,1,validate +11,4,validate +2481,3,validate 3392,3,validate -398,4,validate +2693,2,validate 3130,3,validate -2085,2,validate +3039,1,validate 2997,4,validate -1782,1,validate -2002,4,validate -1169,3,validate +653,1,validate +694,2,validate 3605,3,validate -3209,3,validate 1344,4,validate -3343,3,validate -2644,2,validate -957,3,validate -1253,2,validate -1861,1,validate +1952,3,validate 1599,1,validate -1819,4,validate -645,2,validate -1557,4,validate -1466,2,validate -1507,3,validate -462,2,validate -2461,1,validate -3635,3,validate +1203,1,validate +3556,3,validate +857,1,validate +1728,2,validate +774,3,validate +512,3,validate +1416,1,validate +3852,1,validate +2032,4,validate 1770,4,validate -379,4,validate -2419,4,validate -546,1,validate -3502,4,validate -3931,1,validate +3981,2,validate +3282,1,validate +3061,2,validate +1932,2,validate 67,3,validate -675,2,validate -2279,2,validate -1325,3,validate +413,2,validate +1537,3,validate +3536,2,validate +1671,3,validate +979,4,validate +3453,4,validate 2711,4,validate -2845,4,validate +2408,3,validate 1234,1,validate -4052,3,validate -1454,4,validate -796,4,validate -3833,1,validate -2704,1,validate -839,2,validate -2442,1,validate -3395,4,validate -1051,1,validate -1488,2,validate +1275,2,validate +3353,2,validate +2096,2,validate +2533,3,validate 2266,4,validate -3091,1,validate -2829,1,validate -1009,4,validate -1438,1,validate -1617,3,validate -1093,3,validate +1405,4,validate +747,4,validate +2746,3,validate +918,2,validate +959,3,validate +2655,1,validate 2696,2,validate -2393,1,validate -1305,2,validate -2217,4,validate -3438,1,validate -2959,3,validate -2301,3,validate -394,1,validate -1609,4,validate -910,3,validate -218,4,validate -2430,4,validate -1256,2,validate -4033,3,validate -3213,4,validate -211,1,validate -431,4,validate -3900,4,validate -1731,2,validate -2247,4,validate -3072,1,validate -3984,3,validate +1567,2,validate +2613,4,validate +1043,2,validate +48,2,validate +3221,3,validate +1651,1,validate +260,1,validate +3687,4,validate +3821,4,validate +261,2,validate +3771,3,validate +473,1,validate 2118,2,validate -861,2,validate -1639,4,validate -248,4,validate -2939,2,validate -3073,2,validate -2460,4,validate +2593,3,validate +644,4,validate +811,1,validate +4018,1,validate 1420,2,validate -2806,3,validate -1632,1,validate -678,2,validate -1590,4,validate -2931,3,validate -1936,3,validate -2544,2,validate -3751,1,validate -1449,1,validate -495,2,validate -674,4,validate -2232,1,validate -412,4,validate +1203,4,validate +29,2,validate +1074,2,validate +3851,3,validate +857,4,validate +158,3,validate +941,3,validate +545,3,validate +454,1,validate +2494,1,validate +1803,4,validate +3802,3,validate +3103,2,validate 3144,3,validate -2015,3,validate -546,4,validate -150,4,validate -4014,2,validate 2757,2,validate -1796,1,validate -405,1,validate -1054,1,validate -1966,3,validate +2495,2,validate +3702,1,validate +3619,3,validate 3703,2,validate -3915,1,validate -921,2,validate -3653,1,validate -1055,2,validate -1437,4,validate -2482,4,validate +2178,2,validate +1875,1,validate +1916,2,validate +525,2,validate +1833,4,validate +2220,4,validate +1091,4,validate 3520,2,validate -130,3,validate -1175,3,validate +526,3,validate +3470,1,validate 872,2,validate 2475,1,validate 2079,1,validate -3091,4,validate -2829,4,validate -89,1,validate -2130,3,validate -1438,4,validate -1042,4,validate -2342,2,validate -2292,1,validate +393,4,validate +3337,2,validate +1176,4,validate +2779,3,validate +131,3,validate +3600,3,validate 2512,4,validate -2250,4,validate -1684,1,validate +3471,1,validate +639,1,validate +260,4,validate 2992,3,validate +293,1,validate 31,1,validate +3500,1,validate +210,3,validate +1947,2,validate +2463,4,validate +1248,1,validate +3288,1,validate 3071,3,validate -1156,3,validate -894,3,validate -202,4,validate -3805,4,validate -1502,2,validate -3542,2,validate -3239,1,validate -245,2,validate -1023,4,validate +2718,1,validate +2759,2,validate +161,3,validate +2893,2,validate +3671,4,validate +2414,4,validate 3926,1,validate -973,3,validate -3409,3,validate -711,2,validate -12,1,validate -2923,2,validate -2365,3,validate -1270,2,validate -3751,4,validate -2873,1,validate -1449,4,validate -3489,4,validate -1482,1,validate -1616,1,validate -2232,4,validate +811,4,validate +415,4,validate +4018,4,validate +4051,1,validate +761,3,validate +1927,1,validate +2102,2,validate +3014,4,validate +3488,3,validate +232,4,validate +366,4,validate +537,2,validate +275,2,validate +2315,2,validate +3918,1,validate +1702,4,validate +1399,3,validate 2661,1,validate -2265,1,validate -2444,3,validate -142,3,validate -1745,2,validate +874,1,validate 1483,2,validate +791,3,validate +3702,4,validate 2091,1,validate +1433,1,validate +1653,4,validate 3652,3,validate -3256,3,validate -2478,1,validate -2261,3,validate -825,1,validate -1045,4,validate -3299,1,validate -346,3,validate +658,4,validate +1087,1,validate +84,3,validate 3257,4,validate -389,1,validate -2033,1,validate -2515,4,validate +1866,4,validate +1300,1,validate +43,1,validate 1258,4,validate -2820,2,validate +996,4,validate +2995,3,validate +3291,2,validate +3470,4,validate +2296,2,validate 2079,4,validate -2904,1,validate -3857,4,validate -2466,4,validate +468,1,validate +3682,3,validate +643,2,validate +2642,1,validate +2246,1,validate +2029,3,validate 2163,3,validate -1684,4,validate -806,1,validate -1288,4,validate +1034,3,validate +2812,3,validate +1421,3,validate +1159,3,validate +2459,1,validate +2063,1,validate +639,4,validate +1202,1,validate 2417,4,validate -1026,4,validate +2891,3,validate +293,4,validate 31,4,validate -539,2,validate -2713,2,validate -3321,1,validate -802,3,validate +3500,4,validate +4063,1,validate +3846,3,validate +885,1,validate +3059,1,validate +2842,3,validate 3279,4,validate -1847,3,validate 1451,3,validate +673,1,validate 1189,3,validate +2709,4,validate 3534,1,validate -1232,1,validate -2447,4,validate -1798,3,validate -1839,4,validate -1140,3,validate -145,3,validate -2185,3,validate +2143,1,validate +2876,1,validate +1664,3,validate +11,3,validate +2702,1,validate +4051,4,validate +2481,2,validate 1486,2,validate -3006,3,validate -12,4,validate -2956,2,validate -2002,3,validate +491,2,validate +3309,4,validate +3047,4,validate +2744,3,validate +224,3,validate +661,4,validate 3605,2,validate -2873,4,validate -1482,4,validate -2131,4,validate -957,2,validate -2265,4,validate -3868,3,validate -612,4,validate -2215,3,validate -958,3,validate -3339,4,validate -1466,1,validate -1600,1,validate -3382,2,validate -3819,3,validate -825,4,validate -3635,2,validate -167,4,validate +3522,4,validate +392,1,validate +874,4,validate +216,4,validate +1778,2,validate +1516,2,validate +3556,2,validate +1728,1,validate +774,2,validate +908,2,validate +3120,2,validate +1254,1,validate +2032,3,validate 1770,3,validate -379,3,validate -3502,3,validate -2033,4,validate -2279,1,validate -2895,4,validate -805,3,validate -2845,3,validate -1454,3,validate +3769,2,validate +338,2,validate +3981,1,validate +1813,1,validate +1200,2,validate +3453,3,validate +1546,1,validate +3933,2,validate +2804,2,validate +2408,2,validate +2063,4,validate +2409,3,validate 106,1,validate -839,1,validate +64,4,validate 3533,4,validate -2359,2,validate -4096,1,validate -1617,2,validate -1314,1,validate +1801,3,validate +1405,3,validate +2705,1,validate +2746,2,validate +885,4,validate +3617,3,validate +918,1,validate 2663,4,validate -2959,2,validate -3567,1,validate -1089,4,validate -2127,1,validate -1731,1,validate -2085,4,validate +2613,3,validate +3221,2,validate +227,3,validate +3871,4,validate +2876,4,validate +1265,1,validate +573,2,validate +4042,2,validate +311,2,validate +1831,3,validate +261,1,validate +2693,4,validate +3518,1,validate +3039,3,validate +694,4,validate +1295,1,validate +3731,1,validate +644,3,validate 3335,1,validate -2644,4,validate -3073,1,validate -1253,4,validate -1861,3,validate 1420,1,validate 1599,3,validate -3202,2,validate -2806,2,validate -645,4,validate -1466,4,validate +1203,3,validate +29,1,validate +1074,1,validate +3851,2,validate +857,3,validate +158,2,validate 292,2,validate -1895,1,validate 1337,2,validate -504,1,validate -2544,1,validate +941,2,validate 638,1,validate -462,4,validate -2461,3,validate -674,3,validate +1416,3,validate +3852,3,validate +1762,2,validate 3365,1,validate -2807,2,validate -546,3,validate -4014,1,validate -1846,1,validate -3931,3,validate +3802,2,validate +3981,4,validate +3103,1,validate +3282,3,validate +3061,4,validate +717,1,validate +1932,4,validate 2757,1,validate -675,4,validate -1579,2,validate -4015,2,validate +2495,1,validate +413,4,validate +3619,2,validate +3536,4,validate 1367,2,validate 3703,1,validate -2279,4,validate -1055,1,validate +668,1,validate +1833,3,validate 1234,3,validate +1275,4,validate 2837,2,validate -3183,1,validate -922,2,validate -1700,4,validate -3833,3,validate -2704,3,validate -839,4,validate -2442,3,validate +3353,4,validate +2096,4,validate 872,1,validate -1354,4,validate -1051,3,validate -1488,4,validate -3091,3,validate -2829,3,validate -2130,2,validate -1438,3,validate -3175,2,validate -2342,1,validate +3783,2,validate +393,3,validate +3000,1,validate +1176,3,validate +918,4,validate +1347,1,validate 2696,4,validate -2393,3,validate -1305,4,validate +1567,4,validate +3600,2,validate +131,2,validate +1043,4,validate +48,4,validate +1651,3,validate +260,3,validate 2992,2,validate -394,3,validate -2689,1,validate -1122,4,validate -1256,4,validate +1997,2,validate +1735,2,validate +210,2,validate +344,2,validate +1947,1,validate +261,4,validate 3071,2,validate 1165,2,validate -2768,1,validate -211,3,validate -1731,4,validate -2160,1,validate -3805,3,validate -3072,3,validate +473,3,validate +1511,1,validate +161,2,validate 2118,4,validate -3680,2,validate -245,1,validate -861,4,validate -2939,4,validate -374,2,validate +465,4,validate +2719,1,validate +1765,2,validate +811,3,validate +4018,3,validate +3326,4,validate 1420,4,validate -1935,4,validate -1632,3,validate -458,1,validate -3235,2,validate -678,4,validate +29,4,validate +1074,4,validate 3581,1,validate -2190,1,validate -2365,2,validate -2544,4,validate -3751,3,validate -1449,3,validate -3489,3,validate -495,4,validate -3186,2,validate -1795,2,validate -2232,3,validate -1533,2,validate -4014,4,validate -2444,2,validate -142,2,validate -1745,1,validate +325,2,validate +2324,1,validate +1666,1,validate +537,1,validate +671,1,validate +275,1,validate +454,3,validate +2494,3,validate +1399,2,validate +1929,2,validate +3094,4,validate 1483,1,validate -2008,2,validate -1054,3,validate +488,1,validate +3702,3,validate +658,3,validate +2354,1,validate +1958,1,validate 3703,4,validate -3915,3,validate -921,4,validate -3653,3,validate -3562,1,validate -2608,2,validate +2178,4,validate +1875,3,validate +1916,4,validate +525,4,validate 3520,4,validate -2820,1,validate -2954,1,validate +1217,2,validate +222,2,validate +2995,2,validate +3429,2,validate +3470,3,validate +2296,1,validate 872,4,validate 2475,3,validate 2079,3,validate +2559,2,validate 2163,2,validate -2342,4,validate -1776,1,validate -2292,3,validate -1684,3,validate -2984,1,validate +1034,2,validate +3337,4,validate +4029,2,validate +3592,1,validate +3471,3,validate +639,3,validate +293,3,validate 31,3,validate -74,1,validate -3980,2,validate -1198,2,validate -3634,2,validate -802,2,validate -1847,2,validate -1502,4,validate -2327,1,validate -3542,4,validate -3239,3,validate -245,4,validate -1889,4,validate +3500,3,validate +1947,4,validate +3846,2,validate +2851,2,validate +3288,3,validate +2935,1,validate +2718,3,validate +2759,4,validate +1981,2,validate +2893,4,validate +1282,1,validate 3926,3,validate -1798,2,validate -1495,1,validate -145,2,validate -711,4,validate -3006,2,validate -12,3,validate -2923,4,validate -1270,4,validate -2873,3,validate -1482,3,validate -1616,3,validate +104,1,validate +4051,3,validate +1927,3,validate +887,1,validate +491,1,validate +2102,4,validate +2744,2,validate +224,2,validate +275,4,validate +2315,4,validate +3918,3,validate 2661,3,validate -1828,2,validate 3827,1,validate -3868,2,validate -2265,3,validate -1745,4,validate -612,3,validate +1962,2,validate +874,3,validate +134,1,validate +3389,4,validate +1778,1,validate 1483,4,validate -917,1,validate -958,2,validate -2478,3,validate -3382,1,validate -3819,2,validate -825,3,validate -3299,3,validate -2033,3,validate -126,1,validate -2725,1,validate -2895,3,validate -805,2,validate +1433,3,validate +1087,3,validate +3120,1,validate +734,1,validate +338,1,validate +1517,1,validate +1300,3,validate +3291,4,validate +2296,4,validate +685,1,validate +468,3,validate +643,4,validate +247,4,validate +2642,3,validate +2246,3,validate +2155,1,validate +3933,1,validate 3200,1,validate -806,3,validate -1414,2,validate +2804,1,validate +2459,3,validate +2063,3,validate +2409,2,validate +23,2,validate 3533,3,validate -539,4,validate -2713,4,validate -369,1,validate -3321,3,validate -3230,1,validate +64,3,validate +1801,2,validate +885,3,validate +3617,2,validate +3059,3,validate +673,3,validate 3534,3,validate -3484,2,validate -2785,1,validate +2143,3,validate +2876,3,validate +4042,1,validate +573,1,validate +1790,1,validate +1831,2,validate +1528,1,validate +2481,4,validate 1486,4,validate -2956,4,validate -1782,2,validate -1169,4,validate +920,1,validate +1395,2,validate +3039,2,validate +653,2,validate +787,2,validate 3605,4,validate -2865,2,validate -3343,4,validate -999,1,validate -2644,3,validate -1253,3,validate -957,4,validate -2257,2,validate -1861,2,validate +88,1,validate +392,3,validate 1599,2,validate -3202,1,validate -2341,1,validate -1212,1,validate -1466,3,validate +1778,4,validate +1516,4,validate +3556,4,validate +1728,3,validate 292,1,validate -1600,3,validate +774,4,validate +908,4,validate +512,4,validate 1337,1,validate -2420,1,validate -2461,2,validate -3635,4,validate -2807,1,validate +3852,2,validate +817,2,validate +1254,3,validate +3769,4,validate +1762,1,validate +338,4,validate +3981,3,validate 3678,2,validate -634,2,validate -4015,1,validate -2109,1,validate -1417,2,validate +3282,2,validate +1200,4,validate +1671,4,validate 1367,1,validate -2279,3,validate -1325,4,validate -3579,1,validate +1546,3,validate +2408,4,validate 1234,2,validate 2837,1,validate -323,1,validate -3833,2,validate -2704,2,validate +2096,3,validate 106,3,validate -2401,1,validate -2442,2,validate -839,3,validate -1051,2,validate -2359,4,validate -4096,3,validate -1617,4,validate -1314,3,validate -1093,4,validate -2393,2,validate -3438,2,validate -1744,1,validate -2959,4,validate -790,2,validate -394,2,validate -3567,3,validate -1215,2,validate -1561,1,validate +2838,2,validate +748,1,validate +1793,1,validate +2705,3,validate +2746,4,validate +918,3,validate +2655,2,validate +48,3,validate +1610,1,validate +3221,4,validate +1348,1,validate +1265,3,validate +91,1,validate +573,4,validate +4042,4,validate +1997,1,validate +311,4,validate +2606,2,validate +261,3,validate +2260,2,validate 1165,1,validate -2127,3,validate -1731,3,validate -3984,4,validate -3680,1,validate +473,2,validate +1299,1,validate +3518,3,validate +1378,1,validate 3814,1,validate -1512,1,validate -861,3,validate +1295,3,validate 3335,3,validate -2939,3,validate -3073,3,validate 1420,3,validate -3202,4,validate -2806,4,validate -1632,2,validate -2374,1,validate +29,3,validate +1074,3,validate +3851,4,validate +158,4,validate 292,4,validate -1895,3,validate -721,1,validate -1936,4,validate +325,1,validate 1337,4,validate -504,3,validate -2544,3,validate -3582,1,validate -3186,1,validate +941,4,validate +454,2,validate +1762,4,validate 3365,3,validate -2807,4,validate -4014,3,validate -1846,3,validate +3802,4,validate +3103,3,validate +1196,1,validate +1929,1,validate +717,3,validate 2757,3,validate -1796,2,validate -1579,4,validate -405,2,validate -4015,4,validate -2008,1,validate -1013,1,validate -1054,2,validate -1966,4,validate +2495,3,validate +3795,1,validate +3619,4,validate +2791,1,validate 3703,3,validate -3915,2,validate -921,3,validate -3612,1,validate -618,2,validate -1055,3,validate +1875,2,validate 2837,4,validate +1401,2,validate 3520,3,validate -922,4,validate +1613,1,validate +526,4,validate +2088,2,validate +222,1,validate +356,1,validate +3429,1,validate 872,3,validate 2475,2,validate +3783,4,validate 781,1,validate -89,2,validate -2130,4,validate -3175,4,validate -2342,3,validate -435,1,validate -173,1,validate -3296,1,validate -1431,2,validate +3000,3,validate +2559,1,validate +2779,4,validate +1347,3,validate +3600,4,validate +131,4,validate +4029,1,validate +3471,2,validate +2039,1,validate 2992,4,validate -2689,3,validate -3980,1,validate +1997,4,validate +1735,4,validate +210,4,validate +2901,2,validate +344,4,validate +1947,3,validate +1644,2,validate +1248,2,validate +3288,2,validate 3071,4,validate 1165,4,validate -2768,3,validate -1198,1,validate -3634,1,validate -2160,3,validate -1502,3,validate -1199,2,validate -3680,4,validate -3239,2,validate -245,3,validate -1545,1,validate +203,1,validate +2718,2,validate +1981,1,validate +161,4,validate +2893,3,validate +2719,3,validate 3926,2,validate -374,4,validate -3714,2,validate -3015,1,validate -458,3,validate -3235,4,validate -1362,1,validate +1765,4,validate +761,4,validate +1927,2,validate +1624,1,validate +367,1,validate 3581,3,validate 105,1,validate -2882,2,validate -2190,3,validate -2923,3,validate +325,4,validate 1150,1,validate -754,1,validate -2365,4,validate -3186,4,validate -1616,2,validate -1795,4,validate +537,3,validate +671,3,validate +275,3,validate +2315,3,validate +1399,4,validate 2661,2,validate -1533,4,validate -2444,4,validate -142,4,validate -1745,3,validate +1962,1,validate 1483,3,validate +791,4,validate +488,3,validate 2091,2,validate -2008,4,validate +1096,2,validate 3652,4,validate -2261,4,validate -3957,2,validate -3299,2,validate -389,2,validate -3562,3,validate -2608,4,validate -3512,2,validate -2820,3,validate -2954,3,validate -2904,2,validate -1647,2,validate +1958,3,validate +2042,2,validate +3645,1,validate +1300,2,validate +997,1,validate +1217,4,validate +43,2,validate +2995,4,validate +2296,3,validate +468,2,validate +3596,1,validate +3682,4,validate +643,3,validate +2205,1,validate +2642,2,validate +2559,4,validate 2163,4,validate -3725,2,validate -1726,2,validate -1464,2,validate -3201,1,validate -2984,3,validate -1414,1,validate -3980,4,validate -1198,4,validate -802,4,validate -1847,4,validate -2327,3,validate +1034,4,validate +3592,3,validate +4029,4,validate +2459,2,validate +1202,2,validate +2072,1,validate +23,1,validate +4063,2,validate +3068,2,validate +3846,4,validate +1415,2,validate +286,2,validate +673,2,validate +1981,4,validate +1282,3,validate 3534,2,validate -1232,2,validate -1798,4,validate -321,1,validate -3098,2,validate -145,4,validate -970,1,validate -2185,4,validate +3231,1,validate +2143,2,validate +1840,1,validate +1664,4,validate +2702,2,validate +2836,2,validate 1486,3,validate -3006,4,validate -3831,1,validate -2956,3,validate -1183,1,validate +3048,1,validate +54,2,validate +491,3,validate +1395,1,validate +2744,4,validate +2440,1,validate +138,1,validate +224,4,validate +1049,1,validate +787,1,validate 3261,1,validate -2865,1,validate -2569,2,validate -1828,4,validate +2999,1,validate 3827,3,validate 2653,1,validate -2257,1,validate -3868,4,validate -2391,1,validate -1262,1,validate -2215,4,validate -958,4,validate -430,1,validate -1600,2,validate -3382,3,validate -3819,4,validate -3990,2,validate -2337,2,validate +392,2,validate +1778,3,validate +1516,3,validate +908,3,validate +3120,3,validate +817,1,validate +1254,2,validate +951,1,validate +3769,3,validate +734,3,validate +338,3,validate 3678,1,validate -2683,1,validate -126,3,validate -634,1,validate -1417,1,validate -2725,3,validate -3021,1,validate -805,4,validate -1110,2,validate +1517,3,validate +1813,2,validate +685,3,validate +1200,3,validate +1546,2,validate +2372,1,validate +2155,3,validate +3933,3,validate +2804,3,validate +373,1,validate +2409,4,validate 106,2,validate -1414,4,validate -1581,1,validate -452,1,validate -2359,3,validate -4096,2,validate -2268,1,validate -1314,2,validate -2056,1,validate -665,1,validate +2838,1,validate +23,4,validate +1801,4,validate +2705,2,validate +3617,4,validate +3051,1,validate 141,1,validate -790,1,validate -3567,2,validate -3484,4,validate -8,2,validate -2785,3,validate -1215,1,validate -2127,2,validate -1782,4,validate -1216,1,validate -999,3,validate +227,4,validate +1265,2,validate +4042,3,validate +573,3,validate +270,2,validate +311,3,validate +2606,1,validate +1831,4,validate +2260,1,validate +1003,1,validate +3518,2,validate +920,3,validate +3039,4,validate +653,4,validate +2948,2,validate +1295,2,validate +3731,2,validate +3294,1,validate 3335,2,validate +2474,2,validate 1775,1,validate -1861,4,validate -2257,4,validate +2686,1,validate 1599,4,validate -2424,1,validate -3202,3,validate 292,3,validate -1895,2,validate +900,2,validate 1337,3,validate -504,2,validate 638,2,validate -2420,3,validate -2461,4,validate +3852,4,validate +1416,4,validate +1246,1,validate +1762,3,validate 3365,2,validate -2807,3,validate -1846,2,validate -3845,1,validate -3931,4,validate -634,4,validate +3282,4,validate +717,2,validate +2454,1,validate 2192,1,validate -1579,3,validate -68,1,validate -2109,3,validate -4015,3,validate -1417,4,validate +2321,2,validate 1367,3,validate -3579,3,validate +2929,1,validate +4058,1,validate +668,2,validate +2405,1,validate 1276,1,validate -1713,2,validate -618,1,validate +1014,1,validate 1234,4,validate 2837,3,validate -2534,2,validate -3183,2,validate -922,3,validate -3833,4,validate -2222,1,validate -2704,4,validate -2442,4,validate -1227,1,validate -1051,4,validate -3175,3,validate -1743,2,validate -2393,4,validate -3438,4,validate -1431,1,validate -3905,1,validate -911,2,validate -790,4,validate -394,4,validate -2689,2,validate -565,2,validate -1215,4,validate -649,1,validate -1561,3,validate +1401,1,validate +2088,1,validate +2838,4,validate +3783,3,validate +1876,1,validate +748,3,validate +1793,3,validate +3000,2,validate +1347,2,validate +2655,4,validate +3480,1,validate +1610,3,validate +1651,4,validate +1348,3,validate +174,1,validate +1997,3,validate +91,3,validate +1735,3,validate +2606,4,validate +2901,1,validate +303,2,validate +344,3,validate +1644,1,validate +2260,4,validate 1165,3,validate -3164,2,validate -2768,2,validate -211,4,validate -2160,2,validate -3072,4,validate -1199,1,validate -3680,3,validate -204,1,validate +473,4,validate +1299,3,validate +1511,2,validate +3510,1,validate +1378,3,validate 3814,3,validate +2719,2,validate +1765,3,validate +3327,1,validate 1462,2,validate -374,3,validate -2070,1,validate -3714,1,validate -1632,4,validate -458,2,validate -3235,3,validate -2374,3,validate -3977,2,validate +1674,1,validate 3581,2,validate -2882,1,validate -2190,2,validate -721,3,validate -3582,3,validate -3186,3,validate -1279,1,validate -1017,1,validate -1795,3,validate -1533,3,validate -2799,2,validate -2100,1,validate -1838,1,validate -3878,1,validate -884,2,validate -2487,1,validate -1796,4,validate -405,4,validate -2008,3,validate -101,1,validate -1013,3,validate -1054,4,validate -3957,1,validate -4091,1,validate -3915,4,validate -2700,1,validate -3612,3,validate -3653,4,validate -2438,1,validate -618,4,validate -1047,1,validate -3562,2,validate -2567,2,validate -2608,3,validate -3512,1,validate -2954,2,validate +325,3,validate +2324,2,validate +1067,2,validate +671,2,validate +454,4,validate +2494,4,validate +1929,3,validate +3928,2,validate +488,2,validate +1096,1,validate +2354,2,validate +1958,2,validate +2488,2,validate +1875,4,validate +2042,1,validate +1401,4,validate +2305,2,validate +1613,3,validate +1217,3,validate +2088,4,validate +222,3,validate +2517,1,validate +2913,1,validate +356,3,validate +3429,3,validate 1697,2,validate 2475,4,validate 781,3,validate -89,4,validate -1647,1,validate -3725,1,validate -435,3,validate -173,3,validate -1776,2,validate -2292,4,validate -3296,3,validate -1726,1,validate -1431,4,validate -1464,1,validate -469,1,validate -2984,2,validate -3118,2,validate -74,2,validate -3980,3,validate -1198,3,validate -3634,3,validate +2559,3,validate +1127,2,validate +3988,2,validate +3592,2,validate +4029,3,validate +3471,4,validate +2901,4,validate +3068,1,validate +470,2,validate +1248,4,validate +2851,3,validate +3288,4,validate +1415,1,validate +286,1,validate +203,3,validate +2935,2,validate +2718,4,validate +1981,3,validate 549,2,validate -2327,2,validate -1199,4,validate -3239,4,validate -1545,3,validate +1282,2,validate +2152,1,validate +1628,1,validate 3926,4,validate -1495,2,validate -3098,1,validate -3714,4,validate -238,2,validate -3015,3,validate -1362,3,validate -2882,4,validate -754,3,validate -2569,1,validate -1616,4,validate +104,2,validate +2836,1,validate +1927,4,validate +712,1,validate +1624,3,validate +887,2,validate +54,1,validate +3918,4,validate +2012,4,validate 2661,4,validate -1828,3,validate 3827,2,validate -55,1,validate -3961,2,validate +1962,3,validate +134,2,validate +3262,1,validate 2091,4,validate -917,2,validate -2478,4,validate -3990,1,validate -3299,4,validate -2337,1,validate -389,4,validate -126,2,validate -3512,4,validate -2725,2,validate -2904,4,validate -1647,4,validate -2289,2,validate +480,1,validate +1433,4,validate +1087,4,validate +1392,2,validate +734,2,validate +2042,4,validate +3645,3,validate +1517,2,validate +1300,4,validate +997,3,validate +3729,2,validate +43,4,validate +685,2,validate +2684,1,validate +468,4,validate +3596,3,validate +2205,3,validate +2246,4,validate +2642,4,validate +3942,2,validate +2155,2,validate 3200,2,validate -1943,2,validate -1110,1,validate -1726,4,validate -1464,4,validate -3201,3,validate +2459,4,validate +290,2,validate +3759,2,validate +1202,4,validate 2368,2,validate -806,4,validate -1414,3,validate -3151,2,validate -369,2,validate -3497,1,validate -3321,4,validate -1844,1,validate -3230,2,validate -1274,1,validate +3971,1,validate +23,3,validate +2022,2,validate +4063,4,validate +1415,4,validate +286,4,validate +3059,4,validate +3626,2,validate +673,4,validate 3534,4,validate -1232,4,validate -666,1,validate -3484,3,validate -8,1,validate -2785,2,validate -3789,1,validate -3527,1,validate -533,2,validate -970,3,validate -3831,3,validate -1741,2,validate -1782,3,validate -1183,3,validate -350,2,validate -2865,3,validate -2569,4,validate -999,2,validate +3231,3,validate +2143,4,validate +1840,3,validate +270,1,validate +1790,2,validate +2702,4,validate +1528,2,validate +3048,3,validate +54,4,validate +920,2,validate +1395,3,validate +3132,2,validate +2440,3,validate +138,3,validate +1049,3,validate +653,3,validate +2948,1,validate +787,3,validate +88,2,validate +2999,3,validate +2474,1,validate 2653,3,validate -2257,3,validate -2391,3,validate -1262,3,validate -2341,2,validate -1212,2,validate -1600,4,validate -1296,1,validate -3990,4,validate -2420,2,validate -2554,2,validate -2337,4,validate -2900,1,validate +392,4,validate +1728,4,validate +900,1,validate +1771,2,validate +817,3,validate +1254,4,validate +39,1,validate +951,3,validate +2766,1,validate 3678,3,validate -2683,3,validate -634,3,validate +1813,4,validate 2633,2,validate -2109,2,validate -1417,3,validate -1114,2,validate -2717,1,validate -1326,1,validate -1460,1,validate -3579,2,validate -1713,1,validate -3021,3,validate -3925,1,validate -2930,1,validate -2534,1,validate -4054,2,validate -323,2,validate +2321,1,validate +1546,4,validate +331,1,validate +3975,2,validate +373,3,validate +1539,1,validate 106,4,validate -2401,2,validate -1581,3,validate -452,3,validate -4096,4,validate -2268,3,validate -1314,4,validate -1743,1,validate -665,3,validate -3438,3,validate +2838,3,validate +748,2,validate +1793,2,validate +1490,1,validate +2705,4,validate +99,1,validate +3051,3,validate +2655,3,validate +882,1,validate +3955,1,validate +1610,2,validate 141,3,validate -1744,2,validate -911,1,validate -615,2,validate -3743,1,validate -790,3,validate -3567,4,validate -565,1,validate -8,4,validate -1215,3,validate -1561,2,validate -3164,1,validate -2169,1,validate -1907,1,validate -2127,4,validate -2036,2,validate -1774,2,validate +1348,2,validate +1265,4,validate +91,2,validate +270,4,validate +2606,3,validate +303,1,validate +437,1,validate +2260,3,validate +1299,2,validate +1003,3,validate +3518,4,validate +650,1,validate +2948,4,validate +1378,2,validate 3814,2,validate -1512,2,validate -1216,3,validate +1295,4,validate +3294,3,validate 3335,4,validate -3073,4,validate +3731,4,validate 1462,1,validate -3378,2,validate -2424,3,validate -2374,2,validate -3977,1,validate -1895,4,validate -721,2,validate -504,4,validate +2686,3,validate +900,4,validate 638,4,validate -3582,2,validate +1067,1,validate +1246,3,validate 3365,4,validate -2799,1,validate -1846,4,validate -3845,3,validate +3103,4,validate +1196,2,validate +3928,1,validate +717,4,validate 2757,4,validate -884,1,validate +2017,2,validate +2454,3,validate +2495,4,validate 2192,3,validate -1796,3,validate -2800,2,validate -405,3,validate -1013,2,validate -3012,1,validate +3795,2,validate +2321,4,validate +2488,1,validate +668,4,validate +1493,1,validate +2405,3,validate 1276,3,validate -1713,4,validate -3612,2,validate -618,3,validate -1055,4,validate +1014,3,validate 3225,1,validate -2567,1,validate -3183,4,validate -2222,3,validate +1360,2,validate +1401,3,validate +2701,1,validate +2305,1,validate +1613,2,validate +2088,3,validate +356,2,validate 1697,1,validate +1876,3,validate 781,2,validate -89,3,validate -435,2,validate -1743,4,validate -569,2,validate -173,2,validate -3296,2,validate -1431,3,validate -2993,1,validate -3905,3,validate -911,4,validate -2689,4,validate -782,2,validate -3118,1,validate -565,4,validate -2944,1,validate -2548,1,validate -3164,4,validate -2768,4,validate -1553,1,validate +3000,4,validate +1127,1,validate +132,1,validate +1347,4,validate +3988,1,validate +2039,2,validate +174,3,validate +2901,3,validate +303,4,validate +732,1,validate +1644,3,validate +470,1,validate +1248,3,validate 1990,2,validate -2160,4,validate +1291,1,validate +203,2,validate +1511,4,validate 549,1,validate -1199,3,validate -204,3,validate -1545,2,validate +2761,1,validate +2203,2,validate +3806,1,validate +2719,4,validate +812,2,validate +2415,1,validate +3327,3,validate 1462,4,validate -3714,3,validate -238,1,validate -3015,2,validate -458,4,validate -3149,2,validate -1362,2,validate -3977,4,validate +1674,3,validate +3411,2,validate +1624,2,validate +367,2,validate +2803,2,validate 3581,4,validate 105,2,validate -2882,3,validate -2190,4,validate +2324,4,validate 1150,2,validate -754,2,validate -1279,3,validate -1017,3,validate -3961,1,validate -3878,3,validate -884,4,validate -2487,3,validate +1666,4,validate +537,4,validate +671,4,validate +1837,2,validate +3312,1,validate +488,4,validate 2091,3,validate -101,3,validate -3957,3,validate -4091,3,validate -2700,3,validate -1526,1,validate -2438,3,validate +1096,3,validate +3787,1,validate +2354,4,validate +1958,4,validate +1392,1,validate +2042,3,validate 135,1,validate -1047,3,validate -389,3,validate -1655,2,validate -3562,4,validate -2567,4,validate -3512,3,validate -2820,4,validate -2954,4,validate +3645,2,validate +997,2,validate +3729,1,validate +2305,4,validate +43,3,validate +1605,1,validate +2517,3,validate 1697,4,validate -2904,3,validate -1647,3,validate -3209,1,validate +86,1,validate +3596,2,validate +2205,2,validate +3942,1,validate 1344,2,validate -3725,3,validate -2289,1,validate -1776,4,validate -1943,1,validate -1726,3,validate -1464,3,validate -469,3,validate -3201,2,validate +2947,1,validate +3592,4,validate +3759,1,validate +290,1,validate +1202,3,validate +2072,2,validate 2368,1,validate -2984,4,validate -3118,4,validate -1507,1,validate -3151,1,validate -74,4,validate -1586,1,validate +2022,1,validate +553,2,validate +4063,3,validate +2631,2,validate +3068,3,validate +1415,3,validate +286,3,validate +2285,2,validate +3626,1,validate +2935,4,validate 67,1,validate -2327,4,validate -1232,3,validate -3577,1,validate -1495,4,validate -321,2,validate -3098,3,validate -533,1,validate -970,2,validate -4052,1,validate -3831,2,validate -796,2,validate -1741,1,validate -1183,2,validate -350,1,validate +1282,4,validate +2152,3,validate +1628,3,validate +3231,2,validate +1840,2,validate +1537,1,validate +845,2,validate +1974,2,validate +2186,1,validate +2702,3,validate +104,4,validate +2836,3,validate +712,3,validate +3048,2,validate +887,4,validate +54,3,validate +491,4,validate +2399,1,validate +2440,2,validate +3132,1,validate +138,2,validate +1049,2,validate 3261,2,validate -2569,3,validate -3395,2,validate 2266,2,validate -613,2,validate +2999,2,validate +2004,2,validate 3827,4,validate 2653,2,validate -55,3,validate -3961,4,validate -2391,2,validate -1262,2,validate -1396,2,validate -917,4,validate -430,2,validate -3382,4,validate -1609,2,validate -3990,3,validate -218,2,validate -2554,1,validate -2337,3,validate -2683,2,validate -126,4,validate +134,4,validate +3262,3,validate +959,1,validate +480,3,validate +1771,1,validate +3120,4,validate +514,1,validate +951,2,validate +3687,2,validate +734,4,validate +1517,4,validate +1813,3,validate +3729,4,validate 2633,1,validate -2725,4,validate -1114,1,validate -2197,1,validate -1639,2,validate -3242,1,validate -248,2,validate -2289,4,validate -3021,2,validate +1638,1,validate +685,4,validate +2684,3,validate +2372,2,validate +3975,1,validate +2155,4,validate +2980,1,validate 3200,4,validate -1943,4,validate -1110,3,validate -4054,1,validate +2804,4,validate +3933,4,validate +373,2,validate +2847,2,validate +290,4,validate +3759,4,validate +1456,2,validate 2368,4,validate -2931,1,validate -3151,4,validate -1581,2,validate -452,2,validate -149,1,validate -369,4,validate -3497,3,validate -2268,2,validate -3709,2,validate -1844,3,validate -3230,4,validate -2056,2,validate +1194,2,validate +3971,3,validate +2797,1,validate +2022,4,validate +3580,1,validate +3051,2,validate +16,2,validate 1357,1,validate -665,2,validate 141,2,validate -2877,2,validate -615,1,validate -666,3,validate -2269,2,validate -8,3,validate +270,3,validate 1570,1,validate -2785,4,validate -3527,3,validate -3739,2,validate -1437,2,validate +1790,4,validate +179,1,validate +1528,4,validate +1003,2,validate +920,4,validate +2220,2,validate +1091,2,validate +3132,4,validate 829,2,validate -1741,4,validate -130,1,validate -2036,1,validate -2170,1,validate -1774,1,validate -350,4,validate -1175,1,validate -1216,2,validate -999,4,validate -2299,2,validate +2948,3,validate +88,4,validate +3294,2,validate +3731,3,validate +2474,3,validate 1775,2,validate -3378,1,validate -2424,2,validate -2341,4,validate -1212,4,validate -2250,2,validate -3853,1,validate -1296,3,validate +2686,2,validate +900,3,validate +1771,4,validate 638,3,validate -1642,2,validate -2420,4,validate -2554,4,validate -335,1,validate -3845,2,validate +1246,2,validate +2766,3,validate +2017,1,validate +2454,2,validate 2633,4,validate 2192,2,validate -68,2,validate -2800,1,validate -2109,4,validate -202,2,validate -1114,4,validate -2717,3,validate -1326,3,validate +1805,1,validate +2321,3,validate 1367,4,validate -3579,4,validate +4058,2,validate +2929,2,validate +668,3,validate +3975,4,validate +2405,2,validate 1276,2,validate -1713,3,validate -973,1,validate 1410,2,validate -3925,3,validate -2534,3,validate -3183,3,validate -4054,4,validate -323,4,validate -2222,2,validate -2401,4,validate -1227,2,validate -1743,3,validate -569,1,validate -1178,2,validate -3905,2,validate -1744,4,validate -911,3,validate -615,4,validate -782,1,validate +1014,2,validate +19,2,validate +1360,1,validate +1539,3,validate +103,1,validate +3488,1,validate +232,2,validate +1876,2,validate +748,4,validate +1793,4,validate +1702,2,validate +3480,2,validate +49,2,validate +3955,3,validate +3826,1,validate +1610,4,validate +1348,4,validate +174,2,validate +91,4,validate 3693,2,validate -565,3,validate -3256,1,validate -1045,2,validate -649,2,validate -1561,4,validate -3164,3,validate +303,3,validate +437,3,validate 1990,1,validate -2169,3,validate -1907,3,validate -2515,2,validate -2036,4,validate -1774,4,validate -204,2,validate +1299,4,validate +84,1,validate +1511,3,validate +3510,2,validate +650,3,validate +2253,2,validate +3856,1,validate +862,2,validate +1378,4,validate 3814,4,validate -1512,4,validate +2203,1,validate +812,1,validate +3327,2,validate 1462,3,validate -2070,2,validate -3807,1,validate -3149,1,validate -2374,4,validate -3977,3,validate -721,4,validate -3886,1,validate -2233,1,validate -3582,4,validate -1279,2,validate -1017,2,validate -2799,3,validate -2100,2,validate -1838,2,validate -3878,2,validate -884,3,validate +1674,2,validate +2678,1,validate +3411,1,validate +2803,1,validate +2283,2,validate +2324,3,validate +1067,3,validate +1196,4,validate +3928,3,validate +1929,4,validate 2446,1,validate -2487,2,validate -101,2,validate -1013,4,validate -3012,3,validate -4091,2,validate -3096,2,validate -2700,2,validate -3612,4,validate -2438,2,validate -1006,1,validate -1047,2,validate -1655,1,validate -2567,3,validate -398,1,validate +3795,4,validate +2354,3,validate +2488,3,validate +1493,3,validate +1443,2,validate +3046,1,validate +2701,3,validate +2305,3,validate +1613,4,validate +222,4,validate +2517,2,validate +2913,2,validate +356,4,validate +3047,2,validate +3429,4,validate 1697,3,validate 2997,1,validate -3,2,validate 781,4,validate 1344,1,validate -435,4,validate -569,4,validate -173,4,validate -1776,3,validate -3296,4,validate -2993,3,validate -1819,1,validate -1557,1,validate -469,2,validate -3118,3,validate -1424,2,validate -33,2,validate -74,3,validate -2548,3,validate +1127,3,validate +132,3,validate +3988,3,validate +216,2,validate +2039,4,validate +553,1,validate +732,3,validate +2631,1,validate +470,3,validate +2851,4,validate 1770,1,validate +2285,1,validate 1990,4,validate -379,1,validate -2419,1,validate -3634,4,validate +1291,3,validate +203,4,validate +2935,3,validate 549,3,validate -3677,2,validate -2286,2,validate -1545,4,validate -1495,3,validate -238,3,validate -3015,4,validate -3149,4,validate +2152,2,validate +2761,3,validate +1628,2,validate +3806,3,validate +2415,3,validate +1974,1,validate +845,1,validate +979,1,validate +104,3,validate +3411,4,validate +712,2,validate 2711,1,validate -1362,4,validate -796,1,validate +1624,4,validate +887,3,validate +367,4,validate +2803,4,validate 105,4,validate 1150,4,validate -754,4,validate -2316,2,validate -3395,1,validate 2266,1,validate -1009,1,validate -613,1,validate -3961,3,validate -55,2,validate -1396,1,validate -2267,2,validate -917,3,validate -2217,1,validate -1609,1,validate -2084,2,validate -218,1,validate -1526,3,validate +2004,1,validate +3312,3,validate +747,1,validate +1962,4,validate +134,3,validate +3262,2,validate +480,2,validate +2613,1,validate +3475,2,validate +1392,3,validate +3687,1,validate +3821,1,validate 135,3,validate -2430,1,validate -3213,1,validate -431,1,validate -3900,1,validate -2247,1,validate -1639,1,validate -248,1,validate -2289,3,validate +3645,4,validate +997,4,validate +3729,3,validate +1605,3,validate +2684,2,validate +86,3,validate +3596,4,validate +2205,4,validate +3942,3,validate +2947,3,validate +644,1,validate 3200,3,validate -2460,1,validate -1943,3,validate -3201,4,validate -1590,1,validate +2847,1,validate +3759,3,validate +290,3,validate +1456,1,validate +2072,4,validate +1194,1,validate +3971,2,validate 2368,3,validate -3151,3,validate -1719,2,validate -369,3,validate -3497,2,validate -3709,1,validate -674,1,validate -1844,2,validate -1586,3,validate -412,1,validate -3230,3,validate -150,1,validate -1274,2,validate -2877,1,validate -666,2,validate -2269,1,validate -3577,3,validate -321,4,validate -3789,2,validate -3527,2,validate -533,3,validate -2532,2,validate -970,4,validate -3739,1,validate -1437,1,validate -2482,1,validate -3831,4,validate +2022,3,validate +553,4,validate +2631,4,validate +1803,1,validate +2285,4,validate +849,2,validate +3626,3,validate +16,1,validate +3231,4,validate +1840,4,validate +1974,4,validate +845,4,validate +2186,3,validate +1790,3,validate +1528,3,validate +1833,1,validate +3048,4,validate +1395,4,validate +2220,1,validate +1091,1,validate +2399,3,validate +2440,4,validate +3132,3,validate +138,4,validate 829,1,validate -1700,2,validate -1741,3,validate -1183,4,validate -350,3,validate +1049,4,validate +787,4,validate +88,3,validate 3261,4,validate -1354,2,validate -2865,4,validate -2299,1,validate -613,4,validate +3826,4,validate +2999,4,validate +2004,4,validate +393,1,validate +830,2,validate 2653,4,validate -1042,1,validate -2391,4,validate -1262,4,validate -1396,4,validate -2300,2,validate -2341,3,validate -1212,3,validate -2038,2,validate +1176,1,validate +3691,2,validate 2512,1,validate -2250,1,validate -430,4,validate -1296,2,validate -1642,1,validate -2554,3,validate -1122,2,validate -2900,2,validate +1771,3,validate +39,2,validate +817,4,validate +514,3,validate +951,4,validate +2766,2,validate +860,2,validate +2463,1,validate 3678,4,validate -2683,4,validate 2633,3,validate -202,1,validate -1114,3,validate -3805,1,validate -2717,2,validate -1722,2,validate -1326,2,validate -2197,3,validate -1023,1,validate -1460,2,validate -3242,3,validate -3021,4,validate +1638,3,validate +3671,1,validate +2414,1,validate +331,2,validate +2372,4,validate +465,2,validate +3975,3,validate +2980,3,validate 1410,1,validate -3925,2,validate -2930,2,validate -1935,2,validate -1673,2,validate -4054,3,validate -282,2,validate -323,3,validate -2401,3,validate -1581,4,validate -452,4,validate -149,3,validate -2268,4,validate -3489,1,validate -3709,4,validate -2056,4,validate -1178,1,validate +415,1,validate +19,1,validate +3192,2,validate +3326,2,validate +373,4,validate +1539,2,validate +2847,4,validate +1456,4,validate +3014,1,validate +1194,4,validate +20,2,validate +2797,3,validate +232,1,validate +366,1,validate +3580,3,validate +1490,2,validate +99,2,validate +1702,1,validate +3051,4,validate +16,4,validate +882,2,validate +49,1,validate +3955,2,validate 1357,3,validate -665,4,validate +3094,2,validate 141,4,validate -2877,4,validate -1744,3,validate -615,3,validate -3743,2,validate +1653,1,validate 3693,1,validate -2269,4,validate +658,1,validate 1570,3,validate -3173,2,validate -1045,1,validate -3739,4,validate +437,2,validate +179,3,validate +1003,4,validate +2565,2,validate 3257,1,validate -2169,2,validate -1907,2,validate -2515,1,validate +1866,1,validate +650,2,validate +2253,1,validate 829,4,validate 1258,1,validate -2036,3,validate -2170,3,validate -1774,3,validate -1216,4,validate -1512,3,validate -2516,2,validate -2299,4,validate -3857,1,validate -2466,1,validate +862,1,validate +996,1,validate +3294,4,validate 1775,4,validate -3378,3,validate -2424,4,validate -3853,3,validate +2686,4,validate +2283,1,validate 2417,1,validate -1288,1,validate -1026,1,validate -1642,4,validate -335,3,validate -3845,4,validate +1246,4,validate +1196,3,validate +2017,3,validate +2454,4,validate 3279,1,validate 2192,4,validate -285,2,validate -68,4,validate -2800,3,validate -3012,2,validate -3146,2,validate -2447,1,validate -1889,2,validate -3096,1,validate +3754,2,validate +3795,3,validate +1805,3,validate +2709,1,validate +4058,4,validate +2929,4,validate +1493,2,validate +2405,4,validate 1276,4,validate 1410,4,validate -1839,1,validate +1014,4,validate +1443,1,validate +19,4,validate 3225,2,validate -577,2,validate -2222,4,validate -1227,4,validate -3,1,validate -569,3,validate -2131,1,validate -1178,4,validate -612,1,validate -2993,2,validate -3905,4,validate -3339,1,validate -782,3,validate +1360,3,validate +2701,2,validate +103,3,validate +3309,1,validate +3047,1,validate +1876,4,validate +661,1,validate +3522,1,validate +132,2,validate +3480,4,validate +49,4,validate +3826,3,validate +216,1,validate +3389,2,validate +2039,3,validate +174,4,validate 3693,4,validate -1424,1,validate -33,1,validate -167,1,validate -649,4,validate -2548,2,validate -2944,2,validate -1553,2,validate +732,2,validate +1644,4,validate 1990,3,validate -296,2,validate -3677,1,validate -2286,1,validate -204,4,validate -2070,4,validate -2895,1,validate -3807,3,validate -3149,3,validate +1291,2,validate +3510,4,validate +2253,4,validate +3856,3,validate +862,4,validate +2761,2,validate +2203,3,validate +3806,2,validate +812,3,validate +2415,2,validate +3327,4,validate +247,2,validate +1674,4,validate +2678,3,validate +3411,3,validate +367,3,validate +2803,3,validate 105,3,validate +2283,4,validate 1150,3,validate -3886,3,validate -2316,1,validate -2233,3,validate -1279,4,validate +64,1,validate 3533,1,validate -1017,4,validate -2100,4,validate -1838,4,validate +3312,2,validate 2663,1,validate -2267,1,validate -3878,4,validate 2446,3,validate -2487,4,validate -101,4,validate -3957,4,validate -4091,4,validate -2084,1,validate -3096,4,validate -2700,4,validate -1089,1,validate -1526,2,validate -2438,4,validate +1096,4,validate +3787,2,validate +3871,1,validate +3475,1,validate 135,2,validate -1006,3,validate -1047,4,validate -1655,3,validate +1443,4,validate +3046,3,validate 3392,2,validate -398,3,validate +2693,1,validate 3130,2,validate -2085,1,validate +1605,2,validate +2913,4,validate +2517,4,validate +86,2,validate 2997,3,validate -3,4,validate -1169,2,validate -3209,2,validate +694,1,validate 1344,3,validate -3343,2,validate -3725,4,validate -2644,1,validate -1253,1,validate -1819,3,validate -645,1,validate -1557,3,validate -469,4,validate -1507,2,validate -1424,4,validate -1719,1,validate -33,4,validate -462,1,validate -2419,3,validate -1586,2,validate +2947,2,validate +2072,3,validate +512,2,validate +553,3,validate +2631,3,validate +3068,4,validate +2285,3,validate +849,1,validate +3061,1,validate +1932,1,validate 67,2,validate -3677,4,validate -2286,4,validate -675,1,validate -3577,2,validate -321,3,validate -3098,4,validate -1325,2,validate -2532,1,validate +2152,4,validate +413,1,validate +1628,4,validate +1537,2,validate +845,3,validate +3536,1,validate +1974,3,validate +979,3,validate +1671,2,validate +2186,2,validate +2836,4,validate +712,4,validate 2711,3,validate -4052,2,validate -796,3,validate -1700,1,validate -2316,4,validate +1275,1,validate +3353,1,validate +2399,2,validate +2096,1,validate +2533,2,validate 3261,3,validate -1354,1,validate -3395,3,validate 2266,3,validate -1488,1,validate -1009,3,validate -613,3,validate -55,4,validate -1396,3,validate -2267,4,validate -1093,2,validate +2004,3,validate +830,1,validate +747,3,validate +3262,4,validate +959,2,validate +3691,1,validate 2696,1,validate -2300,1,validate -1305,1,validate -2038,1,validate -430,3,validate -2301,2,validate -1609,3,validate -2084,4,validate -910,2,validate -218,3,validate -1122,1,validate -2430,3,validate -1256,1,validate -4033,2,validate -3213,3,validate -431,3,validate -3900,3,validate -2247,3,validate -3984,2,validate +1567,1,validate +480,4,validate +1043,1,validate +48,1,validate +3475,4,validate +514,2,validate +3687,3,validate +3821,3,validate +860,1,validate +3771,2,validate +1638,2,validate +2684,4,validate 2118,1,validate -1722,1,validate -2197,2,validate -861,1,validate -1639,3,validate -3242,2,validate -248,3,validate -2939,1,validate -2460,3,validate -1110,4,validate -1935,1,validate -1673,1,validate -678,1,validate -282,1,validate -1590,3,validate -2931,2,validate -1936,2,validate -1719,4,validate -149,2,validate -3497,4,validate -495,1,validate -3709,3,validate -1844,4,validate -412,3,validate +2593,2,validate +2372,3,validate +465,1,validate +2980,2,validate +3192,1,validate +3326,1,validate +2847,3,validate +1456,3,validate +1194,3,validate +20,1,validate +2797,2,validate +3971,4,validate +3580,2,validate +545,2,validate +1803,3,validate +849,4,validate +16,3,validate 3144,2,validate -2015,2,validate -2056,3,validate -150,3,validate 1357,2,validate -1274,4,validate -2877,3,validate -666,4,validate -2269,3,validate -1966,2,validate +3094,1,validate 1570,2,validate -3173,1,validate -3789,4,validate -3527,4,validate -2532,4,validate -921,1,validate -3739,3,validate -1437,3,validate -2482,3,validate +179,2,validate +2178,1,validate +1916,1,validate +525,1,validate +2565,1,validate +2220,3,validate +1091,3,validate 829,3,validate 3520,1,validate -130,2,validate -2170,2,validate -1175,2,validate -2516,1,validate -2299,3,validate +526,2,validate +830,4,validate +2474,4,validate 1775,3,validate -1042,3,validate -2300,4,validate -2038,4,validate +3337,1,validate +2779,2,validate +3691,4,validate 2512,3,validate -2250,3,validate -3853,2,validate -1296,4,validate -1642,3,validate -2900,4,validate -335,2,validate -285,1,validate -1156,2,validate -68,3,validate -894,2,validate -202,3,validate -2717,4,validate -1502,1,validate -3542,1,validate -3146,1,validate -1722,4,validate -1326,4,validate -1023,3,validate -1460,4,validate -1889,1,validate -973,2,validate -3409,2,validate +39,4,validate +2766,4,validate +860,4,validate +2463,3,validate +3754,1,validate +2759,1,validate +2893,1,validate +3671,3,validate +1805,2,validate +2414,3,validate +4058,3,validate +2929,3,validate +331,4,validate 1410,3,validate -3925,4,validate -2930,4,validate -2534,4,validate -1673,4,validate -577,1,validate -282,4,validate -711,1,validate -1227,3,validate -2923,1,validate -1270,1,validate -1178,3,validate -3743,4,validate +415,3,validate +19,3,validate +3192,4,validate +761,2,validate +1539,4,validate +103,2,validate +2102,1,validate +3014,3,validate +3488,2,validate +20,4,validate +232,3,validate +366,3,validate +1490,4,validate +2315,1,validate +99,4,validate +1702,3,validate +3480,3,validate +882,4,validate +49,3,validate +3955,4,validate +3389,1,validate +3826,2,validate +791,2,validate +1653,3,validate 3652,2,validate -3256,2,validate 3693,3,validate -2261,2,validate -3173,4,validate -1045,3,validate -649,3,validate -346,2,validate +437,4,validate +84,2,validate +2565,4,validate 3257,3,validate -2169,4,validate -1907,4,validate -296,1,validate -2515,3,validate +1866,3,validate +3510,3,validate +650,4,validate +2253,3,validate +3856,2,validate 1258,3,validate -2516,4,validate -3857,3,validate -2466,3,validate -2070,3,validate -3807,2,validate -3886,2,validate +862,3,validate +996,3,validate +3291,1,validate +3682,2,validate +643,1,validate +247,1,validate +2029,2,validate +2678,2,validate +2812,2,validate +1421,2,validate +1159,2,validate +2283,3,validate 2417,3,validate -1288,3,validate -1026,3,validate -2233,2,validate -539,1,validate -2713,1,validate -2799,4,validate -2100,3,validate -1838,3,validate -3279,3,validate +2891,2,validate +1067,4,validate +3928,4,validate +2842,2,validate 2446,2,validate -285,4,validate +3279,3,validate +3754,4,validate 1451,2,validate 1189,2,validate -3012,4,validate -3146,4,validate -2447,3,validate -3096,3,validate -1839,3,validate -1006,2,validate -1140,2,validate +2709,3,validate +2488,4,validate +1493,4,validate +1664,2,validate +1443,3,validate +3046,2,validate +11,2,validate 3225,4,validate -2185,2,validate +2481,1,validate 3392,1,validate 1486,1,validate -398,2,validate +2701,4,validate 3130,1,validate -577,4,validate -2956,1,validate +3309,3,validate +2913,3,validate +3047,3,validate +661,3,validate 2997,2,validate -3,3,validate -2002,2,validate -1169,1,validate 3605,1,validate -3343,1,validate -2131,3,validate -957,1,validate -2215,2,validate -1819,2,validate -2993,4,validate -1557,2,validate -3339,3,validate -1424,3,validate -33,3,validate -3635,1,validate -167,3,validate +3522,3,validate +1127,4,validate +1952,1,validate +132,4,validate +3988,4,validate +216,3,validate +1516,1,validate +3556,1,validate +774,1,validate +908,1,validate +512,1,validate +732,4,validate +470,4,validate +2032,2,validate 1770,2,validate -2944,4,validate -2548,4,validate -1553,4,validate -379,2,validate -2419,2,validate -296,4,validate -3502,2,validate -3677,3,validate +3769,1,validate +1291,4,validate 549,4,validate -2286,3,validate -1325,1,validate -238,4,validate +2761,4,validate +3806,4,validate +2415,4,validate +1200,1,validate +1671,1,validate +979,2,validate +3453,2,validate 2711,2,validate -2845,2,validate -1454,2,validate -2316,3,validate -2359,1,validate -1009,2,validate -1617,1,validate +2408,1,validate +2533,1,validate +3312,4,validate +2183,4,validate +1405,2,validate +747,2,validate +2746,1,validate 2663,3,validate -2267,3,validate -1093,1,validate -2217,2,validate -2959,1,validate -2301,1,validate -2084,3,validate -910,1,validate -1089,3,validate -1526,4,validate +3787,4,validate +2613,2,validate +3221,1,validate +227,2,validate +3871,3,validate +3475,3,validate +1392,4,validate +311,1,validate +3821,2,validate 135,4,validate -2430,2,validate -4033,1,validate -3213,2,validate +3771,1,validate 3392,4,validate +2693,3,validate 3130,4,validate -431,2,validate -3900,2,validate -2247,2,validate -2085,3,validate -3984,1,validate -3209,4,validate -2460,2,validate -2806,1,validate -645,3,validate -1590,2,validate -1507,4,validate -1936,1,validate -1719,3,validate -462,3,validate -674,2,validate -1586,4,validate -412,2,validate +1605,4,validate +86,4,validate +694,3,validate +2593,1,validate +3942,4,validate +2947,4,validate +644,2,validate +1952,4,validate +1203,2,validate +3851,1,validate +857,2,validate +158,1,validate +941,1,validate +545,1,validate +1416,2,validate +1803,2,validate +3802,1,validate +849,3,validate 3144,1,validate -2015,1,validate -546,2,validate -150,2,validate -3931,2,validate +3626,4,validate +3061,3,validate +1932,3,validate 67,4,validate -1274,3,validate -675,3,validate -1579,1,validate -3577,4,validate -1966,1,validate -3789,3,validate -533,4,validate -2532,3,validate -4052,4,validate -2482,2,validate -922,1,validate -1700,3,validate -1354,3,validate -1488,3,validate -3091,2,validate -2829,2,validate -2130,1,validate -1438,2,validate -1042,2,validate -3175,1,validate +413,3,validate +3619,1,validate +1537,4,validate +3536,3,validate +2186,4,validate +1833,2,validate +1275,3,validate +3353,3,validate +2399,4,validate +2533,4,validate +526,1,validate +3783,1,validate +393,2,validate +830,3,validate +1176,2,validate +2779,1,validate +959,4,validate +3691,3,validate 2696,3,validate -2300,3,validate -1305,3,validate -2038,3,validate +1567,3,validate +3600,1,validate +131,1,validate 2512,2,validate +1043,3,validate +1651,2,validate +260,2,validate 2992,1,validate -2301,4,validate -910,4,validate -1122,3,validate -1256,3,validate -4033,4,validate -2900,3,validate +39,3,validate +514,4,validate +1735,1,validate +210,1,validate +344,1,validate +860,3,validate +2463,2,validate +3771,4,validate 3071,1,validate -211,2,validate -1156,1,validate -894,1,validate -3805,2,validate -3072,2,validate +1638,4,validate +161,1,validate +3671,2,validate 2118,3,validate -1722,3,validate -2197,4,validate -1023,2,validate -1460,3,validate -3242,4,validate -3409,1,validate -374,1,validate -2930,3,validate -1935,3,validate -1673,3,validate -3235,1,validate -678,3,validate -282,3,validate -2931,4,validate -2365,1,validate -149,4,validate -3751,2,validate -1449,2,validate -3489,2,validate -495,3,validate -1795,1,validate -2232,2,validate +2414,2,validate +2593,4,validate +331,3,validate +465,3,validate +1765,1,validate +2980,4,validate +811,2,validate +415,2,validate +3192,3,validate +4018,2,validate +3326,3,validate +761,1,validate +3014,2,validate +20,3,validate +2797,4,validate +366,2,validate +3580,4,validate +545,4,validate +1490,3,validate +2494,2,validate +99,3,validate +1399,1,validate 3144,4,validate -1533,1,validate -2015,4,validate -2444,1,validate +882,3,validate 1357,4,validate -142,1,validate -3743,3,validate +3094,3,validate +791,1,validate +3702,2,validate +1653,2,validate 3652,1,validate -2261,1,validate +658,2,validate 1570,4,validate -3173,3,validate -346,1,validate -3653,2,validate +179,4,validate +2178,3,validate +1916,3,validate +525,3,validate 3257,2,validate -2608,1,validate +2565,3,validate +1866,2,validate +1217,1,validate 1258,2,validate -130,4,validate -2170,4,validate -1175,4,validate +996,2,validate +2995,1,validate +3470,2,validate 2079,2,validate -2516,3,validate -3857,2,validate -2466,2,validate +3682,1,validate +2029,1,validate +3337,3,validate 2163,1,validate -3378,4,validate -2292,2,validate -3853,4,validate -1684,2,validate -1288,2,validate +1034,1,validate +2812,1,validate +1421,1,validate +1159,1,validate +639,2,validate 2417,2,validate -1026,2,validate +2891,1,validate +293,2,validate 31,2,validate -335,4,validate -802,1,validate +3500,2,validate +3846,1,validate +2017,4,validate +2842,1,validate 3279,2,validate -285,3,validate -1847,1,validate -1156,4,validate +3754,3,validate 1451,1,validate -2800,4,validate -894,4,validate +2759,3,validate 1189,1,validate -3542,3,validate -3146,3,validate -2447,2,validate -1889,3,validate -973,4,validate -3409,4,validate -1798,1,validate -1839,2,validate -1140,1,validate +1805,4,validate +2709,2,validate +1664,1,validate +11,1,validate 3225,3,validate -145,1,validate -2185,1,validate -577,3,validate -711,3,validate -3006,1,validate -12,2,validate -2002,1,validate -1270,3,validate -2873,2,validate -1482,2,validate -2131,2,validate -1828,1,validate -2265,2,validate -3868,1,validate -612,2,validate -2215,1,validate -741,3,test -345,3,test -2082,2,test -1999,4,test -388,1,test -2428,1,test -2386,4,test -2083,3,test -246,2,test -3856,4,test +1360,4,validate +4051,2,validate +103,4,validate +2102,3,validate +3309,2,validate +3488,4,validate +2744,1,validate +224,1,validate +661,2,validate +3918,2,validate +3522,2,validate +874,2,validate +3389,3,validate +3127,3,test +824,1,test +2132,3,test +2478,2,test +3256,4,test +3685,1,test +4039,4,test +3340,3,test +2166,1,test +775,1,test +2295,2,test +2732,3,test +1637,2,test +2641,1,test 380,2,test -3594,4,test -2203,4,test -3765,2,test -2246,2,test -2458,1,test -593,2,test -3757,3,test -1159,4,test +1983,1,test +854,1,test +297,4,test +3940,3,test +2895,2,test +3320,2,test +722,3,test 326,3,test -2366,3,test -3800,1,test -2891,4,test -1321,2,test -64,2,test -2796,1,test +1371,3,test +3666,1,test +2712,2,test +3362,4,test +622,1,test +976,4,test +1188,3,test 2226,1,test -1668,2,test -1272,2,test -3271,1,test -277,2,test -3009,1,test 2014,1,test -361,1,test -3088,1,test -1223,2,test +2742,2,test +94,2,test 3222,1,test -2093,1,test -1569,1,test -2872,4,test -307,2,test -2694,3,test -391,1,test -1303,3,test -3555,2,test -3689,2,test -2856,1,test -1902,2,test +3005,3,test +2564,1,test +1872,2,test +3867,4,test +136,4,test +1219,4,test +3655,4,test +215,4,test +2214,3,test +2510,2,test +3343,3,test +2814,4,test +2081,4,test +1819,4,test 3422,3,test -342,1,test -428,4,test -1986,1,test -857,1,test -595,1,test -378,3,test -2377,2,test +824,4,test +3768,2,test +3685,4,test 3718,1,test -1416,1,test +1812,1,test +2249,2,test +462,2,test +2461,1,test +3635,3,test 641,4,test -2936,2,test -2199,1,test -1982,3,test +3373,3,test +2378,3,test 3585,2,test -2066,2,test -4065,1,test -4023,4,test -1283,1,test -1241,4,test -492,2,test -2229,1,test -2146,3,test -3487,2,test -2358,2,test -4095,1,test -1101,2,test -1538,3,test +2328,2,test +3931,1,test +3669,1,test +1849,4,test +1983,4,test +854,4,test +196,4,test +26,1,test +3973,3,test +3670,2,test +676,3,test +2320,3,test +3486,1,test +1800,4,test +626,2,test +230,2,test +3141,3,test +1967,1,test +2449,4,test +4052,3,test +3749,2,test +359,3,test +796,4,test +493,3,test +705,2,test 3437,1,test -2796,4,test -1185,1,test -3700,2,test -3008,3,test +3833,1,test +2046,1,test +622,4,test +3395,4,test +1488,2,test +1051,1,test +2829,1,test +1834,1,test 706,3,test -2746,3,test -2958,2,test -310,2,test -3904,2,test -2775,2,test +181,1,test +1093,3,test +3092,2,test +2217,4,test +3438,1,test +218,4,test +2430,4,test +819,1,test 523,2,test -3384,2,test -1123,3,test -3163,3,test -1073,2,test +2564,4,test +3122,2,test +1772,3,test +3072,1,test +3509,2,test +515,3,test +2077,1,test +2989,3,test 3030,4,test -3376,3,test -1370,1,test -1986,4,test -857,4,test -595,4,test -1103,2,test -807,3,test +3073,2,test +1985,3,test +3547,1,test +594,3,test +2806,3,test +678,2,test +1549,3,test +2198,3,test +1802,3,test 3718,4,test -3802,3,test +2544,2,test +3322,4,test +283,3,test +3406,3,test +2232,1,test +2411,3,test +2015,3,test 841,1,test -2149,3,test -3752,2,test -1491,3,test -758,3,test -3053,1,test -100,3,test +4014,2,test +496,3,test 667,1,test 3881,3,test -363,4,test -575,3,test -313,3,test -2262,1,test +3440,1,test +2665,4,test +2961,3,test +3569,2,test +971,3,test +3486,4,test +2312,2,test +3653,1,test 2878,4,test -788,3,test -51,2,test -2525,2,test +871,1,test +2179,3,test +3386,2,test +3916,2,test +2828,3,test 3437,4,test -3866,1,test -3952,4,test -4086,4,test -2609,1,test +1867,2,test +2046,4,test +476,2,test +913,3,test 3824,4,test -1863,4,test -131,3,test -3641,4,test -4037,4,test +1521,2,test +2829,4,test +1996,3,test +2130,3,test +2645,3,test +2342,2,test +3903,4,test +1297,1,test 2646,4,test 2384,4,test -3550,2,test -1205,3,test -3500,1,test -3896,1,test -210,3,test -2639,1,test -1248,1,test -2201,4,test +859,4,test +2596,3,test +1422,1,test +2334,3,test +1551,2,test +3154,1,test +1289,2,test 294,2,test -1206,4,test -2809,3,test -1855,4,test -2718,1,test -2759,2,test -1764,2,test +1418,3,test +3417,2,test +202,4,test +3367,1,test 2676,4,test -2280,4,test -507,2,test -548,3,test -3325,4,test +3105,1,test 1240,2,test -3459,4,test -1452,1,test -1806,4,test +245,2,test +1023,4,test +2626,3,test +1107,3,test +324,2,test 3056,1,test -840,4,test -1665,1,test -1623,4,test -3531,1,test -316,3,test -3052,3,test -3093,4,test -3918,1,test -2831,4,test +1403,1,test +711,2,test +1186,3,test +3622,3,test +1969,3,test +4047,3,test +2790,3,test +1616,1,test +2232,4,test 841,4,test 2740,2,test -3177,3,test -874,1,test -741,2,test -438,1,test +183,4,test +1786,3,test +2132,2,test +3440,4,test +1829,1,test +3044,4,test 2874,1,test -1391,4,test +3256,3,test +2478,1,test +262,4,test +2395,3,test 1221,1,test -1999,3,test -2345,2,test -1646,1,test -2083,2,test -2262,4,test -3865,3,test -1300,1,test -3815,2,test -43,1,test -3765,1,test -2246,1,test -1251,1,test -2204,4,test -593,1,test -3287,4,test -1159,3,test -856,2,test -3633,3,test -3674,4,test -2459,1,test -2891,3,test -3025,3,test -3500,4,test -3929,1,test -4063,1,test -3450,3,test -1281,1,test +4039,3,test +1696,2,test +3340,2,test +255,1,test +2295,1,test +871,4,test +475,4,test +1604,4,test +213,4,test +2820,2,test +1,4,test +297,3,test +905,2,test +1075,4,test +1209,4,test +813,4,test +510,3,test +1118,2,test +722,2,test +3936,4,test +164,3,test +1288,4,test +1422,4,test +589,3,test +1768,3,test +3154,4,test +2496,4,test 843,4,test -1668,1,test -977,4,test -277,1,test -1148,2,test -1626,4,test -3838,4,test -2143,1,test -1452,4,test -1881,1,test -3401,2,test -2872,3,test -307,1,test -1656,4,test -3218,2,test -399,4,test -2694,2,test +2539,2,test +4009,2,test +3492,4,test +3005,2,test +186,4,test +1748,2,test +1403,4,test +1219,3,test +3655,3,test +1353,3,test 3564,1,test -2477,4,test -1303,2,test +96,3,test 3302,1,test -745,3,test -3689,1,test -874,4,test +308,2,test +1869,4,test +1566,3,test +2081,3,test +612,4,test +824,3,test +521,2,test 3253,1,test -2082,4,test -471,1,test -209,1,test -2428,3,test -1254,1,test -2469,4,test +1862,1,test +1170,2,test +3685,3,test +2249,1,test +4031,2,test +3635,2,test +2166,3,test 641,3,test -2936,1,test -1383,2,test -1121,2,test -246,4,test +775,3,test +2378,2,test +2295,4,test +2328,1,test +1637,4,test 380,4,test -2853,2,test -4023,3,test -3765,4,test -1892,1,test -1200,2,test -938,2,test -2458,3,test -1284,1,test -593,4,test -1108,4,test -2804,2,test -2146,2,test -3883,1,test -3487,1,test -2358,1,test -1101,1,test -1538,2,test -1235,1,test -1321,4,test -64,4,test -2796,3,test -3700,1,test -3008,2,test +1983,3,test +854,3,test +3670,1,test +676,2,test +2895,4,test +1800,3,test +27,1,test +3320,4,test +3749,1,test +889,2,test +493,2,test +3666,3,test +1497,1,test +2712,4,test +4012,2,test +622,3,test +4096,1,test 706,2,test -2746,2,test 2226,3,test -1668,4,test -1272,4,test -3271,3,test -277,4,test -3009,3,test -310,1,test -2522,1,test -361,3,test -3305,1,test -3088,3,test -1223,4,test +3092,1,test +3963,2,test +444,1,test +1527,1,test +2742,4,test +94,4,test 3222,3,test -2093,3,test 523,1,test -1569,3,test +2564,3,test +1872,4,test 3780,1,test -3384,1,test -2297,4,test -3518,1,test -307,4,test -391,3,test -3731,1,test -3555,4,test -3689,4,test -2856,3,test -1902,4,test -425,1,test -511,4,test -1986,3,test -857,3,test -595,3,test -3110,4,test -2377,4,test +786,2,test +3122,1,test +2989,2,test +2510,4,test +603,2,test +3073,1,test +687,1,test +2806,2,test +1811,2,test +3810,1,test +1549,2,test +3548,1,test +3768,4,test 3718,3,test -1416,3,test -2936,4,test -2199,3,test -3802,2,test -371,2,test +2544,1,test +2249,4,test +462,4,test +2461,3,test +4064,2,test 3585,4,test -2149,2,test -758,2,test -2066,4,test -4065,3,test +2411,2,test +4014,1,test +1846,1,test +2328,4,test +3931,3,test +3669,3,test 3881,2,test -1283,3,test 3316,1,test -363,3,test -3140,4,test -1105,2,test -492,4,test -1317,1,test -2229,3,test +322,2,test +3670,4,test +971,2,test +3486,3,test +2312,1,test +626,4,test +230,4,test +1967,3,test 2878,3,test -3487,4,test -2358,4,test -788,2,test -2787,1,test -4095,3,test -2525,1,test +3749,4,test +2179,2,test +3916,1,test +485,1,test +705,4,test 3437,3,test -4045,2,test -3000,1,test -698,1,test -2958,4,test -1863,3,test -4037,3,test -131,2,test -310,4,test +3833,3,test +2046,3,test +1051,3,test +1488,4,test +2829,3,test +1834,3,test +2130,2,test +2342,1,test +181,3,test +3092,4,test 2646,3,test -3904,4,test -2775,4,test -210,2,test -3813,2,test -2818,2,test +2343,2,test +1086,2,test +2689,1,test +1298,1,test +819,3,test +690,1,test 294,1,test -1206,3,test -4026,2,test -1764,1,test -1073,4,test +1905,4,test +3205,2,test +3122,4,test +3417,1,test +1249,1,test +557,2,test +3072,3,test 2676,3,test -507,1,test -3459,3,test -465,4,test -508,2,test -1370,3,test -1541,1,test -3405,4,test -1103,4,test -325,2,test -671,1,test -3052,2,test -233,4,test +3509,4,test +245,1,test +374,2,test +3547,3,test +2111,1,test +1935,4,test +324,1,test +678,4,test +2544,4,test +3448,2,test +3186,2,test +2790,2,test +2232,3,test 841,3,test -3752,4,test -276,2,test -3053,3,test +4014,4,test 2924,1,test -355,2,test -2092,1,test -1400,2,test -1654,4,test -2262,3,test -3865,2,test -1959,2,test -568,2,test -51,4,test -3124,4,test -222,2,test -3866,3,test -856,1,test -3633,2,test -1076,4,test -3550,4,test -3025,2,test -1119,2,test -3896,3,test -3500,3,test -3329,4,test +3440,3,test +3349,1,test +3569,4,test +2395,2,test +1696,1,test +2312,4,test +3653,3,test +93,1,test +871,3,test +3999,2,test +3386,4,test +2820,1,test +1867,4,test +1,3,test +476,4,test +172,1,test +905,1,test +4078,2,test +306,1,test +1521,4,test +3379,1,test +2342,4,test +1168,2,test +906,2,test +510,2,test +1118,1,test +1297,3,test +164,2,test +1381,2,test +1422,3,test +3937,4,test +1331,1,test +1768,2,test +1551,4,test +3154,3,test +1289,4,test +3980,2,test 294,4,test -2718,3,test -2759,4,test -1148,1,test -1764,4,test +3417,4,test +2539,1,test +3367,3,test +3105,3,test 1240,4,test 2406,2,test -1452,3,test -3401,1,test -541,2,test +4009,1,test +245,4,test +1411,2,test +498,4,test +3797,1,test +1748,1,test +324,4,test 3056,3,test -1665,3,test -3531,3,test -966,1,test -3918,3,test -528,4,test +1403,3,test +711,4,test +3748,1,test +1353,2,test +96,2,test +308,1,test +1616,3,test 2740,4,test -833,2,test -874,3,test -571,2,test -3303,1,test -1912,1,test -741,4,test +1566,2,test +612,3,test +2132,4,test +521,1,test +1829,3,test 3432,2,test -438,3,test -2082,3,test +3170,2,test +2478,3,test 1221,3,test -388,2,test -2824,2,test -2428,2,test -522,2,test -2125,1,test -2345,4,test -1646,3,test -2083,4,test -1383,1,test -1517,1,test -1121,1,test -1300,3,test -3815,4,test -1942,1,test -2853,1,test -3765,3,test -2246,3,test -1251,3,test -77,1,test -2458,2,test -593,3,test -2804,1,test -856,4,test -2459,3,test -3800,2,test -3929,3,test -64,3,test -2755,1,test -1281,3,test -2884,2,test +3516,1,test +3340,4,test +2166,2,test +255,3,test +2295,3,test +2732,4,test +2641,2,test +947,1,test +905,4,test +2895,3,test +722,4,test +889,1,test +1371,4,test +3666,2,test +4012,1,test 2226,2,test -1668,3,test -3271,2,test -1365,2,test -277,3,test -3009,2,test -1577,1,test +3963,1,test 2014,2,test -361,2,test -2835,2,test -2143,3,test -1881,3,test -707,1,test -1223,3,test +2573,2,test +3618,2,test +94,3,test 3222,2,test -2093,2,test -3401,4,test -1790,1,test -1569,2,test -4043,2,test -1395,2,test -307,3,test -4,2,test -3218,4,test -2694,4,test -391,2,test +3005,4,test +1748,4,test +786,1,test +3435,2,test 3564,3,test -1303,4,test +2390,1,test 3302,3,test -3689,3,test -3860,1,test -1995,2,test -866,2,test -3336,1,test -342,2,test +2128,1,test +2214,4,test +308,4,test +3343,4,test +603,1,test 3253,3,test -3727,2,test -2377,3,test -471,3,test -209,3,test -817,2,test -1254,3,test +3768,3,test +1862,3,test +1170,4,test +1812,2,test +2249,3,test +4031,4,test +3635,4,test +2461,2,test 3549,1,test -555,2,test -2936,3,test -1982,4,test -371,1,test -1383,4,test -1121,4,test -2066,3,test -4065,2,test -3366,1,test -2853,4,test -1283,2,test -1892,3,test -1200,4,test -938,4,test -1105,1,test -1284,3,test -110,1,test -585,2,test -2188,1,test -2146,4,test -931,1,test -3883,3,test -3487,3,test -2358,3,test -4095,2,test -1101,3,test -1538,4,test -1235,3,test +3373,4,test +2378,4,test +3416,2,test +2328,3,test +3628,1,test +26,2,test +322,1,test +3670,3,test +1763,1,test +676,4,test +626,3,test +3141,4,test +3749,3,test +889,4,test +493,4,test +3833,2,test +4012,4,test 1709,2,test -4045,1,test -1185,2,test -3700,3,test -3008,4,test +1051,2,test +56,2,test +4096,3,test +1834,2,test 706,4,test -2746,4,test -310,3,test -2522,3,test -3305,3,test -1477,2,test +1093,4,test +3092,3,test +1398,2,test +3438,2,test +444,3,test +2343,1,test +1086,1,test 523,3,test -2818,1,test -1299,1,test -170,1,test -3384,3,test +819,2,test 3780,3,test -4076,2,test -3518,3,test -1123,4,test -4026,1,test -1378,1,test -820,2,test -508,1,test +3122,3,test +557,1,test +3031,1,test +2077,2,test +2989,4,test +1512,1,test +603,4,test +3073,3,test +3547,2,test +687,3,test 3893,1,test -425,3,test -899,2,test -2636,1,test -1458,2,test -325,1,test -807,4,test -3802,4,test -371,4,test -2149,4,test -3752,3,test -276,1,test -758,4,test -3053,2,test +2806,4,test +1811,4,test +771,2,test +3548,3,test +1549,4,test +2198,4,test +2544,3,test +3844,1,test +3448,1,test +4064,4,test +3186,1,test +2191,1,test +2411,4,test +4014,3,test +934,1,test +1846,3,test +496,4,test 4057,1,test 667,2,test 3881,4,test +2666,1,test +2404,1,test +2841,2,test 3316,3,test -355,1,test -2791,1,test -3662,2,test -1400,1,test -1105,4,test -1317,3,test -2355,1,test -1959,1,test -1401,2,test -568,1,test -10,2,test -2787,3,test -788,4,test -2525,3,test -222,1,test -3866,2,test -4045,4,test -2434,1,test -2609,2,test -3000,3,test -131,4,test -3034,1,test -3550,3,test -1777,1,test -1119,1,test -3896,2,test -4030,2,test -210,4,test -3813,4,test -2639,2,test -1248,2,test +322,4,test +971,4,test +2312,3,test +3054,2,test +3999,1,test +2179,4,test +3916,3,test +485,3,test +831,2,test +2871,2,test +2172,1,test +1996,4,test +2130,4,test +2342,3,test +1168,1,test +1693,2,test +1297,2,test +2343,4,test +40,2,test +1381,1,test +2689,3,test +1298,3,test +124,1,test +3247,1,test +3980,1,test +690,3,test 294,3,test -2809,4,test -2718,2,test -4026,4,test -1764,3,test -3064,1,test -507,3,test -2802,1,test -154,1,test -541,1,test +3205,4,test +1418,4,test +3417,3,test +1249,3,test +557,4,test +245,3,test +1411,1,test +3847,1,test +1107,4,test +374,4,test +2111,3,test +1412,2,test +324,3,test +2323,2,test +3015,1,test 3056,2,test -367,1,test -325,4,test -3531,2,test -3228,1,test -671,3,test -3052,4,test -3877,1,test -1575,1,test -833,1,test -571,1,test -276,4,test +3622,4,test +2882,2,test +3927,2,test +3448,4,test +3186,4,test +2790,4,test +1616,2,test +3615,1,test 2924,3,test +1829,2,test +3828,1,test 3432,1,test -438,2,test +834,2,test 2874,2,test -355,4,test -784,1,test +3170,1,test +3349,3,test +2175,1,test +2395,4,test 1221,2,test -2824,1,test -1400,4,test -522,1,test -2345,3,test -1646,2,test -3645,1,test -3865,4,test -2388,1,test -1300,2,test -3815,3,test -735,1,test -43,2,test +1696,3,test +3087,2,test +255,2,test +785,2,test +93,3,test +3999,4,test +2820,3,test 3858,1,test -2205,1,test -1251,2,test -1859,1,test -856,3,test -3633,4,test -2459,2,test -3025,4,test -1119,4,test -1810,1,test -419,1,test -3929,2,test -4063,2,test -3450,4,test -1281,2,test -2884,1,test -1365,1,test -370,1,test -1148,3,test -2623,2,test -3493,1,test +172,3,test +905,3,test +4078,4,test +3379,3,test +1647,2,test +1168,4,test +906,4,test +510,4,test +1118,3,test +164,4,test +2855,2,test +1027,1,test +3201,1,test +207,2,test +589,4,test +1331,3,test +1768,4,test +3980,4,test +1677,2,test +2539,3,test +3097,1,test 2406,4,test -3231,1,test -2835,1,test -2143,2,test +4009,3,test 237,2,test -1881,2,test -3401,3,test -541,4,test -4043,1,test -1395,1,test -4,1,test -3218,3,test -138,1,test +2573,1,test +3618,1,test +3797,3,test +187,1,test +1748,3,test +2490,2,test +3435,1,test +1353,4,test 2915,2,test +3960,2,test 3564,2,test -966,3,test +96,4,test 3302,2,test -745,4,test -4044,1,test -1050,2,test -1995,1,test -866,1,test -571,4,test -3303,3,test -1912,3,test +308,3,test +1566,4,test +521,3,test 3253,2,test -2520,2,test 3432,4,test -3727,1,test -471,2,test -209,2,test -388,4,test -2824,4,test -2428,4,test -817,1,test -1254,2,test -2125,3,test -555,1,test -1383,3,test -1517,3,test -1121,3,test +1862,2,test +1170,3,test +3170,4,test +867,2,test +3516,3,test +1213,1,test +4031,3,test +2166,4,test +775,4,test +1080,2,test 3812,1,test -818,2,test -1942,3,test -2853,3,test -1892,2,test -1200,3,test -938,3,test -77,3,test -2458,4,test -1284,2,test -585,1,test -2804,3,test -2239,2,test -3883,2,test -3800,4,test -1893,2,test -1235,2,test +3416,1,test +2641,4,test +2026,2,test +27,2,test +3150,2,test +889,3,test +3666,4,test +1497,2,test +4012,3,test 1709,1,test -2755,3,test -3363,2,test -2884,4,test -1710,2,test +452,1,test +56,1,test +4096,2,test 1011,1,test 2226,4,test -3271,4,test -1794,1,test -3009,4,test -1577,3,test +3963,3,test +1398,1,test 2014,4,test -2522,2,test -361,4,test -3305,2,test -707,3,test -3088,4,test -1477,1,test +444,2,test +1527,2,test +2573,4,test +1873,1,test 3222,4,test -2093,4,test -1569,4,test -4043,4,test -2869,2,test -1003,1,test -4076,1,test 3780,2,test -3518,2,test -171,1,test -391,4,test -820,1,test -3731,2,test -3032,1,test -2856,4,test -646,1,test -3860,3,test -1995,4,test -866,4,test -425,2,test -3161,2,test -899,1,test -3336,3,test -342,4,test -3727,4,test -1458,1,test -1416,4,test +786,3,test +3477,1,test +3215,1,test +3435,4,test +2390,3,test +1216,1,test +2128,3,test +603,3,test +687,2,test +1811,3,test +3810,2,test +771,1,test +3548,2,test +2291,2,test +1812,4,test +201,1,test 3549,3,test -555,4,test -2199,4,test -371,3,test -1113,2,test -851,2,test -4065,4,test -3366,3,test -1283,4,test +2461,4,test +4064,3,test +1721,2,test +3416,4,test +1846,2,test +2716,1,test +3931,4,test +3628,3,test +3669,4,test +2841,1,test 3316,2,test -3662,1,test -1105,3,test -110,3,test -2405,1,test -585,4,test -1317,2,test -2188,3,test -2229,4,test -1401,1,test -10,1,test -2787,2,test -4095,4,test +26,4,test +322,3,test +1763,3,test +2667,1,test +3054,1,test +1967,4,test +406,1,test +485,2,test +3833,4,test +2222,1,test 1709,4,test -4045,3,test +831,1,test +2871,1,test 273,2,test -1185,4,test -3396,2,test -3000,2,test -698,2,test -3480,1,test +1051,4,test +56,4,test +2351,2,test +1834,4,test +181,4,test +3346,1,test +1693,1,test +1398,4,test +3438,4,test +2343,3,test +40,1,test +911,2,test 3347,2,test -3085,2,test -4030,1,test -1477,4,test -303,2,test -3813,3,test -2040,1,test -2818,3,test -1299,3,test -170,3,test -4076,4,test -3510,1,test -4026,3,test -2119,1,test -1378,3,test -820,4,test -3327,1,test -508,3,test -679,1,test -1116,2,test +1086,3,test +2689,2,test +1956,2,test +3559,1,test +565,2,test +1298,2,test +41,2,test +819,4,test +690,2,test +3205,3,test +1249,2,test +557,3,test +3031,3,test +3072,4,test +2077,4,test +374,3,test +3547,4,test +2111,2,test +1412,1,test 3893,3,test -899,4,test -1370,4,test -1541,2,test -3715,2,test -325,3,test -671,2,test -368,1,test -3095,1,test -2537,2,test -276,3,test -3053,4,test +2323,1,test +2932,2,test +2882,1,test +3927,1,test +3844,3,test +3448,3,test +3186,3,test +2191,3,test +934,3,test +3878,1,test 2924,2,test 667,4,test -3308,1,test -3745,2,test -355,3,test -2092,2,test -1400,3,test -1959,3,test -1401,4,test -568,3,test -10,4,test -222,3,test -3866,4,test -2434,3,test -1260,1,test -2609,4,test -998,1,test -1910,2,test -3034,3,test -1119,3,test -3896,4,test -4030,4,test -2639,4,test -1248,4,test -2718,4,test -3064,3,test -2623,1,test -2802,3,test +2404,3,test +1230,1,test +834,1,test +2841,4,test +3349,2,test +4091,1,test +3653,4,test +2438,1,test +3087,1,test +785,1,test +93,2,test +3999,3,test +1522,1,test +2871,4,test +172,2,test +4078,3,test +2172,3,test +306,2,test +3379,2,test +1647,1,test +2518,2,test +1168,3,test +906,3,test +1693,4,test +1297,4,test +2855,1,test +1860,1,test +40,4,test +2335,2,test +944,2,test +1381,3,test +207,1,test +124,3,test +1727,2,test +1331,2,test +3330,1,test +3247,3,test +2073,1,test +1677,1,test +3980,3,test +682,1,test +3197,2,test +3367,4,test +3105,4,test 2406,3,test -499,1,test +1411,3,test +3847,3,test 237,1,test -3148,2,test -154,3,test -541,3,test +3797,2,test +3015,3,test +2323,4,test 3056,4,test -1665,4,test +2490,1,test 188,1,test +2882,4,test +3748,2,test 2915,1,test -317,2,test -3531,4,test -1658,1,test -966,2,test -3877,3,test -3918,4,test -1575,3,test +3960,1,test +1616,4,test +401,1,test +3615,3,test 1312,1,test -1050,1,test -833,3,test -571,3,test -3303,2,test -1912,2,test -1179,2,test -2916,1,test -2520,1,test -2654,1,test +1446,1,test +2782,1,test +1829,4,test +3828,3,test 3432,3,test -438,4,test +834,4,test 2874,4,test -784,3,test -388,3,test -2824,3,test +2478,4,test +867,1,test +3170,3,test +2175,3,test 1221,4,test -522,3,test -2521,2,test -2125,2,test -1392,2,test -1130,2,test -1646,4,test -868,2,test -3645,3,test -1517,2,test -2388,3,test -818,1,test -1300,4,test -735,3,test -43,4,test -1942,2,test +3516,2,test +3087,4,test +255,4,test +1080,1,test +2641,3,test +947,2,test +1081,2,test 3858,3,test -1293,1,test -2205,3,test -2246,4,test -1251,4,test -77,2,test -1859,3,test -1160,2,test -2501,1,test -2635,1,test -2239,1,test -2459,4,test -3800,3,test -1893,1,test -1810,3,test -419,3,test -3929,4,test -2755,2,test -4063,4,test -3363,1,test -1061,1,test -1281,4,test -3972,2,test -2884,3,test -2106,1,test -1710,1,test +2026,1,test +1647,4,test +3150,1,test +2855,4,test +1027,3,test +3201,3,test +3497,1,test +503,2,test 715,1,test -1365,3,test -370,3,test -1577,2,test +3364,2,test 2014,3,test -2623,4,test -3231,3,test -2835,3,test -2143,4,test -1881,4,test -707,2,test -1790,2,test -3265,1,test -2869,1,test -4043,3,test +3576,1,test +1274,1,test +1711,2,test +3097,3,test +2573,3,test +666,1,test +3618,3,test +187,3,test +3789,1,test 1874,1,test 617,1,test -1395,3,test -4,3,test -3132,2,test -138,3,test +3435,3,test +2003,2,test +1266,1,test 2915,4,test +3344,1,test +3960,4,test 3564,4,test +3082,1,test +1953,1,test +2390,2,test 3302,4,test -3860,2,test -1995,3,test -866,3,test -3161,1,test -3336,2,test -342,3,test +2128,2,test +696,1,test +1133,2,test +3211,2,test 3253,4,test -3727,3,test -471,4,test -209,4,test -817,3,test -1254,4,test +2949,1,test +1862,4,test +2687,1,test +2291,1,test +867,4,test +1296,1,test +1812,3,test 3549,2,test -39,1,test -555,3,test +2554,2,test +1721,1,test +3895,1,test 3812,3,test -1113,1,test -851,1,test -3366,2,test -2767,2,test +3416,3,test +1247,1,test +3628,2,test 1376,2,test -1892,4,test -1284,4,test -110,2,test -585,3,test -2188,2,test -931,2,test -3883,4,test -1101,4,test -1235,4,test +26,3,test +2717,1,test +2026,4,test +2455,1,test +1763,2,test +27,4,test +3150,4,test +1497,4,test 1709,3,test -1406,2,test 273,1,test -1185,3,test -3700,4,test -3396,1,test -1710,4,test -536,2,test +452,3,test +56,3,test +2351,1,test +4096,4,test +2189,2,test +2485,1,test +3530,1,test +4005,2,test 1011,3,test -3659,2,test -1794,3,test -2522,4,test +1398,3,test +3438,3,test +444,4,test +911,1,test 3347,1,test -3085,1,test -3305,4,test -1477,3,test -303,1,test +1527,4,test +1956,1,test +565,1,test +1873,3,test +1174,2,test +41,1,test 523,4,test 1957,2,test -2869,4,test -1299,2,test -4076,3,test -170,2,test -1003,3,test -3384,4,test -2303,1,test -3518,4,test +566,2,test 3780,4,test -171,3,test -1378,2,test -820,3,test -3731,4,test -3032,3,test -1116,1,test -425,4,test +2169,1,test +3031,2,test +2036,2,test +2077,3,test +1512,2,test +1216,3,test +3073,4,test +687,4,test 3893,2,test -899,3,test -2636,2,test -1937,1,test -942,1,test -3715,1,test -1458,3,test -3803,1,test -547,2,test -2537,1,test -851,4,test +3810,4,test +2932,1,test +771,3,test +3548,4,test +2291,4,test +2720,1,test +3195,2,test +201,3,test +3844,2,test +72,1,test +2191,2,test +934,2,test +1846,4,test +2716,3,test 4057,2,test 667,3,test -2101,1,test +2666,2,test +2404,2,test +2841,3,test 3316,4,test -3745,1,test -3662,3,test +1409,2,test 1755,1,test -1493,1,test -2405,3,test -1317,4,test -3571,1,test -2355,2,test -1401,3,test -10,3,test -2787,4,test -2525,4,test -1310,1,test -53,1,test -2434,2,test +1359,1,test +2667,3,test +3054,3,test +406,3,test +3916,4,test +485,4,test +2222,3,test +831,3,test +2871,3,test 273,4,test -2609,3,test -3396,4,test +2568,2,test +2172,2,test +2351,4,test 2914,1,test -3000,4,test -698,4,test -1785,1,test -132,1,test +2518,1,test +3346,3,test 2647,2,test -1910,1,test +1693,3,test 1390,2,test -3034,2,test -1777,2,test -4030,3,test -303,4,test -2639,3,test -1248,3,test -1291,1,test -2119,3,test -683,1,test -3064,2,test -507,4,test -2802,2,test -2203,2,test -3148,1,test +40,3,test +2335,1,test +911,4,test +944,1,test +2689,4,test +3559,3,test +565,4,test +124,2,test +1298,4,test +1727,1,test +41,4,test +3247,2,test +690,4,test +2252,2,test +3197,1,test +1249,4,test +3460,2,test +3847,2,test 550,2,test -154,2,test -3327,3,test -500,1,test -1116,4,test -3411,2,test -3757,1,test -1541,4,test -367,2,test -2366,1,test -2803,2,test -3715,4,test -317,1,test -3228,2,test -671,4,test -3877,2,test -1575,2,test +2153,1,test +2111,4,test +1412,3,test +3015,2,test +2323,3,test +2932,4,test +1758,2,test +2882,3,test +3927,3,test +451,1,test +3362,2,test +3615,2,test 318,2,test -3095,3,test -2537,4,test -530,1,test -1179,1,test +3878,3,test 2924,4,test +3828,2,test +1230,3,test +834,3,test 2874,3,test -3308,3,test -3745,4,test -784,2,test -2092,4,test -2521,1,test -1392,1,test -1130,1,test -868,1,test -3645,2,test -2388,2,test +2134,1,test +2175,2,test +3349,4,test +4091,3,test +1696,4,test +1526,1,test +2438,3,test +3087,3,test +785,3,test +93,4,test 2996,1,test -735,2,test -43,3,test +2820,4,test +1343,1,test +1081,1,test 3858,2,test -1260,3,test -998,3,test -2601,2,test -2205,2,test -1210,2,test -2947,1,test -1859,2,test -1160,1,test -2206,2,test -1810,2,test -378,1,test -419,2,test -4063,3,test -3972,1,test -370,2,test -1148,4,test -2623,3,test -3493,2,test -499,3,test -3231,2,test +172,4,test +306,4,test +3379,4,test +1647,3,test +4071,2,test +1118,4,test +2814,2,test +2855,3,test +2552,2,test +1860,3,test +1027,2,test +2335,4,test +3201,2,test +944,4,test +207,3,test +1727,4,test +1331,4,test +3330,3,test +2073,3,test +1677,3,test +503,1,test +682,3,test +3197,4,test +2539,4,test +3364,1,test +1711,1,test +3097,2,test +4009,4,test 237,3,test -3148,4,test -2186,1,test +3839,1,test +187,2,test +3797,4,test +2320,1,test +2053,2,test +4052,1,test +2490,3,test 188,3,test -3132,1,test -138,2,test +796,2,test +2003,1,test +3748,4,test 2915,3,test -1008,1,test -317,4,test -1658,3,test -966,4,test +3960,3,test +3395,2,test +1133,1,test +401,3,test 1312,3,test -4044,2,test +3607,1,test +3211,1,test 1742,2,test -1050,3,test -3303,4,test -1912,4,test 697,1,test -1179,4,test -2916,3,test -2520,3,test -2654,3,test -2866,2,test -2125,4,test -1130,4,test +2782,3,test +521,4,test +867,3,test +3516,4,test +1213,2,test +218,2,test +2950,1,test +2554,1,test 1559,1,test -868,4,test -168,1,test -3637,1,test -1517,4,test +1080,3,test 3812,2,test -818,3,test 1984,1,test -1942,4,test -35,2,test -2767,1,test -3163,1,test 1164,2,test +947,4,test +1772,1,test 1376,1,test -1293,3,test -77,4,test -1160,4,test -2804,4,test -2501,3,test -2239,3,test -1893,3,test -1406,1,test -2755,4,test -3363,3,test -1061,3,test -2106,3,test -1710,3,test -536,1,test +381,1,test +2026,3,test +27,3,test +1327,1,test +3150,3,test +1497,3,test +1802,1,test +452,2,test +2189,1,test +3497,3,test +4005,1,test 715,3,test 1011,2,test -2748,1,test -3659,1,test -1794,2,test +3963,4,test 3793,1,test -1491,1,test -1577,4,test -100,1,test -707,4,test -1790,4,test +3576,3,test +1711,4,test +1527,3,test +666,3,test +2961,1,test +2269,2,test +1873,2,test +3872,1,test +878,2,test +1174,1,test 1957,1,test -3265,3,test -2869,3,test -1003,2,test +566,1,test 1874,3,test -1387,1,test -3132,4,test -171,2,test -3952,2,test -3731,3,test -3032,2,test -646,2,test -3860,4,test -3161,3,test -3336,4,test -1988,2,test +786,4,test +3477,2,test +3215,2,test +4085,1,test +2003,4,test +1266,3,test +2036,1,test +3344,3,test +3082,3,test +1953,3,test +1216,2,test +2390,4,test +913,1,test +2128,4,test +696,3,test +1133,4,test +3211,4,test +2037,2,test +2645,1,test +992,1,test +3810,3,test +2949,3,test +2687,3,test +2291,3,test +859,2,test +1296,3,test +3195,1,test +201,2,test 3549,4,test -1205,1,test -1938,1,test -547,1,test -1592,1,test +2334,1,test +2554,4,test +1721,3,test +3895,3,test 2067,2,test -1113,3,test -851,3,test -3366,4,test -2280,2,test -110,4,test -2405,2,test -2188,4,test -19,2,test -931,4,test +2716,2,test +1247,3,test +3628,4,test +202,2,test +1409,1,test +2717,3,test +1543,1,test +2455,3,test +1763,4,test +2667,2,test +406,2,test +2880,2,test +2222,2,test 273,3,test -1835,1,test -2964,1,test -3396,3,test -316,1,test -698,3,test -3093,2,test -536,4,test -2831,2,test -3480,2,test +2568,1,test +2351,3,test +2485,3,test +3530,3,test +4005,4,test +3346,2,test 2647,1,test +1786,1,test 1390,1,test -832,2,test -2910,2,test +911,3,test 3347,3,test -3085,3,test -1391,2,test -303,3,test -2040,2,test -2818,4,test +1086,4,test +1956,3,test +3559,2,test +565,3,test +3256,1,test +262,2,test +41,3,test +4039,1,test 1957,4,test -2386,1,test -1299,4,test -170,4,test -3510,2,test -2119,2,test -3856,1,test -3594,1,test -1378,4,test -2203,1,test +2252,1,test +566,4,test +2169,3,test +3031,4,test +3460,1,test +2036,4,test +1512,4,test 550,1,test -3327,2,test -2332,2,test -508,4,test -2204,2,test -679,2,test +1075,2,test 3893,4,test -1116,3,test -3411,1,test -2636,4,test -1937,3,test -1541,3,test -2803,1,test -3674,2,test -3715,3,test -368,2,test +813,2,test +2932,3,test +1758,1,test +3936,2,test +2720,3,test +3195,4,test +3362,1,test +3844,4,test +72,3,test +976,1,test +2191,4,test 318,1,test -3095,2,test -3491,2,test -2537,3,test +934,4,test +3878,2,test 843,2,test 4057,4,test -581,2,test -1626,2,test -3308,2,test -3745,3,test -2092,3,test -1493,3,test -2834,2,test -2355,4,test -1959,4,test -568,4,test -1310,3,test -222,4,test -1656,2,test -1260,2,test -2434,4,test -998,2,test -2601,1,test -1210,1,test -132,3,test -2864,2,test +2666,4,test +2404,4,test +1230,2,test +1409,4,test +2313,2,test +1359,3,test +4091,2,test +1705,2,test +2438,2,test +186,2,test +3867,1,test +136,1,test +1522,2,test +2568,4,test +2172,4,test +306,3,test +3,2,test +2518,3,test +215,1,test +4071,1,test 2647,4,test -1910,3,test -3034,4,test -428,1,test -1777,4,test -2206,1,test -2469,2,test +2814,1,test +2081,1,test +2552,1,test +1819,1,test +1860,2,test +2335,3,test +944,3,test +1381,4,test +124,4,test +1727,3,test +3330,2,test +3247,4,test +2073,2,test +2252,4,test 641,1,test -1291,3,test -683,3,test -3064,4,test -2802,4,test -499,2,test -3148,3,test -1241,1,test +682,2,test +3197,3,test +3677,2,test +3460,4,test +1849,1,test +196,1,test +3847,4,test +1411,4,test 550,4,test -154,4,test +2153,3,test 3756,2,test -500,3,test -3411,4,test -1108,2,test +3015,4,test +1800,1,test +2449,1,test +2053,1,test +1758,4,test 188,2,test -367,4,test -2803,4,test -317,3,test -3445,2,test -3228,4,test -1658,2,test -3877,4,test -1575,4,test +796,1,test +3748,3,test +451,3,test +3395,1,test +401,2,test +3615,4,test 1312,2,test +1446,2,test 1742,1,test 318,4,test -833,4,test -530,3,test -1179,3,test -2916,2,test -614,2,test -2654,2,test -2866,1,test -784,4,test -3475,2,test -522,4,test -2521,3,test -1392,3,test -1130,3,test -868,3,test -3645,4,test -2388,4,test +2267,2,test +2782,2,test +3828,4,test +2217,1,test +1659,2,test +2134,3,test +2175,4,test +268,2,test +218,1,test +1526,3,test +2430,1,test 2996,3,test -735,4,test -2297,2,test 1164,1,test -35,1,test +1343,3,test +947,3,test +1081,3,test 3858,4,test -1293,2,test -2601,4,test -1427,2,test -2205,4,test 3030,1,test -1210,4,test -2947,3,test -1859,4,test -1160,3,test -2501,2,test -2635,2,test -511,2,test -2206,4,test -1810,4,test -419,4,test -3110,2,test -1457,2,test -1061,2,test -3972,3,test -2106,2,test +4071,4,test +2552,4,test +1027,4,test +3201,4,test +3322,1,test +3497,2,test +503,3,test 715,2,test -1365,4,test -370,4,test -3493,4,test -3231,4,test -2835,4,test -363,1,test -3140,2,test -2186,3,test -1790,3,test -3265,2,test +3364,3,test +3576,2,test +1274,2,test +1711,3,test +3097,4,test +666,2,test +2665,1,test +2269,1,test +3839,3,test +3618,4,test +878,1,test +187,4,test +3789,2,test 1874,2,test +2053,4,test 2878,1,test 617,2,test -1395,4,test -4,4,test -3132,3,test -138,4,test -1008,3,test -3952,1,test -4086,1,test +2003,3,test +1266,2,test +3344,2,test +3082,2,test +1953,2,test +696,2,test +1133,3,test 3824,1,test -830,2,test -4044,4,test +3607,3,test +3211,3,test +2037,1,test 1742,4,test 697,3,test -1863,1,test -4037,1,test -3641,1,test +2300,2,test +3903,1,test +2949,2,test 2646,1,test +2687,2,test 2384,1,test -1988,1,test -2866,4,test -3770,2,test -39,2,test -817,4,test +859,1,test +1296,2,test +1213,4,test +2950,3,test +2554,3,test 1559,3,test -860,2,test -168,3,test -3637,3,test +3895,2,test 2067,1,test 3812,4,test -2201,1,test +1905,2,test 1984,3,test -1206,1,test -252,2,test -1855,1,test +1247,2,test 1164,4,test -35,4,test 2330,2,test -2767,3,test 1376,3,test +202,1,test +381,3,test 2676,1,test -2280,1,test -3325,1,test -3459,1,test -465,2,test -1806,1,test -19,1,test -931,3,test -840,1,test -20,2,test -1623,1,test -1406,3,test -3405,2,test -3093,1,test -536,3,test -2831,1,test -233,2,test +2717,2,test +2455,2,test +1023,1,test +1327,3,test +1935,2,test +1673,2,test +544,2,test +2880,1,test +452,4,test +2485,2,test +2189,3,test +3530,2,test +4005,3,test 1011,4,test -2748,3,test -3659,3,test -1794,4,test +183,1,test 3793,3,test -832,1,test -2910,1,test -1441,2,test -1391,1,test +3044,1,test +2269,4,test +1873,4,test +262,1,test +3872,3,test +878,4,test +1174,3,test +1520,2,test 1957,3,test -3956,2,test -1654,2,test -1003,4,test -2565,2,test -2303,2,test -1387,3,test -3124,2,test -171,4,test -3032,4,test -2332,1,test -646,4,test -2204,1,test -3287,1,test -2636,3,test -1937,2,test -942,2,test -3674,1,test -1076,2,test -1458,4,test -1988,4,test -3803,2,test -1938,3,test -547,3,test -1155,2,test -1592,3,test -3491,1,test +566,3,test +2169,2,test +3477,4,test +3215,4,test +1604,1,test +475,1,test +4085,3,test +213,1,test +2036,3,test +1,1,test +1216,4,test +1512,3,test +2037,4,test +1075,1,test +1209,1,test +813,1,test +992,3,test +771,4,test +3936,1,test +2720,2,test +3195,3,test +1288,1,test +201,4,test +3937,2,test +72,2,test 2067,4,test -3329,2,test +2496,1,test +2716,4,test 843,1,test 4057,3,test -977,1,test -581,1,test -1459,4,test -1626,1,test -2101,2,test -3838,1,test -3662,4,test +2666,3,test +1409,3,test +1543,3,test +2313,1,test 1755,2,test -1493,2,test -2405,4,test -3571,2,test -2834,1,test -19,4,test -2355,3,test -1310,2,test -53,2,test -1656,1,test -2964,3,test -1835,3,test -399,1,test -2477,1,test -1785,2,test +1359,2,test +2667,4,test +3492,1,test +498,2,test +1705,1,test +3054,4,test +186,1,test +406,4,test +2880,4,test +2222,4,test +831,4,test +2568,3,test +3,1,test +3176,2,test 2914,2,test -528,2,test -132,2,test -2864,1,test -3480,4,test +3346,4,test +1869,1,test 2647,3,test 1390,3,test -832,4,test -2910,4,test -1777,3,test -345,2,test -2082,1,test -2040,4,test -2469,1,test -2386,3,test -1291,2,test -3510,4,test -2119,4,test -3856,3,test -246,1,test -683,2,test +612,1,test +3127,2,test +3559,4,test +2252,3,test +2732,2,test +1637,1,test +3677,1,test +3460,3,test 380,1,test -3594,3,test -2203,3,test +3940,2,test 550,3,test -3327,4,test +2153,2,test 3756,1,test -2332,4,test -500,2,test -679,4,test -3411,3,test -1108,1,test -3757,2,test +2895,1,test +1412,4,test +1758,3,test +3320,1,test 326,2,test -367,3,test -2366,2,test -2803,3,test -3445,1,test -3228,3,test -1321,1,test -368,4,test -64,1,test +1371,2,test +2712,1,test +3927,4,test +451,2,test +3362,3,test +976,3,test 318,3,test -3095,4,test -3491,4,test -530,2,test -1272,1,test -581,4,test -614,1,test -3308,4,test -3475,1,test -2834,4,test -1223,1,test +1188,2,test +3878,4,test +2267,1,test +1230,4,test +1659,1,test +2134,2,test +268,1,test +2313,4,test +2742,1,test +4091,4,test +1526,2,test +1705,4,test +94,1,test +2438,4,test +1872,1,test +785,4,test 2996,2,test -2297,1,test -1260,4,test -998,4,test -2601,3,test -1427,1,test -1210,3,test -2947,2,test -3555,1,test -2864,4,test -1902,1,test -511,1,test +3867,3,test +136,3,test +1343,2,test +1522,4,test +3,4,test +215,3,test +2214,2,test +2510,1,test +3343,2,test +4071,3,test +2814,3,test +2552,3,test +1819,3,test 3422,2,test -428,3,test -2206,3,test -378,2,test -3110,1,test -2377,1,test -1457,1,test -1982,2,test +1860,4,test +207,4,test +3768,1,test +3330,4,test +2073,4,test +462,1,test +1677,4,test +682,4,test +3373,2,test 3585,1,test -2066,1,test -3493,3,test -499,4,test +3677,4,test +1849,3,test +196,3,test 237,4,test -1241,3,test -3140,1,test +3839,2,test +3973,2,test 3756,4,test -2186,2,test -492,1,test +2320,2,test +626,1,test +230,1,test +3141,2,test +2449,3,test +2053,3,test +4052,2,test +2490,4,test 188,4,test -1008,2,test -3445,4,test -1658,4,test -830,1,test +359,2,test +796,3,test +705,1,test +3395,3,test +1488,1,test +401,4,test 1312,4,test -4044,3,test +3607,2,test +1446,4,test 1742,3,test -1050,4,test -2958,1,test +2267,4,test +1093,2,test 697,2,test -2916,4,test -2520,4,test -614,4,test -2654,4,test -2866,3,test -3475,4,test -3770,1,test -3904,1,test -2775,1,test +2300,1,test +2782,4,test +1659,4,test +268,4,test +1213,3,test +218,3,test +2950,2,test 1559,2,test -860,1,test -3637,2,test -168,2,test -818,4,test +2430,3,test +1080,4,test +1905,1,test 1984,2,test -252,1,test -1123,2,test 1164,3,test -35,3,test 2330,1,test -3163,2,test -1073,1,test -1293,4,test -1427,4,test +1772,2,test +381,2,test +3509,1,test +515,2,test 3030,3,test -465,1,test -3376,2,test -2501,4,test -2635,4,test -2239,4,test -1893,4,test -20,1,test -3405,1,test -1103,1,test -807,2,test -3363,4,test -1457,4,test -1061,4,test -2106,4,test -233,1,test +1985,2,test +1327,2,test +594,2,test +1935,1,test +1673,1,test +544,1,test +678,1,test +2198,2,test +1802,2,test +3322,3,test +283,2,test +3497,4,test 715,4,test -2748,2,test -3752,1,test +3406,2,test +2015,2,test 3793,2,test -1491,2,test -100,2,test -1441,1,test -575,2,test -313,2,test -3956,1,test -3265,4,test -1654,1,test -2565,1,test +3576,4,test +1274,4,test +496,2,test +666,4,test +2665,3,test +2269,3,test +2961,2,test +3872,2,test +878,3,test +3789,4,test +1520,1,test 1874,4,test +3477,3,test +3215,3,test 617,4,test -1387,2,test -51,1,test -3124,1,test -3952,3,test -4086,3,test +4085,2,test +3386,1,test +1266,4,test +2828,2,test +3344,4,test +1867,1,test +1953,4,test +3082,4,test +476,1,test +913,2,test +696,4,test 3824,3,test -830,4,test -646,3,test -3161,4,test -3641,3,test -1076,1,test +1521,1,test +1996,2,test +2037,3,test +2645,2,test +992,2,test +2300,4,test +3903,3,test +2949,4,test +2687,4,test 2384,3,test -1988,3,test -3550,1,test -3770,4,test -39,4,test -1205,2,test -1938,2,test -860,4,test -1155,1,test -1592,2,test +859,3,test +1296,4,test +2596,2,test +2334,2,test +3937,1,test +1721,4,test +3895,4,test +1551,1,test 2067,3,test -3329,1,test -2201,3,test -1113,4,test -2809,2,test -252,4,test -1855,3,test +1289,1,test +1247,4,test +1418,2,test 2330,4,test -2759,1,test -2280,3,test +202,3,test +2717,4,test +1543,2,test +2455,4,test 1240,1,test -548,2,test -3325,3,test -1806,3,test -19,3,test -840,3,test -20,4,test -1623,3,test -2964,2,test -1835,2,test -316,2,test -3093,3,test -2831,3,test -528,1,test -3480,3,test +1023,3,test +2626,2,test +498,1,test +1107,2,test +1673,4,test +544,4,test +2880,3,test +711,1,test +1186,2,test +3622,2,test +1969,2,test +3176,1,test +2485,4,test +4047,2,test +3530,4,test 2740,1,test -3177,2,test -832,3,test -2910,3,test +183,3,test +1786,2,test +3127,1,test +2132,1,test 3347,4,test -1441,4,test -3085,4,test -741,1,test -345,1,test -1391,3,test -1999,2,test -2040,3,test -3956,4,test -2345,1,test -2386,2,test -2083,1,test -2565,4,test -2303,4,test -3510,3,test -3815,1,test -3856,2,test -3594,2,test -2332,3,test -2204,3,test -679,3,test -3287,3,test -1159,2,test +3044,3,test +1956,4,test +3256,2,test +262,3,test +1390,4,test +4039,2,test +3340,1,test +1520,4,test +2169,4,test +2732,1,test +1604,3,test +475,3,test +213,3,test +297,2,test +3940,1,test +1075,3,test +1209,3,test +813,3,test +722,1,test 326,1,test -1937,4,test -942,4,test -3674,3,test -2891,2,test -3803,4,test -368,3,test -1155,4,test -3450,2,test -3491,3,test +3936,3,test +1371,1,test +2720,4,test +1288,3,test +589,2,test +72,4,test +976,2,test +1188,1,test +2496,3,test 843,3,test -977,3,test -581,3,test -1626,3,test -2101,4,test -3838,3,test +2313,3,test 1755,4,test -1493,4,test -3571,4,test -2834,3,test -1310,4,test -2872,2,test -53,4,test -1656,3,test -3218,1,test -399,3,test -2694,1,test -2477,3,test -1303,1,test -1785,4,test +1359,4,test +3492,3,test +1705,3,test +3005,1,test +186,3,test +3867,2,test +136,2,test +1522,3,test +1219,2,test +3655,2,test +3,3,test +3176,4,test 2914,4,test -745,2,test -132,4,test -2864,3,test -1910,4,test +2518,4,test +215,2,test +2214,1,test +3343,1,test +1869,3,test +2081,2,test +1819,2,test 3422,1,test -428,2,test -345,4,test -2469,3,test +3127,4,test +824,2,test +1170,1,test +3685,2,test +4031,1,test +3635,1,test 641,2,test -1982,1,test -1291,4,test -246,3,test -683,4,test +3373,1,test +775,2,test +2378,1,test +1637,3,test +3677,3,test +1849,2,test 380,3,test -1200,1,test -1241,2,test -938,1,test +1983,2,test +854,2,test +196,2,test +3940,4,test +3973,1,test +2153,4,test 3756,3,test -500,4,test -1108,3,test -3757,4,test -2146,1,test +676,1,test +1800,2,test +3141,1,test +2449,2,test +3320,3,test 326,4,test -2366,4,test -3445,3,test -1538,1,test -1321,3,test -2796,2,test -3008,1,test +359,1,test +493,1,test +2712,3,test +451,4,test +622,2,test +1446,3,test 706,1,test -2746,1,test -530,4,test -1272,3,test -614,3,test -3475,3,test -2521,4,test -1392,4,test -3088,2,test +1188,4,test +2267,3,test +1093,1,test +2217,2,test +1659,3,test +2134,4,test +268,3,test +2742,3,test +1526,4,test +2430,2,test +2564,2,test +1872,3,test 2996,4,test -2297,3,test -1123,1,test -1427,3,test +1343,4,test +1081,4,test +515,1,test +2989,1,test 3030,2,test -2947,4,test -3376,1,test -3555,3,test -2856,2,test -2635,3,test -1902,3,test -511,3,test +2510,3,test +1985,1,test +594,1,test +2806,1,test 3422,4,test -1986,2,test -857,2,test -595,2,test -378,4,test -3110,3,test -807,1,test +1811,1,test +1549,1,test +2198,1,test 3718,2,test -1416,2,test -1457,3,test -3972,4,test -2199,2,test -3802,1,test +3322,2,test +283,1,test +462,3,test +503,4,test +4064,1,test +3406,1,test 3585,3,test -2149,1,test -758,1,test +2411,1,test +2015,1,test +3364,4,test +3931,2,test +496,1,test +3669,2,test +1274,3,test 3881,1,test -363,2,test -3140,3,test -2186,4,test -575,1,test -313,1,test -492,3,test -2229,2,test +3839,4,test +2665,2,test +3973,4,test +971,1,test +3789,3,test +2320,4,test +3486,2,test +230,3,test +1967,2,test +4052,4,test 2878,2,test 617,3,test -788,1,test -1008,4,test +2179,1,test +359,4,test +2828,1,test +705,3,test 3437,2,test -4086,2,test +2046,2,test +1488,3,test 3824,2,test -830,3,test -2958,3,test +3607,4,test +1996,1,test +2829,2,test +2130,1,test +181,2,test 697,4,test -1863,2,test -4037,2,test -3641,2,test -131,1,test +2300,3,test +3903,2,test 2646,2,test 2384,2,test -3770,3,test -3904,3,test -39,3,test -2775,3,test -210,1,test +2596,1,test +2950,4,test 1559,4,test -3813,1,test -860,3,test -3637,4,test -168,4,test -2201,2,test -1206,2,test +1905,3,test 1984,4,test -2809,1,test -252,3,test -1855,2,test -3163,4,test +3205,1,test +1418,1,test 2330,3,test -2767,4,test +1772,4,test 1376,4,test -1073,3,test +381,4,test 2676,2,test -548,1,test -3325,2,test -3459,2,test -465,3,test -3376,4,test -1806,2,test -840,2,test -1370,2,test -20,3,test -1623,2,test -1406,4,test -3405,3,test -1103,3,test -3052,1,test -233,3,test -2748,4,test +3072,2,test +515,4,test +3509,3,test +1023,2,test +2626,1,test +1985,4,test +1107,1,test +374,1,test +1327,4,test +594,4,test +1935,3,test +1673,3,test +544,3,test +678,3,test +1186,1,test +3622,1,test +1802,4,test +1969,1,test +2189,4,test +4047,1,test +283,4,test +2790,1,test +3406,4,test +2232,2,test +2015,4,test 841,2,test -3177,1,test -3659,4,test +183,2,test 3793,4,test -1491,4,test -100,4,test -1441,3,test -1999,1,test -575,4,test -313,4,test -3956,3,test -1654,3,test -2565,3,test -2262,2,test -2303,3,test -3865,1,test -1387,4,test -51,3,test -3124,3,test -3287,2,test -1159,1,test -942,3,test -3633,1,test -1076,3,test -2891,1,test -3025,1,test -3803,3,test -1205,4,test -3500,2,test -1938,4,test -547,4,test -1155,3,test -1592,4,test -3450,1,test -3329,3,test -977,2,test -2759,3,test -2101,3,test -3838,2,test +3440,2,test +3044,2,test +2961,4,test +3872,4,test +1174,4,test +2395,1,test +1520,3,test +3653,2,test +1604,2,test +871,2,test +475,2,test +4085,4,test +213,2,test +3386,3,test +2828,4,test +1867,3,test +1,2,test +297,1,test +476,3,test +913,4,test +4078,1,test +1521,3,test +2645,4,test +1209,2,test +906,1,test +510,1,test +992,4,test +164,1,test +1288,2,test +2596,4,test +1422,2,test +589,1,test +2334,4,test +3937,3,test +1768,1,test +1551,3,test +3154,2,test +1289,3,test +2496,2,test +3367,2,test +1543,4,test +3105,2,test 1240,3,test -548,4,test 2406,1,test 1755,3,test -1452,2,test -3571,3,test -1665,2,test -2872,1,test -53,3,test -2964,4,test -1835,4,test -399,2,test -2477,2,test -1785,3,test -316,4,test +2626,4,test +3492,2,test +498,3,test +1403,2,test +711,3,test +1186,4,test +1219,1,test +3655,1,test +1353,1,test +1969,4,test +3176,3,test +96,1,test +4047,4,test 2914,3,test -745,1,test -3918,2,test -528,3,test +1869,2,test 2740,3,test -3177,4,test -874,2,test -1390,4,test +1566,1,test +1786,4,test +612,2,test diff --git a/pyproject.toml b/pyproject.toml index 970de9a..374d6a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,6 +31,7 @@ dependencies = [ "jaxtyping>=0.3.10", "omegaconf>=2.3", "orbax-checkpoint>=0.12.0", + "wandb>=0.28.0", ] [project.optional-dependencies] diff --git a/src/estimint/utils.py b/src/estimint/utils.py index 8e2a5e3..f8106ba 100644 --- a/src/estimint/utils.py +++ b/src/estimint/utils.py @@ -16,9 +16,9 @@ def ts(*args) -> None: """ Print timestamped message to console. - + Equivalent to R's ts() function. - + Parameters ---------- *args : str @@ -36,16 +36,16 @@ def ts(*args) -> None: def r2(y: ArrayLike, yhat: ArrayLike) -> float: """ Calculate R-squared (coefficient of determination). - + Equivalent to R's r2() function. - + Parameters ---------- y : array-like True values yhat : array-like Predicted values - + Returns ------- float @@ -61,16 +61,16 @@ def r2(y: ArrayLike, yhat: ArrayLike) -> float: def rmse(y: ArrayLike, yhat: ArrayLike) -> float: """ Calculate Root Mean Squared Error. - + Equivalent to R's rmse() function. - + Parameters ---------- y : array-like True values yhat : array-like Predicted values - + Returns ------- float @@ -84,16 +84,16 @@ def rmse(y: ArrayLike, yhat: ArrayLike) -> float: def mse(y: ArrayLike, yhat: ArrayLike) -> float: """ Calculate Mean Squared Error. - + Equivalent to R's mse() function. - + Parameters ---------- y : array-like True values yhat : array-like Predicted values - + Returns ------- float @@ -107,16 +107,16 @@ def mse(y: ArrayLike, yhat: ArrayLike) -> float: def mae(y: ArrayLike, yhat: ArrayLike) -> float: """ Calculate Mean Absolute Error. - + Equivalent to R's mae() function. - + Parameters ---------- y : array-like True values yhat : array-like Predicted values - + Returns ------- float @@ -126,20 +126,39 @@ def mae(y: ArrayLike, yhat: ArrayLike) -> float: yhat = np.asarray(yhat) return np.mean(np.abs(y - yhat)) +def bias(y: ArrayLike, yhat: ArrayLike) -> float: + """ + Calculate bias (mean error). + + Parameters + ---------- + y : array-like + True values + yhat : array-like + Predicted values + + Returns + ------- + float + Bias value (mean of yhat - y) + """ + y = np.asarray(y) + yhat = np.asarray(yhat) + return np.mean(yhat - y) def median_ae(y: ArrayLike, yhat: ArrayLike) -> float: """ Calculate Median Absolute Error. - + Equivalent to R's median_ae() function. - + Parameters ---------- y : array-like True values yhat : array-like Predicted values - + Returns ------- float @@ -153,16 +172,16 @@ def median_ae(y: ArrayLike, yhat: ArrayLike) -> float: def mae_rel(y: ArrayLike, yhat: ArrayLike) -> float: """ Calculate Relative Median Absolute Error. - + Equivalent to R's mae_rel() function. - + Parameters ---------- y : array-like True values yhat : array-like Predicted values - + Returns ------- float @@ -176,16 +195,16 @@ def mae_rel(y: ArrayLike, yhat: ArrayLike) -> float: def rmsle(y: ArrayLike, yhat: ArrayLike) -> float: """ Calculate Root Mean Squared Log Error. - + Equivalent to R's rmsle() function. - + Parameters ---------- y : array-like True values yhat : array-like Predicted values - + Returns ------- float @@ -199,9 +218,9 @@ def rmsle(y: ArrayLike, yhat: ArrayLike) -> float: def safe_div(num: ArrayLike, den: ArrayLike, eps: float = 1e-12) -> np.ndarray: """ Safe division with epsilon floor on denominator. - + Equivalent to R's safe_div() function. - + Parameters ---------- num : array-like @@ -210,7 +229,7 @@ def safe_div(num: ArrayLike, den: ArrayLike, eps: float = 1e-12) -> np.ndarray: Denominator eps : float, optional Minimum value for denominator (default: 1e-12) - + Returns ------- np.ndarray @@ -224,9 +243,9 @@ def safe_div(num: ArrayLike, den: ArrayLike, eps: float = 1e-12) -> np.ndarray: def smape(y: ArrayLike, yhat: ArrayLike, eps: float = 1e-12) -> float: """ Calculate Symmetric Mean Absolute Percentage Error. - + Equivalent to R's smape() function. - + Parameters ---------- y : array-like @@ -235,7 +254,7 @@ def smape(y: ArrayLike, yhat: ArrayLike, eps: float = 1e-12) -> float: Predicted values eps : float, optional Epsilon for numerical stability (default: 1e-12) - + Returns ------- float @@ -254,9 +273,9 @@ def fit_qmap_w( ) -> Dict[str, Any]: """ Fit weighted quantile mapping calibration. - + Equivalent to R's fit_qmap_w() function. - + Parameters ---------- pred_raw : array-like @@ -267,7 +286,7 @@ def fit_qmap_w( Number of grid points for quantile mapping (default: 1024) round_digits : int, optional Digits for rounding observed values (default: 8) - + Returns ------- dict @@ -275,26 +294,26 @@ def fit_qmap_w( """ pred_raw = np.asarray(pred_raw) obs_raw = np.asarray(obs_raw) - + # Keep only finite values keep = np.isfinite(pred_raw) & np.isfinite(obs_raw) x = pred_raw[keep] y = obs_raw[keep] - + # Sort predictions and compute empirical CDF o1 = np.argsort(x) x1 = x[o1] F1 = (np.arange(1, len(x1) + 1) - 0.5) / len(x1) - + # Weighted CDF for observations y_key = np.round(y, round_digits) unique_y, counts = np.unique(y_key, return_counts=True) - + o2 = np.argsort(unique_y) y2 = unique_y[o2] w2 = counts[o2] F2 = np.cumsum(w2) / np.sum(w2) - + # Interpolate quantiles q = np.linspace(0, 1, ngrid) xq = np.interp(q, F1, x1) @@ -358,16 +377,16 @@ def predict_qmap_w(newx_raw: ArrayLike, cal: Dict[str, Any]) -> np.ndarray: def scale_pos(obs: ArrayLike, pred: ArrayLike) -> float: """ Calculate positive scaling factor. - + Equivalent to R's scale_pos() function. - + Parameters ---------- obs : array-like Observed values pred : array-like Predicted values - + Returns ------- float @@ -384,20 +403,20 @@ def scale_pos(obs: ArrayLike, pred: ArrayLike) -> float: def _find_installed_model() -> Optional[str]: """ Find model file installed with package. - + Equivalent to R's .find_installed_model() function. - + Returns ------- str or None Path to model file if found, None otherwise """ import importlib.resources as pkg_resources - + try: # Try different possible locations candidates = [] - + # Check package data directories try: with pkg_resources.files("estimint") as pkg_path: @@ -408,63 +427,63 @@ def _find_installed_model() -> Optional[str]: ]) except (TypeError, AttributeError): pass - + for cand in candidates: if hasattr(cand, 'is_file') and cand.is_file(): return str(cand) elif isinstance(cand, (str, Path)) and Path(cand).exists(): return str(cand) - + except Exception: pass - + return None def _resolve_model_file(dir_or_file: Union[str, Path]) -> str: """ Resolve model file from directory or file path. - + Equivalent to R's .resolve_model_file() function. - + Parameters ---------- dir_or_file : str or Path Path to directory or file - + Returns ------- str Path to model file - + Raises ------ FileNotFoundError If model file cannot be found """ path = Path(dir_or_file) - + # If it's a file that exists, return it if path.is_file(): return str(path) - + # Must be a directory if not path.is_dir(): raise FileNotFoundError(f"Path does not exist: {dir_or_file}") - + # Try candidate locations candidates = [ path / "estiMINT_model.pkl", path / "eir_model" / "estiMINT_model.pkl", ] - + for cand in candidates: if cand.is_file(): return str(cand) - + # Search recursively for .pkl files hits = list(path.rglob("estiMINT_model.pkl")) if hits: return str(hits[0]) - + raise FileNotFoundError(f"Could not find 'estiMINT_model.pkl' under: {dir_or_file}") diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index 737dc0b..795e6dd 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -2,19 +2,29 @@ data_file: "datasets/estimint_simulations_y9.parquet" split_file: "datasets/split.csv" num_workers: 0 use_existing_split: false -num_workers: 0 - +target: "eir" +stratify: true +calib_frac: 0.0 # model +width: 256 +depth: 4 +n_quad: 96 +mlp_residual: false +dropout_rate: 0.0 # Hyperparameters -num_epochs: 200 +num_epochs: 300 min_epochs: 100 patience: 50 -lr: 3e-4 -batch_size: 128 +lr: 1e-3 +batch_size: 256 weight_decay: 1e-4 +n_ensembles: 1 +n_bins: 24 +# Checkpoint +checkpoint_dir: "${output_dir}/ckpts-${cur_time}" # General cur_time: ${now:%Y-%m-%dT%H:%M:%S} @@ -22,5 +32,5 @@ seed: 42 use_wandb: false output_dir: "train_outputs/" wandb: - project: "estimint/" + project: "estimint-training" name: "train-${cur_time}" \ No newline at end of file diff --git a/src/estimint/v2/data/features.py b/src/estimint/v2/data/features.py index fa061f0..3c6f6a7 100644 --- a/src/estimint/v2/data/features.py +++ b/src/estimint/v2/data/features.py @@ -1,7 +1,8 @@ import numpy as np -# TODO: update to handle eir-> hbr, hbr -> eir -FEATURES_BASE = ["dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use", "prev_y9"] +# TODO: update to handle eir-> hbr, hbr -> eir (move prev9) +FEATURES_BASE = ["prev_y9", "dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use"] +MONOTONIC_FEATURES = ["prev_y9", "hbr_y9"] class StandardScaler: def __init__(self): diff --git a/src/estimint/v2/data/preprocess.py b/src/estimint/v2/data/preprocess.py index 5755c7e..84ed080 100644 --- a/src/estimint/v2/data/preprocess.py +++ b/src/estimint/v2/data/preprocess.py @@ -7,6 +7,7 @@ from pathlib import Path import numpy as np from .features import StandardScaler, FEATURES_BASE +from estimint.data_processing import make_value_weights import pickle from dataclasses import dataclass, field @@ -19,9 +20,19 @@ class PreparedData: test_data: list input_size: int scaler: StandardScaler + target_scaler: StandardScaler + calib_data: list = field(default_factory=list) train_param_sims: set[tuple[int, int]] = field(default_factory=set) val_param_sims: set[tuple[int, int]] = field(default_factory=set) test_param_sims: set[tuple[int, int]] = field(default_factory=set) + calib_param_sims: set[tuple[int, int]] = field(default_factory=set) + +@dataclass +class SplitParamSims: + train: set[tuple[int, int]] = field(default_factory=set) + val: set[tuple[int, int]] = field(default_factory=set) + calib: set[tuple[int, int]] = field(default_factory=set) + test: set[tuple[int, int]] = field(default_factory=set) def _filter_by_threshold(df: pd.DataFrame) -> pd.DataFrame: """ @@ -47,7 +58,7 @@ def _filter_by_threshold(df: pd.DataFrame) -> pd.DataFrame: def _load_split( split_file: str, df: pd.DataFrame -) -> tuple[set[tuple[int, int]], set[tuple[int, int]], set[tuple[int, int]]]: +) -> SplitParamSims: """ Load an existing train/val/test split. @@ -60,73 +71,179 @@ def _load_split( """ split_df = pd.read_csv(split_file) present = set(df[["parameter_index", "simulation_index"]].itertuples(index=False, name=None)) - train_ps = { - (r.parameter_index, r.simulation_index) for r in split_df[split_df["split"] == "train"].itertuples() - } & present - val_ps = { - (r.parameter_index, r.simulation_index) for r in split_df[split_df["split"] == "validate"].itertuples() - } & present - test_ps = { - (r.parameter_index, r.simulation_index) for r in split_df[split_df["split"] == "test"].itertuples() - } & present - return train_ps, val_ps, test_ps # type: ignore + def _pairs(df: pd.DataFrame, split_name: str) -> set[tuple[int, int]]: + return { + + (r.parameter_index, r.simulation_index) for r in df[df["split"] == split_name].itertuples() + } & present # type: ignore + + return SplitParamSims( + train=_pairs(split_df, "train"), + val=_pairs(split_df, "validate"), + test=_pairs(split_df, "test"), + calib=_pairs(split_df, "calibrate") + ) + +# TODO: check if need to strata or not. +def _parameter_strata( + df: pd.DataFrame, + target: str, + n_bins: int, + stratify: bool, +) -> list[np.ndarray]: + """ + Build parameter-index groups used for stratified split assignment. + + Args: + df: Input dataframe containing ``parameter_index`` and ``target`` columns. + target: Column whose per-parameter mean defines the strata. + n_bins: Maximum number of quantile bins to create when stratifying. + stratify: If False, return all parameters as a single group. + + Returns: + A list of parameter-index arrays. Each array is assigned to train, + validation, calibration, and test splits independently. + """ + param_target = df.groupby("parameter_index")[target].mean() + param_indices = param_target.index.to_numpy() + if not stratify: + return [param_indices] + + target_values = np.log10(param_target.to_numpy(dtype=np.float64)) + unique_targets = np.unique(target_values) + + quantile_bins = pd.qcut( + target_values, + q=min(n_bins, len(unique_targets)), + labels=False, + duplicates="drop", + ) + + return [param_indices[quantile_bins == bucket] for bucket in np.unique(quantile_bins)] + + +def _param_sims_from_assignment(df: pd.DataFrame, assign: dict[int, str]) -> SplitParamSims: + """Build parameter-simulation sets from a parameter-level split assignment.""" + all_ps = set(df[["parameter_index", "simulation_index"]].itertuples(index=False, name=None)) + split_params = {name: {p for p, split in assign.items() if split == name} for name in ["train", "val", "calib", "test"]} + return SplitParamSims( + train={ps for ps in all_ps if ps[0] in split_params["train"]}, + val={ps for ps in all_ps if ps[0] in split_params["val"]}, + calib={ps for ps in all_ps if ps[0] in split_params["calib"]}, + test={ps for ps in all_ps if ps[0] in split_params["test"]}, + ) + +def _assign_param_group( + params: np.ndarray, + rng: np.random.Generator, + train_frac: float, + val_frac: float, + calib_frac: float, +) -> dict[int, str]: + shuffled = np.array(params, copy=True) + rng.shuffle(shuffled) + n = len(shuffled) + train_end, val_end, calib_end = np.cumsum([np.array([train_frac, val_frac, calib_frac]) * n]).astype(int) + + assigned: dict[int, str] = {} + for split_name, split_param in ( + ("train", shuffled[:train_end]), + ("val", shuffled[train_end: val_end]), + ("calib", shuffled[val_end: calib_end]), + ("test", shuffled[calib_end:]), + ): + assigned.update({param: split_name for param in split_param}) + return assigned + +def _assign_param_splits( + df: pd.DataFrame, + *, + seed: int, + calib_frac: float = 0.0, + stratify: bool = True, + target: str = "eir", + n_bins: int = 10, +) -> dict[int, str]: + """Assign each parameter_index to a split, grouping whole parameters. + If stratify is True, the assignment is balanced across quantile bins of the mean target value per parameter. + """ + rng = np.random.default_rng(seed) + train_frac = 0.7 + val_frac = (1.0 - train_frac - calib_frac) / 2.0 + if val_frac <= 0: + raise ValueError("Validation fraction must be positive; check calib_frac.") + + assign: dict[int, str] = {} + for params in _parameter_strata(df, target, n_bins, stratify): + assign.update(_assign_param_group(params, rng, train_frac, val_frac, calib_frac)) + return assign def _create_split( - df: pd.DataFrame, seed: int -) -> tuple[set[tuple[int, int]], set[tuple[int, int]], set[tuple[int, int]]]: + df: pd.DataFrame, + seed: int, + *, + stratify: bool = True, + target: str = "eir", + n_bins: int = 10, + calib_frac: float = 0.0 +) -> SplitParamSims: """ - Create a train/val/test split by parameter. + Create grouped parameter-simulation splits. + + This is the pair-set version of :func:`group_split`. Both functions share + the same parameter-level assignment, so train/val/calib/test never contain + different simulations from the same ``parameter_index``. Args: df: Filtered dataframe. seed: Shuffle seed. + calib_frac: Fraction to split calibration + stratify: Balance the split across target-magnitude quantile bins. + target: Column used for stratification. + n_bins: Number of quantile strata when ``stratify`` is True. Returns: - Train, validation, and test parameter-simulation sets. + Grouped train, validation, optional calibration, and test + parameter-simulation sets. """ - random.seed(seed) - params = list(df["parameter_index"].unique()) - random.shuffle(params) - n = len(params) - n_train = int(0.70 * n) - n_val = int(0.15 * n) - train_p = set(params[:n_train]) - val_p = set(params[n_train : n_train + n_val]) - test_p = set(params[n_train + n_val :]) - all_ps = set(df[["parameter_index", "simulation_index"]].itertuples(index=False, name=None)) - return ( - {ps for ps in all_ps if ps[0] in train_p}, - {ps for ps in all_ps if ps[0] in val_p}, - {ps for ps in all_ps if ps[0] in test_p}, + assign = _assign_param_splits( + df, + seed=seed, + calib_frac=calib_frac, + stratify=stratify, + target=target, + n_bins=n_bins, ) + return _param_sims_from_assignment(df, assign) -def _save_split(path, train_ps, val_ps, test_ps, df): +def _save_split(path, split_ps: SplitParamSims): """ Save parameter-simulation split assignments. Args: path: Output CSV path. - train_ps: Training pairs. - val_ps: Validation pairs. - test_ps: Test pairs. + split_ps: Split parameter-simulation sets. df: Source dataframe. Returns: None. """ - rows = [] - for ps, split in ( - [(p, "train") for p in train_ps] + [(p, "validate") for p in val_ps] + [(p, "test") for p in test_ps] - ): - rows.append( - {"parameter_index": ps[0], "simulation_index": ps[1], "split": split} + rows = [ + (param_idx, sim_idx, split) + for split, ps in ( + ("train", split_ps.train), + ("validate", split_ps.val), + ("test", split_ps.test), + ("calibrate", split_ps.calib), ) - pd.DataFrame(rows).to_csv(path, index=False) + for param_idx, sim_idx in ps + ] + pd.DataFrame(rows, columns=["parameter_index", "simulation_index", "split"]).to_csv(path, index=False) log.info(f"Split saved to {path}") -def _fit_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: str) -> StandardScaler: +def _fit_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: str, features: list[str] = FEATURES_BASE) -> StandardScaler: """ Fit and save the static covariate scaler. @@ -134,16 +251,16 @@ def _fit_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: st df: Filtered dataframe. train_ps: Training pairs. output_dir: Directory for scaler output. + features: List of feature columns to use. Returns: Fitted scaler. """ train_mask = df["_ps"].isin(train_ps) train_static = ( - df.loc[train_mask, ["_ps"] + FEATURES_BASE] - .drop_duplicates(subset=["_ps"])[FEATURES_BASE] - .astype(np.float32) - .values + df.loc[train_mask, ["_ps"] + features] + .drop_duplicates(subset=["_ps"])[features] + .to_numpy(dtype=np.float32) ) scaler = StandardScaler() scaler.fit(train_static) @@ -155,14 +272,55 @@ def _fit_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: st return scaler +def _fit_target_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: str, target: str = "eir") -> StandardScaler: + """ + Fit and save the target scaler. + + Args: + df: Filtered dataframe. + train_ps: Training pairs. + output_dir: Directory for scaler output. + target: Target column to scale. + Returns: + Fitted scaler. + """ + train_mask = df["_ps"].isin(train_ps) + train_y = ( + df.loc[train_mask, ["_ps", target]] + .drop_duplicates(subset=["_ps"])[target] + .to_numpy(dtype=np.float32) + ) + scaler = StandardScaler() + scaler.fit(np.log10(train_y)[:, None]) # Fit on log10 of target + + save_path = Path(output_dir) / "target_scaler.pkl" + save_path.parent.mkdir(parents=True, exist_ok=True) + with open(save_path, "wb") as f: + pickle.dump(scaler, f) + return scaler + def _build_data( df: pd.DataFrame, param_sims: set[tuple[int, int]], scaler: StandardScaler, - cfg: DictConfig, + target_scaler: StandardScaler, + features: list[str] = FEATURES_BASE, + target: str = "eir" ) -> list[dict[str, np.ndarray]]: """ + Build scaled per-parameter-simulation training records. + + Args: + df: Filtered dataframe with feature, target, and ``_weight`` columns. + param_sims: Parameter-simulation pairs to include. + scaler: Fitted static feature scaler. + target_scaler: Fitted target scaler. + features: Feature columns to scale and include as model inputs. + target: Positive target column to log-transform. + Returns: + A list of sequence dictionaries containing scaled features, raw + features, log10 targets, raw targets, sample weights, and pair IDs. """ groups = df.groupby(["parameter_index", "simulation_index"]) data = [] @@ -171,24 +329,29 @@ def _build_data( if ps not in groups.groups: continue - df["eir_log10"] = np.log10(df["eir"], dtype=np.float32) # TODO: do we need to log10? - X = ( - df.loc[groups.groups[ps], FEATURES_BASE] - .astype(np.float32) - .values - ) - Y = df.loc[groups.groups[ps], "eir_log10"].values + group_idx = groups.groups[ps] + X_raw = df.loc[group_idx, features].to_numpy(dtype=np.float32)[0] + X = scaler.transform(X_raw) + Y_raw = df.loc[group_idx, target].to_numpy(dtype=np.float32)[0] + Y = np.log10(Y_raw) + Y_std = target_scaler.transform(np.array([[Y]], dtype=np.float32))[0, 0] + W = df.loc[group_idx, "_weight"].to_numpy(dtype=np.float32)[0] data.append( { + "x_raw": X_raw, "x": X, + "y_raw": Y_raw, "y": Y, + "y_std": Y_std, + "w": W, "ps": np.asarray(ps, dtype=np.int32), # (2,) parameter_index, simulation_index } ) return data -def prepare_data(df: pd.DataFrame, cfg: DictConfig): +# TODO: sort out exisitng splits and files with different models etc +def prepare_data(df: pd.DataFrame, cfg: DictConfig, calib_frac: float = 0.0) -> PreparedData: """ Split and transform raw simulation data. @@ -212,35 +375,45 @@ def prepare_data(df: pd.DataFrame, cfg: DictConfig): # Filter by threshold df = _filter_by_threshold(df) - - + df["_weight"] = make_value_weights(df[cfg.target].to_numpy(dtype=np.float32)) # split data if cfg.use_existing_split and Path(cfg.split_file).exists(): log.info(f"Loading existing split from {cfg.split_file}") - train_ps, val_ps, test_ps = _load_split(cfg.split_file, df) + split_ps = _load_split(cfg.split_file, df) else: - log.info("Creating new train/val/test split (70/15/15)") - train_ps, val_ps, test_ps = _create_split(df, cfg.seed) + log.info("Creating new train/val/calib/test split") + split_ps = _create_split(df, cfg.seed, stratify=cfg.stratify, target=cfg.target, calib_frac=calib_frac) if cfg.split_file: log.info(f"Saving split to {cfg.split_file}") - _save_split(cfg.split_file, train_ps, val_ps, test_ps, df) + _save_split(cfg.split_file, split_ps) - log.info(f"Split — train: {len(train_ps)}, val: {len(val_ps)}, test: {len(test_ps)}") + log.info( + "Split — train: %s, val: %s, calib: %s, test: %s", + len(split_ps.train), + len(split_ps.val), + len(split_ps.calib), + len(split_ps.test), + ) - scaler = _fit_scaler(df, train_ps, cfg.output_dir) # TODO fix scaling + scaler = _fit_scaler(df, split_ps.train, cfg.output_dir) # TODO fix scaling + target_scaler = _fit_target_scaler(df, split_ps.train, cfg.output_dir, target=cfg.target) - train_data = _build_data(df, train_ps, scaler, cfg) - val_data = _build_data(df, val_ps, scaler, cfg) - test_data = _build_data(df, test_ps, scaler, cfg) + train_data = _build_data(df, split_ps.train, scaler, target_scaler, target=cfg.target) + val_data = _build_data(df, split_ps.val, scaler, target_scaler, target=cfg.target) + test_data = _build_data(df, split_ps.test, scaler, target_scaler, target=cfg.target) + calib_data = _build_data(df, split_ps.calib, scaler, target_scaler, target=cfg.target) return PreparedData( train_data=train_data, val_data=val_data, test_data=test_data, + calib_data=calib_data, input_size=len(FEATURES_BASE), scaler=scaler, - train_param_sims=train_ps, - val_param_sims=val_ps, - test_param_sims=test_ps, + target_scaler=target_scaler, + train_param_sims=split_ps.train, + val_param_sims=split_ps.val, + test_param_sims=split_ps.test, + calib_param_sims=split_ps.calib ) diff --git a/src/estimint/v2/eval/metrics.py b/src/estimint/v2/eval/metrics.py new file mode 100644 index 0000000..a60b456 --- /dev/null +++ b/src/estimint/v2/eval/metrics.py @@ -0,0 +1,40 @@ +import numpy as np +from grain.python import DataLoader +from jax import Array +from estimint.utils import mse, r2, rmse, mae, bias +from dataclasses import dataclass + +@dataclass +class Metrics: + mse: float + r2: float + rmse: float + mae: float + bias: float + +def compute_metrics( + model_bundle, + loader: DataLoader, +): + preds, targets = get_preds_targets(model_bundle, loader) + + return Metrics( + mse=mse(targets, preds), + r2=r2(targets, preds), + rmse=rmse(targets, preds), + mae=mae(targets, preds), + bias=bias(targets, preds) + ) + + +def get_preds_targets(model_bundle, data_loader: DataLoader) -> tuple[np.ndarray, np.ndarray]: + all_preds, all_targets = [], [] + for batch in data_loader: + preds = model_bundle.predict(batch["x_raw"]) + all_preds.append(preds) + all_targets.append(batch["y_raw"]) + all_preds = np.concatenate(all_preds, axis=0) + all_targets = np.concatenate(all_targets, axis=0) + + return all_preds, all_targets + diff --git a/src/estimint/v2/models/mlp.py b/src/estimint/v2/models/mlp.py new file mode 100644 index 0000000..3071318 --- /dev/null +++ b/src/estimint/v2/models/mlp.py @@ -0,0 +1,27 @@ +from flax import nnx + +# TODO: can props remove residual if block +class MLP(nnx.Module): + def __init__(self, din, dout, *, width=128, depth=4, residual=False, dropout_rate=0.1, rngs): + self.residual = residual + self.inp = nnx.Linear(din, width, rngs=rngs) + if residual: + self.norms = nnx.List([nnx.LayerNorm(width, rngs=rngs) for _ in range(depth)]) + self.fc1 = nnx.List([nnx.Linear(width, width, rngs=rngs) for _ in range(depth)]) + self.fc2 = nnx.List([nnx.Linear(width, width, rngs=rngs) for _ in range(depth)]) + else: + self.hidden = nnx.List([nnx.Linear(width, width, rngs=rngs) for _ in range(depth)]) + self.dropout = nnx.Dropout(dropout_rate, rngs=rngs) + self.out = nnx.Linear(width, dout, rngs=rngs) + + def __call__(self, x): + x = self.inp(x) + if self.residual: + for ln, f1, f2 in zip(self.norms, self.fc1, self.fc2): + x = x + self.dropout(f2(nnx.gelu(f1(ln(x))))) # pre-LN residual block + x = nnx.gelu(x) + else: + x = nnx.gelu(x) + for h in self.hidden: + x = self.dropout(nnx.gelu(h(x))) + return self.out(x) \ No newline at end of file diff --git a/src/estimint/v2/models/rqs.py b/src/estimint/v2/models/rqs.py new file mode 100644 index 0000000..21e7ed5 --- /dev/null +++ b/src/estimint/v2/models/rqs.py @@ -0,0 +1,3 @@ +from flax import nnx +class ConditionalRQS(nnx.Module): + pass \ No newline at end of file diff --git a/src/estimint/v2/models/umnn.py b/src/estimint/v2/models/umnn.py new file mode 100644 index 0000000..136596a --- /dev/null +++ b/src/estimint/v2/models/umnn.py @@ -0,0 +1,70 @@ +from flax import nnx + +from estimint.v2.data.features import StandardScaler +from .mlp import MLP +import numpy as np +import jax.numpy as jnp + + +class MonotoneUMNN(nnx.Module): + def __init__(self, n_context, *, width=128, depth=4, n_quad=48, mlp_residual=False, dropout_rate=0.1, rngs: nnx.Rngs): + self.bias = MLP(n_context, 1, width=width, depth=depth, residual=mlp_residual, dropout_rate=dropout_rate, rngs=rngs) + self.integrand = MLP(n_context + 1, 1, width=width, depth=depth, residual=mlp_residual, dropout_rate=dropout_rate, rngs=rngs) + # leggauss(n) returns nodes/weights for integrating on [-1, 1]. We'll + # rescale them to [0, m] at call time. + nodes, weights = np.polynomial.legendre.leggauss(n_quad) + self.nodes = jnp.array(nodes) # (Q, ) + self.weights = jnp.array(weights) # (Q, ) + + def _integral(self, m, c): + # m: (B,) monotone feature; c: (B, C) context. Compute ∫₀ᵐ g dt per row. + m = m[:, None] # (B, 1) + half = 0.5 * m + # map [-1, 1] -> [0, m] for each row + t = half * (self.nodes[None, :] + 1.0) # (B, Q) + cE = jnp.broadcast_to(c[:, None, :], (c.shape[0], t.shape[1], c.shape[1])) # (B, Q, C) + inp = jnp.concatenate([t[..., None], cE], axis=-1) # (B, Q, C+1) : [t, context] + # compute g(t, c). g(t, c) >= 0 + g = nnx.softplus(self.integrand(inp))[..., 0] # (B, Q) + return half[:, 0] * (self.weights[None, :] * g).sum(axis=1) # (B,) + + def __call__(self, m, c): + # m: (B,) monotone feature; c: (B, C) context. Compute f(m, c) = b(c) + ∫₀ᵐ g dt + return self.bias(c)[:, 0] + self._integral(m, c) + +@nnx.jit +def _forward(models: list[MonotoneUMNN], m: jnp.ndarray, c: jnp.ndarray): + return [model(m, c) for model in models] + +class UMNNBundle: + def __init__(self, models: list[MonotoneUMNN], scaler: StandardScaler, features: list[str]): + self.models = models + self.scaler = scaler + self.features = features + + def set_models_to_eval(self): + for model in self.models: + model.eval() + + def _transform_inputs(self, X_raw) -> tuple[jnp.ndarray, jnp.ndarray]: + X_scaled = self.scaler.transform(X_raw) + context = X_scaled[:, 1:] # all but first column + monotone_feature = X_scaled[:, 0] # first column + return jnp.array(monotone_feature), jnp.array(context) + + + def predict(self, X_raw: np.ndarray) -> np.ndarray: + m, c = self._transform_inputs(X_raw) + preds = _forward(self.models, m, c) + mean_pred = jnp.mean(jnp.stack(preds), axis=0) + return np.power(10, mean_pred) # return in original scale + + +def umnn_loss(model, X, y, w): + # X is arranged as [monotone_feature, *context]; split it back out. + m, c = X[:, 0], X[:, 1:] + pred = model(m, c) + # Weighted mean-squared error on log10(EIR). Dividing by sum(w) makes it a + # proper weighted average. + return jnp.sum(w * (pred - y) ** 2) / jnp.sum(w) + diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index a5f9505..14a7877 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -9,23 +9,49 @@ from hydra.utils import get_method from omegaconf import DictConfig, OmegaConf from tqdm import tqdm - +from .models.umnn import MonotoneUMNN, umnn_loss, UMNNBundle from .data.preprocess import PreparedData, prepare_data from .data.dataset import make_loader +import wandb +from grain.python import DataLoader +from .data.features import FEATURES_BASE +from flax import nnx +from .training.train_step import create_optimizer, make_train_step, make_eval_step +import numpy as np +from orbax.checkpoint import v1 as ocp +from etils import epath +from estimint.utils import r2, rmse, mae, mse +from estimint.v2.eval.metrics import compute_metrics +from typing import Callable +from jaxtyping import Array +logging.getLogger("absl").setLevel(logging.WARNING) log = logging.getLogger(__name__) -@hydra.main(version_base=None, config_path="conf", config_name="train_config") -def main(cfg: DictConfig) -> None: - log.info(OmegaConf.to_yaml(cfg)) - log.info("JAX devices: %s", jax.devices()) +def get_total_params(model: nnx.Module) -> int: + """ + Get the total number of parameters in the model. - Path(cfg.output_dir).mkdir(parents=True, exist_ok=True) + Args: + model: Flax module. - raw_df = duckdb.read_parquet(cfg.data_file).df() + Returns: + Total parameter count. + """ + params = nnx.state(model, nnx.Param) + return sum(np.prod(x.shape) for x in jax.tree_util.tree_leaves(params)) - prepared_data = prepare_data(raw_df, cfg) +def train_model( + model: nnx.Module, + cfg: DictConfig, + prepared_data: PreparedData, + loss_fn: Callable[[nnx.Module, Array, Array, Array], Array], + use_standardized_y: bool = False, + ) -> nnx.Module: + train_step = make_train_step(loss_fn) + eval_step = make_eval_step(loss_fn) + target_key = "y_std" if use_standardized_y else "y" val_loader = make_loader( data=prepared_data.val_data, batch_size=cfg.batch_size, @@ -34,6 +60,68 @@ def main(cfg: DictConfig) -> None: num_workers=cfg.num_workers, drop_remainder=True, ) + total_steps = cfg.num_epochs * len(prepared_data.train_data) // cfg.batch_size + optimizer = create_optimizer(model, cfg.lr, total_steps, weight_decay=cfg.weight_decay) + + # ---- training loop ---- + patience_n = 0 + best_val_loss = float("inf") + best_model = nnx.state(model) + epoch_pbar = tqdm(range(cfg.num_epochs), desc="Epoch") + for epoch in epoch_pbar: + # remake train loader each epoch to reshuffle with new seed + train_loader = make_loader( + data=prepared_data.train_data, + batch_size=cfg.batch_size, + seed=cfg.seed + epoch, + shuffle=True, + num_workers=cfg.num_workers, + drop_remainder=True, + ) + model.train() + train_losses: list[jax.Array] = [train_step(model, optimizer, batch["x"], batch[target_key], batch["w"]) for batch in train_loader] + + model.eval() + val_losses: list[jax.Array] = [eval_step(model, batch["x"], batch[target_key], batch["w"]) for batch in val_loader] + + avg_train_loss = float(jnp.mean(jnp.stack(train_losses))) + avg_val_loss = float(jnp.mean(jnp.stack(val_losses))) + epoch_pbar.set_postfix( + train=f"{avg_train_loss:.6f}", + val=f"{avg_val_loss:.6f}", + patience=f"{patience_n}/{cfg.patience}", + ) + if cfg.use_wandb: + wandb.log({"train/loss": avg_train_loss, "val/loss": avg_val_loss, "epoch": epoch}) + if epoch < cfg.min_epochs: + continue + if avg_val_loss < best_val_loss: + best_val_loss = avg_val_loss + best_model = nnx.state(model) + patience_n = 0 + else: + patience_n += 1 + if patience_n >= cfg.patience: + log.info(f"Early stopping at epoch {epoch} with best val loss {best_val_loss:.6f}") + break + + nnx.update(model, best_model) + return model + + +def train_umnn(cfg: DictConfig, prepared_data: PreparedData) -> UMNNBundle: + models = [] + for ensemble in range(cfg.n_ensembles): + model = MonotoneUMNN(len(FEATURES_BASE) - 1, rngs=nnx.Rngs(cfg.seed + ensemble), width=cfg.width, depth=cfg.depth, n_quad=cfg.n_quad, mlp_residual=cfg.mlp_residual, dropout_rate=cfg.dropout_rate) + if ensemble == 0: + log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") + model = train_model(model, cfg, prepared_data, umnn_loss) + models.append(model) + # TODO: unsure if need to ensemble. can probs use dropout instead + umnn_bundle = UMNNBundle(models, prepared_data.scaler, FEATURES_BASE) + + # ------------ test evaluation ---------------- + umnn_bundle.set_models_to_eval() test_loader = make_loader( data=prepared_data.test_data, batch_size=cfg.batch_size, @@ -42,5 +130,51 @@ def main(cfg: DictConfig) -> None: num_workers=cfg.num_workers, drop_remainder=True, ) + metrics = compute_metrics(umnn_bundle, test_loader) + log.info(f"test R2={metrics.r2:.4f} RMSE={metrics.rmse:.2f} MAE={metrics.mae:.2f} MSE={metrics.mse:.2f} Bias={metrics.bias:.2f}") + if cfg.use_wandb: + wandb.log({"test/r2": metrics.r2, "test/rmse": metrics.rmse, "test/mae": metrics.mae, "test/mse": metrics.mse, "test/bias": metrics.bias}) + # ------------- checkpointing ---------------- + # TODO: check checkpointing works okay. and then be able to load the model back in for inference. For now, just save the model states. + ckpt_dir = (epath.Path(cfg.checkpoint_dir) / "umnn").resolve() + preservation_policy = ocp.training.preservation_policies.LatestN(n=1) + with ocp.training.Checkpointer(ckpt_dir, preservation_policy=preservation_policy) as ckptr: # type: ignore[arg-type] + ckptr.save_checkpointables( + 0, + { + "models": [nnx.state(model) for model in umnn_bundle.models], + }, + overwrite=True + ) + return umnn_bundle + +def train_rqs(cfg: DictConfig, prepared_data: PreparedData): + + + +@hydra.main(version_base=None, config_path="conf", config_name="train_config") +def main(cfg: DictConfig) -> None: + log.info(OmegaConf.to_yaml(cfg)) + log.info("JAX devices: %s", jax.devices()) + if cfg.use_wandb: + wandb.init( + project=cfg.wandb.project, + name=cfg.wandb.name, + config=OmegaConf.to_container(cfg, resolve=True, throw_on_missing=True), # type: ignore + settings=wandb.Settings(start_method="thread"), + ) + # -------- data loading and preprocessing -------- + Path(cfg.output_dir).mkdir(parents=True, exist_ok=True) + + raw_df = duckdb.read_parquet(cfg.data_file).df() + + prepared_data = prepare_data(raw_df, cfg, calib_frac=cfg.calib_frac) + + umnn_bundle = train_umnn(cfg, prepared_data) + + if cfg.use_wandb: + wandb.finish() + + if __name__ == "__main__": main() \ No newline at end of file diff --git a/src/estimint/v2/training/checkpoint.py b/src/estimint/v2/training/checkpoint.py index ee9d85a..adcb2eb 100644 --- a/src/estimint/v2/training/checkpoint.py +++ b/src/estimint/v2/training/checkpoint.py @@ -38,44 +38,6 @@ def restore_model( return model -def init_or_restore_last( - ckptr: ocp.training.Checkpointer, - model: nnx.Module, - optimizer: nnx.Optimizer, - restore_checkpoint: bool = False, -) -> tuple[nnx.Module, nnx.Optimizer, int, float]: - """ - Initialize or restore model and optimizer from checkpoint. - - Args: - ckptr: Orbax checkpointer. - model: Model to restore. - optimizer: Optimizer to restore. - restore_checkpoint: Whether to restore from checkpoint. - - Returns: - Model, optimizer, start epoch, and validation loss from the checkpoint. - """ - if not restore_checkpoint or not ckptr.latest: - log.info("Initializing model and optimizer from scratch.") - return model, optimizer, 0, float("inf") - - log.info(f"Restoring model and optimizer from checkpoint: {ckptr.latest.step}") - loaded_state = ckptr.load_checkpointables( - abstract_checkpointables={ - "model": nnx.state(model), - "optimizer": nnx.state(optimizer), - } - ) - nnx.update(model, loaded_state["model"]) - nnx.update(optimizer, loaded_state["optimizer"]) - metadata = ckptr.metadata() - metrics: dict[str, Any] = metadata.metrics if isinstance(metadata.metrics, dict) else {} - val_loss = float(metrics.get("val/loss", float("inf"))) - - return model, optimizer, ckptr.latest.step + 1, val_loss - - @dataclass class CheckpointSession: ckptr: ocp.training.Checkpointer diff --git a/src/estimint/v2/training/train_step.py b/src/estimint/v2/training/train_step.py new file mode 100644 index 0000000..4325df3 --- /dev/null +++ b/src/estimint/v2/training/train_step.py @@ -0,0 +1,44 @@ +from flax import nnx +import optax +from typing import Callable +from jaxtyping import Array +def create_optimizer( + model: nnx.Module, learning_rate: float, total_steps: int, weight_decay: float = 1e-4 +) -> nnx.Optimizer: + """ + Create the training optimizer. + + Args: + model: Model to optimize. + learning_rate: Peak learning rate. + total_steps: Total training steps. + + Returns: + Configured optimizer. + """ + scheduler = optax.warmup_cosine_decay_schedule( + init_value=0.0, + peak_value=learning_rate, + warmup_steps=int(0.03 * total_steps), # warmup for 3% of training + decay_steps=total_steps, + end_value=0.01 * learning_rate, # decay to 1% of initial LR + ) + tx = optax.chain(optax.clip_by_global_norm(1.0), optax.adamw(learning_rate=scheduler, weight_decay=weight_decay)) + return nnx.Optimizer(model, tx, wrt=nnx.Param) + +def make_train_step(loss_fn: Callable): + @nnx.jit + def train_step(model: nnx.Module, optimizer: nnx.Optimizer, x: Array, y: Array, w: Array): + loss, grads = nnx.value_and_grad(loss_fn)(model, x, y, w) + optimizer.update(model, grads) + return loss + + return train_step + +def make_eval_step(loss_fn: Callable): + @nnx.jit + def eval_step(model: nnx.Module, x: Array, y: Array, w: Array): + loss = loss_fn(model, x, y, w) + return loss + + return eval_step \ No newline at end of file diff --git a/uv.lock b/uv.lock index 249cf97..395135d 100644 --- a/uv.lock +++ b/uv.lock @@ -40,6 +40,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, ] +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + [[package]] name = "antlr4-python3-runtime" version = "4.9.3" @@ -401,6 +410,7 @@ dependencies = [ { name = "orbax-checkpoint" }, { name = "pandas" }, { name = "scipy" }, + { name = "wandb" }, { name = "xgboost" }, ] @@ -474,6 +484,7 @@ requires-dist = [ { name = "scikit-learn", marker = "extra == 'train'", specifier = ">=1.0.0" }, { name = "scipy", specifier = ">=1.7.0" }, { name = "tqdm", marker = "extra == 'train'", specifier = ">=4.67.3" }, + { name = "wandb", specifier = ">=0.28.0" }, { name = "xgboost", specifier = ">=1.6.0" }, ] provides-extras = ["train", "gpu", "viz", "download", "scenarios", "all"] @@ -601,6 +612,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl", hash = "sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1", size = 203949, upload-time = "2026-06-16T01:57:26.358Z" }, ] +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload-time = "2025-01-02T07:20:43.624Z" }, +] + +[[package]] +name = "gitpython" +version = "3.1.50" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/f6/354ae6491228b5eb40e10d89c4d13c651fe1cf7556e35ebdded50cff57ce/gitpython-3.1.50.tar.gz", hash = "sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc", size = 219798, upload-time = "2026-05-06T04:01:26.571Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl", hash = "sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9", size = 212507, upload-time = "2026-05-06T04:01:23.799Z" }, +] + [[package]] name = "grain" version = "0.2.18" @@ -1795,6 +1830,96 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594, upload-time = "2025-06-20T18:49:47.491Z" }, ] +[[package]] +name = "pydantic" +version = "2.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, + { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, + { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, + { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, + { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, + { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, + { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, + { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, + { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, + { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, + { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, + { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, + { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, + { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, + { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, + { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, + { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, + { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, + { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, + { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, + { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, + { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, + { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, + { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, + { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, + { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, + { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, + { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, + { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, + { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, + { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, + { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, + { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, + { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, + { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, + { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, + { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, + { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, + { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, + { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, +] + [[package]] name = "pyflakes" version = "3.4.0" @@ -2042,6 +2167,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/64/47/a494741db7280eae6dc033510c319e34d42dd41b7ac0c7ead39354d1a2b5/scipy-1.16.3-cp314-cp314t-win_arm64.whl", hash = "sha256:21d9d6b197227a12dcbf9633320a4e34c6b0e51c57268df255a0942983bac562", size = 26464127, upload-time = "2025-10-28T17:38:11.34Z" }, ] +[[package]] +name = "sentry-sdk" +version = "2.64.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/31/b7341f156a5f6f36f0b4845d6f1c28a2ae4799171dba7007f3a1e9b234b4/sentry_sdk-2.64.0.tar.gz", hash = "sha256:68be2c29e14ae310f8a39e1a79916b6d85c6cb41dcce789d14ff05fe293e4c55", size = 921020, upload-time = "2026-06-30T08:13:47.682Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/a8/3fb9a4319efa3b26f5be0e90e6d8918df43fa7c7e977d26390f589501d82/sentry_sdk-2.64.0-py3-none-any.whl", hash = "sha256:715ea91ca860a819e8d8a50a7bde3a80d0df3b4ed7b6660a20fb9a2d084188f1", size = 498901, upload-time = "2026-06-30T08:13:45.566Z" }, +] + [[package]] name = "shellingham" version = "1.5.4" @@ -2113,6 +2251,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] +[[package]] +name = "smmap" +version = "5.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/ea/49c993d6dfdd7338c9b1000a0f36817ed7ec84577ae2e52f890d1a4ff909/smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c", size = 22506, upload-time = "2026-03-09T03:43:26.1Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f", size = 24390, upload-time = "2026-03-09T03:43:24.361Z" }, +] + [[package]] name = "tensorstore" version = "0.1.84" @@ -2201,6 +2348,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + [[package]] name = "tzdata" version = "2025.2" @@ -2260,6 +2419,35 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8d/96/04e7b441807b26b794da5b11e59ed7f83b2cf8af202bd7eba8ad2fa6046e/wadler_lindig-0.1.7-py3-none-any.whl", hash = "sha256:e3ec83835570fd0a9509f969162aeb9c65618f998b1f42918cfc8d45122fe953", size = 20516, upload-time = "2025-06-18T07:00:41.684Z" }, ] +[[package]] +name = "wandb" +version = "0.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "gitpython" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "protobuf" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sentry-sdk" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/a7/683bfbd6cbade3012bc90d3e9c4cfc72dd62566195bf4c30321946d64b77/wandb-0.28.0.tar.gz", hash = "sha256:b20e5af0fe80e2e2a466b0466a1d60cedcc578dce0f036eca04f4a0adcad95b6", size = 40558332, upload-time = "2026-06-23T00:38:50.115Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/47/1723605f76c5d6446b6d0db65b83eda1599721bc8c1e65bd76cc1682b1a7/wandb-0.28.0-py3-none-macosx_12_0_arm64.whl", hash = "sha256:c3dab1205a5aca4abbad1eca08902cdba86add0edfa83d8d61b4429d0e79fa87", size = 24335272, upload-time = "2026-06-23T00:38:26.002Z" }, + { url = "https://files.pythonhosted.org/packages/81/ff/42b539bc75bc48fc86981dccde89327ba9b71504b805b9ba42cba7c26de9/wandb-0.28.0-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:ae255da18726ee8e731ef82cbc85035b901a28ae14cf91604c361b44b8d44ce0", size = 25557959, upload-time = "2026-06-23T00:38:28.993Z" }, + { url = "https://files.pythonhosted.org/packages/15/55/c3db03d04aeab3726066a418b2ef6a1f8119774ee510f4fbe992f52b7472/wandb-0.28.0-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:6dbcba12ab168aa37561f2f32dcdef8713495fc25fa7d30fdc9bfb37989694dd", size = 24878557, upload-time = "2026-06-23T00:38:31.417Z" }, + { url = "https://files.pythonhosted.org/packages/d8/5d/1385ce3c219cb5bd30d4027687e3f8d25969c7dfd09adad1cbd5080e1a72/wandb-0.28.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:325b2d0bd88be6eda5db10542499bad3710927f2569c81a84dc5eeaffc76825c", size = 26764727, upload-time = "2026-06-23T00:38:33.775Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/23b6c17a6d3d5422b007707961c4496b2f6f892624d2910c9f7742fcc202/wandb-0.28.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:8954bc1c62ae43914dce2bebfd1d9957f72350f8fbb78e5cdfe2ca9b6be8a7b8", size = 25051656, upload-time = "2026-06-23T00:38:36.281Z" }, + { url = "https://files.pythonhosted.org/packages/89/67/9be00fb2db2281063af24a148636d2dd363d337317642ab5d8e93572c794/wandb-0.28.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:9fec6c908554c2dad33110c1312bc3028cc2e430f0679f16b84f82c8ea801e3b", size = 27074113, upload-time = "2026-06-23T00:38:38.737Z" }, + { url = "https://files.pythonhosted.org/packages/59/b1/f7a96c09cab0c5131b1e6466659b093b401e1653cbe6bb77b462fc1c361d/wandb-0.28.0-py3-none-win32.whl", hash = "sha256:8834ef3a7c8c43b701654162783caa7ad37af48a0ff06fc35d0d65a411f76ccd", size = 24525206, upload-time = "2026-06-23T00:38:42.041Z" }, + { url = "https://files.pythonhosted.org/packages/c6/c4/c7bed5e981679c74e9fbb22c03ff31c42e95f266199d03d8d325f4d0e6df/wandb-0.28.0-py3-none-win_amd64.whl", hash = "sha256:ac1f82292e2da4f98297b78c3a46726b3a6c5734ecb75fc39b8db2c8a4989159", size = 24525214, upload-time = "2026-06-23T00:38:44.549Z" }, + { url = "https://files.pythonhosted.org/packages/f0/77/b5ce9696c8cb955521a7941fbc443e78b2f504894c6ae1a2d0b1de6e12ae/wandb-0.28.0-py3-none-win_arm64.whl", hash = "sha256:c5b0faf1b84cf79ebabed77538c1940a4c6053e815f767a4004e877a1354bed1", size = 22378208, upload-time = "2026-06-23T00:38:47.148Z" }, +] + [[package]] name = "xgboost" version = "3.1.2" From 65173d4752a2722adec7cfaff237e076a185a1fc Mon Sep 17 00:00:00 2001 From: Anmol Date: Tue, 14 Jul 2026 16:04:13 +0000 Subject: [PATCH 07/32] get rqs v1 --- .gitignore | 1 - src/estimint/v2/conf/train_config.yaml | 3 +- src/estimint/v2/data/preprocess.py | 16 +-- src/estimint/v2/models/rqs.py | 147 ++++++++++++++++++++++++- src/estimint/v2/models/umnn.py | 2 +- src/estimint/v2/train_base.py | 13 ++- test_estimint_nn.py | 51 ++++++--- 7 files changed, 206 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index 829b01b..9b20f37 100644 --- a/.gitignore +++ b/.gitignore @@ -50,7 +50,6 @@ models/**/*.model models/**/plots/ models/**/metrics/ -split.csv # Test / coverage .coverage diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index 795e6dd..a6f73b2 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -12,6 +12,8 @@ depth: 4 n_quad: 96 mlp_residual: false dropout_rate: 0.0 +n_bins: 24 +rqs_bounds: 6 # Hyperparameters num_epochs: 300 @@ -21,7 +23,6 @@ lr: 1e-3 batch_size: 256 weight_decay: 1e-4 n_ensembles: 1 -n_bins: 24 # Checkpoint checkpoint_dir: "${output_dir}/ckpts-${cur_time}" diff --git a/src/estimint/v2/data/preprocess.py b/src/estimint/v2/data/preprocess.py index 84ed080..e929abc 100644 --- a/src/estimint/v2/data/preprocess.py +++ b/src/estimint/v2/data/preprocess.py @@ -10,7 +10,7 @@ from estimint.data_processing import make_value_weights import pickle from dataclasses import dataclass, field - +from typing import cast log = logging.getLogger(__name__) @dataclass @@ -322,20 +322,22 @@ def _build_data( A list of sequence dictionaries containing scaled features, raw features, log10 targets, raw targets, sample weights, and pair IDs. """ - groups = df.groupby(["parameter_index", "simulation_index"]) + # One row per (parameter_index, simulation_index): features/target are + # static per simulation, so any row in the group carries the same values. + rows = df.groupby(["parameter_index", "simulation_index"]).first() data = [] for ps in param_sims: - if ps not in groups.groups: + if ps not in rows.index: continue - group_idx = groups.groups[ps] - X_raw = df.loc[group_idx, features].to_numpy(dtype=np.float32)[0] + row = cast(pd.Series, rows.loc[ps]) + X_raw = row[features].to_numpy(dtype=np.float32) X = scaler.transform(X_raw) - Y_raw = df.loc[group_idx, target].to_numpy(dtype=np.float32)[0] + Y_raw = np.float32(row[target]) Y = np.log10(Y_raw) Y_std = target_scaler.transform(np.array([[Y]], dtype=np.float32))[0, 0] - W = df.loc[group_idx, "_weight"].to_numpy(dtype=np.float32)[0] + W = np.float32(row["_weight"]) data.append( { "x_raw": X_raw, diff --git a/src/estimint/v2/models/rqs.py b/src/estimint/v2/models/rqs.py index 21e7ed5..55c0c81 100644 --- a/src/estimint/v2/models/rqs.py +++ b/src/estimint/v2/models/rqs.py @@ -1,3 +1,148 @@ from flax import nnx +from .mlp import MLP +import jax.numpy as jnp +import jax +from estimint.v2.data.features import StandardScaler +import numpy as np + + class ConditionalRQS(nnx.Module): - pass \ No newline at end of file + """Conditional rational-quadratic spline flow. + + Note: The inverse is flipped as compaerd to standard normalizing flow convention. + Usually it is as x = T(z) where z ~ N(0, 1). Here, we have defined z = T(x) where z ~ N(0, 1). + And x = T^{-1}(z) + + + """ + def __init__(self, n_context, *, width=128, depth=4, n_bins=12, bounds=6, residual=False, dropout_rate=0.0, rngs: nnx.Rngs): + self.K = n_bins + self.bounds = bounds + # The net maps context -> all spline params: K widths + K heights + + # (K+1) derivatives = 3K+1 numbers. + self.net = MLP(n_context, 3 * n_bins + 1, width=width, depth=depth, residual=residual, dropout_rate=dropout_rate, rngs=rngs) + + def _params(self, context): + params = self.net(context) # (B, 3K + 1) + return jnp.split(params, [self.K, 2 * self.K], axis=-1) # widths(K), heights(K), derivatives(K+1) + + def log_prob(self, y0, context): + """standardized target y0 -> base z; density = Normal(z) * |dT/dy|.""" + widths, heights, derivatives = self._params(context) + z, log_det = _rqs(y0, widths, heights, derivatives, self.bounds, inverse=False) + return jax.scipy.stats.norm.logpdf(z) + log_det + + def quantile(self, context, quantile): + """Flow base z -> target y.The q-quantile of y is flow T^{-1}(Phi^{-1}(q))""" + widths, heights, derivatives = self._params(context) + z = jax.scipy.stats.norm.ppf(quantile) # Phi^{-1}(q) + y0, _ = _rqs(z, widths, heights, derivatives, self.bounds, inverse=True) + return y0 + +@nnx.jit +def _forward(models: list[ConditionalRQS], context: jnp.ndarray, quantile: float): + return [model.quantile(context, quantile) for model in models] + +class RQSBundle: + def __init__(self, models: list[ConditionalRQS], scaler_x: StandardScaler, scaler_y: StandardScaler, features: list[str]): + self.models = models + self.scaler_x = scaler_x + self.scaler_y = scaler_y + self.features = features + self.conformal = {} # alpha -> offset Q (fit on calibration set) + + def _quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: + context = jnp.array(self.scaler_x.transform(X_raw)) + y0 = np.mean(_forward(self.models, context, quantile), axis=0) + return np.maximum(0, np.power(10, self.scaler_y.inverse_transform(y0))) # return in original scale + + +def _rqs(x: jax.Array, raw_widths: jax.Array, raw_heights: jax.Array, raw_derivatives: jax.Array, bounds: int, inverse=False): + """Evaluate the monotone rational-quadratic spline + + Args: + x : (B,) points to transform. Will be z for inverse=False and y for inverse=True. + raw_widths : (B,K) unconstrained bin WIDTHS (softmax'd to sum to 2B). + raw_heights : (B,K) unconstrained bin HEIGHTS (softmax'd to sum to 2B). + raw_derivatives : (B,K+1) unconstrained knot DERIVATIVES (softplus'd to be positive). + inverse : False computes z = T(x); True computes x = T^{-1}(z). + inverse : False computes z = T(x); True computes x = T^{-1}(z). + + Returns + (transformed, log|derivative|). + """ + B, K = raw_widths.shape + # unconstrained widths/heights/derivatives -> +ve and sum to 2*bounds + widths = jax.nn.softmax(raw_widths, axis=-1) * (2 * bounds) + heights = jax.nn.softmax(raw_heights, axis=-1) * (2 * bounds) + derivatives = jax.nn.softplus(raw_derivatives) + 1e-3 + # cumulative sums to get knot locations. starting at -bounds. + knot_x = jnp.concatenate([jnp.full((B, 1), -bounds), - bounds + jnp.cumsum(widths, axis=-1)], axis=-1) # (B, K+1) + knot_y = jnp.concatenate([jnp.full((B, 1), -bounds), - bounds + jnp.cumsum(heights, axis=-1)], axis=-1) # (B, K+1) + + in_domain = (x > -bounds) & (x < bounds) + x_clamped = jnp.clip(x, -bounds + 1e-6, bounds - 1e-6) + # forward search for knot_x for input x. inverse searches for knot_y for input z + knot_coords_to_search = knot_y if inverse else knot_x + bin_idx = jnp.sum((x_clamped[..., None] >= knot_coords_to_search[:,:-1]).astype(jnp.int32), axis=-1) - 1 # (B,) which bin each x is in + bin_idx = jnp.clip(bin_idx, 0, K - 1) + + def take_per_row(knot, bin_idx): + """Select knot[i, bin_idx[i]] for each row i in knot.""" + return jnp.take_along_axis(knot, bin_idx[:, None], axis=1)[:, 0] + + # Left/right knot values bracketing each point's bin. + x_lo, x_hi = take_per_row(knot_x, bin_idx), take_per_row(knot_x, bin_idx + 1) + y_lo, y_hi = take_per_row(knot_y, bin_idx), take_per_row(knot_y, bin_idx + 1) + deriv_lo, deriv_hi = take_per_row(derivatives, bin_idx), take_per_row(derivatives, bin_idx + 1) + bin_slope = (y_hi - y_lo) / (x_hi - x_lo) + + if not inverse: + # forward transform: z = T(x) + theta = (x_clamped - x_lo) / (x_hi - x_lo) + theta_comp = 1.0 - theta + numerator = (y_hi - y_lo) * (bin_slope * theta**2 + deriv_lo * theta * theta_comp) + denominator = bin_slope + (deriv_hi + deriv_lo - 2 * bin_slope) * theta * theta_comp + z = y_lo + numerator / denominator # z = T(x) + + deriv_numerator = bin_slope**2 * ( + deriv_hi * theta**2 + 2 * bin_slope * theta * theta_comp + deriv_lo * theta_comp**2 + ) + log_abs_det = jnp.log(deriv_numerator) - 2 * jnp.log(denominator) + + return jnp.where(in_domain, z, x), jnp.where(in_domain, log_abs_det, 0.0) + else: + # inverse transform: x = t^{-1}(z) + # Solve for theta theta via the quadratic a*theta^2 + b*theta + c = 0 + y_offest = x_clamped - y_lo + slope_term = deriv_hi + deriv_lo - 2 * bin_slope + a = (y_hi - y_lo) * (bin_slope - deriv_lo) + y_offest * slope_term + b = (y_hi - y_lo) * deriv_lo - y_offest * slope_term + c = -bin_slope * y_offest + + theta = 2 * c / (-b - jnp.sqrt(jnp.maximum(b**2 - 4 * a * c, 0.0))) # quadratic formula + theta_comp = 1.0 - theta + x_out = theta * (x_hi - x_lo) + x_lo # x = T^{-1}(z) + + denominator = bin_slope + slope_term * theta * theta_comp + deriv_numerator = bin_slope**2 * ( + deriv_hi * theta**2 + 2 * bin_slope * theta * theta_comp + deriv_lo * theta_comp**2 + ) + # d(T^{-1})/dz = 1 / (dT/dx). + log_abs_det = -(jnp.log(deriv_numerator) - 2 * jnp.log(denominator)) + return jnp.where(in_domain, x_out, x), jnp.where(in_domain, log_abs_det, 0.0) + +def rqs_loss(model, X, y0, w): + """ + Compute the negative log-likelihood loss for the conditional rational-quadratic spline flow model. + + Args: + model: An instance of the ConditionalRQS model. + X: Input context data (features). + y0: Standardized target data (labels). + w: Sample weights for each data point. + Returns: + The average negative log-likelihood loss, weighted by the sample weights. + """ + log_prob = model.log_prob(y0, X) + return -jnp.sum(w * log_prob) / jnp.sum(w) \ No newline at end of file diff --git a/src/estimint/v2/models/umnn.py b/src/estimint/v2/models/umnn.py index 136596a..cb13d91 100644 --- a/src/estimint/v2/models/umnn.py +++ b/src/estimint/v2/models/umnn.py @@ -7,7 +7,7 @@ class MonotoneUMNN(nnx.Module): - def __init__(self, n_context, *, width=128, depth=4, n_quad=48, mlp_residual=False, dropout_rate=0.1, rngs: nnx.Rngs): + def __init__(self, n_context, *, width=128, depth=4, n_quad=48, mlp_residual=False, dropout_rate=0.0, rngs: nnx.Rngs): self.bias = MLP(n_context, 1, width=width, depth=depth, residual=mlp_residual, dropout_rate=dropout_rate, rngs=rngs) self.integrand = MLP(n_context + 1, 1, width=width, depth=depth, residual=mlp_residual, dropout_rate=dropout_rate, rngs=rngs) # leggauss(n) returns nodes/weights for integrating on [-1, 1]. We'll diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index 14a7877..cbfa07c 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -24,6 +24,7 @@ from estimint.v2.eval.metrics import compute_metrics from typing import Callable from jaxtyping import Array +from .models.rqs import ConditionalRQS, rqs_loss logging.getLogger("absl").setLevel(logging.WARNING) log = logging.getLogger(__name__) @@ -149,8 +150,15 @@ def train_umnn(cfg: DictConfig, prepared_data: PreparedData) -> UMNNBundle: return umnn_bundle def train_rqs(cfg: DictConfig, prepared_data: PreparedData): + models = [] + for ensemble in range(cfg.n_ensembles): + model = ConditionalRQS(len(FEATURES_BASE), rngs=nnx.Rngs(cfg.seed + ensemble), width=cfg.width, depth=cfg.depth, n_bins=cfg.n_bins, bounds=cfg.rqs_bounds, residual=cfg.mlp_residual, dropout_rate=cfg.dropout_rate) + if ensemble == 0: + log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") + model = train_model(model, cfg, prepared_data, rqs_loss, use_standardized_y=True) + models.append(model) - + return models @hydra.main(version_base=None, config_path="conf", config_name="train_config") def main(cfg: DictConfig) -> None: @@ -170,7 +178,8 @@ def main(cfg: DictConfig) -> None: prepared_data = prepare_data(raw_df, cfg, calib_frac=cfg.calib_frac) - umnn_bundle = train_umnn(cfg, prepared_data) + # umnn_bundle = train_umnn(cfg, prepared_data) + models = train_rqs(cfg, prepared_data) if cfg.use_wandb: wandb.finish() diff --git a/test_estimint_nn.py b/test_estimint_nn.py index c4e9aed..d74318f 100644 --- a/test_estimint_nn.py +++ b/test_estimint_nn.py @@ -43,10 +43,35 @@ # DATA code, now living in src/estimint/v2/data/ (SECTIONS 1 & 2 moved there). # group_split lives in preprocess.py alongside the existing parameter split. -from estimint.v2.data.preprocess import create_splits -from estimint.v2.data.features import resolve_mono, StandardScaler - - +from estimint.v2.data.preprocess import _create_split +from estimint.v2.data.features import StandardScaler + +FEATURES_BASE = [ + "dn0_use", + "Q0", + "phi_bednets", + "seasonal", + "itn_use", + "irs_use", + "prev_y9", +] + +# The two monotone inputs to EIR. The monotone model (MonotoneUMNN) resolves its +# constrained feature by NAME via resolve_mono(), so feature column order is +# irrelevant (FEATURES_BASE keeps prev_y9 last). +MONO_FEATURES = ("prev_y9", "hbr_y9") + + +def resolve_mono(features: list[str]) -> int | None: + """Return the index of the monotone feature in ``features``, or None. + + None means there is no monotone input (e.g. the EIR->HBR forward map), in + which case a monotone model does not apply. + """ + for name in MONO_FEATURES: + if name in features: + return features.index(name) + return None # ============================================================================ # TIER CONFIGS -> src/estimint/v2/conf/train_config.yaml (or a dataclass) # ---------------------------------------------------------------------------- @@ -633,11 +658,9 @@ def _prep(df, features, target, seed, stratify, calib_frac): df["_ps"] = list(zip(df["parameter_index"], df["simulation_index"])) df["_weight"] = make_value_weights(df[target].to_numpy(dtype=np.float64), digits=3) - splits = create_splits( + splits = _create_split( df, seed=seed, - val_frac=0.10, - test_frac=0.10, calib_frac=calib_frac, stratify=stratify, target=target, @@ -790,7 +813,7 @@ def train_fm( # tier="max" on GPU. Also exercises the residual MLP + warmup path. # ============================================================================ if __name__ == "__main__": - TIER = "smoke" # switch to "solid" / "max" on GPU + TIER = "max" # switch to "solid" / "max" on GPU df = pd.read_parquet("models/prevalence/training.parquet") feats = [ "dn0_use", @@ -825,10 +848,10 @@ def train_fm( print(f" 90% coverage: raw={cov_raw:.3f} conformalized={cov_conf:.3f}") print("== ConditionalFM (EXPERIMENTAL, prev->EIR) ==") - fm, (Xte3, yte3) = train_fm(df, feats, tier=TIER, n_steps=50, n_samples=64) - p3 = fm.predict(Xte3) - clo3, chi3 = fm.interval(Xte3, alpha=0.10) - cov3 = float(np.mean((yte3 >= clo3) & (yte3 <= chi3))) - print(f" test R2={r2(yte3, p3):.4f} RMSE={rmse(yte3, p3):.2f} MAE={mae(yte3, p3):.2f}") - print(f" 90% conformalized coverage={cov3:.3f} (vs RQS above — expect FM ~= RQS at best)") + # fm, (Xte3, yte3) = train_fm(df, feats, tier=TIER, n_steps=50, n_samples=64) + # p3 = fm.predict(Xte3) + # clo3, chi3 = fm.interval(Xte3, alpha=0.10) + # cov3 = float(np.mean((yte3 >= clo3) & (yte3 <= chi3))) + # print(f" test R2={r2(yte3, p3):.4f} RMSE={rmse(yte3, p3):.2f} MAE={mae(yte3, p3):.2f}") + # print(f" 90% conformalized coverage={cov3:.3f} (vs RQS above — expect FM ~= RQS at best)") print("SMOKE_OK") From 5aaeec5e13f5d5e679058f4297ce9b69b382d246 Mon Sep 17 00:00:00 2001 From: Anmol Date: Tue, 14 Jul 2026 16:18:07 +0000 Subject: [PATCH 08/32] cleanup rqs logic --- src/estimint/v2/models/rqs.py | 174 +++++++++++++++++++--------------- 1 file changed, 98 insertions(+), 76 deletions(-) diff --git a/src/estimint/v2/models/rqs.py b/src/estimint/v2/models/rqs.py index 55c0c81..21bb6f6 100644 --- a/src/estimint/v2/models/rqs.py +++ b/src/estimint/v2/models/rqs.py @@ -56,93 +56,115 @@ def _quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: y0 = np.mean(_forward(self.models, context, quantile), axis=0) return np.maximum(0, np.power(10, self.scaler_y.inverse_transform(y0))) # return in original scale - -def _rqs(x: jax.Array, raw_widths: jax.Array, raw_heights: jax.Array, raw_derivatives: jax.Array, bounds: int, inverse=False): - """Evaluate the monotone rational-quadratic spline +def rqs_loss(model, X, y0, w): + """ + Compute the negative log-likelihood loss for the conditional rational-quadratic spline flow model. Args: - x : (B,) points to transform. Will be z for inverse=False and y for inverse=True. - raw_widths : (B,K) unconstrained bin WIDTHS (softmax'd to sum to 2B). - raw_heights : (B,K) unconstrained bin HEIGHTS (softmax'd to sum to 2B). - raw_derivatives : (B,K+1) unconstrained knot DERIVATIVES (softplus'd to be positive). - inverse : False computes z = T(x); True computes x = T^{-1}(z). - inverse : False computes z = T(x); True computes x = T^{-1}(z). + model: An instance of the ConditionalRQS model. + X: Input context data (features). + y0: Standardized target data (labels). + w: Sample weights for each data point. + Returns: + The average negative log-likelihood loss, weighted by the sample weights. + """ + log_prob = model.log_prob(y0, X) + return -jnp.sum(w * log_prob) / jnp.sum(w) + + +# ------------ RQS utils ---------------- +def _spline_knots(raw_widths: jax.Array, raw_heights: jax.Array, raw_derivatives: jax.Array, bounds: int, n_points: int): + """Map unconstrained net outputs to positive bin sizes/derivatives and knot coordinates. - Returns - (transformed, log|derivative|). + Widths and heights are softmax'd to sum to 2*bounds, so their cumulative sums + (starting at -bounds) land exactly on +bounds. Derivatives are softplus'd to + stay positive. """ - B, K = raw_widths.shape - # unconstrained widths/heights/derivatives -> +ve and sum to 2*bounds widths = jax.nn.softmax(raw_widths, axis=-1) * (2 * bounds) heights = jax.nn.softmax(raw_heights, axis=-1) * (2 * bounds) derivatives = jax.nn.softplus(raw_derivatives) + 1e-3 - # cumulative sums to get knot locations. starting at -bounds. - knot_x = jnp.concatenate([jnp.full((B, 1), -bounds), - bounds + jnp.cumsum(widths, axis=-1)], axis=-1) # (B, K+1) - knot_y = jnp.concatenate([jnp.full((B, 1), -bounds), - bounds + jnp.cumsum(heights, axis=-1)], axis=-1) # (B, K+1) - in_domain = (x > -bounds) & (x < bounds) - x_clamped = jnp.clip(x, -bounds + 1e-6, bounds - 1e-6) - # forward search for knot_x for input x. inverse searches for knot_y for input z - knot_coords_to_search = knot_y if inverse else knot_x - bin_idx = jnp.sum((x_clamped[..., None] >= knot_coords_to_search[:,:-1]).astype(jnp.int32), axis=-1) - 1 # (B,) which bin each x is in - bin_idx = jnp.clip(bin_idx, 0, K - 1) - - def take_per_row(knot, bin_idx): - """Select knot[i, bin_idx[i]] for each row i in knot.""" - return jnp.take_along_axis(knot, bin_idx[:, None], axis=1)[:, 0] - - # Left/right knot values bracketing each point's bin. - x_lo, x_hi = take_per_row(knot_x, bin_idx), take_per_row(knot_x, bin_idx + 1) - y_lo, y_hi = take_per_row(knot_y, bin_idx), take_per_row(knot_y, bin_idx + 1) - deriv_lo, deriv_hi = take_per_row(derivatives, bin_idx), take_per_row(derivatives, bin_idx + 1) - bin_slope = (y_hi - y_lo) / (x_hi - x_lo) - - if not inverse: - # forward transform: z = T(x) - theta = (x_clamped - x_lo) / (x_hi - x_lo) - theta_comp = 1.0 - theta - numerator = (y_hi - y_lo) * (bin_slope * theta**2 + deriv_lo * theta * theta_comp) - denominator = bin_slope + (deriv_hi + deriv_lo - 2 * bin_slope) * theta * theta_comp - z = y_lo + numerator / denominator # z = T(x) - - deriv_numerator = bin_slope**2 * ( - deriv_hi * theta**2 + 2 * bin_slope * theta * theta_comp + deriv_lo * theta_comp**2 - ) - log_abs_det = jnp.log(deriv_numerator) - 2 * jnp.log(denominator) - - return jnp.where(in_domain, z, x), jnp.where(in_domain, log_abs_det, 0.0) - else: - # inverse transform: x = t^{-1}(z) - # Solve for theta theta via the quadratic a*theta^2 + b*theta + c = 0 - y_offest = x_clamped - y_lo - slope_term = deriv_hi + deriv_lo - 2 * bin_slope - a = (y_hi - y_lo) * (bin_slope - deriv_lo) + y_offest * slope_term - b = (y_hi - y_lo) * deriv_lo - y_offest * slope_term - c = -bin_slope * y_offest - - theta = 2 * c / (-b - jnp.sqrt(jnp.maximum(b**2 - 4 * a * c, 0.0))) # quadratic formula - theta_comp = 1.0 - theta - x_out = theta * (x_hi - x_lo) + x_lo # x = T^{-1}(z) - - denominator = bin_slope + slope_term * theta * theta_comp - deriv_numerator = bin_slope**2 * ( - deriv_hi * theta**2 + 2 * bin_slope * theta * theta_comp + deriv_lo * theta_comp**2 - ) - # d(T^{-1})/dz = 1 / (dT/dx). - log_abs_det = -(jnp.log(deriv_numerator) - 2 * jnp.log(denominator)) - return jnp.where(in_domain, x_out, x), jnp.where(in_domain, log_abs_det, 0.0) + knot_x = jnp.concatenate([jnp.full((n_points, 1), -bounds), -bounds + jnp.cumsum(widths, axis=-1)], axis=-1) # (n_points, K+1) + knot_y = jnp.concatenate([jnp.full((n_points, 1), -bounds), -bounds + jnp.cumsum(heights, axis=-1)], axis=-1) # (n_points, K+1) + return knot_x, knot_y, derivatives -def rqs_loss(model, X, y0, w): + +def _locate_bin(x: jax.Array, knots: jax.Array, n_bins: int) -> jax.Array: + """Index k of the bin containing x, i.e. knots[k] <= x < knots[k+1].""" + bin_idx = jnp.sum((x[..., None] >= knots[:, :-1]).astype(jnp.int32), axis=-1) - 1 + return jnp.clip(bin_idx, 0, n_bins - 1) + + +def _gather_bin(knot: jax.Array, bin_idx: jax.Array): + """Return (knot[i, bin_idx[i]], knot[i, bin_idx[i] + 1]) for every row i.""" + lo = jnp.take_along_axis(knot, bin_idx[:, None], axis=1)[:, 0] + hi = jnp.take_along_axis(knot, bin_idx[:, None] + 1, axis=1)[:, 0] + return lo, hi + + +def _rqs_logdet(theta: jax.Array, s: jax.Array, d_lo: jax.Array, d_hi: jax.Array): + """log|dz/dx| at spline-local parameter theta in [0, 1] (Durkan et al. 2019, eq. 5). + + Also returns the shared denominator and (1 - theta), which the forward pass reuses. """ - Compute the negative log-likelihood loss for the conditional rational-quadratic spline flow model. + theta_comp = 1.0 - theta + denom = s + (d_hi + d_lo - 2 * s) * theta * theta_comp + deriv_numer = s**2 * (d_hi * theta**2 + 2 * s * theta * theta_comp + d_lo * theta_comp**2) + log_abs_det = jnp.log(deriv_numer) - 2 * jnp.log(denom) + return log_abs_det, denom, theta_comp + + +def _solve_theta(z: jax.Array, y_lo: jax.Array, dy: jax.Array, s: jax.Array, d_lo: jax.Array, d_hi: jax.Array): + """Invert eq. for theta given a target z: solve a*theta^2 + b*theta + c = 0. + + """ + dz = z - y_lo + slope_term = d_hi + d_lo - 2 * s + a = dy * (s - d_lo) + dz * slope_term + b = dy * d_lo - dz * slope_term + c = -s * dz + return 2 * c / (-b - jnp.sqrt(jnp.maximum(b**2 - 4 * a * c, 0.0))) + + +def _rqs(x: jax.Array, raw_widths: jax.Array, raw_heights: jax.Array, raw_derivatives: jax.Array, bounds: int, inverse=False): + """Evaluate the monotone rational-quadratic spline (Durkan et al. 2019, "Neural Spline Flows"). Args: - model: An instance of the ConditionalRQS model. - X: Input context data (features). - y0: Standardized target data (labels). - w: Sample weights for each data point. + x : (B,) points to transform. Will be z for inverse=False and y for inverse=True. + raw_widths : (B,K) unconstrained bin widths. + raw_heights : (B,K) unconstrained bin heights. + raw_derivatives : (B,K+1) unconstrained knot derivatives. + bounds : the spline is the identity outside [-bounds, bounds]. + inverse : False computes z = T(x); True computes x = T^{-1}(z). + Returns: - The average negative log-likelihood loss, weighted by the sample weights. + (transformed, log|d(transformed)/dx|). """ - log_prob = model.log_prob(y0, X) - return -jnp.sum(w * log_prob) / jnp.sum(w) \ No newline at end of file + n_points, n_bins = raw_widths.shape + knot_x, knot_y, derivatives = _spline_knots(raw_widths, raw_heights, raw_derivatives, bounds, n_points) + + in_domain = (x > -bounds) & (x < bounds) + x_clamped = jnp.clip(x, -bounds + 1e-6, bounds - 1e-6) + + # forward looks up knot_x for x; inverse looks up knot_y for z. + bin_idx = _locate_bin(x_clamped, knot_y if inverse else knot_x, n_bins) + x_lo, x_hi = _gather_bin(knot_x, bin_idx) + y_lo, y_hi = _gather_bin(knot_y, bin_idx) + d_lo, d_hi = _gather_bin(derivatives, bin_idx) + dx, dy = x_hi - x_lo, y_hi - y_lo + s = dy / dx # bin slope + + if inverse: + theta = _solve_theta(x_clamped, y_lo, dy, s, d_lo, d_hi) + log_dzdx, _, _ = _rqs_logdet(theta, s, d_lo, d_hi) + out = theta * dx + x_lo # x = T^{-1}(z) + log_abs_det = -log_dzdx # d(T^{-1})/dz = 1 / (dz/dx) + else: + theta = (x_clamped - x_lo) / dx + log_dzdx, denom, theta_comp = _rqs_logdet(theta, s, d_lo, d_hi) + numer = dy * (s * theta**2 + d_lo * theta * theta_comp) + out = y_lo + numer / denom # z = T(x) + log_abs_det = log_dzdx + + return jnp.where(in_domain, out, x), jnp.where(in_domain, log_abs_det, 0.0) + From 900a047ca51aedecc3fd49118ed5f7e3ee4d23ac Mon Sep 17 00:00:00 2001 From: Anmol Date: Wed, 15 Jul 2026 10:04:51 +0000 Subject: [PATCH 09/32] get working version --- .gitignore | 2 +- datasets/split.csv | 2598 ++++++++++++------------ src/estimint/v2/conf/train_config.yaml | 2 +- src/estimint/v2/data/preprocess.py | 4 +- src/estimint/v2/eval/metrics.py | 4 +- src/estimint/v2/models/rqs.py | 35 +- src/estimint/v2/train_base.py | 69 +- 7 files changed, 1400 insertions(+), 1314 deletions(-) diff --git a/.gitignore b/.gitignore index 9b20f37..2204766 100644 --- a/.gitignore +++ b/.gitignore @@ -58,6 +58,6 @@ htmlcov/ .pytest_cache/ train_outputs/ outputs/ - +*.out # Miscellaneous slurm.sh diff --git a/datasets/split.csv b/datasets/split.csv index 370de47..d515375 100644 --- a/datasets/split.csv +++ b/datasets/split.csv @@ -9012,13 +9012,11 @@ parameter_index,simulation_index,split 2048,4,train 1349,3,train 1524,4,train -1433,2,validate 1087,2,validate 2032,1,validate 84,4,validate 3856,4,validate 3291,3,validate -2203,4,validate 812,4,validate 247,3,validate 2246,2,validate @@ -9034,10 +9032,7 @@ parameter_index,simulation_index,split 64,2,validate 3533,2,validate 1801,1,validate -1405,1,validate 885,2,validate -3617,1,validate -3059,2,validate 2663,2,validate 2842,4,validate 2446,4,validate @@ -9048,62 +9043,41 @@ parameter_index,simulation_index,split 3871,2,validate 2876,2,validate 3046,4,validate -1831,1,validate -11,4,validate 2481,3,validate 3392,3,validate 2693,2,validate 3130,3,validate -3039,1,validate -2997,4,validate 653,1,validate -694,2,validate 3605,3,validate 1344,4,validate 1952,3,validate -1599,1,validate 1203,1,validate 3556,3,validate 857,1,validate -1728,2,validate 774,3,validate -512,3,validate 1416,1,validate 3852,1,validate 2032,4,validate 1770,4,validate -3981,2,validate -3282,1,validate -3061,2,validate 1932,2,validate 67,3,validate 413,2,validate 1537,3,validate -3536,2,validate 1671,3,validate 979,4,validate 3453,4,validate 2711,4,validate 2408,3,validate 1234,1,validate -1275,2,validate 3353,2,validate -2096,2,validate 2533,3,validate 2266,4,validate -1405,4,validate -747,4,validate -2746,3,validate -918,2,validate 959,3,validate 2655,1,validate 2696,2,validate 1567,2,validate 2613,4,validate 1043,2,validate -48,2,validate -3221,3,validate -1651,1,validate 260,1,validate 3687,4,validate 3821,4,validate @@ -9111,62 +9085,41 @@ parameter_index,simulation_index,split 3771,3,validate 473,1,validate 2118,2,validate -2593,3,validate 644,4,validate -811,1,validate -4018,1,validate 1420,2,validate 1203,4,validate 29,2,validate 1074,2,validate -3851,3,validate 857,4,validate -158,3,validate 941,3,validate -545,3,validate 454,1,validate 2494,1,validate 1803,4,validate 3802,3,validate 3103,2,validate -3144,3,validate -2757,2,validate 2495,2,validate 3702,1,validate 3619,3,validate 3703,2,validate -2178,2,validate 1875,1,validate 1916,2,validate 525,2,validate 1833,4,validate 2220,4,validate 1091,4,validate -3520,2,validate 526,3,validate -3470,1,validate -872,2,validate -2475,1,validate 2079,1,validate 393,4,validate -3337,2,validate -1176,4,validate 2779,3,validate 131,3,validate -3600,3,validate 2512,4,validate 3471,1,validate 639,1,validate 260,4,validate 2992,3,validate -293,1,validate 31,1,validate -3500,1,validate 210,3,validate 1947,2,validate -2463,4,validate -1248,1,validate -3288,1,validate 3071,3,validate 2718,1,validate 2759,2,validate @@ -9174,50 +9127,26 @@ parameter_index,simulation_index,split 2893,2,validate 3671,4,validate 2414,4,validate -3926,1,validate -811,4,validate 415,4,validate -4018,4,validate 4051,1,validate -761,3,validate -1927,1,validate 2102,2,validate -3014,4,validate -3488,3,validate -232,4,validate -366,4,validate -537,2,validate 275,2,validate -2315,2,validate 3918,1,validate -1702,4,validate 1399,3,validate -2661,1,validate 874,1,validate -1483,2,validate -791,3,validate 3702,4,validate 2091,1,validate -1433,1,validate -1653,4,validate 3652,3,validate 658,4,validate 1087,1,validate 84,3,validate 3257,4,validate 1866,4,validate -1300,1,validate -43,1,validate -1258,4,validate -996,4,validate 2995,3,validate 3291,2,validate -3470,4,validate 2296,2,validate 2079,4,validate -468,1,validate 3682,3,validate -643,2,validate 2642,1,validate 2246,1,validate 2029,3,validate @@ -9232,32 +9161,20 @@ parameter_index,simulation_index,split 1202,1,validate 2417,4,validate 2891,3,validate -293,4,validate 31,4,validate -3500,4,validate 4063,1,validate -3846,3,validate 885,1,validate -3059,1,validate 2842,3,validate -3279,4,validate 1451,3,validate -673,1,validate 1189,3,validate 2709,4,validate -3534,1,validate -2143,1,validate 2876,1,validate 1664,3,validate -11,3,validate 2702,1,validate 4051,4,validate 2481,2,validate 1486,2,validate 491,2,validate -3309,4,validate -3047,4,validate -2744,3,validate 224,3,validate 661,4,validate 3605,2,validate @@ -9268,65 +9185,44 @@ parameter_index,simulation_index,split 1778,2,validate 1516,2,validate 3556,2,validate -1728,1,validate 774,2,validate 908,2,validate -3120,2,validate -1254,1,validate 2032,3,validate 1770,3,validate 3769,2,validate 338,2,validate -3981,1,validate 1813,1,validate 1200,2,validate 3453,3,validate 1546,1,validate -3933,2,validate 2804,2,validate 2408,2,validate 2063,4,validate 2409,3,validate -106,1,validate 64,4,validate 3533,4,validate 1801,3,validate -1405,3,validate 2705,1,validate -2746,2,validate 885,4,validate -3617,3,validate -918,1,validate 2663,4,validate 2613,3,validate -3221,2,validate 227,3,validate 3871,4,validate 2876,4,validate -1265,1,validate 573,2,validate 4042,2,validate 311,2,validate -1831,3,validate 261,1,validate 2693,4,validate 3518,1,validate -3039,3,validate -694,4,validate 1295,1,validate 3731,1,validate 644,3,validate -3335,1,validate 1420,1,validate -1599,3,validate 1203,3,validate 29,1,validate 1074,1,validate -3851,2,validate 857,3,validate -158,2,validate -292,2,validate -1337,2,validate 941,2,validate 638,1,validate 1416,3,validate @@ -9334,155 +9230,95 @@ parameter_index,simulation_index,split 1762,2,validate 3365,1,validate 3802,2,validate -3981,4,validate 3103,1,validate -3282,3,validate -3061,4,validate -717,1,validate 1932,4,validate -2757,1,validate 2495,1,validate 413,4,validate 3619,2,validate -3536,4,validate 1367,2,validate 3703,1,validate 668,1,validate 1833,3,validate 1234,3,validate -1275,4,validate 2837,2,validate 3353,4,validate -2096,4,validate -872,1,validate -3783,2,validate 393,3,validate 3000,1,validate -1176,3,validate -918,4,validate 1347,1,validate 2696,4,validate 1567,4,validate -3600,2,validate 131,2,validate 1043,4,validate -48,4,validate -1651,3,validate 260,3,validate 2992,2,validate -1997,2,validate 1735,2,validate 210,2,validate -344,2,validate 1947,1,validate 261,4,validate 3071,2,validate -1165,2,validate 473,3,validate 1511,1,validate 161,2,validate 2118,4,validate -465,4,validate 2719,1,validate -1765,2,validate -811,3,validate -4018,3,validate 3326,4,validate 1420,4,validate 29,4,validate 1074,4,validate 3581,1,validate -325,2,validate 2324,1,validate 1666,1,validate -537,1,validate 671,1,validate 275,1,validate 454,3,validate 2494,3,validate 1399,2,validate -1929,2,validate 3094,4,validate -1483,1,validate -488,1,validate 3702,3,validate 658,3,validate 2354,1,validate -1958,1,validate 3703,4,validate -2178,4,validate 1875,3,validate 1916,4,validate 525,4,validate -3520,4,validate 1217,2,validate 222,2,validate 2995,2,validate 3429,2,validate -3470,3,validate 2296,1,validate -872,4,validate -2475,3,validate 2079,3,validate 2559,2,validate 2163,2,validate 1034,2,validate -3337,4,validate -4029,2,validate 3592,1,validate 3471,3,validate 639,3,validate -293,3,validate 31,3,validate -3500,3,validate 1947,4,validate -3846,2,validate 2851,2,validate -3288,3,validate 2935,1,validate 2718,3,validate -2759,4,validate 1981,2,validate +2759,4,validate 2893,4,validate -1282,1,validate -3926,3,validate -104,1,validate 4051,3,validate -1927,3,validate -887,1,validate -491,1,validate 2102,4,validate -2744,2,validate +491,1,validate 224,2,validate 275,4,validate -2315,4,validate 3918,3,validate -2661,3,validate 3827,1,validate -1962,2,validate 874,3,validate 134,1,validate 3389,4,validate 1778,1,validate -1483,4,validate -1433,3,validate 1087,3,validate -3120,1,validate -734,1,validate 338,1,validate -1517,1,validate -1300,3,validate 3291,4,validate 2296,4,validate -685,1,validate -468,3,validate -643,4,validate 247,4,validate 2642,3,validate 2246,3,validate -2155,1,validate -3933,1,validate -3200,1,validate 2804,1,validate 2459,3,validate 2063,3,validate @@ -9492,46 +9328,25 @@ parameter_index,simulation_index,split 64,3,validate 1801,2,validate 885,3,validate -3617,2,validate -3059,3,validate -673,3,validate -3534,3,validate -2143,3,validate 2876,3,validate 4042,1,validate 573,1,validate -1790,1,validate -1831,2,validate 1528,1,validate 2481,4,validate 1486,4,validate 920,1,validate -1395,2,validate -3039,2,validate 653,2,validate -787,2,validate 3605,4,validate -88,1,validate 392,3,validate -1599,2,validate 1778,4,validate 1516,4,validate 3556,4,validate -1728,3,validate -292,1,validate 774,4,validate 908,4,validate -512,4,validate -1337,1,validate 3852,2,validate -817,2,validate -1254,3,validate 3769,4,validate 1762,1,validate 338,4,validate -3981,3,validate -3678,2,validate -3282,2,validate 1200,4,validate 1671,4,validate 1367,1,validate @@ -9539,44 +9354,26 @@ parameter_index,simulation_index,split 2408,4,validate 1234,2,validate 2837,1,validate -2096,3,validate -106,3,validate 2838,2,validate 748,1,validate -1793,1,validate 2705,3,validate -2746,4,validate -918,3,validate 2655,2,validate -48,3,validate -1610,1,validate -3221,4,validate 1348,1,validate -1265,3,validate 91,1,validate 573,4,validate 4042,4,validate -1997,1,validate 311,4,validate 2606,2,validate 261,3,validate 2260,2,validate -1165,1,validate 473,2,validate 1299,1,validate 3518,3,validate -1378,1,validate 3814,1,validate 1295,3,validate -3335,3,validate 1420,3,validate 29,3,validate 1074,3,validate -3851,4,validate -158,4,validate -292,4,validate -325,1,validate -1337,4,validate 941,4,validate 454,2,validate 1762,4,validate @@ -9584,9 +9381,6 @@ parameter_index,simulation_index,split 3802,4,validate 3103,3,validate 1196,1,validate -1929,1,validate -717,3,validate -2757,3,validate 2495,3,validate 3795,1,validate 3619,4,validate @@ -9594,103 +9388,62 @@ parameter_index,simulation_index,split 3703,3,validate 1875,2,validate 2837,4,validate -1401,2,validate -3520,3,validate 1613,1,validate 526,4,validate -2088,2,validate 222,1,validate 356,1,validate 3429,1,validate -872,3,validate -2475,2,validate -3783,4,validate 781,1,validate 3000,3,validate 2559,1,validate 2779,4,validate 1347,3,validate -3600,4,validate 131,4,validate -4029,1,validate 3471,2,validate 2039,1,validate 2992,4,validate -1997,4,validate 1735,4,validate 210,4,validate -2901,2,validate -344,4,validate 1947,3,validate 1644,2,validate -1248,2,validate -3288,2,validate 3071,4,validate -1165,4,validate -203,1,validate 2718,2,validate 1981,1,validate 161,4,validate 2893,3,validate 2719,3,validate -3926,2,validate -1765,4,validate -761,4,validate -1927,2,validate 1624,1,validate 367,1,validate 3581,3,validate 105,1,validate -325,4,validate 1150,1,validate -537,3,validate 671,3,validate 275,3,validate -2315,3,validate 1399,4,validate -2661,2,validate -1962,1,validate -1483,3,validate -791,4,validate -488,3,validate 2091,2,validate -1096,2,validate 3652,4,validate -1958,3,validate 2042,2,validate -3645,1,validate -1300,2,validate 997,1,validate 1217,4,validate -43,2,validate 2995,4,validate 2296,3,validate -468,2,validate 3596,1,validate 3682,4,validate -643,3,validate -2205,1,validate 2642,2,validate 2559,4,validate 2163,4,validate 1034,4,validate 3592,3,validate -4029,4,validate 2459,2,validate 1202,2,validate 2072,1,validate 23,1,validate 4063,2,validate 3068,2,validate -3846,4,validate 1415,2,validate 286,2,validate -673,2,validate 1981,4,validate -1282,3,validate -3534,2,validate 3231,1,validate -2143,2,validate 1840,1,validate 1664,4,validate 2702,2,validate @@ -9699,219 +9452,135 @@ parameter_index,simulation_index,split 3048,1,validate 54,2,validate 491,3,validate -1395,1,validate -2744,4,validate -2440,1,validate 138,1,validate 224,4,validate -1049,1,validate -787,1,validate 3261,1,validate -2999,1,validate 3827,3,validate 2653,1,validate 392,2,validate 1778,3,validate 1516,3,validate 908,3,validate -3120,3,validate -817,1,validate -1254,2,validate 951,1,validate 3769,3,validate -734,3,validate 338,3,validate -3678,1,validate -1517,3,validate 1813,2,validate -685,3,validate 1200,3,validate 1546,2,validate 2372,1,validate -2155,3,validate -3933,3,validate 2804,3,validate 373,1,validate 2409,4,validate -106,2,validate 2838,1,validate 23,4,validate 1801,4,validate 2705,2,validate -3617,4,validate 3051,1,validate -141,1,validate 227,4,validate -1265,2,validate 4042,3,validate 573,3,validate 270,2,validate 311,3,validate 2606,1,validate -1831,4,validate 2260,1,validate 1003,1,validate 3518,2,validate 920,3,validate -3039,4,validate 653,4,validate -2948,2,validate 1295,2,validate 3731,2,validate 3294,1,validate -3335,2,validate 2474,2,validate 1775,1,validate 2686,1,validate -1599,4,validate -292,3,validate 900,2,validate -1337,3,validate 638,2,validate 3852,4,validate 1416,4,validate 1246,1,validate 1762,3,validate 3365,2,validate -3282,4,validate -717,2,validate 2454,1,validate -2192,1,validate 2321,2,validate 1367,3,validate -2929,1,validate 4058,1,validate 668,2,validate -2405,1,validate -1276,1,validate 1014,1,validate 1234,4,validate 2837,3,validate -1401,1,validate -2088,1,validate 2838,4,validate -3783,3,validate 1876,1,validate 748,3,validate -1793,3,validate 3000,2,validate 1347,2,validate 2655,4,validate -3480,1,validate -1610,3,validate -1651,4,validate 1348,3,validate -174,1,validate -1997,3,validate 91,3,validate 1735,3,validate 2606,4,validate -2901,1,validate 303,2,validate -344,3,validate 1644,1,validate 2260,4,validate -1165,3,validate 473,4,validate 1299,3,validate 1511,2,validate 3510,1,validate -1378,3,validate 3814,3,validate 2719,2,validate -1765,3,validate 3327,1,validate -1462,2,validate 1674,1,validate 3581,2,validate -325,3,validate 2324,2,validate 1067,2,validate 671,2,validate 454,4,validate 2494,4,validate -1929,3,validate 3928,2,validate -488,2,validate -1096,1,validate 2354,2,validate -1958,2,validate 2488,2,validate 1875,4,validate 2042,1,validate -1401,4,validate 2305,2,validate 1613,3,validate 1217,3,validate -2088,4,validate 222,3,validate 2517,1,validate 2913,1,validate 356,3,validate 3429,3,validate -1697,2,validate -2475,4,validate 781,3,validate 2559,3,validate -1127,2,validate 3988,2,validate 3592,2,validate -4029,3,validate 3471,4,validate -2901,4,validate 3068,1,validate -470,2,validate -1248,4,validate 2851,3,validate -3288,4,validate 1415,1,validate 286,1,validate -203,3,validate 2935,2,validate 2718,4,validate 1981,3,validate 549,2,validate -1282,2,validate 2152,1,validate -1628,1,validate -3926,4,validate -104,2,validate 2836,1,validate -1927,4,validate 712,1,validate 1624,3,validate -887,2,validate 54,1,validate 3918,4,validate 2012,4,validate -2661,4,validate 3827,2,validate -1962,3,validate 134,2,validate -3262,1,validate 2091,4,validate 480,1,validate -1433,4,validate 1087,4,validate 1392,2,validate -734,2,validate 2042,4,validate -3645,3,validate -1517,2,validate -1300,4,validate 997,3,validate 3729,2,validate -43,4,validate -685,2,validate 2684,1,validate -468,4,validate 3596,3,validate -2205,3,validate -2246,4,validate 2642,4,validate -3942,2,validate -2155,2,validate -3200,2,validate +2246,4,validate 2459,4,validate 290,2,validate 3759,2,validate @@ -9923,54 +9592,32 @@ parameter_index,simulation_index,split 4063,4,validate 1415,4,validate 286,4,validate -3059,4,validate -3626,2,validate -673,4,validate -3534,4,validate 3231,3,validate -2143,4,validate 1840,3,validate 270,1,validate -1790,2,validate 2702,4,validate 1528,2,validate 3048,3,validate 54,4,validate 920,2,validate -1395,3,validate 3132,2,validate -2440,3,validate 138,3,validate -1049,3,validate 653,3,validate -2948,1,validate -787,3,validate -88,2,validate -2999,3,validate 2474,1,validate 2653,3,validate 392,4,validate -1728,4,validate 900,1,validate 1771,2,validate -817,3,validate -1254,4,validate -39,1,validate 951,3,validate 2766,1,validate -3678,3,validate 1813,4,validate -2633,2,validate 2321,1,validate -1546,4,validate 331,1,validate +1546,4,validate 3975,2,validate 373,3,validate -1539,1,validate -106,4,validate 2838,3,validate 748,2,validate -1793,2,validate 1490,1,validate 2705,4,validate 99,1,validate @@ -9978,28 +9625,19 @@ parameter_index,simulation_index,split 2655,3,validate 882,1,validate 3955,1,validate -1610,2,validate -141,3,validate 1348,2,validate -1265,4,validate 91,2,validate 270,4,validate 2606,3,validate 303,1,validate -437,1,validate 2260,3,validate 1299,2,validate 1003,3,validate 3518,4,validate -650,1,validate -2948,4,validate -1378,2,validate 3814,2,validate 1295,4,validate 3294,3,validate -3335,4,validate 3731,4,validate -1462,1,validate 2686,3,validate 900,4,validate 638,4,validate @@ -10009,59 +9647,40 @@ parameter_index,simulation_index,split 3103,4,validate 1196,2,validate 3928,1,validate -717,4,validate -2757,4,validate 2017,2,validate 2454,3,validate 2495,4,validate -2192,3,validate 3795,2,validate 2321,4,validate 2488,1,validate 668,4,validate 1493,1,validate -2405,3,validate -1276,3,validate 1014,3,validate 3225,1,validate 1360,2,validate -1401,3,validate -2701,1,validate 2305,1,validate 1613,2,validate -2088,3,validate 356,2,validate -1697,1,validate 1876,3,validate 781,2,validate 3000,4,validate -1127,1,validate 132,1,validate 1347,4,validate 3988,1,validate 2039,2,validate -174,3,validate -2901,3,validate 303,4,validate 732,1,validate 1644,3,validate -470,1,validate -1248,3,validate 1990,2,validate -1291,1,validate -203,2,validate 1511,4,validate 549,1,validate 2761,1,validate -2203,2,validate 3806,1,validate 2719,4,validate 812,2,validate 2415,1,validate 3327,3,validate -1462,4,validate 1674,3,validate -3411,2,validate 1624,2,validate 367,2,validate 2803,2,validate @@ -10070,31 +9689,22 @@ parameter_index,simulation_index,split 2324,4,validate 1150,2,validate 1666,4,validate -537,4,validate 671,4,validate 1837,2,validate 3312,1,validate -488,4,validate 2091,3,validate -1096,3,validate 3787,1,validate 2354,4,validate -1958,4,validate 1392,1,validate 2042,3,validate 135,1,validate -3645,2,validate 997,2,validate 3729,1,validate 2305,4,validate -43,3,validate 1605,1,validate 2517,3,validate -1697,4,validate 86,1,validate 3596,2,validate -2205,2,validate -3942,1,validate 1344,2,validate 2947,1,validate 3592,4,validate @@ -10106,66 +9716,43 @@ parameter_index,simulation_index,split 2022,1,validate 553,2,validate 4063,3,validate -2631,2,validate 3068,3,validate 1415,3,validate 286,3,validate -2285,2,validate -3626,1,validate 2935,4,validate 67,1,validate -1282,4,validate 2152,3,validate -1628,3,validate 3231,2,validate 1840,2,validate 1537,1,validate 845,2,validate -1974,2,validate -2186,1,validate 2702,3,validate -104,4,validate 2836,3,validate 712,3,validate 3048,2,validate -887,4,validate 54,3,validate 491,4,validate 2399,1,validate -2440,2,validate 3132,1,validate 138,2,validate -1049,2,validate 3261,2,validate 2266,2,validate -2999,2,validate 2004,2,validate 3827,4,validate 2653,2,validate 134,4,validate -3262,3,validate 959,1,validate 480,3,validate 1771,1,validate -3120,4,validate -514,1,validate 951,2,validate 3687,2,validate -734,4,validate -1517,4,validate 1813,3,validate 3729,4,validate -2633,1,validate -1638,1,validate -685,4,validate 2684,3,validate 2372,2,validate 3975,1,validate -2155,4,validate 2980,1,validate -3200,4,validate 2804,4,validate -3933,4,validate 373,2,validate 2847,2,validate 290,4,validate @@ -10174,16 +9761,12 @@ parameter_index,simulation_index,split 2368,4,validate 1194,2,validate 3971,3,validate -2797,1,validate 2022,4,validate 3580,1,validate 3051,2,validate -16,2,validate 1357,1,validate -141,2,validate 270,3,validate 1570,1,validate -1790,4,validate 179,1,validate 1528,4,validate 1003,2,validate @@ -10192,8 +9775,6 @@ parameter_index,simulation_index,split 1091,2,validate 3132,4,validate 829,2,validate -2948,3,validate -88,4,validate 3294,2,validate 3731,3,validate 2474,3,validate @@ -10206,116 +9787,77 @@ parameter_index,simulation_index,split 2766,3,validate 2017,1,validate 2454,2,validate -2633,4,validate -2192,2,validate 1805,1,validate 2321,3,validate 1367,4,validate 4058,2,validate -2929,2,validate 668,3,validate 3975,4,validate -2405,2,validate -1276,2,validate 1410,2,validate 1014,2,validate 19,2,validate 1360,1,validate -1539,3,validate 103,1,validate -3488,1,validate -232,2,validate 1876,2,validate 748,4,validate -1793,4,validate -1702,2,validate -3480,2,validate 49,2,validate 3955,3,validate 3826,1,validate -1610,4,validate 1348,4,validate -174,2,validate 91,4,validate 3693,2,validate 303,3,validate -437,3,validate 1990,1,validate 1299,4,validate 84,1,validate 1511,3,validate 3510,2,validate -650,3,validate -2253,2,validate 3856,1,validate -862,2,validate -1378,4,validate 3814,4,validate -2203,1,validate 812,1,validate 3327,2,validate -1462,3,validate 1674,2,validate 2678,1,validate -3411,1,validate 2803,1,validate -2283,2,validate 2324,3,validate 1067,3,validate 1196,4,validate 3928,3,validate -1929,4,validate 2446,1,validate 3795,4,validate 2354,3,validate 2488,3,validate 1493,3,validate -1443,2,validate 3046,1,validate -2701,3,validate 2305,3,validate 1613,4,validate 222,4,validate 2517,2,validate 2913,2,validate 356,4,validate -3047,2,validate 3429,4,validate -1697,3,validate -2997,1,validate 781,4,validate 1344,1,validate -1127,3,validate 132,3,validate 3988,3,validate 216,2,validate 2039,4,validate 553,1,validate 732,3,validate -2631,1,validate -470,3,validate 2851,4,validate 1770,1,validate -2285,1,validate 1990,4,validate -1291,3,validate -203,4,validate 2935,3,validate 549,3,validate 2152,2,validate 2761,3,validate -1628,2,validate 3806,3,validate 2415,3,validate -1974,1,validate 845,1,validate 979,1,validate -104,3,validate -3411,4,validate 712,2,validate 2711,1,validate 1624,4,validate -887,3,validate 367,4,validate 2803,4,validate 105,4,validate @@ -10323,10 +9865,7 @@ parameter_index,simulation_index,split 2266,1,validate 2004,1,validate 3312,3,validate -747,1,validate -1962,4,validate 134,3,validate -3262,2,validate 480,2,validate 2613,1,validate 3475,2,validate @@ -10334,21 +9873,17 @@ parameter_index,simulation_index,split 3687,1,validate 3821,1,validate 135,3,validate -3645,4,validate 997,4,validate 3729,3,validate 1605,3,validate 2684,2,validate 86,3,validate 3596,4,validate -2205,4,validate -3942,3,validate 2947,3,validate 644,1,validate -3200,3,validate 2847,1,validate -3759,3,validate 290,3,validate +3759,3,validate 1456,1,validate 2072,4,validate 1194,1,validate @@ -10356,155 +9891,100 @@ parameter_index,simulation_index,split 2368,3,validate 2022,3,validate 553,4,validate -2631,4,validate 1803,1,validate -2285,4,validate 849,2,validate -3626,3,validate -16,1,validate 3231,4,validate 1840,4,validate -1974,4,validate 845,4,validate -2186,3,validate -1790,3,validate 1528,3,validate 1833,1,validate 3048,4,validate -1395,4,validate 2220,1,validate 1091,1,validate 2399,3,validate -2440,4,validate 3132,3,validate -138,4,validate 829,1,validate -1049,4,validate -787,4,validate -88,3,validate +138,4,validate 3261,4,validate -3826,4,validate -2999,4,validate +3389,3,validate 2004,4,validate 393,1,validate 830,2,validate 2653,4,validate -1176,1,validate -3691,2,validate 2512,1,validate 1771,3,validate -39,2,validate -817,4,validate -514,3,validate 951,4,validate 2766,2,validate 860,2,validate -2463,1,validate -3678,4,validate -2633,3,validate -1638,3,validate 3671,1,validate 2414,1,validate 331,2,validate 2372,4,validate -465,2,validate 3975,3,validate 2980,3,validate 1410,1,validate 415,1,validate 19,1,validate -3192,2,validate 3326,2,validate 373,4,validate -1539,2,validate 2847,4,validate 1456,4,validate -3014,1,validate 1194,4,validate 20,2,validate -2797,3,validate -232,1,validate -366,1,validate 3580,3,validate 1490,2,validate 99,2,validate -1702,1,validate 3051,4,validate -16,4,validate 882,2,validate 49,1,validate 3955,2,validate 1357,3,validate 3094,2,validate -141,4,validate -1653,1,validate 3693,1,validate 658,1,validate 1570,3,validate -437,2,validate 179,3,validate 1003,4,validate 2565,2,validate 3257,1,validate 1866,1,validate -650,2,validate -2253,1,validate 829,4,validate -1258,1,validate -862,1,validate -996,1,validate 3294,4,validate 1775,4,validate 2686,4,validate -2283,1,validate 2417,1,validate 1246,4,validate 1196,3,validate 2017,3,validate 2454,4,validate -3279,1,validate -2192,4,validate 3754,2,validate 3795,3,validate 1805,3,validate 2709,1,validate 4058,4,validate -2929,4,validate 1493,2,validate -2405,4,validate -1276,4,validate 1410,4,validate 1014,4,validate -1443,1,validate 19,4,validate 3225,2,validate 1360,3,validate -2701,2,validate 103,3,validate -3309,1,validate -3047,1,validate 1876,4,validate 661,1,validate 3522,1,validate 132,2,validate -3480,4,validate 49,4,validate 3826,3,validate 216,1,validate 3389,2,validate 2039,3,validate -174,4,validate 3693,4,validate 732,2,validate 1644,4,validate 1990,3,validate -1291,2,validate 3510,4,validate -2253,4,validate 3856,3,validate -862,4,validate 2761,2,validate -2203,3,validate 3806,2,validate 812,3,validate 2415,2,validate @@ -10512,23 +9992,19 @@ parameter_index,simulation_index,split 247,2,validate 1674,4,validate 2678,3,validate -3411,3,validate 367,3,validate 2803,3,validate 105,3,validate -2283,4,validate 1150,3,validate 64,1,validate 3533,1,validate 3312,2,validate 2663,1,validate 2446,3,validate -1096,4,validate 3787,2,validate 3871,1,validate 3475,1,validate 135,2,validate -1443,4,validate 3046,3,validate 3392,2,validate 2693,1,validate @@ -10537,102 +10013,71 @@ parameter_index,simulation_index,split 2913,4,validate 2517,4,validate 86,2,validate -2997,3,validate -694,1,validate 1344,3,validate 2947,2,validate 2072,3,validate -512,2,validate 553,3,validate -2631,3,validate 3068,4,validate -2285,3,validate 849,1,validate -3061,1,validate 1932,1,validate 67,2,validate 2152,4,validate 413,1,validate -1628,4,validate 1537,2,validate 845,3,validate -3536,1,validate -1974,3,validate -979,3,validate 1671,2,validate -2186,2,validate +979,3,validate 2836,4,validate 712,4,validate 2711,3,validate -1275,1,validate 3353,1,validate 2399,2,validate -2096,1,validate 2533,2,validate 3261,3,validate 2266,3,validate 2004,3,validate 830,1,validate -747,3,validate -3262,4,validate 959,2,validate -3691,1,validate 2696,1,validate 1567,1,validate 480,4,validate 1043,1,validate -48,1,validate 3475,4,validate -514,2,validate 3687,3,validate 3821,3,validate 860,1,validate 3771,2,validate -1638,2,validate 2684,4,validate 2118,1,validate -2593,2,validate 2372,3,validate -465,1,validate 2980,2,validate -3192,1,validate 3326,1,validate 2847,3,validate 1456,3,validate 1194,3,validate 20,1,validate -2797,2,validate 3971,4,validate 3580,2,validate -545,2,validate 1803,3,validate 849,4,validate -16,3,validate -3144,2,validate 1357,2,validate 3094,1,validate 1570,2,validate 179,2,validate -2178,1,validate 1916,1,validate 525,1,validate 2565,1,validate 2220,3,validate 1091,3,validate 829,3,validate -3520,1,validate 526,2,validate 830,4,validate 2474,4,validate 1775,3,validate -3337,1,validate 2779,2,validate -3691,4,validate 2512,3,validate -39,4,validate 2766,4,validate 860,4,validate -2463,3,validate 3754,1,validate 2759,1,validate 2893,1,validate @@ -10640,64 +10085,42 @@ parameter_index,simulation_index,split 1805,2,validate 2414,3,validate 4058,3,validate -2929,3,validate 331,4,validate 1410,3,validate 415,3,validate 19,3,validate -3192,4,validate -761,2,validate -1539,4,validate 103,2,validate 2102,1,validate -3014,3,validate -3488,2,validate 20,4,validate -232,3,validate -366,3,validate 1490,4,validate -2315,1,validate 99,4,validate -1702,3,validate -3480,3,validate 882,4,validate 49,3,validate 3955,4,validate 3389,1,validate 3826,2,validate -791,2,validate -1653,3,validate 3652,2,validate 3693,3,validate -437,4,validate 84,2,validate 2565,4,validate 3257,3,validate 1866,3,validate 3510,3,validate -650,4,validate -2253,3,validate 3856,2,validate -1258,3,validate -862,3,validate -996,3,validate 3291,1,validate 3682,2,validate -643,1,validate 247,1,validate 2029,2,validate 2678,2,validate 2812,2,validate 1421,2,validate 1159,2,validate -2283,3,validate 2417,3,validate 2891,2,validate 1067,4,validate 3928,4,validate 2842,2,validate 2446,2,validate -3279,3,validate 3754,4,validate 1451,2,validate 1189,2,validate @@ -10705,23 +10128,16 @@ parameter_index,simulation_index,split 2488,4,validate 1493,4,validate 1664,2,validate -1443,3,validate 3046,2,validate -11,2,validate 3225,4,validate 2481,1,validate 3392,1,validate 1486,1,validate -2701,4,validate 3130,1,validate -3309,3,validate 2913,3,validate -3047,3,validate 661,3,validate -2997,2,validate 3605,1,validate 3522,3,validate -1127,4,validate 1952,1,validate 132,4,validate 3988,4,validate @@ -10730,13 +10146,10 @@ parameter_index,simulation_index,split 3556,1,validate 774,1,validate 908,1,validate -512,1,validate 732,4,validate -470,4,validate 2032,2,validate 1770,2,validate 3769,1,validate -1291,4,validate 549,4,validate 2761,4,validate 3806,4,validate @@ -10750,13 +10163,9 @@ parameter_index,simulation_index,split 2533,1,validate 3312,4,validate 2183,4,validate -1405,2,validate -747,2,validate -2746,1,validate 2663,3,validate 3787,4,validate 2613,2,validate -3221,1,validate 227,2,validate 3871,3,validate 3475,3,validate @@ -10770,115 +10179,74 @@ parameter_index,simulation_index,split 3130,4,validate 1605,4,validate 86,4,validate -694,3,validate -2593,1,validate -3942,4,validate 2947,4,validate 644,2,validate 1952,4,validate 1203,2,validate -3851,1,validate 857,2,validate -158,1,validate 941,1,validate -545,1,validate 1416,2,validate 1803,2,validate 3802,1,validate 849,3,validate -3144,1,validate -3626,4,validate -3061,3,validate 1932,3,validate 67,4,validate 413,3,validate 3619,1,validate 1537,4,validate -3536,3,validate -2186,4,validate 1833,2,validate -1275,3,validate 3353,3,validate 2399,4,validate 2533,4,validate 526,1,validate -3783,1,validate 393,2,validate 830,3,validate -1176,2,validate 2779,1,validate 959,4,validate -3691,3,validate 2696,3,validate 1567,3,validate -3600,1,validate 131,1,validate 2512,2,validate 1043,3,validate -1651,2,validate 260,2,validate 2992,1,validate -39,3,validate -514,4,validate 1735,1,validate 210,1,validate -344,1,validate 860,3,validate -2463,2,validate 3771,4,validate 3071,1,validate -1638,4,validate 161,1,validate 3671,2,validate 2118,3,validate 2414,2,validate -2593,4,validate 331,3,validate -465,3,validate -1765,1,validate 2980,4,validate -811,2,validate 415,2,validate -3192,3,validate -4018,2,validate 3326,3,validate -761,1,validate -3014,2,validate 20,3,validate -2797,4,validate -366,2,validate 3580,4,validate -545,4,validate 1490,3,validate 2494,2,validate 99,3,validate 1399,1,validate -3144,4,validate 882,3,validate 1357,4,validate 3094,3,validate -791,1,validate 3702,2,validate -1653,2,validate 3652,1,validate 658,2,validate 1570,4,validate 179,4,validate -2178,3,validate 1916,3,validate 525,3,validate 3257,2,validate 2565,3,validate 1866,2,validate 1217,1,validate -1258,2,validate -996,2,validate 2995,1,validate -3470,2,validate 2079,2,validate 3682,1,validate 2029,1,validate -3337,3,validate 2163,1,validate 1034,1,validate 2812,1,validate @@ -10887,13 +10255,9 @@ parameter_index,simulation_index,split 639,2,validate 2417,2,validate 2891,1,validate -293,2,validate 31,2,validate -3500,2,validate -3846,1,validate 2017,4,validate 2842,1,validate -3279,2,validate 3754,3,validate 1451,1,validate 2759,3,validate @@ -10901,26 +10265,18 @@ parameter_index,simulation_index,split 1805,4,validate 2709,2,validate 1664,1,validate -11,1,validate 3225,3,validate 1360,4,validate 4051,2,validate 103,4,validate 2102,3,validate -3309,2,validate -3488,4,validate -2744,1,validate 224,1,validate 661,2,validate 3918,2,validate 3522,2,validate 874,2,validate -3389,3,validate -3127,3,test -824,1,test +3826,4,validate 2132,3,test -2478,2,test -3256,4,test 3685,1,test 4039,4,test 3340,3,test @@ -10932,107 +10288,63 @@ parameter_index,simulation_index,split 2641,1,test 380,2,test 1983,1,test -854,1,test -297,4,test 3940,3,test -2895,2,test 3320,2,test 722,3,test 326,3,test 1371,3,test -3666,1,test 2712,2,test -3362,4,test -622,1,test -976,4,test 1188,3,test -2226,1,test 2014,1,test 2742,2,test -94,2,test 3222,1,test +94,2,test 3005,3,test -2564,1,test 1872,2,test 3867,4,test 136,4,test -1219,4,test -3655,4,test -215,4,test -2214,3,test 2510,2,test -3343,3,test -2814,4,test 2081,4,test -1819,4,test -3422,3,test -824,4,test 3768,2,test 3685,4,test -3718,1,test 1812,1,test -2249,2,test -462,2,test 2461,1,test -3635,3,test 641,4,test 3373,3,test 2378,3,test -3585,2,test 2328,2,test 3931,1,test -3669,1,test 1849,4,test 1983,4,test -854,4,test 196,4,test 26,1,test 3973,3,test 3670,2,test -676,3,test 2320,3,test 3486,1,test -1800,4,test 626,2,test -230,2,test -3141,3,test 1967,1,test -2449,4,test 4052,3,test 3749,2,test -359,3,test 796,4,test 493,3,test 705,2,test 3437,1,test -3833,1,test 2046,1,test -622,4,test 3395,4,test -1488,2,test 1051,1,test +1488,2,test 2829,1,test 1834,1,test 706,3,test 181,1,test -1093,3,test -3092,2,test -2217,4,test -3438,1,test 218,4,test -2430,4,test 819,1,test -523,2,test -2564,4,test -3122,2,test 1772,3,test 3072,1,test 3509,2,test -515,3,test 2077,1,test 2989,3,test -3030,4,test -3073,2,test 1985,3,test 3547,1,test 594,3,test @@ -11041,11 +10353,8 @@ parameter_index,simulation_index,split 1549,3,test 2198,3,test 1802,3,test -3718,4,test 2544,2,test -3322,4,test 283,3,test -3406,3,test 2232,1,test 2411,3,test 2015,3,test @@ -11054,22 +10363,16 @@ parameter_index,simulation_index,split 496,3,test 667,1,test 3881,3,test -3440,1,test 2665,4,test 2961,3,test -3569,2,test 971,3,test 3486,4,test 2312,2,test 3653,1,test -2878,4,test -871,1,test 2179,3,test -3386,2,test 3916,2,test 2828,3,test 3437,4,test -1867,2,test 2046,4,test 476,2,test 913,3,test @@ -11077,55 +10380,37 @@ parameter_index,simulation_index,split 1521,2,test 2829,4,test 1996,3,test -2130,3,test 2645,3,test 2342,2,test 3903,4,test 1297,1,test 2646,4,test -2384,4,test 859,4,test 2596,3,test 1422,1,test -2334,3,test 1551,2,test -3154,1,test 1289,2,test 294,2,test 1418,3,test 3417,2,test 202,4,test 3367,1,test -2676,4,test 3105,1,test 1240,2,test 245,2,test -1023,4,test -2626,3,test 1107,3,test 324,2,test 3056,1,test -1403,1,test 711,2,test 1186,3,test 3622,3,test -1969,3,test 4047,3,test -2790,3,test -1616,1,test 2232,4,test 841,4,test -2740,2,test 183,4,test 1786,3,test 2132,2,test -3440,4,test -1829,1,test -3044,4,test 2874,1,test -3256,3,test -2478,1,test -262,4,test 2395,3,test 1221,1,test 4039,3,test @@ -11133,19 +10418,11 @@ parameter_index,simulation_index,split 3340,2,test 255,1,test 2295,1,test -871,4,test -475,4,test 1604,4,test -213,4,test +475,4,test 2820,2,test -1,4,test -297,3,test 905,2,test -1075,4,test -1209,4,test -813,4,test 510,3,test -1118,2,test 722,2,test 3936,4,test 164,3,test @@ -11153,18 +10430,12 @@ parameter_index,simulation_index,split 1422,4,test 589,3,test 1768,3,test -3154,4,test 2496,4,test -843,4,test 2539,2,test 4009,2,test 3492,4,test 3005,2,test 186,4,test -1748,2,test -1403,4,test -1219,3,test -3655,3,test 1353,3,test 3564,1,test 96,3,test @@ -11174,15 +10445,11 @@ parameter_index,simulation_index,split 1566,3,test 2081,3,test 612,4,test -824,3,test 521,2,test 3253,1,test 1862,1,test -1170,2,test 3685,3,test -2249,1,test 4031,2,test -3635,2,test 2166,3,test 641,3,test 775,3,test @@ -11192,104 +10459,70 @@ parameter_index,simulation_index,split 1637,4,test 380,4,test 1983,3,test -854,3,test 3670,1,test -676,2,test -2895,4,test -1800,3,test 27,1,test 3320,4,test 3749,1,test 889,2,test 493,2,test -3666,3,test 1497,1,test 2712,4,test 4012,2,test -622,3,test 4096,1,test 706,2,test -2226,3,test -3092,1,test -3963,2,test 444,1,test 1527,1,test 2742,4,test 94,4,test 3222,3,test -523,1,test -2564,3,test 1872,4,test -3780,1,test -786,2,test -3122,1,test 2989,2,test 2510,4,test 603,2,test -3073,1,test 687,1,test 2806,2,test -1811,2,test 3810,1,test 1549,2,test 3548,1,test 3768,4,test -3718,3,test 2544,1,test -2249,4,test -462,4,test 2461,3,test 4064,2,test -3585,4,test 2411,2,test 4014,1,test 1846,1,test 2328,4,test 3931,3,test -3669,3,test 3881,2,test 3316,1,test -322,2,test 3670,4,test 971,2,test 3486,3,test 2312,1,test 626,4,test -230,4,test 1967,3,test -2878,3,test 3749,4,test 2179,2,test 3916,1,test 485,1,test 705,4,test 3437,3,test -3833,3,test 2046,3,test 1051,3,test 1488,4,test 2829,3,test 1834,3,test -2130,2,test 2342,1,test 181,3,test -3092,4,test 2646,3,test -2343,2,test -1086,2,test 2689,1,test 1298,1,test 819,3,test 690,1,test 294,1,test 1905,4,test -3205,2,test -3122,4,test 3417,1,test -1249,1,test -557,2,test 3072,3,test -2676,3,test 3509,4,test 245,1,test 374,2,test @@ -11300,47 +10533,32 @@ parameter_index,simulation_index,split 678,4,test 2544,4,test 3448,2,test -3186,2,test -2790,2,test 2232,3,test 841,3,test 4014,4,test 2924,1,test -3440,3,test 3349,1,test -3569,4,test 2395,2,test 1696,1,test 2312,4,test 3653,3,test -93,1,test -871,3,test 3999,2,test -3386,4,test 2820,1,test -1867,4,test -1,3,test 476,4,test 172,1,test 905,1,test 4078,2,test -306,1,test 1521,4,test -3379,1,test 2342,4,test 1168,2,test -906,2,test 510,2,test -1118,1,test 1297,3,test 164,2,test -1381,2,test 1422,3,test 3937,4,test 1331,1,test 1768,2,test 1551,4,test -3154,3,test 1289,4,test 3980,2,test 294,4,test @@ -11349,31 +10567,21 @@ parameter_index,simulation_index,split 3367,3,test 3105,3,test 1240,4,test -2406,2,test 4009,1,test 245,4,test 1411,2,test 498,4,test -3797,1,test -1748,1,test 324,4,test 3056,3,test -1403,3,test 711,4,test 3748,1,test 1353,2,test 96,2,test 308,1,test -1616,3,test -2740,4,test 1566,2,test 612,3,test 2132,4,test 521,1,test -1829,3,test -3432,2,test -3170,2,test -2478,3,test 1221,3,test 3516,1,test 3340,4,test @@ -11384,57 +10592,41 @@ parameter_index,simulation_index,split 2641,2,test 947,1,test 905,4,test -2895,3,test 722,4,test 889,1,test 1371,4,test -3666,2,test 4012,1,test -2226,2,test -3963,1,test 2014,2,test 2573,2,test 3618,2,test 94,3,test 3222,2,test 3005,4,test -1748,4,test -786,1,test 3435,2,test 3564,3,test 2390,1,test 3302,3,test -2128,1,test -2214,4,test 308,4,test -3343,4,test 603,1,test 3253,3,test 3768,3,test 1862,3,test -1170,4,test 1812,2,test -2249,3,test 4031,4,test -3635,4,test -2461,2,test 3549,1,test +2461,2,test 3373,4,test 2378,4,test 3416,2,test 2328,3,test 3628,1,test 26,2,test -322,1,test 3670,3,test 1763,1,test -676,4,test 626,3,test -3141,4,test 3749,3,test 889,4,test 493,4,test -3833,2,test 4012,4,test 1709,2,test 1051,2,test @@ -11442,29 +10634,18 @@ parameter_index,simulation_index,split 4096,3,test 1834,2,test 706,4,test -1093,4,test -3092,3,test 1398,2,test -3438,2,test 444,3,test -2343,1,test -1086,1,test -523,3,test 819,2,test -3780,3,test -3122,3,test -557,1,test 3031,1,test 2077,2,test 2989,4,test 1512,1,test 603,4,test -3073,3,test 3547,2,test 687,3,test 3893,1,test 2806,4,test -1811,4,test 771,2,test 3548,3,test 1549,4,test @@ -11473,21 +10654,17 @@ parameter_index,simulation_index,split 3844,1,test 3448,1,test 4064,4,test -3186,1,test 2191,1,test 2411,4,test 4014,3,test -934,1,test 1846,3,test 496,4,test 4057,1,test 667,2,test 3881,4,test 2666,1,test -2404,1,test 2841,2,test 3316,3,test -322,4,test 971,4,test 2312,3,test 3054,2,test @@ -11495,18 +10672,12 @@ parameter_index,simulation_index,split 2179,4,test 3916,3,test 485,3,test -831,2,test 2871,2,test -2172,1,test 1996,4,test -2130,4,test 2342,3,test 1168,1,test -1693,2,test 1297,2,test -2343,4,test 40,2,test -1381,1,test 2689,3,test 1298,3,test 124,1,test @@ -11514,37 +10685,26 @@ parameter_index,simulation_index,split 3980,1,test 690,3,test 294,3,test -3205,4,test 1418,4,test 3417,3,test -1249,3,test -557,4,test 245,3,test 1411,1,test 3847,1,test 1107,4,test 374,4,test 2111,3,test -1412,2,test 324,3,test 2323,2,test -3015,1,test 3056,2,test 3622,4,test 2882,2,test 3927,2,test 3448,4,test -3186,4,test -2790,4,test -1616,2,test 3615,1,test 2924,3,test -1829,2,test 3828,1,test -3432,1,test 834,2,test 2874,2,test -3170,1,test 3349,3,test 2175,1,test 2395,4,test @@ -11552,40 +10712,28 @@ parameter_index,simulation_index,split 1696,3,test 3087,2,test 255,2,test -785,2,test -93,3,test 3999,4,test 2820,3,test 3858,1,test 172,3,test 905,3,test 4078,4,test -3379,3,test -1647,2,test 1168,4,test -906,4,test 510,4,test -1118,3,test 164,4,test -2855,2,test 1027,1,test 3201,1,test -207,2,test 589,4,test 1331,3,test 1768,4,test 3980,4,test -1677,2,test 2539,3,test 3097,1,test -2406,4,test 4009,3,test 237,2,test 2573,1,test 3618,1,test -3797,3,test 187,1,test -1748,3,test 2490,2,test 3435,1,test 1353,4,test @@ -11598,34 +10746,25 @@ parameter_index,simulation_index,split 1566,4,test 521,3,test 3253,2,test -3432,4,test 1862,2,test -1170,3,test -3170,4,test -867,2,test 3516,3,test 1213,1,test 4031,3,test 2166,4,test 775,4,test 1080,2,test -3812,1,test 3416,1,test 2641,4,test 2026,2,test 27,2,test 3150,2,test 889,3,test -3666,4,test 1497,2,test 4012,3,test 1709,1,test -452,1,test 56,1,test 4096,2,test 1011,1,test -2226,4,test -3963,3,test 1398,1,test 2014,4,test 444,2,test @@ -11633,17 +10772,13 @@ parameter_index,simulation_index,split 2573,4,test 1873,1,test 3222,4,test -3780,2,test -786,3,test 3477,1,test 3215,1,test 3435,4,test 2390,3,test 1216,1,test -2128,3,test 603,3,test 687,2,test -1811,3,test 3810,2,test 771,1,test 3548,2,test @@ -11659,21 +10794,17 @@ parameter_index,simulation_index,split 2716,1,test 3931,4,test 3628,3,test -3669,4,test 2841,1,test 3316,2,test 26,4,test -322,3,test 1763,3,test 2667,1,test 3054,1,test 1967,4,test 406,1,test 485,2,test -3833,4,test 2222,1,test 1709,4,test -831,1,test 2871,1,test 273,2,test 1051,4,test @@ -11681,33 +10812,21 @@ parameter_index,simulation_index,split 2351,2,test 1834,4,test 181,4,test -3346,1,test -1693,1,test 1398,4,test -3438,4,test -2343,3,test 40,1,test -911,2,test 3347,2,test -1086,3,test 2689,2,test 1956,2,test -3559,1,test 565,2,test 1298,2,test -41,2,test 819,4,test 690,2,test -3205,3,test -1249,2,test -557,3,test 3031,3,test 3072,4,test 2077,4,test 374,3,test 3547,4,test 2111,2,test -1412,1,test 3893,3,test 2323,1,test 2932,2,test @@ -11715,62 +10834,38 @@ parameter_index,simulation_index,split 3927,1,test 3844,3,test 3448,3,test -3186,3,test 2191,3,test -934,3,test 3878,1,test 2924,2,test 667,4,test -2404,3,test -1230,1,test -834,1,test 2841,4,test +834,1,test 3349,2,test -4091,1,test 3653,4,test 2438,1,test 3087,1,test -785,1,test -93,2,test 3999,3,test 1522,1,test 2871,4,test 172,2,test 4078,3,test -2172,3,test -306,2,test -3379,2,test -1647,1,test -2518,2,test 1168,3,test -906,3,test -1693,4,test 1297,4,test -2855,1,test 1860,1,test 40,4,test -2335,2,test 944,2,test -1381,3,test -207,1,test 124,3,test 1727,2,test 1331,2,test 3330,1,test 3247,3,test 2073,1,test -1677,1,test 3980,3,test -682,1,test -3197,2,test 3367,4,test 3105,4,test -2406,3,test 1411,3,test 3847,3,test 237,1,test -3797,2,test -3015,3,test 2323,4,test 3056,4,test 2490,1,test @@ -11779,20 +10874,13 @@ parameter_index,simulation_index,split 3748,2,test 2915,1,test 3960,1,test -1616,4,test 401,1,test 3615,3,test 1312,1,test -1446,1,test 2782,1,test -1829,4,test 3828,3,test -3432,3,test 834,4,test 2874,4,test -2478,4,test -867,1,test -3170,3,test 2175,3,test 1221,4,test 3516,2,test @@ -11804,22 +10892,16 @@ parameter_index,simulation_index,split 1081,2,test 3858,3,test 2026,1,test -1647,4,test 3150,1,test -2855,4,test 1027,3,test 3201,3,test -3497,1,test 503,2,test 715,1,test -3364,2,test 2014,3,test 3576,1,test -1274,1,test 1711,2,test 3097,3,test 2573,3,test -666,1,test 3618,3,test 187,3,test 3789,1,test @@ -11831,73 +10913,52 @@ parameter_index,simulation_index,split 2915,4,test 3344,1,test 3960,4,test -3564,4,test 3082,1,test -1953,1,test +3564,4,test 2390,2,test 3302,4,test -2128,2,test -696,1,test -1133,2,test -3211,2,test 3253,4,test 2949,1,test 1862,4,test -2687,1,test 2291,1,test -867,4,test -1296,1,test 1812,3,test 3549,2,test -2554,2,test 1721,1,test 3895,1,test -3812,3,test 3416,3,test 1247,1,test 3628,2,test 1376,2,test 26,3,test -2717,1,test 2026,4,test -2455,1,test +2717,1,test 1763,2,test 27,4,test 3150,4,test 1497,4,test 1709,3,test 273,1,test -452,3,test 56,3,test 2351,1,test 4096,4,test 2189,2,test -2485,1,test -3530,1,test 4005,2,test 1011,3,test 1398,3,test -3438,3,test 444,4,test -911,1,test 3347,1,test 1527,4,test 1956,1,test 565,1,test 1873,3,test 1174,2,test -41,1,test -523,4,test 1957,2,test 566,2,test -3780,4,test 2169,1,test 3031,2,test -2036,2,test 2077,3,test 1512,2,test 1216,3,test -3073,4,test 687,4,test 3893,2,test 3810,4,test @@ -11909,127 +10970,83 @@ parameter_index,simulation_index,split 3195,2,test 201,3,test 3844,2,test -72,1,test 2191,2,test -934,2,test 1846,4,test 2716,3,test 4057,2,test 667,3,test 2666,2,test -2404,2,test 2841,3,test 3316,4,test 1409,2,test 1755,1,test -1359,1,test 2667,3,test 3054,3,test 406,3,test 3916,4,test 485,4,test 2222,3,test -831,3,test 2871,3,test 273,4,test -2568,2,test -2172,2,test 2351,4,test -2914,1,test -2518,1,test -3346,3,test 2647,2,test -1693,3,test 1390,2,test 40,3,test -2335,1,test -911,4,test 944,1,test 2689,4,test -3559,3,test 565,4,test 124,2,test 1298,4,test 1727,1,test -41,4,test 3247,2,test 690,4,test -2252,2,test -3197,1,test -1249,4,test 3460,2,test 3847,2,test -550,2,test -2153,1,test 2111,4,test -1412,3,test -3015,2,test 2323,3,test 2932,4,test -1758,2,test 2882,3,test 3927,3,test 451,1,test -3362,2,test 3615,2,test 318,2,test 3878,3,test 2924,4,test 3828,2,test -1230,3,test 834,3,test 2874,3,test -2134,1,test -2175,2,test 3349,4,test -4091,3,test +2175,2,test 1696,4,test 1526,1,test 2438,3,test 3087,3,test -785,3,test -93,4,test 2996,1,test 2820,4,test 1343,1,test 1081,1,test 3858,2,test 172,4,test -306,4,test -3379,4,test -1647,3,test 4071,2,test -1118,4,test -2814,2,test -2855,3,test -2552,2,test 1860,3,test 1027,2,test -2335,4,test 3201,2,test 944,4,test -207,3,test 1727,4,test 1331,4,test 3330,3,test 2073,3,test -1677,3,test 503,1,test -682,3,test -3197,4,test 2539,4,test -3364,1,test 1711,1,test 3097,2,test 4009,4,test 237,3,test 3839,1,test 187,2,test -3797,4,test 2320,1,test -2053,2,test -4052,1,test 2490,3,test +4052,1,test 188,3,test 796,2,test 2003,1,test @@ -12037,91 +11054,62 @@ parameter_index,simulation_index,split 2915,3,test 3960,3,test 3395,2,test -1133,1,test 401,3,test 1312,3,test -3607,1,test -3211,1,test 1742,2,test 697,1,test 2782,3,test 521,4,test -867,3,test 3516,4,test 1213,2,test 218,2,test 2950,1,test -2554,1,test -1559,1,test 1080,3,test -3812,2,test 1984,1,test 1164,2,test 947,4,test 1772,1,test 1376,1,test -381,1,test 2026,3,test 27,3,test -1327,1,test 3150,3,test 1497,3,test 1802,1,test -452,2,test 2189,1,test -3497,3,test 4005,1,test 715,3,test 1011,2,test -3963,4,test 3793,1,test 3576,3,test 1711,4,test 1527,3,test -666,3,test 2961,1,test 2269,2,test 1873,2,test -3872,1,test -878,2,test 1174,1,test 1957,1,test 566,1,test 1874,3,test -786,4,test 3477,2,test 3215,2,test -4085,1,test 2003,4,test 1266,3,test -2036,1,test 3344,3,test 3082,3,test -1953,3,test -1216,2,test 2390,4,test +1216,2,test 913,1,test -2128,4,test -696,3,test -1133,4,test -3211,4,test -2037,2,test 2645,1,test 992,1,test 3810,3,test 2949,3,test -2687,3,test 2291,3,test 859,2,test -1296,3,test 3195,1,test 201,2,test 3549,4,test -2334,1,test -2554,4,test 1721,3,test 3895,3,test -2067,2,test 2716,2,test 1247,3,test 3628,4,test @@ -12129,111 +11117,64 @@ parameter_index,simulation_index,split 1409,1,test 2717,3,test 1543,1,test -2455,3,test 1763,4,test 2667,2,test 406,2,test 2880,2,test 2222,2,test 273,3,test -2568,1,test 2351,3,test -2485,3,test -3530,3,test 4005,4,test -3346,2,test 2647,1,test 1786,1,test 1390,1,test -911,3,test 3347,3,test -1086,4,test 1956,3,test -3559,2,test 565,3,test -3256,1,test -262,2,test -41,3,test 4039,1,test 1957,4,test -2252,1,test 566,4,test 2169,3,test 3031,4,test 3460,1,test -2036,4,test 1512,4,test -550,1,test -1075,2,test 3893,4,test -813,2,test 2932,3,test -1758,1,test 3936,2,test 2720,3,test 3195,4,test -3362,1,test 3844,4,test -72,3,test -976,1,test 2191,4,test 318,1,test -934,4,test 3878,2,test -843,2,test 4057,4,test 2666,4,test -2404,4,test -1230,2,test 1409,4,test 2313,2,test -1359,3,test -4091,2,test 1705,2,test 2438,2,test 186,2,test 3867,1,test 136,1,test 1522,2,test -2568,4,test -2172,4,test -306,3,test 3,2,test -2518,3,test -215,1,test 4071,1,test 2647,4,test -2814,1,test 2081,1,test -2552,1,test -1819,1,test 1860,2,test -2335,3,test 944,3,test -1381,4,test 124,4,test 1727,3,test 3330,2,test 3247,4,test 2073,2,test -2252,4,test 641,1,test -682,2,test -3197,3,test 3677,2,test 3460,4,test 1849,1,test 196,1,test 3847,4,test 1411,4,test -550,4,test -2153,3,test -3756,2,test -3015,4,test -1800,1,test -2449,1,test -2053,1,test -1758,4,test 188,2,test 796,1,test 3748,3,test @@ -12242,80 +11183,52 @@ parameter_index,simulation_index,split 401,2,test 3615,4,test 1312,2,test -1446,2,test 1742,1,test 318,4,test -2267,2,test 2782,2,test 3828,4,test -2217,1,test 1659,2,test -2134,3,test 2175,4,test 268,2,test 218,1,test 1526,3,test -2430,1,test 2996,3,test 1164,1,test 1343,3,test 947,3,test 1081,3,test 3858,4,test -3030,1,test 4071,4,test -2552,4,test 1027,4,test 3201,4,test -3322,1,test -3497,2,test 503,3,test 715,2,test -3364,3,test 3576,2,test -1274,2,test 1711,3,test 3097,4,test -666,2,test +3839,3,test 2665,1,test 2269,1,test -3839,3,test 3618,4,test -878,1,test 187,4,test 3789,2,test 1874,2,test -2053,4,test -2878,1,test 617,2,test 2003,3,test 1266,2,test 3344,2,test 3082,2,test -1953,2,test -696,2,test -1133,3,test 3824,1,test -3607,3,test -3211,3,test -2037,1,test 1742,4,test 697,3,test 2300,2,test 3903,1,test 2949,2,test 2646,1,test -2687,2,test -2384,1,test 859,1,test -1296,2,test 1213,4,test 2950,3,test -2554,3,test -1559,3,test 3895,2,test -2067,1,test -3812,4,test 1905,2,test 1984,3,test 1247,2,test @@ -12323,30 +11236,18 @@ parameter_index,simulation_index,split 2330,2,test 1376,3,test 202,1,test -381,3,test -2676,1,test 2717,2,test -2455,2,test -1023,1,test -1327,3,test 1935,2,test 1673,2,test 544,2,test 2880,1,test -452,4,test -2485,2,test 2189,3,test -3530,2,test 4005,3,test 1011,4,test 183,1,test 3793,3,test -3044,1,test 2269,4,test 1873,4,test -262,1,test -3872,3,test -878,4,test 1174,3,test 1520,2,test 1957,3,test @@ -12356,16 +11257,8 @@ parameter_index,simulation_index,split 3215,4,test 1604,1,test 475,1,test -4085,3,test -213,1,test -2036,3,test -1,1,test 1216,4,test 1512,3,test -2037,4,test -1075,1,test -1209,1,test -813,1,test 992,3,test 771,4,test 3936,1,test @@ -12374,18 +11267,14 @@ parameter_index,simulation_index,split 1288,1,test 201,4,test 3937,2,test -72,2,test -2067,4,test 2496,1,test 2716,4,test -843,1,test 4057,3,test 2666,3,test 1409,3,test 1543,3,test 2313,1,test 1755,2,test -1359,2,test 2667,4,test 3492,1,test 498,2,test @@ -12395,109 +11284,67 @@ parameter_index,simulation_index,split 406,4,test 2880,4,test 2222,4,test -831,4,test -2568,3,test 3,1,test 3176,2,test -2914,2,test -3346,4,test 1869,1,test 2647,3,test 1390,3,test 612,1,test -3127,2,test -3559,4,test -2252,3,test 2732,2,test 1637,1,test 3677,1,test 3460,3,test 380,1,test 3940,2,test -550,3,test -2153,2,test -3756,1,test -2895,1,test -1412,4,test -1758,3,test 3320,1,test 326,2,test 1371,2,test 2712,1,test 3927,4,test 451,2,test -3362,3,test -976,3,test 318,3,test 1188,2,test 3878,4,test -2267,1,test -1230,4,test 1659,1,test -2134,2,test 268,1,test 2313,4,test 2742,1,test -4091,4,test 1526,2,test 1705,4,test 94,1,test 2438,4,test 1872,1,test -785,4,test 2996,2,test 3867,3,test 136,3,test 1343,2,test 1522,4,test 3,4,test -215,3,test -2214,2,test 2510,1,test -3343,2,test 4071,3,test -2814,3,test -2552,3,test -1819,3,test -3422,2,test 1860,4,test -207,4,test 3768,1,test 3330,4,test 2073,4,test -462,1,test -1677,4,test -682,4,test 3373,2,test -3585,1,test 3677,4,test 1849,3,test 196,3,test 237,4,test 3839,2,test 3973,2,test -3756,4,test 2320,2,test 626,1,test -230,1,test -3141,2,test -2449,3,test -2053,3,test -4052,2,test 2490,4,test +4052,2,test 188,4,test -359,2,test 796,3,test 705,1,test 3395,3,test 1488,1,test 401,4,test 1312,4,test -3607,2,test -1446,4,test 1742,3,test -2267,4,test -1093,2,test 697,2,test 2300,1,test 2782,4,test @@ -12506,20 +11353,14 @@ parameter_index,simulation_index,split 1213,3,test 218,3,test 2950,2,test -1559,2,test -2430,3,test 1080,4,test 1905,1,test 1984,2,test 1164,3,test 2330,1,test 1772,2,test -381,2,test 3509,1,test -515,2,test -3030,3,test 1985,2,test -1327,2,test 594,2,test 1935,1,test 1673,1,test @@ -12527,59 +11368,41 @@ parameter_index,simulation_index,split 678,1,test 2198,2,test 1802,2,test -3322,3,test 283,2,test -3497,4,test 715,4,test -3406,2,test 2015,2,test 3793,2,test 3576,4,test -1274,4,test 496,2,test -666,4,test 2665,3,test 2269,3,test 2961,2,test -3872,2,test -878,3,test 3789,4,test 1520,1,test 1874,4,test 3477,3,test 3215,3,test 617,4,test -4085,2,test -3386,1,test 1266,4,test 2828,2,test 3344,4,test -1867,1,test -1953,4,test 3082,4,test 476,1,test 913,2,test -696,4,test 3824,3,test 1521,1,test 1996,2,test -2037,3,test 2645,2,test 992,2,test 2300,4,test 3903,3,test 2949,4,test -2687,4,test -2384,3,test 859,3,test -1296,4,test 2596,2,test -2334,2,test 3937,1,test 1721,4,test 3895,4,test 1551,1,test -2067,3,test 1289,1,test 1247,4,test 1418,2,test @@ -12587,10 +11410,7 @@ parameter_index,simulation_index,split 202,3,test 2717,4,test 1543,2,test -2455,4,test 1240,1,test -1023,3,test -2626,2,test 498,1,test 1107,2,test 1673,4,test @@ -12599,21 +11419,13 @@ parameter_index,simulation_index,split 711,1,test 1186,2,test 3622,2,test -1969,2,test 3176,1,test -2485,4,test 4047,2,test -3530,4,test -2740,1,test 183,3,test 1786,2,test -3127,1,test 2132,1,test 3347,4,test -3044,3,test 1956,4,test -3256,2,test -262,3,test 1390,4,test 4039,2,test 3340,1,test @@ -12622,12 +11434,7 @@ parameter_index,simulation_index,split 2732,1,test 1604,3,test 475,3,test -213,3,test -297,2,test 3940,1,test -1075,3,test -1209,3,test -813,3,test 722,1,test 326,1,test 3936,3,test @@ -12635,14 +11442,10 @@ parameter_index,simulation_index,split 2720,4,test 1288,3,test 589,2,test -72,4,test -976,2,test 1188,1,test 2496,3,test -843,3,test 2313,3,test 1755,4,test -1359,4,test 3492,3,test 1705,3,test 3005,1,test @@ -12650,25 +11453,12 @@ parameter_index,simulation_index,split 3867,2,test 136,2,test 1522,3,test -1219,2,test -3655,2,test 3,3,test 3176,4,test -2914,4,test -2518,4,test -215,2,test -2214,1,test -3343,1,test 1869,3,test 2081,2,test -1819,2,test -3422,1,test -3127,4,test -824,2,test -1170,1,test 3685,2,test 4031,1,test -3635,1,test 641,2,test 3373,1,test 775,2,test @@ -12678,66 +11468,38 @@ parameter_index,simulation_index,split 1849,2,test 380,3,test 1983,2,test -854,2,test 196,2,test 3940,4,test 3973,1,test -2153,4,test -3756,3,test -676,1,test -1800,2,test -3141,1,test -2449,2,test 3320,3,test 326,4,test -359,1,test 493,1,test 2712,3,test 451,4,test -622,2,test -1446,3,test 706,1,test 1188,4,test -2267,3,test -1093,1,test -2217,2,test 1659,3,test -2134,4,test 268,3,test 2742,3,test 1526,4,test -2430,2,test -2564,2,test 1872,3,test 2996,4,test 1343,4,test 1081,4,test -515,1,test 2989,1,test -3030,2,test 2510,3,test 1985,1,test 594,1,test 2806,1,test -3422,4,test -1811,1,test 1549,1,test 2198,1,test -3718,2,test -3322,2,test 283,1,test -462,3,test 503,4,test 4064,1,test -3406,1,test -3585,3,test 2411,1,test 2015,1,test -3364,4,test 3931,2,test 496,1,test -3669,2,test -1274,3,test 3881,1,test 3839,4,test 2665,2,test @@ -12746,50 +11508,36 @@ parameter_index,simulation_index,split 3789,3,test 2320,4,test 3486,2,test -230,3,test 1967,2,test 4052,4,test -2878,2,test 617,3,test 2179,1,test -359,4,test 2828,1,test 705,3,test 3437,2,test 2046,2,test 1488,3,test 3824,2,test -3607,4,test -1996,1,test 2829,2,test -2130,1,test +1996,1,test 181,2,test 697,4,test 2300,3,test 3903,2,test 2646,2,test -2384,2,test 2596,1,test 2950,4,test -1559,4,test 1905,3,test 1984,4,test -3205,1,test 1418,1,test 2330,3,test 1772,4,test 1376,4,test -381,4,test -2676,2,test 3072,2,test -515,4,test 3509,3,test -1023,2,test -2626,1,test 1985,4,test 1107,1,test 374,1,test -1327,4,test 594,4,test 1935,3,test 1673,3,test @@ -12798,42 +11546,27 @@ parameter_index,simulation_index,split 1186,1,test 3622,1,test 1802,4,test -1969,1,test 2189,4,test 4047,1,test 283,4,test -2790,1,test -3406,4,test 2232,2,test 2015,4,test 841,2,test 183,2,test 3793,4,test -3440,2,test -3044,2,test 2961,4,test -3872,4,test 1174,4,test 2395,1,test 1520,3,test 3653,2,test 1604,2,test -871,2,test 475,2,test -4085,4,test -213,2,test -3386,3,test 2828,4,test -1867,3,test -1,2,test -297,1,test 476,3,test 913,4,test 4078,1,test 1521,3,test 2645,4,test -1209,2,test -906,1,test 510,1,test 992,4,test 164,1,test @@ -12841,35 +11574,1302 @@ parameter_index,simulation_index,split 2596,4,test 1422,2,test 589,1,test -2334,4,test 3937,3,test 1768,1,test 1551,3,test -3154,2,test 1289,3,test 2496,2,test 3367,2,test 1543,4,test 3105,2,test 1240,3,test -2406,1,test 1755,3,test -2626,4,test 3492,2,test 498,3,test -1403,2,test 711,3,test 1186,4,test -1219,1,test -3655,1,test 1353,1,test -1969,4,test 3176,3,test 96,1,test 4047,4,test -2914,3,test 1869,2,test -2740,3,test 1566,1,test 1786,4,test 612,2,test +3127,3,calibrate +824,1,calibrate +1433,2,calibrate +2478,2,calibrate +3256,4,calibrate +854,1,calibrate +2203,4,calibrate +297,4,calibrate +2895,2,calibrate +3666,1,calibrate +3362,4,calibrate +622,1,calibrate +976,4,calibrate +1405,1,calibrate +3617,1,calibrate +3059,2,calibrate +2226,1,calibrate +2564,1,calibrate +1831,1,calibrate +11,4,calibrate +3039,1,calibrate +1219,4,calibrate +3655,4,calibrate +2997,4,calibrate +694,2,calibrate +215,4,calibrate +2214,3,calibrate +3343,3,calibrate +2814,4,calibrate +1599,1,calibrate +1819,4,calibrate +3422,3,calibrate +824,4,calibrate +1728,2,calibrate +512,3,calibrate +3718,1,calibrate +2249,2,calibrate +462,2,calibrate +3635,3,calibrate +3981,2,calibrate +3585,2,calibrate +3282,1,calibrate +3061,2,calibrate +3669,1,calibrate +854,4,calibrate +3536,2,calibrate +676,3,calibrate +1800,4,calibrate +230,2,calibrate +3141,3,calibrate +2449,4,calibrate +1275,2,calibrate +359,3,calibrate +2096,2,calibrate +3833,1,calibrate +622,4,calibrate +1405,4,calibrate +747,4,calibrate +2746,3,calibrate +918,2,calibrate +1093,3,calibrate +3092,2,calibrate +2217,4,calibrate +3438,1,calibrate +48,2,calibrate +3221,3,calibrate +1651,1,calibrate +2430,4,calibrate +523,2,calibrate +2564,4,calibrate +3122,2,calibrate +515,3,calibrate +2593,3,calibrate +3030,4,calibrate +3073,2,calibrate +811,1,calibrate +4018,1,calibrate +3851,3,calibrate +158,3,calibrate +3718,4,calibrate +545,3,calibrate +3322,4,calibrate +3406,3,calibrate +3144,3,calibrate +2757,2,calibrate +3440,1,calibrate +3569,2,calibrate +2178,2,calibrate +2878,4,calibrate +871,1,calibrate +3386,2,calibrate +3520,2,calibrate +1867,2,calibrate +3470,1,calibrate +872,2,calibrate +2475,1,calibrate +2130,3,calibrate +3337,2,calibrate +1176,4,calibrate +3600,3,calibrate +2384,4,calibrate +293,1,calibrate +2334,3,calibrate +3500,1,calibrate +3154,1,calibrate +2463,4,calibrate +1248,1,calibrate +3288,1,calibrate +2676,4,calibrate +1023,4,calibrate +2626,3,calibrate +3926,1,calibrate +811,4,calibrate +4018,4,calibrate +761,3,calibrate +1927,1,calibrate +3014,4,calibrate +1403,1,calibrate +3488,3,calibrate +232,4,calibrate +366,4,calibrate +1969,3,calibrate +537,2,calibrate +2315,2,calibrate +2790,3,calibrate +1616,1,calibrate +1702,4,calibrate +2661,1,calibrate +2740,2,calibrate +1483,2,calibrate +791,3,calibrate +3440,4,calibrate +1829,1,calibrate +1433,1,calibrate +3044,4,calibrate +1653,4,calibrate +3256,3,calibrate +2478,1,calibrate +262,4,calibrate +871,4,calibrate +1300,1,calibrate +213,4,calibrate +43,1,calibrate +1258,4,calibrate +996,4,calibrate +1,4,calibrate +297,3,calibrate +3470,4,calibrate +468,1,calibrate +643,2,calibrate +1075,4,calibrate +1209,4,calibrate +813,4,calibrate +1118,2,calibrate +293,4,calibrate +3500,4,calibrate +3846,3,calibrate +3154,4,calibrate +3059,1,calibrate +843,4,calibrate +3279,4,calibrate +673,1,calibrate +3534,1,calibrate +2143,1,calibrate +11,3,calibrate +1748,2,calibrate +3309,4,calibrate +1403,4,calibrate +3047,4,calibrate +2744,3,calibrate +1219,3,calibrate +3655,3,calibrate +824,3,calibrate +1728,1,calibrate +1170,2,calibrate +2249,1,calibrate +3120,2,calibrate +1254,1,calibrate +3635,2,calibrate +3981,1,calibrate +854,3,calibrate +676,2,calibrate +2895,4,calibrate +1800,3,calibrate +3933,2,calibrate +3666,3,calibrate +106,1,calibrate +622,3,calibrate +1405,3,calibrate +2746,2,calibrate +3617,3,calibrate +918,1,calibrate +2226,3,calibrate +3092,1,calibrate +3963,2,calibrate +3221,2,calibrate +1265,1,calibrate +523,1,calibrate +2564,3,calibrate +1831,3,calibrate +3780,1,calibrate +786,2,calibrate +3122,1,calibrate +3039,3,calibrate +694,4,calibrate +3335,1,calibrate +3073,1,calibrate +1599,3,calibrate +1811,2,calibrate +3851,2,calibrate +158,2,calibrate +292,2,calibrate +1337,2,calibrate +3718,3,calibrate +2249,4,calibrate +462,4,calibrate +3981,4,calibrate +3585,4,calibrate +3282,3,calibrate +3061,4,calibrate +717,1,calibrate +2757,1,calibrate +3669,3,calibrate +322,2,calibrate +3536,4,calibrate +230,4,calibrate +1275,4,calibrate +2878,3,calibrate +2096,4,calibrate +3833,3,calibrate +872,1,calibrate +3783,2,calibrate +2130,2,calibrate +1176,3,calibrate +918,4,calibrate +3092,4,calibrate +3600,2,calibrate +48,4,calibrate +2343,2,calibrate +1651,3,calibrate +1086,2,calibrate +1997,2,calibrate +344,2,calibrate +1165,2,calibrate +3205,2,calibrate +3122,4,calibrate +1249,1,calibrate +557,2,calibrate +2676,3,calibrate +465,4,calibrate +1765,2,calibrate +811,3,calibrate +4018,3,calibrate +325,2,calibrate +537,1,calibrate +3186,2,calibrate +2790,2,calibrate +1929,2,calibrate +1483,1,calibrate +488,1,calibrate +3440,3,calibrate +3569,4,calibrate +1958,1,calibrate +2178,4,calibrate +93,1,calibrate +871,3,calibrate +3386,4,calibrate +3520,4,calibrate +1867,4,calibrate +1,3,calibrate +3470,3,calibrate +872,4,calibrate +2475,3,calibrate +306,1,calibrate +3379,1,calibrate +3337,4,calibrate +906,2,calibrate +1118,1,calibrate +4029,2,calibrate +1381,2,calibrate +293,3,calibrate +3500,3,calibrate +3846,2,calibrate +3154,3,calibrate +3288,3,calibrate +1282,1,calibrate +2406,2,calibrate +3926,3,calibrate +3797,1,calibrate +104,1,calibrate +1748,1,calibrate +1927,3,calibrate +887,1,calibrate +1403,3,calibrate +2744,2,calibrate +2315,4,calibrate +1616,3,calibrate +2661,3,calibrate +2740,4,calibrate +1962,2,calibrate +1483,4,calibrate +1829,3,calibrate +1433,3,calibrate +3432,2,calibrate +3170,2,calibrate +2478,3,calibrate +3120,1,calibrate +734,1,calibrate +1517,1,calibrate +1300,3,calibrate +685,1,calibrate +468,3,calibrate +643,4,calibrate +2895,3,calibrate +2155,1,calibrate +3933,1,calibrate +3200,1,calibrate +3666,2,calibrate +3617,2,calibrate +3059,3,calibrate +2226,2,calibrate +3963,1,calibrate +673,3,calibrate +3534,3,calibrate +2143,3,calibrate +1790,1,calibrate +1831,2,calibrate +1748,4,calibrate +786,1,calibrate +1395,2,calibrate +3039,2,calibrate +787,2,calibrate +88,1,calibrate +2128,1,calibrate +2214,4,calibrate +3343,4,calibrate +1599,2,calibrate +1728,3,calibrate +1170,4,calibrate +292,1,calibrate +512,4,calibrate +1337,1,calibrate +2249,3,calibrate +817,2,calibrate +1254,3,calibrate +3635,4,calibrate +3981,3,calibrate +3678,2,calibrate +3282,2,calibrate +322,1,calibrate +676,4,calibrate +3141,4,calibrate +2096,3,calibrate +3833,2,calibrate +106,3,calibrate +1793,1,calibrate +2746,4,calibrate +918,3,calibrate +1093,4,calibrate +3092,3,calibrate +3438,2,calibrate +48,3,calibrate +1610,1,calibrate +2343,1,calibrate +3221,4,calibrate +1086,1,calibrate +1265,3,calibrate +1997,1,calibrate +523,3,calibrate +1165,1,calibrate +3780,3,calibrate +3122,3,calibrate +557,1,calibrate +1378,1,calibrate +3335,3,calibrate +3073,3,calibrate +1811,4,calibrate +3851,4,calibrate +158,4,calibrate +292,4,calibrate +325,1,calibrate +1337,4,calibrate +3186,1,calibrate +1929,1,calibrate +934,1,calibrate +717,3,calibrate +2757,3,calibrate +2404,1,calibrate +322,4,calibrate +1401,2,calibrate +3520,3,calibrate +2088,2,calibrate +831,2,calibrate +872,3,calibrate +2475,2,calibrate +3783,4,calibrate +2172,1,calibrate +2130,4,calibrate +3600,4,calibrate +1693,2,calibrate +4029,1,calibrate +2343,4,calibrate +1381,1,calibrate +1997,4,calibrate +2901,2,calibrate +344,4,calibrate +1248,2,calibrate +3288,2,calibrate +1165,4,calibrate +3205,4,calibrate +203,1,calibrate +1249,3,calibrate +557,4,calibrate +3926,2,calibrate +1765,4,calibrate +1412,2,calibrate +761,4,calibrate +3015,1,calibrate +1927,2,calibrate +325,4,calibrate +537,3,calibrate +2315,3,calibrate +3186,4,calibrate +2790,4,calibrate +1616,2,calibrate +2661,2,calibrate +1962,1,calibrate +1483,3,calibrate +791,4,calibrate +488,3,calibrate +1829,2,calibrate +1096,2,calibrate +3432,1,calibrate +3170,1,calibrate +1958,3,calibrate +3645,1,calibrate +785,2,calibrate +93,3,calibrate +1300,2,calibrate +43,2,calibrate +468,2,calibrate +643,3,calibrate +2205,1,calibrate +3379,3,calibrate +1647,2,calibrate +906,4,calibrate +1118,3,calibrate +4029,4,calibrate +2855,2,calibrate +207,2,calibrate +3846,4,calibrate +1677,2,calibrate +673,2,calibrate +1282,3,calibrate +3534,2,calibrate +2406,4,calibrate +2143,2,calibrate +3797,3,calibrate +1748,3,calibrate +1395,1,calibrate +2744,4,calibrate +2440,1,calibrate +1049,1,calibrate +787,1,calibrate +2999,1,calibrate +3432,4,calibrate +1170,3,calibrate +3170,4,calibrate +867,2,calibrate +3120,3,calibrate +817,1,calibrate +1254,2,calibrate +734,3,calibrate +3678,1,calibrate +1517,3,calibrate +3812,1,calibrate +685,3,calibrate +2155,3,calibrate +3933,3,calibrate +3666,4,calibrate +106,2,calibrate +452,1,calibrate +3617,4,calibrate +2226,4,calibrate +3963,3,calibrate +141,1,calibrate +1265,2,calibrate +1831,4,calibrate +3780,2,calibrate +786,3,calibrate +3039,4,calibrate +2948,2,calibrate +2128,3,calibrate +3335,2,calibrate +1599,4,calibrate +1811,3,calibrate +292,3,calibrate +1337,3,calibrate +3282,4,calibrate +717,2,calibrate +3669,4,calibrate +2192,1,calibrate +322,3,calibrate +2929,1,calibrate +2405,1,calibrate +1276,1,calibrate +1401,1,calibrate +2088,1,calibrate +3833,4,calibrate +831,1,calibrate +3783,3,calibrate +1793,3,calibrate +3346,1,calibrate +3480,1,calibrate +1693,1,calibrate +3438,4,calibrate +1610,3,calibrate +1651,4,calibrate +2343,3,calibrate +911,2,calibrate +174,1,calibrate +1086,3,calibrate +1997,3,calibrate +3559,1,calibrate +2901,1,calibrate +344,3,calibrate +41,2,calibrate +1165,3,calibrate +3205,3,calibrate +1249,2,calibrate +557,3,calibrate +1378,3,calibrate +1765,3,calibrate +1462,2,calibrate +1412,1,calibrate +325,3,calibrate +3186,3,calibrate +1929,3,calibrate +934,3,calibrate +488,2,calibrate +1096,1,calibrate +2404,3,calibrate +1230,1,calibrate +1958,2,calibrate +4091,1,calibrate +785,1,calibrate +93,2,calibrate +1401,4,calibrate +2088,4,calibrate +2475,4,calibrate +1697,2,calibrate +2172,3,calibrate +306,2,calibrate +3379,2,calibrate +1647,1,calibrate +2518,2,calibrate +1127,2,calibrate +906,3,calibrate +1693,4,calibrate +4029,3,calibrate +2855,1,calibrate +2335,2,calibrate +1381,3,calibrate +207,1,calibrate +2901,4,calibrate +470,2,calibrate +1248,4,calibrate +3288,4,calibrate +1677,1,calibrate +682,1,calibrate +3197,2,calibrate +203,3,calibrate +1282,2,calibrate +1628,1,calibrate +2406,3,calibrate +3926,4,calibrate +3797,2,calibrate +104,2,calibrate +3015,3,calibrate +1927,4,calibrate +887,2,calibrate +1616,4,calibrate +1446,1,calibrate +2661,4,calibrate +1962,3,calibrate +3262,1,calibrate +1829,4,calibrate +1433,4,calibrate +3432,3,calibrate +3170,3,calibrate +2478,4,calibrate +867,1,calibrate +734,2,calibrate +3645,3,calibrate +1517,2,calibrate +1300,4,calibrate +43,4,calibrate +685,2,calibrate +468,4,calibrate +2205,3,calibrate +1647,4,calibrate +3942,2,calibrate +2155,2,calibrate +3200,2,calibrate +2855,4,calibrate +3497,1,calibrate +3059,4,calibrate +3626,2,calibrate +673,4,calibrate +3364,2,calibrate +1274,1,calibrate +3534,4,calibrate +2143,4,calibrate +666,1,calibrate +1790,2,calibrate +1395,3,calibrate +2440,3,calibrate +1049,3,calibrate +2948,1,calibrate +787,3,calibrate +1953,1,calibrate +88,2,calibrate +2128,2,calibrate +2999,3,calibrate +696,1,calibrate +1133,2,calibrate +3211,2,calibrate +1728,4,calibrate +2687,1,calibrate +867,4,calibrate +1296,1,calibrate +817,3,calibrate +1254,4,calibrate +39,1,calibrate +2554,2,calibrate +3678,3,calibrate +3812,3,calibrate +2633,2,calibrate +2455,1,calibrate +1539,1,calibrate +106,4,calibrate +452,3,calibrate +2485,1,calibrate +1793,2,calibrate +3530,1,calibrate +3438,3,calibrate +1610,2,calibrate +141,3,calibrate +911,1,calibrate +1265,4,calibrate +437,1,calibrate +41,1,calibrate +523,4,calibrate +3780,4,calibrate +650,1,calibrate +2036,2,calibrate +2948,4,calibrate +1378,2,calibrate +3335,4,calibrate +3073,4,calibrate +1462,1,calibrate +72,1,calibrate +934,2,calibrate +717,4,calibrate +2757,4,calibrate +2192,3,calibrate +2404,2,calibrate +1359,1,calibrate +2405,3,calibrate +1276,3,calibrate +1401,3,calibrate +2701,1,calibrate +2088,3,calibrate +831,3,calibrate +1697,1,calibrate +2568,2,calibrate +2172,2,calibrate +2914,1,calibrate +2518,1,calibrate +1127,1,calibrate +3346,3,calibrate +1693,3,calibrate +2335,1,calibrate +911,4,calibrate +174,3,calibrate +3559,3,calibrate +2901,3,calibrate +41,4,calibrate +470,1,calibrate +1248,3,calibrate +2252,2,calibrate +3197,1,calibrate +1291,1,calibrate +203,2,calibrate +1249,4,calibrate +2203,2,calibrate +550,2,calibrate +2153,1,calibrate +1462,4,calibrate +1412,3,calibrate +3411,2,calibrate +3015,2,calibrate +1758,2,calibrate +537,4,calibrate +3362,2,calibrate +488,4,calibrate +1096,3,calibrate +1230,3,calibrate +2134,1,calibrate +1958,4,calibrate +4091,3,calibrate +3645,2,calibrate +785,3,calibrate +93,4,calibrate +43,3,calibrate +1697,4,calibrate +306,4,calibrate +3379,4,calibrate +2205,2,calibrate +1647,3,calibrate +3942,1,calibrate +1118,4,calibrate +2814,2,calibrate +2855,3,calibrate +2552,2,calibrate +2335,4,calibrate +207,3,calibrate +2631,2,calibrate +1677,3,calibrate +682,3,calibrate +2285,2,calibrate +3197,4,calibrate +3626,1,calibrate +3364,1,calibrate +1282,4,calibrate +1628,3,calibrate +1974,2,calibrate +3797,4,calibrate +2186,1,calibrate +104,4,calibrate +887,4,calibrate +2053,2,calibrate +2440,2,calibrate +1049,2,calibrate +2999,2,calibrate +1133,1,calibrate +3607,1,calibrate +3211,1,calibrate +3262,3,calibrate +867,3,calibrate +3120,4,calibrate +514,1,calibrate +2554,1,calibrate +734,4,calibrate +1559,1,calibrate +1517,4,calibrate +3812,2,calibrate +2633,1,calibrate +1638,1,calibrate +685,4,calibrate +381,1,calibrate +2155,4,calibrate +3200,4,calibrate +3933,4,calibrate +1327,1,calibrate +2797,1,calibrate +452,2,calibrate +3497,3,calibrate +16,2,calibrate +3963,4,calibrate +141,2,calibrate +666,3,calibrate +3872,1,calibrate +878,2,calibrate +1790,4,calibrate +786,4,calibrate +4085,1,calibrate +2036,1,calibrate +2948,3,calibrate +1953,3,calibrate +88,4,calibrate +2128,4,calibrate +696,3,calibrate +1133,4,calibrate +3211,4,calibrate +2037,2,calibrate +2687,3,calibrate +1296,3,calibrate +2334,1,calibrate +2554,4,calibrate +2067,2,calibrate +2633,4,calibrate +2192,2,calibrate +2455,3,calibrate +2929,2,calibrate +2405,2,calibrate +1276,2,calibrate +1539,3,calibrate +3488,1,calibrate +232,2,calibrate +2568,1,calibrate +2485,3,calibrate +1793,4,calibrate +3530,3,calibrate +1702,2,calibrate +3346,2,calibrate +3480,2,calibrate +1610,4,calibrate +911,3,calibrate +174,2,calibrate +1086,4,calibrate +3559,2,calibrate +3256,1,calibrate +262,2,calibrate +437,3,calibrate +41,3,calibrate +2252,1,calibrate +650,3,calibrate +2253,2,calibrate +2036,4,calibrate +862,2,calibrate +1378,4,calibrate +2203,1,calibrate +550,1,calibrate +1462,3,calibrate +1075,2,calibrate +3411,1,calibrate +813,2,calibrate +1758,1,calibrate +2283,2,calibrate +3362,1,calibrate +72,3,calibrate +976,1,calibrate +1929,4,calibrate +934,4,calibrate +843,2,calibrate +2404,4,calibrate +1230,2,calibrate +1359,3,calibrate +4091,2,calibrate +1443,2,calibrate +2701,3,calibrate +3047,2,calibrate +1697,3,calibrate +2568,4,calibrate +2172,4,calibrate +306,3,calibrate +2997,1,calibrate +2518,3,calibrate +215,1,calibrate +1127,3,calibrate +2814,1,calibrate +2552,1,calibrate +1819,1,calibrate +2335,3,calibrate +1381,4,calibrate +2631,1,calibrate +470,3,calibrate +2252,4,calibrate +682,2,calibrate +2285,1,calibrate +3197,3,calibrate +1291,3,calibrate +203,4,calibrate +1628,2,calibrate +1974,1,calibrate +550,4,calibrate +2153,3,calibrate +3756,2,calibrate +104,3,calibrate +3411,4,calibrate +1800,1,calibrate +3015,4,calibrate +887,3,calibrate +2449,1,calibrate +2053,1,calibrate +1758,4,calibrate +1446,2,calibrate +747,1,calibrate +1962,4,calibrate +3262,2,calibrate +2267,2,calibrate +2217,1,calibrate +2134,3,calibrate +2430,1,calibrate +3645,4,calibrate +2205,4,calibrate +3030,1,calibrate +3942,3,calibrate +3200,3,calibrate +2552,4,calibrate +3322,1,calibrate +2631,4,calibrate +3497,2,calibrate +2285,4,calibrate +3626,3,calibrate +16,1,calibrate +3364,3,calibrate +1274,2,calibrate +666,2,calibrate +1974,4,calibrate +878,1,calibrate +2186,3,calibrate +1790,3,calibrate +2053,4,calibrate +2878,1,calibrate +1395,4,calibrate +2440,4,calibrate +1049,4,calibrate +787,4,calibrate +1953,2,calibrate +88,3,calibrate +2999,4,calibrate +696,2,calibrate +1133,3,calibrate +3607,3,calibrate +3211,3,calibrate +2037,1,calibrate +1176,1,calibrate +3691,2,calibrate +2687,2,calibrate +2384,1,calibrate +1296,2,calibrate +39,2,calibrate +817,4,calibrate +514,3,calibrate +2554,3,calibrate +1559,3,calibrate +2463,1,calibrate +2067,1,calibrate +3678,4,calibrate +3812,4,calibrate +2633,3,calibrate +1638,3,calibrate +381,3,calibrate +2676,1,calibrate +2455,2,calibrate +1023,1,calibrate +465,2,calibrate +3192,2,calibrate +1327,3,calibrate +1539,2,calibrate +3014,1,calibrate +2797,3,calibrate +232,1,calibrate +366,1,calibrate +452,4,calibrate +2485,2,calibrate +3530,2,calibrate +1702,1,calibrate +16,4,calibrate +141,4,calibrate +3044,1,calibrate +1653,1,calibrate +262,1,calibrate +3872,3,calibrate +878,4,calibrate +437,2,calibrate +4085,3,calibrate +213,1,calibrate +650,2,calibrate +2253,1,calibrate +1258,1,calibrate +862,1,calibrate +2036,3,calibrate +996,1,calibrate +1,1,calibrate +2037,4,calibrate +1075,1,calibrate +1209,1,calibrate +813,1,calibrate +2283,1,calibrate +72,2,calibrate +2067,4,calibrate +843,1,calibrate +3279,1,calibrate +2192,4,calibrate +2929,4,calibrate +1359,2,calibrate +2405,4,calibrate +1276,4,calibrate +1443,1,calibrate +2701,2,calibrate +3309,1,calibrate +3047,1,calibrate +831,4,calibrate +2568,3,calibrate +2914,2,calibrate +3346,4,calibrate +3480,4,calibrate +3127,2,calibrate +174,4,calibrate +3559,4,calibrate +2252,3,calibrate +1291,2,calibrate +2253,4,calibrate +862,4,calibrate +2203,3,calibrate +550,3,calibrate +2153,2,calibrate +3756,1,calibrate +2895,1,calibrate +1412,4,calibrate +3411,3,calibrate +1758,3,calibrate +2283,4,calibrate +3362,3,calibrate +976,3,calibrate +2267,1,calibrate +1096,4,calibrate +1230,4,calibrate +2134,2,calibrate +4091,4,calibrate +1443,4,calibrate +785,4,calibrate +2997,3,calibrate +694,1,calibrate +215,3,calibrate +2214,2,calibrate +3343,2,calibrate +2814,3,calibrate +2552,3,calibrate +1819,3,calibrate +3422,2,calibrate +207,4,calibrate +512,2,calibrate +2631,3,calibrate +462,1,calibrate +1677,4,calibrate +682,4,calibrate +2285,3,calibrate +3585,1,calibrate +3061,1,calibrate +1628,4,calibrate +1974,3,calibrate +3536,1,calibrate +3756,4,calibrate +2186,2,calibrate +230,1,calibrate +3141,2,calibrate +2449,3,calibrate +1275,1,calibrate +2053,3,calibrate +359,2,calibrate +2096,1,calibrate +3607,2,calibrate +1446,4,calibrate +747,3,calibrate +3262,4,calibrate +3691,1,calibrate +2267,4,calibrate +1093,2,calibrate +48,1,calibrate +514,2,calibrate +1559,2,calibrate +2430,3,calibrate +1638,2,calibrate +381,2,calibrate +515,2,calibrate +2593,2,calibrate +3030,3,calibrate +465,1,calibrate +3192,1,calibrate +1327,2,calibrate +2797,2,calibrate +545,2,calibrate +3322,3,calibrate +3497,4,calibrate +3406,2,calibrate +16,3,calibrate +3144,2,calibrate +1274,4,calibrate +666,4,calibrate +3872,2,calibrate +878,3,calibrate +2178,1,calibrate +4085,2,calibrate +3386,1,calibrate +3520,1,calibrate +1867,1,calibrate +1953,4,calibrate +696,4,calibrate +2037,3,calibrate +3337,1,calibrate +3691,4,calibrate +2687,4,calibrate +2384,3,calibrate +1296,4,calibrate +39,4,calibrate +2334,2,calibrate +2463,3,calibrate +2067,3,calibrate +2455,4,calibrate +2929,3,calibrate +1023,3,calibrate +2626,2,calibrate +3192,4,calibrate +761,2,calibrate +1539,4,calibrate +3014,3,calibrate +3488,2,calibrate +232,3,calibrate +366,3,calibrate +1969,2,calibrate +2485,4,calibrate +2315,1,calibrate +3530,4,calibrate +1702,3,calibrate +3480,3,calibrate +2740,1,calibrate +791,2,calibrate +3127,1,calibrate +3044,3,calibrate +1653,3,calibrate +3256,2,calibrate +262,3,calibrate +437,4,calibrate +213,3,calibrate +650,4,calibrate +2253,3,calibrate +1258,3,calibrate +862,3,calibrate +996,3,calibrate +297,2,calibrate +643,1,calibrate +1075,3,calibrate +1209,3,calibrate +813,3,calibrate +2283,3,calibrate +72,4,calibrate +976,2,calibrate +843,3,calibrate +3279,3,calibrate +1359,4,calibrate +1443,3,calibrate +11,2,calibrate +2701,4,calibrate +3309,3,calibrate +3047,3,calibrate +1219,2,calibrate +3655,2,calibrate +2997,2,calibrate +2914,4,calibrate +2518,4,calibrate +215,2,calibrate +2214,1,calibrate +3343,1,calibrate +1127,4,calibrate +1819,2,calibrate +3422,1,calibrate +3127,4,calibrate +824,2,calibrate +1170,1,calibrate +512,1,calibrate +470,4,calibrate +3635,1,calibrate +1291,4,calibrate +854,2,calibrate +2153,4,calibrate +3756,3,calibrate +676,1,calibrate +1800,2,calibrate +3141,1,calibrate +2449,2,calibrate +359,1,calibrate +622,2,calibrate +1405,2,calibrate +1446,3,calibrate +747,2,calibrate +2746,1,calibrate +2267,3,calibrate +1093,1,calibrate +2217,2,calibrate +3221,1,calibrate +2134,4,calibrate +2430,2,calibrate +2564,2,calibrate +515,1,calibrate +694,3,calibrate +2593,1,calibrate +3030,2,calibrate +3942,4,calibrate +3422,4,calibrate +1811,1,calibrate +3851,1,calibrate +158,1,calibrate +545,1,calibrate +3322,2,calibrate +3718,2,calibrate +462,3,calibrate +3406,1,calibrate +3585,3,calibrate +3144,1,calibrate +3626,4,calibrate +3364,4,calibrate +3061,3,calibrate +3669,2,calibrate +1274,3,calibrate +3536,3,calibrate +2186,4,calibrate +230,3,calibrate +1275,3,calibrate +2878,2,calibrate +359,4,calibrate +3783,1,calibrate +3607,4,calibrate +2130,1,calibrate +1176,2,calibrate +3691,3,calibrate +3600,1,calibrate +1651,2,calibrate +2384,2,calibrate +39,3,calibrate +514,4,calibrate +1559,4,calibrate +344,1,calibrate +2463,2,calibrate +3205,1,calibrate +1638,4,calibrate +381,4,calibrate +2676,2,calibrate +515,4,calibrate +2593,4,calibrate +1023,2,calibrate +2626,1,calibrate +465,3,calibrate +1765,1,calibrate +811,2,calibrate +3192,3,calibrate +1327,4,calibrate +4018,2,calibrate +761,1,calibrate +3014,2,calibrate +2797,4,calibrate +366,2,calibrate +1969,1,calibrate +545,4,calibrate +2790,1,calibrate +3406,4,calibrate +3144,4,calibrate +791,1,calibrate +3440,2,calibrate +3044,2,calibrate +1653,2,calibrate +3872,4,calibrate +2178,3,calibrate +871,2,calibrate +4085,4,calibrate +213,2,calibrate +3386,3,calibrate +1258,2,calibrate +996,2,calibrate +1867,3,calibrate +1,2,calibrate +297,1,calibrate +3470,2,calibrate +3337,3,calibrate +1209,2,calibrate +906,1,calibrate +293,2,calibrate +2334,4,calibrate +3500,2,calibrate +3846,1,calibrate +3154,2,calibrate +3279,2,calibrate +2406,1,calibrate +2626,4,calibrate +11,1,calibrate +3309,2,calibrate +1403,2,calibrate +3488,4,calibrate +2744,1,calibrate +1219,1,calibrate +3655,1,calibrate +1969,4,calibrate +2914,3,calibrate +2740,3,calibrate diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index a6f73b2..e7b30a6 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -4,7 +4,7 @@ num_workers: 0 use_existing_split: false target: "eir" stratify: true -calib_frac: 0.0 +calib_frac: 0.1 # model width: 256 diff --git a/src/estimint/v2/data/preprocess.py b/src/estimint/v2/data/preprocess.py index e929abc..1958ef3 100644 --- a/src/estimint/v2/data/preprocess.py +++ b/src/estimint/v2/data/preprocess.py @@ -19,7 +19,7 @@ class PreparedData: val_data: list test_data: list input_size: int - scaler: StandardScaler + feature_scaler: StandardScaler target_scaler: StandardScaler calib_data: list = field(default_factory=list) train_param_sims: set[tuple[int, int]] = field(default_factory=set) @@ -411,7 +411,7 @@ def prepare_data(df: pd.DataFrame, cfg: DictConfig, calib_frac: float = 0.0) -> test_data=test_data, calib_data=calib_data, input_size=len(FEATURES_BASE), - scaler=scaler, + feature_scaler=scaler, target_scaler=target_scaler, train_param_sims=split_ps.train, val_param_sims=split_ps.val, diff --git a/src/estimint/v2/eval/metrics.py b/src/estimint/v2/eval/metrics.py index a60b456..8a5ad15 100644 --- a/src/estimint/v2/eval/metrics.py +++ b/src/estimint/v2/eval/metrics.py @@ -33,8 +33,8 @@ def get_preds_targets(model_bundle, data_loader: DataLoader) -> tuple[np.ndarray preds = model_bundle.predict(batch["x_raw"]) all_preds.append(preds) all_targets.append(batch["y_raw"]) - all_preds = np.concatenate(all_preds, axis=0) - all_targets = np.concatenate(all_targets, axis=0) + all_preds = np.concat(all_preds, axis=0) + all_targets = np.concat(all_targets, axis=0) return all_preds, all_targets diff --git a/src/estimint/v2/models/rqs.py b/src/estimint/v2/models/rqs.py index 21bb6f6..2af233f 100644 --- a/src/estimint/v2/models/rqs.py +++ b/src/estimint/v2/models/rqs.py @@ -44,17 +44,42 @@ def _forward(models: list[ConditionalRQS], context: jnp.ndarray, quantile: float return [model.quantile(context, quantile) for model in models] class RQSBundle: - def __init__(self, models: list[ConditionalRQS], scaler_x: StandardScaler, scaler_y: StandardScaler, features: list[str]): + def __init__(self, models: list[ConditionalRQS], feature_scaler: StandardScaler, target_scaler: StandardScaler, features: list[str]): self.models = models - self.scaler_x = scaler_x - self.scaler_y = scaler_y + self.feature_scaler = feature_scaler + self.target_scaler = target_scaler self.features = features self.conformal = {} # alpha -> offset Q (fit on calibration set) def _quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: - context = jnp.array(self.scaler_x.transform(X_raw)) + context = jnp.array(self.feature_scaler.transform(X_raw)) y0 = np.mean(_forward(self.models, context, quantile), axis=0) - return np.maximum(0, np.power(10, self.scaler_y.inverse_transform(y0))) # return in original scale + return np.maximum(0, np.power(10, self.target_scaler.inverse_transform(y0))) + + def predict(self, X_raw: np.ndarray) -> np.ndarray: + return self._quantile(X_raw, 0.5) # median prediction + + def quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: + return self._quantile(X_raw, quantile) + + def interval(self, X_raw: np.ndarray, alpha: float = 0.10) -> tuple[np.ndarray, np.ndarray]: + """Conformal (1-alpha) band with guaranteed coverage on calibration set. Returns (lower, upper) bounds.""" + lower = self._quantile(X_raw, alpha / 2) + upper = self._quantile(X_raw, 1 - alpha / 2) + Q = self.conformal.get(alpha, 0.0) + return np.maximum(0, lower - Q), upper + Q + +def conformal_offset(lower: np.ndarray, upper: np.ndarray, y_true: np.ndarray, alpha: float = 0.10) -> float: + """Split-conformal (CQR, Romano 2019) width correction on a HELD-OUT split. + + Returns offset Q so that widening to [lo-Q, hi+Q] gives >= (1-alpha) + marginal coverage. Fit this on the CALIB split (disjoint from the val split + used for early stopping) so the guarantee is honest. + """ + scores = np.maximum(lower - y_true, y_true - upper) + n = len(scores) + k = np.ceil((n + 1) * (1 - alpha)).astype(int) + return float(np.sort(scores)[k - 1]) def rqs_loss(model, X, y0, w): """ diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index cbfa07c..809cb89 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -24,7 +24,7 @@ from estimint.v2.eval.metrics import compute_metrics from typing import Callable from jaxtyping import Array -from .models.rqs import ConditionalRQS, rqs_loss +from .models.rqs import ConditionalRQS, rqs_loss, RQSBundle, conformal_offset logging.getLogger("absl").setLevel(logging.WARNING) log = logging.getLogger(__name__) @@ -118,8 +118,8 @@ def train_umnn(cfg: DictConfig, prepared_data: PreparedData) -> UMNNBundle: log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") model = train_model(model, cfg, prepared_data, umnn_loss) models.append(model) - # TODO: unsure if need to ensemble. can probs use dropout instead - umnn_bundle = UMNNBundle(models, prepared_data.scaler, FEATURES_BASE) + # TODO: unsure if need to ensemble + umnn_bundle = UMNNBundle(models, prepared_data.feature_scaler, FEATURES_BASE) # ------------ test evaluation ---------------- umnn_bundle.set_models_to_eval() @@ -157,8 +157,69 @@ def train_rqs(cfg: DictConfig, prepared_data: PreparedData): log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") model = train_model(model, cfg, prepared_data, rqs_loss, use_standardized_y=True) models.append(model) + rqs_bundle = RQSBundle(models, prepared_data.feature_scaler, prepared_data.target_scaler, FEATURES_BASE) - return models + # ------------ calibration ------------------- + calib_loader = make_loader( + data=prepared_data.calib_data, + batch_size=len(prepared_data.calib_data), # load all at once + seed=cfg.seed, + shuffle=False, + num_workers=cfg.num_workers, + drop_remainder=True, + ) + for batch in calib_loader: + calib_x_raw, calib_y_raw = batch["x_raw"], batch["y_raw"] + lower, upper = rqs_bundle.quantile(calib_x_raw, 0.05), rqs_bundle.quantile(calib_x_raw, 0.95) + rqs_bundle.conformal[0.10] = conformal_offset(lower, upper, calib_y_raw, alpha=0.10) + + # ------------ test evaluation ---------------- + test_loader = make_loader( + data=prepared_data.test_data, + batch_size=cfg.batch_size, + seed=cfg.seed, + shuffle=False, + num_workers=cfg.num_workers, + drop_remainder=True, + ) + metrics = compute_metrics(rqs_bundle, test_loader) + log.info(f"test R2={metrics.r2:.4f} RMSE={metrics.rmse:.2f} MAE={metrics.mae:.2f} MSE={metrics.mse:.2f} Bias={metrics.bias:.2f}") + if cfg.use_wandb: + wandb.log({"test/r2": metrics.r2, "test/rmse": metrics.rmse, "test/mae": metrics.mae, "test/mse": metrics.mse, "test/bias": metrics.bias}) + + # confidence interval evaluation + test_loader = make_loader( + data=prepared_data.test_data, + batch_size=len(prepared_data.test_data), # load all at once + seed=cfg.seed, + shuffle=False, + num_workers=cfg.num_workers, + drop_remainder=True, + ) + for batch in test_loader: + test_x_raw, test_y_raw = batch["x_raw"], batch["y_raw"] + raw_lower, raw_upper = rqs_bundle.quantile(test_x_raw, 0.05), rqs_bundle.quantile(test_x_raw, 0.95) + conformal_lower, conformal_upper = rqs_bundle.interval(test_x_raw, alpha=0.10) + + coverage_raw = np.mean((test_y_raw >= raw_lower) & (test_y_raw <= raw_upper)) + coverage_conformal = np.mean((test_y_raw >= conformal_lower) & (test_y_raw <= conformal_upper)) + log.info(f"Raw 90% interval coverage: {coverage_raw:.4f}") + log.info(f"Conformal 90% interval coverage: {coverage_conformal:.4f}") + if cfg.use_wandb: + wandb.log({"test/raw_coverage": coverage_raw, "test/conformal_coverage": coverage_conformal}) + # ------------ checkpointing ---------------- + # TODO: check checkpointing works okay. and then be able to load the model back in for inference. For now, just save the model states. + ckpt_dir = (epath.Path(cfg.checkpoint_dir) / "rqs").resolve() + preservation_policy = ocp.training.preservation_policies.LatestN(n=1) + with ocp.training.Checkpointer(ckpt_dir, preservation_policy=preservation_policy) as ckptr: # type: ignore[arg-type] + ckptr.save_checkpointables( + 0, + { + "models": [nnx.state(model) for model in rqs_bundle.models], + }, + overwrite=True + ) + return rqs_bundle @hydra.main(version_base=None, config_path="conf", config_name="train_config") def main(cfg: DictConfig) -> None: From bfb2459d430e0e4d9216615a69778f0b5c995eed Mon Sep 17 00:00:00 2001 From: Anmol Date: Wed, 15 Jul 2026 12:54:48 +0000 Subject: [PATCH 10/32] Refactor training configuration and remove obsolete test file - Updated `calib_frac` in `train_config.yaml` from 0.1 to 0.06 for improved calibration. - Reduced `num_epochs` from 300 to 200 in `train_config.yaml` to optimize training duration. - Fixed checkpoint directory path in `train_config.yaml` by removing the extra slash. - Added a blank line in `train_step.py` for better code readability. - Deleted obsolete test file `test_estimint_nn.py` which was not integrated into the package. --- datasets/split.csv | 2162 ++++++++++++------------ src/estimint/v2/conf/train_config.yaml | 6 +- src/estimint/v2/training/train_step.py | 1 + test_estimint_nn.py | 857 ---------- 4 files changed, 1085 insertions(+), 1941 deletions(-) delete mode 100644 test_estimint_nn.py diff --git a/datasets/split.csv b/datasets/split.csv index d515375..442b441 100644 --- a/datasets/split.csv +++ b/datasets/split.csv @@ -9017,6 +9017,7 @@ parameter_index,simulation_index,split 84,4,validate 3856,4,validate 3291,3,validate +2203,4,validate 812,4,validate 247,3,validate 2246,2,validate @@ -9033,6 +9034,7 @@ parameter_index,simulation_index,split 3533,2,validate 1801,1,validate 885,2,validate +3059,2,validate 2663,2,validate 2842,4,validate 2446,4,validate @@ -9043,6 +9045,7 @@ parameter_index,simulation_index,split 3871,2,validate 2876,2,validate 3046,4,validate +11,4,validate 2481,3,validate 3392,3,validate 2693,2,validate @@ -9054,15 +9057,19 @@ parameter_index,simulation_index,split 1203,1,validate 3556,3,validate 857,1,validate +1728,2,validate 774,3,validate 1416,1,validate 3852,1,validate 2032,4,validate 1770,4,validate +3282,1,validate +3061,2,validate 1932,2,validate 67,3,validate 413,2,validate 1537,3,validate +3536,2,validate 1671,3,validate 979,4,validate 3453,4,validate @@ -9072,12 +9079,17 @@ parameter_index,simulation_index,split 3353,2,validate 2533,3,validate 2266,4,validate +747,4,validate +2746,3,validate 959,3,validate 2655,1,validate 2696,2,validate 1567,2,validate 2613,4,validate 1043,2,validate +48,2,validate +3221,3,validate +1651,1,validate 260,1,validate 3687,4,validate 3821,4,validate @@ -9090,17 +9102,21 @@ parameter_index,simulation_index,split 1203,4,validate 29,2,validate 1074,2,validate +3851,3,validate 857,4,validate +158,3,validate 941,3,validate 454,1,validate 2494,1,validate 1803,4,validate 3802,3,validate 3103,2,validate +3144,3,validate 2495,2,validate 3702,1,validate 3619,3,validate 3703,2,validate +2178,2,validate 1875,1,validate 1916,2,validate 525,2,validate @@ -9108,16 +9124,23 @@ parameter_index,simulation_index,split 2220,4,validate 1091,4,validate 526,3,validate +3470,1,validate +872,2,validate +2475,1,validate 2079,1,validate 393,4,validate +3337,2,validate 2779,3,validate 131,3,validate +3600,3,validate 2512,4,validate 3471,1,validate 639,1,validate 260,4,validate 2992,3,validate +293,1,validate 31,1,validate +3500,1,validate 210,3,validate 1947,2,validate 3071,3,validate @@ -9129,24 +9152,35 @@ parameter_index,simulation_index,split 2414,4,validate 415,4,validate 4051,1,validate +761,3,validate 2102,2,validate +3488,3,validate +232,4,validate +537,2,validate 275,2,validate +2315,2,validate 3918,1,validate 1399,3,validate 874,1,validate 3702,4,validate 2091,1,validate +1653,4,validate 3652,3,validate 658,4,validate 1087,1,validate 84,3,validate 3257,4,validate 1866,4,validate +43,1,validate +996,4,validate 2995,3,validate 3291,2,validate +3470,4,validate 2296,2,validate 2079,4,validate +468,1,validate 3682,3,validate +643,2,validate 2642,1,validate 2246,1,validate 2029,3,validate @@ -9158,18 +9192,23 @@ parameter_index,simulation_index,split 2459,1,validate 2063,1,validate 639,4,validate -1202,1,validate 2417,4,validate +1202,1,validate 2891,3,validate +293,4,validate 31,4,validate +3500,4,validate 4063,1,validate 885,1,validate +3059,1,validate 2842,3,validate +3279,4,validate 1451,3,validate 1189,3,validate 2709,4,validate 2876,1,validate 1664,3,validate +11,3,validate 2702,1,validate 4051,4,validate 2481,2,validate @@ -9185,8 +9224,10 @@ parameter_index,simulation_index,split 1778,2,validate 1516,2,validate 3556,2,validate +1728,1,validate 774,2,validate 908,2,validate +1254,1,validate 2032,3,validate 1770,3,validate 3769,2,validate @@ -9203,9 +9244,11 @@ parameter_index,simulation_index,split 3533,4,validate 1801,3,validate 2705,1,validate +2746,2,validate 885,4,validate 2663,4,validate 2613,3,validate +3221,2,validate 227,3,validate 3871,4,validate 2876,4,validate @@ -9222,7 +9265,9 @@ parameter_index,simulation_index,split 1203,3,validate 29,1,validate 1074,1,validate +3851,2,validate 857,3,validate +158,2,validate 941,2,validate 638,1,validate 1416,3,validate @@ -9231,10 +9276,13 @@ parameter_index,simulation_index,split 3365,1,validate 3802,2,validate 3103,1,validate +3282,3,validate +3061,4,validate 1932,4,validate 2495,1,validate 413,4,validate 3619,2,validate +3536,4,validate 1367,2,validate 3703,1,validate 668,1,validate @@ -9242,13 +9290,17 @@ parameter_index,simulation_index,split 1234,3,validate 2837,2,validate 3353,4,validate +872,1,validate 393,3,validate 3000,1,validate 1347,1,validate 2696,4,validate 1567,4,validate +3600,2,validate 131,2,validate 1043,4,validate +48,4,validate +1651,3,validate 260,3,validate 2992,2,validate 1735,2,validate @@ -9256,10 +9308,12 @@ parameter_index,simulation_index,split 1947,1,validate 261,4,validate 3071,2,validate +1165,2,validate 473,3,validate 1511,1,validate 161,2,validate 2118,4,validate +465,4,validate 2719,1,validate 3326,4,validate 1420,4,validate @@ -9268,16 +9322,20 @@ parameter_index,simulation_index,split 3581,1,validate 2324,1,validate 1666,1,validate +537,1,validate 671,1,validate 275,1,validate 454,3,validate 2494,3,validate 1399,2,validate 3094,4,validate +488,1,validate 3702,3,validate 658,3,validate 2354,1,validate +1958,1,validate 3703,4,validate +2178,4,validate 1875,3,validate 1916,4,validate 525,4,validate @@ -9285,15 +9343,22 @@ parameter_index,simulation_index,split 222,2,validate 2995,2,validate 3429,2,validate +3470,3,validate 2296,1,validate +872,4,validate +2475,3,validate 2079,3,validate 2559,2,validate 2163,2,validate 1034,2,validate +3337,4,validate +4029,2,validate 3592,1,validate 3471,3,validate 639,3,validate +293,3,validate 31,3,validate +3500,3,validate 1947,4,validate 2851,2,validate 2935,1,validate @@ -9306,6 +9371,7 @@ parameter_index,simulation_index,split 491,1,validate 224,2,validate 275,4,validate +2315,4,validate 3918,3,validate 3827,1,validate 874,3,validate @@ -9316,6 +9382,8 @@ parameter_index,simulation_index,split 338,1,validate 3291,4,validate 2296,4,validate +468,3,validate +643,4,validate 247,4,validate 2642,3,validate 2246,3,validate @@ -9328,9 +9396,11 @@ parameter_index,simulation_index,split 64,3,validate 1801,2,validate 885,3,validate +3059,3,validate 2876,3,validate 4042,1,validate 573,1,validate +1790,1,validate 1528,1,validate 2481,4,validate 1486,4,validate @@ -9341,12 +9411,16 @@ parameter_index,simulation_index,split 1778,4,validate 1516,4,validate 3556,4,validate +1728,3,validate 774,4,validate 908,4,validate 3852,2,validate +817,2,validate +1254,3,validate 3769,4,validate 1762,1,validate 338,4,validate +3282,2,validate 1200,4,validate 1671,4,validate 1367,1,validate @@ -9357,7 +9431,10 @@ parameter_index,simulation_index,split 2838,2,validate 748,1,validate 2705,3,validate +2746,4,validate 2655,2,validate +48,3,validate +3221,4,validate 1348,1,validate 91,1,validate 573,4,validate @@ -9366,6 +9443,7 @@ parameter_index,simulation_index,split 2606,2,validate 261,3,validate 2260,2,validate +1165,1,validate 473,2,validate 1299,1,validate 3518,3,validate @@ -9374,6 +9452,8 @@ parameter_index,simulation_index,split 1420,3,validate 29,3,validate 1074,3,validate +3851,4,validate +158,4,validate 941,4,validate 454,2,validate 1762,4,validate @@ -9388,52 +9468,71 @@ parameter_index,simulation_index,split 3703,3,validate 1875,2,validate 2837,4,validate +1401,2,validate 1613,1,validate 526,4,validate 222,1,validate 356,1,validate 3429,1,validate +872,3,validate +2475,2,validate 781,1,validate 3000,3,validate 2559,1,validate 2779,4,validate 1347,3,validate +3600,4,validate 131,4,validate +4029,1,validate 3471,2,validate 2039,1,validate 2992,4,validate 1735,4,validate 210,4,validate +2901,2,validate 1947,3,validate 1644,2,validate 3071,4,validate +1165,4,validate +203,1,validate 2718,2,validate 1981,1,validate 161,4,validate 2893,3,validate 2719,3,validate +761,4,validate 1624,1,validate 367,1,validate 3581,3,validate 105,1,validate 1150,1,validate +537,3,validate 671,3,validate 275,3,validate +2315,3,validate 1399,4,validate +488,3,validate 2091,2,validate 3652,4,validate +1958,3,validate 2042,2,validate +3645,1,validate 997,1,validate 1217,4,validate +43,2,validate 2995,4,validate 2296,3,validate +468,2,validate 3596,1,validate 3682,4,validate +643,3,validate +2205,1,validate 2642,2,validate 2559,4,validate 2163,4,validate 1034,4,validate 3592,3,validate +4029,4,validate 2459,2,validate 1202,2,validate 2072,1,validate @@ -9452,15 +9551,19 @@ parameter_index,simulation_index,split 3048,1,validate 54,2,validate 491,3,validate +2440,1,validate 138,1,validate 224,4,validate 3261,1,validate +2999,1,validate 3827,3,validate 2653,1,validate 392,2,validate 1778,3,validate 1516,3,validate 908,3,validate +817,1,validate +1254,2,validate 951,1,validate 3769,3,validate 338,3,validate @@ -9487,6 +9590,7 @@ parameter_index,simulation_index,split 3518,2,validate 920,3,validate 653,4,validate +2948,2,validate 1295,2,validate 3731,2,validate 3294,1,validate @@ -9500,27 +9604,34 @@ parameter_index,simulation_index,split 1246,1,validate 1762,3,validate 3365,2,validate +3282,4,validate 2454,1,validate 2321,2,validate 1367,3,validate +2929,1,validate 4058,1,validate 668,2,validate 1014,1,validate 1234,4,validate 2837,3,validate +1401,1,validate 2838,4,validate 1876,1,validate 748,3,validate 3000,2,validate 1347,2,validate 2655,4,validate +3480,1,validate +1651,4,validate 1348,3,validate 91,3,validate 1735,3,validate 2606,4,validate +2901,1,validate 303,2,validate 1644,1,validate 2260,4,validate +1165,3,validate 473,4,validate 1299,3,validate 1511,2,validate @@ -9536,10 +9647,13 @@ parameter_index,simulation_index,split 454,4,validate 2494,4,validate 3928,2,validate +488,2,validate 2354,2,validate +1958,2,validate 2488,2,validate 1875,4,validate 2042,1,validate +1401,4,validate 2305,2,validate 1613,3,validate 1217,3,validate @@ -9548,20 +9662,26 @@ parameter_index,simulation_index,split 2913,1,validate 356,3,validate 3429,3,validate +2475,4,validate 781,3,validate 2559,3,validate 3988,2,validate 3592,2,validate +4029,3,validate 3471,4,validate +2901,4,validate 3068,1,validate +470,2,validate 2851,3,validate 1415,1,validate 286,1,validate +203,3,validate 2935,2,validate 2718,4,validate 1981,3,validate 549,2,validate 2152,1,validate +1628,1,validate 2836,1,validate 712,1,validate 1624,3,validate @@ -9575,12 +9695,17 @@ parameter_index,simulation_index,split 1087,4,validate 1392,2,validate 2042,4,validate +3645,3,validate 997,3,validate 3729,2,validate +43,4,validate 2684,1,validate +468,4,validate 3596,3,validate -2642,4,validate +2205,3,validate 2246,4,validate +2642,4,validate +3942,2,validate 2459,4,validate 290,2,validate 3759,2,validate @@ -9592,28 +9717,36 @@ parameter_index,simulation_index,split 4063,4,validate 1415,4,validate 286,4,validate +3059,4,validate 3231,3,validate 1840,3,validate 270,1,validate +1790,2,validate 2702,4,validate 1528,2,validate 3048,3,validate 54,4,validate 920,2,validate 3132,2,validate +2440,3,validate 138,3,validate 653,3,validate +2948,1,validate +2999,3,validate 2474,1,validate 2653,3,validate 392,4,validate +1728,4,validate 900,1,validate 1771,2,validate +817,3,validate +1254,4,validate 951,3,validate 2766,1,validate 1813,4,validate 2321,1,validate -331,1,validate 1546,4,validate +331,1,validate 3975,2,validate 373,3,validate 2838,3,validate @@ -9630,10 +9763,12 @@ parameter_index,simulation_index,split 270,4,validate 2606,3,validate 303,1,validate +437,1,validate 2260,3,validate 1299,2,validate 1003,3,validate 3518,4,validate +2948,4,validate 3814,2,validate 1295,4,validate 3294,3,validate @@ -9658,6 +9793,7 @@ parameter_index,simulation_index,split 1014,3,validate 3225,1,validate 1360,2,validate +1401,3,validate 2305,1,validate 1613,2,validate 356,2,validate @@ -9668,13 +9804,17 @@ parameter_index,simulation_index,split 1347,4,validate 3988,1,validate 2039,2,validate +2901,3,validate 303,4,validate 732,1,validate 1644,3,validate +470,1,validate 1990,2,validate +203,2,validate 1511,4,validate 549,1,validate 2761,1,validate +2203,2,validate 3806,1,validate 2719,4,validate 812,2,validate @@ -9689,22 +9829,29 @@ parameter_index,simulation_index,split 2324,4,validate 1150,2,validate 1666,4,validate +537,4,validate 671,4,validate 1837,2,validate 3312,1,validate +488,4,validate 2091,3,validate 3787,1,validate 2354,4,validate +1958,4,validate 1392,1,validate 2042,3,validate 135,1,validate +3645,2,validate 997,2,validate 3729,1,validate 2305,4,validate +43,3,validate 1605,1,validate 2517,3,validate 86,1,validate 3596,2,validate +2205,2,validate +3942,1,validate 1344,2,validate 2947,1,validate 3592,4,validate @@ -9722,10 +9869,12 @@ parameter_index,simulation_index,split 2935,4,validate 67,1,validate 2152,3,validate +1628,3,validate 3231,2,validate 1840,2,validate 1537,1,validate 845,2,validate +1974,2,validate 2702,3,validate 2836,3,validate 712,3,validate @@ -9733,10 +9882,12 @@ parameter_index,simulation_index,split 54,3,validate 491,4,validate 2399,1,validate +2440,2,validate 3132,1,validate 138,2,validate 3261,2,validate 2266,2,validate +2999,2,validate 2004,2,validate 3827,4,validate 2653,2,validate @@ -9761,12 +9912,14 @@ parameter_index,simulation_index,split 2368,4,validate 1194,2,validate 3971,3,validate +2797,1,validate 2022,4,validate 3580,1,validate 3051,2,validate 1357,1,validate 270,3,validate 1570,1,validate +1790,4,validate 179,1,validate 1528,4,validate 1003,2,validate @@ -9775,6 +9928,7 @@ parameter_index,simulation_index,split 1091,2,validate 3132,4,validate 829,2,validate +2948,3,validate 3294,2,validate 3731,3,validate 2474,3,validate @@ -9791,6 +9945,7 @@ parameter_index,simulation_index,split 2321,3,validate 1367,4,validate 4058,2,validate +2929,2,validate 668,3,validate 3975,4,validate 1410,2,validate @@ -9798,8 +9953,11 @@ parameter_index,simulation_index,split 19,2,validate 1360,1,validate 103,1,validate +3488,1,validate +232,2,validate 1876,2,validate 748,4,validate +3480,2,validate 49,2,validate 3955,3,validate 3826,1,validate @@ -9807,18 +9965,22 @@ parameter_index,simulation_index,split 91,4,validate 3693,2,validate 303,3,validate +437,3,validate 1990,1,validate 1299,4,validate 84,1,validate 1511,3,validate 3510,2,validate 3856,1,validate +862,2,validate 3814,4,validate +2203,1,validate 812,1,validate 3327,2,validate 1674,2,validate 2678,1,validate 2803,1,validate +2283,2,validate 2324,3,validate 1067,3,validate 1196,4,validate @@ -9844,15 +10006,19 @@ parameter_index,simulation_index,split 2039,4,validate 553,1,validate 732,3,validate +470,3,validate 2851,4,validate 1770,1,validate 1990,4,validate +203,4,validate 2935,3,validate 549,3,validate 2152,2,validate 2761,3,validate +1628,2,validate 3806,3,validate 2415,3,validate +1974,1,validate 845,1,validate 979,1,validate 712,2,validate @@ -9865,6 +10031,7 @@ parameter_index,simulation_index,split 2266,1,validate 2004,1,validate 3312,3,validate +747,1,validate 134,3,validate 480,2,validate 2613,1,validate @@ -9873,17 +10040,20 @@ parameter_index,simulation_index,split 3687,1,validate 3821,1,validate 135,3,validate +3645,4,validate 997,4,validate 3729,3,validate 1605,3,validate 2684,2,validate 86,3,validate 3596,4,validate +2205,4,validate +3942,3,validate 2947,3,validate 644,1,validate 2847,1,validate -290,3,validate 3759,3,validate +290,3,validate 1456,1,validate 2072,4,validate 1194,1,validate @@ -9895,24 +10065,29 @@ parameter_index,simulation_index,split 849,2,validate 3231,4,validate 1840,4,validate +1974,4,validate 845,4,validate +1790,3,validate 1528,3,validate 1833,1,validate 3048,4,validate 2220,1,validate 1091,1,validate 2399,3,validate +2440,4,validate 3132,3,validate -829,1,validate 138,4,validate +829,1,validate 3261,4,validate 3389,3,validate +2999,4,validate 2004,4,validate 393,1,validate 830,2,validate 2653,4,validate 2512,1,validate 1771,3,validate +817,4,validate 951,4,validate 2766,2,validate 860,2,validate @@ -9920,17 +10095,21 @@ parameter_index,simulation_index,split 2414,1,validate 331,2,validate 2372,4,validate +465,2,validate 3975,3,validate 2980,3,validate 1410,1,validate 415,1,validate 19,1,validate +3192,2,validate 3326,2,validate 373,4,validate 2847,4,validate 1456,4,validate 1194,4,validate 20,2,validate +2797,3,validate +232,1,validate 3580,3,validate 1490,2,validate 99,2,validate @@ -9940,28 +10119,35 @@ parameter_index,simulation_index,split 3955,2,validate 1357,3,validate 3094,2,validate +1653,1,validate 3693,1,validate 658,1,validate 1570,3,validate +437,2,validate 179,3,validate 1003,4,validate 2565,2,validate 3257,1,validate 1866,1,validate 829,4,validate +862,1,validate +996,1,validate 3294,4,validate 1775,4,validate 2686,4,validate +2283,1,validate 2417,1,validate 1246,4,validate 1196,3,validate 2017,3,validate 2454,4,validate +3279,1,validate 3754,2,validate 3795,3,validate 1805,3,validate 2709,1,validate 4058,4,validate +2929,4,validate 1493,2,validate 1410,4,validate 1014,4,validate @@ -9973,6 +10159,7 @@ parameter_index,simulation_index,split 661,1,validate 3522,1,validate 132,2,validate +3480,4,validate 49,4,validate 3826,3,validate 216,1,validate @@ -9984,7 +10171,9 @@ parameter_index,simulation_index,split 1990,3,validate 3510,4,validate 3856,3,validate +862,4,validate 2761,2,validate +2203,3,validate 3806,2,validate 812,3,validate 2415,2,validate @@ -9995,6 +10184,7 @@ parameter_index,simulation_index,split 367,3,validate 2803,3,validate 105,3,validate +2283,4,validate 1150,3,validate 64,1,validate 3533,1,validate @@ -10019,14 +10209,18 @@ parameter_index,simulation_index,split 553,3,validate 3068,4,validate 849,1,validate +3061,1,validate 1932,1,validate 67,2,validate 2152,4,validate 413,1,validate +1628,4,validate 1537,2,validate 845,3,validate -1671,2,validate +3536,1,validate +1974,3,validate 979,3,validate +1671,2,validate 2836,4,validate 712,4,validate 2711,3,validate @@ -10037,11 +10231,13 @@ parameter_index,simulation_index,split 2266,3,validate 2004,3,validate 830,1,validate +747,3,validate 959,2,validate 2696,1,validate 1567,1,validate 480,4,validate 1043,1,validate +48,1,validate 3475,4,validate 3687,3,validate 3821,3,validate @@ -10050,20 +10246,25 @@ parameter_index,simulation_index,split 2684,4,validate 2118,1,validate 2372,3,validate +465,1,validate 2980,2,validate +3192,1,validate 3326,1,validate 2847,3,validate 1456,3,validate 1194,3,validate 20,1,validate +2797,2,validate 3971,4,validate 3580,2,validate 1803,3,validate 849,4,validate +3144,2,validate 1357,2,validate 3094,1,validate 1570,2,validate 179,2,validate +2178,1,validate 1916,1,validate 525,1,validate 2565,1,validate @@ -10074,6 +10275,7 @@ parameter_index,simulation_index,split 830,4,validate 2474,4,validate 1775,3,validate +3337,1,validate 2779,2,validate 2512,3,validate 2766,4,validate @@ -10085,42 +10287,56 @@ parameter_index,simulation_index,split 1805,2,validate 2414,3,validate 4058,3,validate +2929,3,validate 331,4,validate 1410,3,validate 415,3,validate 19,3,validate +3192,4,validate +761,2,validate 103,2,validate 2102,1,validate +3488,2,validate 20,4,validate +232,3,validate 1490,4,validate +2315,1,validate 99,4,validate +3480,3,validate 882,4,validate 49,3,validate 3955,4,validate 3389,1,validate 3826,2,validate +1653,3,validate 3652,2,validate 3693,3,validate +437,4,validate 84,2,validate 2565,4,validate 3257,3,validate 1866,3,validate 3510,3,validate 3856,2,validate +862,3,validate +996,3,validate 3291,1,validate 3682,2,validate +643,1,validate 247,1,validate 2029,2,validate 2678,2,validate 2812,2,validate 1421,2,validate 1159,2,validate +2283,3,validate 2417,3,validate 2891,2,validate 1067,4,validate 3928,4,validate 2842,2,validate 2446,2,validate +3279,3,validate 3754,4,validate 1451,2,validate 1189,2,validate @@ -10129,6 +10345,7 @@ parameter_index,simulation_index,split 1493,4,validate 1664,2,validate 3046,2,validate +11,2,validate 3225,4,validate 2481,1,validate 3392,1,validate @@ -10147,6 +10364,7 @@ parameter_index,simulation_index,split 774,1,validate 908,1,validate 732,4,validate +470,4,validate 2032,2,validate 1770,2,validate 3769,1,validate @@ -10163,9 +10381,12 @@ parameter_index,simulation_index,split 2533,1,validate 3312,4,validate 2183,4,validate +747,2,validate +2746,1,validate 2663,3,validate 3787,4,validate 2613,2,validate +3221,1,validate 227,2,validate 3871,3,validate 3475,3,validate @@ -10179,21 +10400,27 @@ parameter_index,simulation_index,split 3130,4,validate 1605,4,validate 86,4,validate +3942,4,validate 2947,4,validate 644,2,validate 1952,4,validate 1203,2,validate +3851,1,validate 857,2,validate +158,1,validate 941,1,validate 1416,2,validate 1803,2,validate 3802,1,validate 849,3,validate +3144,1,validate +3061,3,validate 1932,3,validate 67,4,validate 413,3,validate 3619,1,validate 1537,4,validate +3536,3,validate 1833,2,validate 3353,3,validate 2399,4,validate @@ -10205,9 +10432,11 @@ parameter_index,simulation_index,split 959,4,validate 2696,3,validate 1567,3,validate +3600,1,validate 131,1,validate 2512,2,validate 1043,3,validate +1651,2,validate 260,2,validate 2992,1,validate 1735,1,validate @@ -10220,33 +10449,43 @@ parameter_index,simulation_index,split 2118,3,validate 2414,2,validate 331,3,validate +465,3,validate 2980,4,validate 415,2,validate +3192,3,validate 3326,3,validate +761,1,validate 20,3,validate +2797,4,validate 3580,4,validate 1490,3,validate 2494,2,validate 99,3,validate 1399,1,validate +3144,4,validate 882,3,validate 1357,4,validate 3094,3,validate 3702,2,validate +1653,2,validate 3652,1,validate 658,2,validate 1570,4,validate 179,4,validate +2178,3,validate 1916,3,validate 525,3,validate 3257,2,validate 2565,3,validate 1866,2,validate 1217,1,validate +996,2,validate 2995,1,validate +3470,2,validate 2079,2,validate 3682,1,validate 2029,1,validate +3337,3,validate 2163,1,validate 1034,1,validate 2812,1,validate @@ -10255,9 +10494,12 @@ parameter_index,simulation_index,split 639,2,validate 2417,2,validate 2891,1,validate +293,2,validate 31,2,validate +3500,2,validate 2017,4,validate 2842,1,validate +3279,2,validate 3754,3,validate 1451,1,validate 2759,3,validate @@ -10265,11 +10507,13 @@ parameter_index,simulation_index,split 1805,4,validate 2709,2,validate 1664,1,validate +11,1,validate 3225,3,validate 1360,4,validate 4051,2,validate 103,4,validate 2102,3,validate +3488,4,validate 224,1,validate 661,2,validate 3918,2,validate @@ -10277,6 +10521,8 @@ parameter_index,simulation_index,split 874,2,validate 3826,4,validate 2132,3,test +2478,2,test +3256,4,test 3685,1,test 4039,4,test 3340,3,test @@ -10288,30 +10534,43 @@ parameter_index,simulation_index,split 2641,1,test 380,2,test 1983,1,test +297,4,test 3940,3,test +2895,2,test 3320,2,test 722,3,test 326,3,test 1371,3,test +3666,1,test 2712,2,test +622,1,test +976,4,test 1188,3,test 2014,1,test 2742,2,test -3222,1,test 94,2,test +3222,1,test 3005,3,test +2564,1,test 1872,2,test 3867,4,test 136,4,test +3655,4,test +3343,3,test +2214,3,test 2510,2,test 2081,4,test +1819,4,test 3768,2,test 3685,4,test +3718,1,test 1812,1,test +3635,3,test 2461,1,test 641,4,test 3373,3,test 2378,3,test +3585,2,test 2328,2,test 3931,1,test 1849,4,test @@ -10320,31 +10579,38 @@ parameter_index,simulation_index,split 26,1,test 3973,3,test 3670,2,test +676,3,test 2320,3,test 3486,1,test 626,2,test 1967,1,test +2449,4,test 4052,3,test 3749,2,test 796,4,test 493,3,test 705,2,test 3437,1,test +3833,1,test 2046,1,test +622,4,test 3395,4,test -1051,1,test 1488,2,test +1051,1,test 2829,1,test 1834,1,test 706,3,test 181,1,test 218,4,test 819,1,test +2564,4,test 1772,3,test 3072,1,test 3509,2,test +515,3,test 2077,1,test 2989,3,test +3030,4,test 1985,3,test 3547,1,test 594,3,test @@ -10353,6 +10619,7 @@ parameter_index,simulation_index,split 1549,3,test 2198,3,test 1802,3,test +3718,4,test 2544,2,test 283,3,test 2232,1,test @@ -10365,11 +10632,14 @@ parameter_index,simulation_index,split 3881,3,test 2665,4,test 2961,3,test +3569,2,test 971,3,test 3486,4,test 2312,2,test 3653,1,test +871,1,test 2179,3,test +3386,2,test 3916,2,test 2828,3,test 3437,4,test @@ -10380,6 +10650,7 @@ parameter_index,simulation_index,split 1521,2,test 2829,4,test 1996,3,test +2130,3,test 2645,3,test 2342,2,test 3903,4,test @@ -10388,6 +10659,7 @@ parameter_index,simulation_index,split 859,4,test 2596,3,test 1422,1,test +2334,3,test 1551,2,test 1289,2,test 294,2,test @@ -10398,6 +10670,7 @@ parameter_index,simulation_index,split 3105,1,test 1240,2,test 245,2,test +1023,4,test 1107,3,test 324,2,test 3056,1,test @@ -10411,6 +10684,9 @@ parameter_index,simulation_index,split 1786,3,test 2132,2,test 2874,1,test +3256,3,test +2478,1,test +262,4,test 2395,3,test 1221,1,test 4039,3,test @@ -10418,10 +10694,15 @@ parameter_index,simulation_index,split 3340,2,test 255,1,test 2295,1,test -1604,4,test +871,4,test 475,4,test +1604,4,test +213,4,test 2820,2,test +297,3,test 905,2,test +1209,4,test +813,4,test 510,3,test 722,2,test 3936,4,test @@ -10436,6 +10717,7 @@ parameter_index,simulation_index,split 3492,4,test 3005,2,test 186,4,test +3655,3,test 1353,3,test 3564,1,test 96,3,test @@ -10448,8 +10730,10 @@ parameter_index,simulation_index,split 521,2,test 3253,1,test 1862,1,test +1170,2,test 3685,3,test 4031,2,test +3635,2,test 2166,3,test 641,3,test 775,3,test @@ -10460,14 +10744,18 @@ parameter_index,simulation_index,split 380,4,test 1983,3,test 3670,1,test +676,2,test +2895,4,test 27,1,test 3320,4,test 3749,1,test 889,2,test 493,2,test +3666,3,test 1497,1,test 2712,4,test 4012,2,test +622,3,test 4096,1,test 706,2,test 444,1,test @@ -10475,7 +10763,9 @@ parameter_index,simulation_index,split 2742,4,test 94,4,test 3222,3,test +2564,3,test 1872,4,test +786,2,test 2989,2,test 2510,4,test 603,2,test @@ -10485,9 +10775,11 @@ parameter_index,simulation_index,split 1549,2,test 3548,1,test 3768,4,test +3718,3,test 2544,1,test 2461,3,test 4064,2,test +3585,4,test 2411,2,test 4014,1,test 1846,1,test @@ -10507,11 +10799,13 @@ parameter_index,simulation_index,split 485,1,test 705,4,test 3437,3,test +3833,3,test 2046,3,test 1051,3,test 1488,4,test 2829,3,test 1834,3,test +2130,2,test 2342,1,test 181,3,test 2646,3,test @@ -10533,21 +10827,27 @@ parameter_index,simulation_index,split 678,4,test 2544,4,test 3448,2,test +3186,2,test 2232,3,test 841,3,test 4014,4,test 2924,1,test 3349,1,test +3569,4,test 2395,2,test 1696,1,test 2312,4,test 3653,3,test +93,1,test +871,3,test 3999,2,test +3386,4,test 2820,1,test 476,4,test 172,1,test 905,1,test 4078,2,test +306,1,test 1521,4,test 2342,4,test 1168,2,test @@ -10582,6 +10882,7 @@ parameter_index,simulation_index,split 612,3,test 2132,4,test 521,1,test +2478,3,test 1221,3,test 3516,1,test 3340,4,test @@ -10592,9 +10893,11 @@ parameter_index,simulation_index,split 2641,2,test 947,1,test 905,4,test +2895,3,test 722,4,test 889,1,test 1371,4,test +3666,2,test 4012,1,test 2014,2,test 2573,2,test @@ -10602,19 +10905,24 @@ parameter_index,simulation_index,split 94,3,test 3222,2,test 3005,4,test +786,1,test 3435,2,test 3564,3,test 2390,1,test 3302,3,test +3343,4,test +2214,4,test 308,4,test 603,1,test 3253,3,test 3768,3,test 1862,3,test +1170,4,test 1812,2,test 4031,4,test -3549,1,test +3635,4,test 2461,2,test +3549,1,test 3373,4,test 2378,4,test 3416,2,test @@ -10623,10 +10931,12 @@ parameter_index,simulation_index,split 26,2,test 3670,3,test 1763,1,test +676,4,test 626,3,test 3749,3,test 889,4,test 493,4,test +3833,2,test 4012,4,test 1709,2,test 1051,2,test @@ -10654,6 +10964,7 @@ parameter_index,simulation_index,split 3844,1,test 3448,1,test 4064,4,test +3186,1,test 2191,1,test 2411,4,test 4014,3,test @@ -10672,8 +10983,10 @@ parameter_index,simulation_index,split 2179,4,test 3916,3,test 485,3,test +831,2,test 2871,2,test 1996,4,test +2130,4,test 2342,3,test 1168,1,test 1297,2,test @@ -10695,11 +11008,13 @@ parameter_index,simulation_index,split 2111,3,test 324,3,test 2323,2,test +3015,1,test 3056,2,test 3622,4,test 2882,2,test 3927,2,test 3448,4,test +3186,4,test 3615,1,test 2924,3,test 3828,1,test @@ -10712,6 +11027,8 @@ parameter_index,simulation_index,split 1696,3,test 3087,2,test 255,2,test +785,2,test +93,3,test 3999,4,test 2820,3,test 3858,1,test @@ -10721,6 +11038,7 @@ parameter_index,simulation_index,split 1168,4,test 510,4,test 164,4,test +2855,2,test 1027,1,test 3201,1,test 589,4,test @@ -10747,18 +11065,21 @@ parameter_index,simulation_index,split 521,3,test 3253,2,test 1862,2,test +1170,3,test 3516,3,test 1213,1,test 4031,3,test 2166,4,test 775,4,test 1080,2,test +3812,1,test 3416,1,test 2641,4,test 2026,2,test 27,2,test 3150,2,test 889,3,test +3666,4,test 1497,2,test 4012,3,test 1709,1,test @@ -10772,6 +11093,7 @@ parameter_index,simulation_index,split 2573,4,test 1873,1,test 3222,4,test +786,3,test 3477,1,test 3215,1,test 3435,4,test @@ -10803,8 +11125,10 @@ parameter_index,simulation_index,split 1967,4,test 406,1,test 485,2,test +3833,4,test 2222,1,test 1709,4,test +831,1,test 2871,1,test 273,2,test 1051,4,test @@ -10812,13 +11136,16 @@ parameter_index,simulation_index,split 2351,2,test 1834,4,test 181,4,test +3346,1,test 1398,4,test 40,1,test +911,2,test 3347,2,test 2689,2,test 1956,2,test 565,2,test 1298,2,test +41,2,test 819,4,test 690,2,test 3031,3,test @@ -10834,25 +11161,32 @@ parameter_index,simulation_index,split 3927,1,test 3844,3,test 3448,3,test +3186,3,test 2191,3,test 3878,1,test 2924,2,test 667,4,test 2841,4,test +1230,1,test 834,1,test 3349,2,test 3653,4,test 2438,1,test 3087,1,test +785,1,test +93,2,test 3999,3,test 1522,1,test 2871,4,test 172,2,test 4078,3,test +306,2,test 1168,3,test 1297,4,test +2855,1,test 1860,1,test 40,4,test +2335,2,test 944,2,test 124,3,test 1727,2,test @@ -10861,11 +11195,14 @@ parameter_index,simulation_index,split 3247,3,test 2073,1,test 3980,3,test +682,1,test +3197,2,test 3367,4,test 3105,4,test 1411,3,test 3847,3,test 237,1,test +3015,3,test 2323,4,test 3056,4,test 2490,1,test @@ -10877,10 +11214,12 @@ parameter_index,simulation_index,split 401,1,test 3615,3,test 1312,1,test +1446,1,test 2782,1,test 3828,3,test 834,4,test 2874,4,test +2478,4,test 2175,3,test 1221,4,test 3516,2,test @@ -10893,15 +11232,19 @@ parameter_index,simulation_index,split 3858,3,test 2026,1,test 3150,1,test +2855,4,test 1027,3,test 3201,3,test +3497,1,test 503,2,test 715,1,test +3364,2,test 2014,3,test 3576,1,test 1711,2,test 3097,3,test 2573,3,test +666,1,test 3618,3,test 187,3,test 3789,1,test @@ -10915,8 +11258,10 @@ parameter_index,simulation_index,split 3960,4,test 3082,1,test 3564,4,test +1953,1,test 2390,2,test 3302,4,test +1133,2,test 3253,4,test 2949,1,test 1862,4,test @@ -10925,13 +11270,14 @@ parameter_index,simulation_index,split 3549,2,test 1721,1,test 3895,1,test +3812,3,test 3416,3,test 1247,1,test 3628,2,test 1376,2,test 26,3,test -2026,4,test 2717,1,test +2026,4,test 1763,2,test 27,4,test 3150,4,test @@ -10942,16 +11288,19 @@ parameter_index,simulation_index,split 2351,1,test 4096,4,test 2189,2,test +2485,1,test 4005,2,test 1011,3,test 1398,3,test 444,4,test +911,1,test 3347,1,test 1527,4,test 1956,1,test 565,1,test 1873,3,test 1174,2,test +41,1,test 1957,2,test 566,2,test 2169,1,test @@ -10970,6 +11319,7 @@ parameter_index,simulation_index,split 3195,2,test 201,3,test 3844,2,test +72,1,test 2191,2,test 1846,4,test 2716,3,test @@ -10986,23 +11336,31 @@ parameter_index,simulation_index,split 3916,4,test 485,4,test 2222,3,test +831,3,test 2871,3,test 273,4,test 2351,4,test +3346,3,test 2647,2,test 1390,2,test 40,3,test +2335,1,test +911,4,test 944,1,test 2689,4,test 565,4,test 124,2,test 1298,4,test 1727,1,test +41,4,test 3247,2,test 690,4,test +3197,1,test 3460,2,test 3847,2,test +2153,1,test 2111,4,test +3015,2,test 2323,3,test 2932,4,test 2882,3,test @@ -11013,23 +11371,31 @@ parameter_index,simulation_index,split 3878,3,test 2924,4,test 3828,2,test +1230,3,test 834,3,test 2874,3,test -3349,4,test +2134,1,test 2175,2,test +3349,4,test 1696,4,test 1526,1,test 2438,3,test 3087,3,test +785,3,test +93,4,test 2996,1,test 2820,4,test 1343,1,test 1081,1,test 3858,2,test 172,4,test +306,4,test 4071,2,test +2855,3,test +2552,2,test 1860,3,test 1027,2,test +2335,4,test 3201,2,test 944,4,test 1727,4,test @@ -11037,7 +11403,10 @@ parameter_index,simulation_index,split 3330,3,test 2073,3,test 503,1,test +682,3,test +3197,4,test 2539,4,test +3364,1,test 1711,1,test 3097,2,test 4009,4,test @@ -11054,6 +11423,7 @@ parameter_index,simulation_index,split 2915,3,test 3960,3,test 3395,2,test +1133,1,test 401,3,test 1312,3,test 1742,2,test @@ -11065,6 +11435,7 @@ parameter_index,simulation_index,split 218,2,test 2950,1,test 1080,3,test +3812,2,test 1984,1,test 1164,2,test 947,4,test @@ -11072,10 +11443,12 @@ parameter_index,simulation_index,split 1376,1,test 2026,3,test 27,3,test +1327,1,test 3150,3,test 1497,3,test 1802,1,test 2189,1,test +3497,3,test 4005,1,test 715,3,test 1011,2,test @@ -11083,6 +11456,7 @@ parameter_index,simulation_index,split 3576,3,test 1711,4,test 1527,3,test +666,3,test 2961,1,test 2269,2,test 1873,2,test @@ -11090,15 +11464,18 @@ parameter_index,simulation_index,split 1957,1,test 566,1,test 1874,3,test +786,4,test 3477,2,test 3215,2,test 2003,4,test 1266,3,test 3344,3,test 3082,3,test -2390,4,test +1953,3,test 1216,2,test +2390,4,test 913,1,test +1133,4,test 2645,1,test 992,1,test 3810,3,test @@ -11108,8 +11485,10 @@ parameter_index,simulation_index,split 3195,1,test 201,2,test 3549,4,test +2334,1,test 1721,3,test 3895,3,test +2067,2,test 2716,2,test 1247,3,test 3628,4,test @@ -11124,13 +11503,19 @@ parameter_index,simulation_index,split 2222,2,test 273,3,test 2351,3,test +2485,3,test 4005,4,test +3346,2,test 2647,1,test 1786,1,test 1390,1,test +911,3,test 3347,3,test 1956,3,test 565,3,test +3256,1,test +262,2,test +41,3,test 4039,1,test 1957,4,test 566,4,test @@ -11139,16 +11524,20 @@ parameter_index,simulation_index,split 3460,1,test 1512,4,test 3893,4,test +813,2,test 2932,3,test 3936,2,test 2720,3,test 3195,4,test 3844,4,test +72,3,test +976,1,test 2191,4,test 318,1,test 3878,2,test 4057,4,test 2666,4,test +1230,2,test 1409,4,test 2313,2,test 1705,2,test @@ -11157,11 +11546,15 @@ parameter_index,simulation_index,split 3867,1,test 136,1,test 1522,2,test +306,3,test 3,2,test 4071,1,test 2647,4,test 2081,1,test +2552,1,test +1819,1,test 1860,2,test +2335,3,test 944,3,test 124,4,test 1727,3,test @@ -11169,12 +11562,17 @@ parameter_index,simulation_index,split 3247,4,test 2073,2,test 641,1,test +682,2,test +3197,3,test 3677,2,test 3460,4,test 1849,1,test 196,1,test 3847,4,test 1411,4,test +2153,3,test +3015,4,test +2449,1,test 188,2,test 796,1,test 3748,3,test @@ -11183,11 +11581,13 @@ parameter_index,simulation_index,split 401,2,test 3615,4,test 1312,2,test +1446,2,test 1742,1,test 318,4,test 2782,2,test 3828,4,test 1659,2,test +2134,3,test 2175,4,test 268,2,test 218,1,test @@ -11198,17 +11598,22 @@ parameter_index,simulation_index,split 947,3,test 1081,3,test 3858,4,test +3030,1,test 4071,4,test +2552,4,test 1027,4,test 3201,4,test +3497,2,test 503,3,test 715,2,test +3364,3,test 3576,2,test 1711,3,test 3097,4,test -3839,3,test +666,2,test 2665,1,test 2269,1,test +3839,3,test 3618,4,test 187,4,test 3789,2,test @@ -11218,6 +11623,8 @@ parameter_index,simulation_index,split 1266,2,test 3344,2,test 3082,2,test +1953,2,test +1133,3,test 3824,1,test 1742,4,test 697,3,test @@ -11229,6 +11636,8 @@ parameter_index,simulation_index,split 1213,4,test 2950,3,test 3895,2,test +2067,1,test +3812,4,test 1905,2,test 1984,3,test 1247,2,test @@ -11237,10 +11646,13 @@ parameter_index,simulation_index,split 1376,3,test 202,1,test 2717,2,test +1023,1,test +1327,3,test 1935,2,test 1673,2,test 544,2,test 2880,1,test +2485,2,test 2189,3,test 4005,3,test 1011,4,test @@ -11248,6 +11660,7 @@ parameter_index,simulation_index,split 3793,3,test 2269,4,test 1873,4,test +262,1,test 1174,3,test 1520,2,test 1957,3,test @@ -11257,8 +11670,11 @@ parameter_index,simulation_index,split 3215,4,test 1604,1,test 475,1,test +213,1,test 1216,4,test 1512,3,test +1209,1,test +813,1,test 992,3,test 771,4,test 3936,1,test @@ -11267,6 +11683,8 @@ parameter_index,simulation_index,split 1288,1,test 201,4,test 3937,2,test +72,2,test +2067,4,test 2496,1,test 2716,4,test 4057,3,test @@ -11284,8 +11702,10 @@ parameter_index,simulation_index,split 406,4,test 2880,4,test 2222,4,test +831,4,test 3,1,test 3176,2,test +3346,4,test 1869,1,test 2647,3,test 1390,3,test @@ -11296,16 +11716,21 @@ parameter_index,simulation_index,split 3460,3,test 380,1,test 3940,2,test +2153,2,test +2895,1,test 3320,1,test 326,2,test 1371,2,test 2712,1,test 3927,4,test 451,2,test +976,3,test 318,3,test 1188,2,test 3878,4,test +1230,4,test 1659,1,test +2134,2,test 268,1,test 2313,4,test 2742,1,test @@ -11314,19 +11739,26 @@ parameter_index,simulation_index,split 94,1,test 2438,4,test 1872,1,test +785,4,test 2996,2,test 3867,3,test 136,3,test 1343,2,test 1522,4,test 3,4,test +3343,2,test +2214,2,test 2510,1,test 4071,3,test +2552,3,test +1819,3,test 1860,4,test 3768,1,test 3330,4,test 2073,4,test +682,4,test 3373,2,test +3585,1,test 3677,4,test 1849,3,test 196,3,test @@ -11335,6 +11767,7 @@ parameter_index,simulation_index,split 3973,2,test 2320,2,test 626,1,test +2449,3,test 2490,4,test 4052,2,test 188,4,test @@ -11344,6 +11777,7 @@ parameter_index,simulation_index,split 1488,1,test 401,4,test 1312,4,test +1446,4,test 1742,3,test 697,2,test 2300,1,test @@ -11360,7 +11794,10 @@ parameter_index,simulation_index,split 2330,1,test 1772,2,test 3509,1,test +515,2,test +3030,3,test 1985,2,test +1327,2,test 594,2,test 1935,1,test 1673,1,test @@ -11369,11 +11806,13 @@ parameter_index,simulation_index,split 2198,2,test 1802,2,test 283,2,test +3497,4,test 715,4,test 2015,2,test 3793,2,test 3576,4,test 496,2,test +666,4,test 2665,3,test 2269,3,test 2961,2,test @@ -11383,10 +11822,12 @@ parameter_index,simulation_index,split 3477,3,test 3215,3,test 617,4,test +3386,1,test 1266,4,test 2828,2,test 3344,4,test 3082,4,test +1953,4,test 476,1,test 913,2,test 3824,3,test @@ -11399,10 +11840,12 @@ parameter_index,simulation_index,split 2949,4,test 859,3,test 2596,2,test +2334,2,test 3937,1,test 1721,4,test 3895,4,test 1551,1,test +2067,3,test 1289,1,test 1247,4,test 1418,2,test @@ -11411,6 +11854,7 @@ parameter_index,simulation_index,split 2717,4,test 1543,2,test 1240,1,test +1023,3,test 498,1,test 1107,2,test 1673,4,test @@ -11420,12 +11864,15 @@ parameter_index,simulation_index,split 1186,2,test 3622,2,test 3176,1,test +2485,4,test 4047,2,test 183,3,test 1786,2,test 2132,1,test 3347,4,test 1956,4,test +3256,2,test +262,3,test 1390,4,test 4039,2,test 3340,1,test @@ -11434,7 +11881,11 @@ parameter_index,simulation_index,split 2732,1,test 1604,3,test 475,3,test +213,3,test +297,2,test 3940,1,test +1209,3,test +813,3,test 722,1,test 326,1,test 3936,3,test @@ -11442,6 +11893,8 @@ parameter_index,simulation_index,split 2720,4,test 1288,3,test 589,2,test +72,4,test +976,2,test 1188,1,test 2496,3,test 2313,3,test @@ -11453,12 +11906,18 @@ parameter_index,simulation_index,split 3867,2,test 136,2,test 1522,3,test +3655,2,test 3,3,test 3176,4,test +3343,1,test +2214,1,test 1869,3,test 2081,2,test +1819,2,test +1170,1,test 3685,2,test 4031,1,test +3635,1,test 641,2,test 3373,1,test 775,2,test @@ -11471,33 +11930,45 @@ parameter_index,simulation_index,split 196,2,test 3940,4,test 3973,1,test +2153,4,test +676,1,test +2449,2,test 3320,3,test 326,4,test 493,1,test 2712,3,test 451,4,test +622,2,test +1446,3,test 706,1,test 1188,4,test 1659,3,test +2134,4,test 268,3,test 2742,3,test 1526,4,test +2564,2,test 1872,3,test 2996,4,test 1343,4,test 1081,4,test +515,1,test 2989,1,test +3030,2,test 2510,3,test 1985,1,test 594,1,test 2806,1,test 1549,1,test 2198,1,test +3718,2,test 283,1,test 503,4,test 4064,1,test +3585,3,test 2411,1,test 2015,1,test +3364,4,test 3931,2,test 496,1,test 3881,1,test @@ -11520,6 +11991,7 @@ parameter_index,simulation_index,split 3824,2,test 2829,2,test 1996,1,test +2130,1,test 181,2,test 697,4,test 2300,3,test @@ -11535,9 +12007,12 @@ parameter_index,simulation_index,split 1376,4,test 3072,2,test 3509,3,test +515,4,test +1023,2,test 1985,4,test 1107,1,test 374,1,test +1327,4,test 594,4,test 1935,3,test 1673,3,test @@ -11560,13 +12035,18 @@ parameter_index,simulation_index,split 1520,3,test 3653,2,test 1604,2,test +871,2,test 475,2,test +213,2,test +3386,3,test 2828,4,test +297,1,test 476,3,test 913,4,test 4078,1,test 1521,3,test 2645,4,test +1209,2,test 510,1,test 992,4,test 164,1,test @@ -11574,6 +12054,7 @@ parameter_index,simulation_index,split 2596,4,test 1422,2,test 589,1,test +2334,4,test 3937,3,test 1768,1,test 1551,3,test @@ -11588,6 +12069,7 @@ parameter_index,simulation_index,split 498,3,test 711,3,test 1186,4,test +3655,1,test 1353,1,test 3176,3,test 96,1,test @@ -11596,1280 +12078,798 @@ parameter_index,simulation_index,split 1566,1,test 1786,4,test 612,2,test +3534,3,calibrate 3127,3,calibrate 824,1,calibrate +2143,3,calibrate 1433,2,calibrate -2478,2,calibrate -3256,4,calibrate +1831,2,calibrate +1539,1,calibrate +1748,4,calibrate +106,4,calibrate +1395,2,calibrate +3039,2,calibrate +452,3,calibrate +1793,2,calibrate +787,2,calibrate +3530,1,calibrate 854,1,calibrate -2203,4,calibrate -297,4,calibrate -2895,2,calibrate -3666,1,calibrate +88,1,calibrate +2128,1,calibrate +843,1,calibrate +2192,4,calibrate +3438,3,calibrate +1610,2,calibrate +141,3,calibrate +1599,2,calibrate +1359,2,calibrate +2405,4,calibrate +1265,4,calibrate +1276,4,calibrate +1443,1,calibrate +292,1,calibrate +523,4,calibrate +512,4,calibrate +1337,1,calibrate +2249,3,calibrate +2701,2,calibrate +3309,1,calibrate 3362,4,calibrate -622,1,calibrate -976,4,calibrate +3780,4,calibrate +3047,1,calibrate +3981,3,calibrate +3678,2,calibrate +2568,3,calibrate +650,1,calibrate 1405,1,calibrate +2036,2,calibrate 3617,1,calibrate -3059,2,calibrate +2914,2,calibrate +1378,2,calibrate 2226,1,calibrate -2564,1,calibrate +3335,4,calibrate +3073,4,calibrate +1462,1,calibrate +322,1,calibrate +3127,2,calibrate +174,4,calibrate +3559,4,calibrate +3141,4,calibrate 1831,1,calibrate -11,4,calibrate +2096,3,calibrate +2252,3,calibrate +106,3,calibrate +1291,2,calibrate 3039,1,calibrate 1219,4,calibrate -3655,4,calibrate +934,2,calibrate 2997,4,calibrate +2253,4,calibrate +1793,1,calibrate +717,4,calibrate +2757,4,calibrate 694,2,calibrate +918,3,calibrate 215,4,calibrate -2214,3,calibrate -3343,3,calibrate +2192,3,calibrate +1093,4,calibrate +3092,3,calibrate +2404,2,calibrate +550,3,calibrate +3438,2,calibrate +3756,1,calibrate 2814,4,calibrate +1610,1,calibrate +2343,1,calibrate 1599,1,calibrate -1819,4,calibrate +1359,1,calibrate +1412,4,calibrate 3422,3,calibrate +3411,3,calibrate +1086,1,calibrate 824,4,calibrate -1728,2,calibrate +2405,3,calibrate +1265,3,calibrate +1997,1,calibrate +1276,3,calibrate +1758,3,calibrate 512,3,calibrate -3718,1,calibrate +523,3,calibrate 2249,2,calibrate +2701,1,calibrate 462,2,calibrate -3635,3,calibrate +2088,3,calibrate +3780,3,calibrate +3362,3,calibrate +3122,3,calibrate 3981,2,calibrate -3585,2,calibrate -3282,1,calibrate -3061,2,calibrate +1697,1,calibrate +557,1,calibrate +2568,2,calibrate +2172,2,calibrate +2914,1,calibrate +2518,1,calibrate +1378,1,calibrate 3669,1,calibrate +2267,1,calibrate 854,4,calibrate -3536,2,calibrate -676,3,calibrate +1127,1,calibrate +3335,3,calibrate +1096,4,calibrate +3073,3,calibrate +1693,3,calibrate +174,3,calibrate +4091,4,calibrate +1811,4,calibrate 1800,4,calibrate 230,2,calibrate +3559,3,calibrate 3141,3,calibrate -2449,4,calibrate 1275,2,calibrate +1443,4,calibrate +292,4,calibrate 359,3,calibrate +325,1,calibrate +1337,4,calibrate +1248,3,calibrate 2096,2,calibrate -3833,1,calibrate -622,4,calibrate +2252,2,calibrate +1291,1,calibrate +1929,1,calibrate +1249,4,calibrate 1405,4,calibrate -747,4,calibrate -2746,3,calibrate +934,1,calibrate +2997,3,calibrate +717,3,calibrate +694,1,calibrate +2757,3,calibrate 918,2,calibrate +215,3,calibrate 1093,3,calibrate 3092,2,calibrate +2404,1,calibrate +550,2,calibrate 2217,4,calibrate +322,4,calibrate 3438,1,calibrate -48,2,calibrate -3221,3,calibrate -1651,1,calibrate +1462,4,calibrate +2814,3,calibrate +1412,3,calibrate +3411,2,calibrate +3422,2,calibrate +207,4,calibrate +1758,2,calibrate 2430,4,calibrate +512,2,calibrate 523,2,calibrate -2564,4,calibrate +2631,3,calibrate +3520,3,calibrate +462,1,calibrate +1677,4,calibrate +2088,2,calibrate +3362,2,calibrate +2285,3,calibrate 3122,2,calibrate -515,3,calibrate +3783,4,calibrate +2172,1,calibrate 2593,3,calibrate -3030,4,calibrate +1096,3,calibrate 3073,2,calibrate 811,1,calibrate +1693,2,calibrate 4018,1,calibrate -3851,3,calibrate -158,3,calibrate -3718,4,calibrate +3756,4,calibrate +2186,2,calibrate +2343,4,calibrate +4091,3,calibrate +1381,1,calibrate +230,1,calibrate +1997,4,calibrate +3141,2,calibrate +1275,1,calibrate +2053,3,calibrate +344,4,calibrate +359,2,calibrate +1248,2,calibrate 545,3,calibrate +3288,2,calibrate 3322,4,calibrate +2096,1,calibrate +3205,4,calibrate 3406,3,calibrate -3144,3,calibrate +1249,3,calibrate +1697,4,calibrate +3607,2,calibrate +557,4,calibrate +3379,4,calibrate 2757,2,calibrate +1647,3,calibrate +3262,4,calibrate +3691,1,calibrate +2267,4,calibrate +1093,2,calibrate 3440,1,calibrate -3569,2,calibrate -2178,2,calibrate +3926,2,calibrate +1765,4,calibrate +1118,4,calibrate +2814,2,calibrate +1412,2,calibrate +1927,2,calibrate +514,2,calibrate +207,3,calibrate +1559,2,calibrate 2878,4,calibrate -871,1,calibrate -3386,2,calibrate +2430,3,calibrate +325,4,calibrate +2631,2,calibrate 3520,2,calibrate +1677,3,calibrate +2285,2,calibrate 1867,2,calibrate -3470,1,calibrate -872,2,calibrate -2475,1,calibrate -2130,3,calibrate -3337,2,calibrate +2790,4,calibrate +1616,2,calibrate +1638,2,calibrate +3626,1,calibrate +2661,2,calibrate +381,2,calibrate +1962,1,calibrate +1282,4,calibrate +2593,2,calibrate +1483,3,calibrate +791,4,calibrate 1176,4,calibrate -3600,3,calibrate +1829,2,calibrate +1096,2,calibrate +3432,1,calibrate +3170,1,calibrate +3797,4,calibrate +2186,1,calibrate 2384,4,calibrate -293,1,calibrate -2334,3,calibrate -3500,1,calibrate +104,4,calibrate +887,4,calibrate +2053,2,calibrate 3154,1,calibrate 2463,4,calibrate -1248,1,calibrate +1300,2,calibrate 3288,1,calibrate +1248,1,calibrate +545,2,calibrate +1049,2,calibrate +3322,3,calibrate +3406,2,calibrate +16,3,calibrate +3607,1,calibrate +3211,1,calibrate +3379,3,calibrate 2676,4,calibrate -1023,4,calibrate +1647,2,calibrate +1274,4,calibrate +3262,3,calibrate 2626,3,calibrate 3926,1,calibrate +906,4,calibrate 811,4,calibrate +1118,3,calibrate +3872,2,calibrate 4018,4,calibrate -761,3,calibrate +867,3,calibrate +878,3,calibrate 1927,1,calibrate +3120,4,calibrate +207,2,calibrate +514,1,calibrate 3014,4,calibrate 1403,1,calibrate -3488,3,calibrate -232,4,calibrate +2554,1,calibrate +734,4,calibrate +1559,1,calibrate +4085,2,calibrate +1517,4,calibrate 366,4,calibrate +3846,4,calibrate 1969,3,calibrate -537,2,calibrate -2315,2,calibrate -2790,3,calibrate -1616,1,calibrate -1702,4,calibrate +3520,1,calibrate +1677,2,calibrate +2633,1,calibrate +1867,1,calibrate +2790,3,calibrate +1616,1,calibrate +1702,4,calibrate +1638,1,calibrate +696,4,calibrate +673,2,calibrate 2661,1,calibrate +381,1,calibrate +685,4,calibrate 2740,2,calibrate +2037,3,calibrate +1282,3,calibrate 1483,2,calibrate 791,3,calibrate +3534,2,calibrate +2406,4,calibrate +3691,4,calibrate +2155,4,calibrate +2143,2,calibrate 3440,4,calibrate 1829,1,calibrate 1433,1,calibrate 3044,4,calibrate -1653,4,calibrate -3256,3,calibrate -2478,1,calibrate -262,4,calibrate -871,4,calibrate +3200,4,calibrate +3933,4,calibrate +3797,3,calibrate +2687,4,calibrate +2384,3,calibrate +1296,4,calibrate +1748,3,calibrate +39,4,calibrate +1395,1,calibrate +2744,4,calibrate +452,2,calibrate +2463,3,calibrate 1300,1,calibrate -213,4,calibrate -43,1,calibrate +1049,1,calibrate +787,1,calibrate 1258,4,calibrate -996,4,calibrate 1,4,calibrate -297,3,calibrate -3470,4,calibrate -468,1,calibrate -643,2,calibrate +16,2,calibrate +3963,4,calibrate +2914,4,calibrate +2455,4,calibrate +141,2,calibrate 1075,4,calibrate -1209,4,calibrate -813,4,calibrate +2626,2,calibrate +3432,4,calibrate 1118,2,calibrate -293,4,calibrate -3500,4,calibrate +3872,1,calibrate +3170,4,calibrate +878,2,calibrate +867,2,calibrate +1539,4,calibrate +3120,3,calibrate +3014,3,calibrate +734,3,calibrate +4085,1,calibrate +3678,1,calibrate +1517,3,calibrate 3846,3,calibrate +366,3,calibrate 3154,4,calibrate -3059,1,calibrate +1969,2,calibrate +2036,1,calibrate +3530,4,calibrate +88,4,calibrate 843,4,calibrate -3279,4,calibrate +1702,3,calibrate +2128,4,calibrate +685,3,calibrate +696,3,calibrate 673,1,calibrate +2740,1,calibrate +2037,2,calibrate +3211,4,calibrate +791,2,calibrate 3534,1,calibrate +3127,1,calibrate 2143,1,calibrate -11,3,calibrate +2155,3,calibrate +3044,3,calibrate +3933,3,calibrate +2687,3,calibrate +1296,3,calibrate 1748,2,calibrate +106,2,calibrate 3309,4,calibrate 1403,4,calibrate +2554,4,calibrate 3047,4,calibrate 2744,3,calibrate 1219,3,calibrate -3655,3,calibrate +452,1,calibrate +650,4,calibrate +2253,3,calibrate +1258,3,calibrate +3617,4,calibrate +2633,4,calibrate +2226,4,calibrate +2192,2,calibrate +3963,3,calibrate +2455,3,calibrate +141,1,calibrate +1075,3,calibrate 824,3,calibrate -1728,1,calibrate -1170,2,calibrate +2405,2,calibrate +1265,2,calibrate +1276,2,calibrate +1831,4,calibrate +1539,3,calibrate 2249,1,calibrate 3120,2,calibrate -1254,1,calibrate -3635,2,calibrate +3780,2,calibrate 3981,1,calibrate +2568,1,calibrate +3039,4,calibrate +1793,4,calibrate +3530,3,calibrate 854,3,calibrate -676,2,calibrate -2895,4,calibrate +843,3,calibrate +2128,3,calibrate +1702,2,calibrate +3335,2,calibrate +1610,4,calibrate +1599,4,calibrate +1359,4,calibrate +174,2,calibrate +1811,3,calibrate +1086,4,calibrate 1800,3,calibrate 3933,2,calibrate -3666,3,calibrate +3559,2,calibrate +1443,3,calibrate +292,3,calibrate +1337,3,calibrate +2252,1,calibrate +2701,4,calibrate 106,1,calibrate -622,3,calibrate +3309,3,calibrate +3047,3,calibrate +1219,2,calibrate +650,3,calibrate 1405,3,calibrate -2746,2,calibrate +2253,2,calibrate +2997,2,calibrate +717,2,calibrate +2036,4,calibrate 3617,3,calibrate +3669,4,calibrate +2518,4,calibrate +1378,4,calibrate 918,1,calibrate +2192,1,calibrate +215,2,calibrate 2226,3,calibrate 3092,1,calibrate +1127,4,calibrate 3963,2,calibrate -3221,2,calibrate +550,1,calibrate +1462,3,calibrate +322,3,calibrate +1075,2,calibrate +3422,1,calibrate +3411,1,calibrate +824,2,calibrate +3127,4,calibrate +2405,1,calibrate 1265,1,calibrate +1276,1,calibrate +1758,1,calibrate 523,1,calibrate -2564,3,calibrate +512,1,calibrate 1831,3,calibrate +2088,1,calibrate 3780,1,calibrate -786,2,calibrate +3362,1,calibrate 3122,1,calibrate +1291,4,calibrate 3039,3,calibrate +3783,3,calibrate +1929,4,calibrate +934,4,calibrate +1793,3,calibrate 694,4,calibrate +854,2,calibrate +843,2,calibrate 3335,1,calibrate 3073,1,calibrate +2404,4,calibrate +1693,1,calibrate +3438,4,calibrate +3756,3,calibrate +1610,3,calibrate +2343,3,calibrate 1599,3,calibrate +1359,3,calibrate +174,1,calibrate +4091,2,calibrate 1811,2,calibrate -3851,2,calibrate -158,2,calibrate +1086,3,calibrate +1800,2,calibrate +1997,3,calibrate +3559,1,calibrate +3141,1,calibrate +1443,2,calibrate 292,2,calibrate +344,3,calibrate +359,1,calibrate 1337,2,calibrate -3718,3,calibrate 2249,4,calibrate +2701,3,calibrate 462,4,calibrate +3205,3,calibrate +3047,2,calibrate 3981,4,calibrate -3585,4,calibrate -3282,3,calibrate -3061,4,calibrate +1697,3,calibrate +557,3,calibrate +2568,4,calibrate +2172,4,calibrate +1249,2,calibrate +2997,1,calibrate +1405,2,calibrate 717,1,calibrate 2757,1,calibrate 3669,3,calibrate +2518,3,calibrate +1378,3,calibrate +215,1,calibrate +2267,3,calibrate +1093,1,calibrate +1127,3,calibrate +1765,3,calibrate +2217,2,calibrate 322,2,calibrate -3536,4,calibrate +1462,2,calibrate +2814,1,calibrate +1412,1,calibrate +1381,4,calibrate 230,4,calibrate 1275,4,calibrate +2430,2,calibrate 2878,3,calibrate +325,3,calibrate +2631,1,calibrate 2096,4,calibrate -3833,3,calibrate -872,1,calibrate +2252,4,calibrate +2285,1,calibrate +1291,3,calibrate 3783,2,calibrate -2130,2,calibrate +1929,3,calibrate +934,3,calibrate +694,3,calibrate +2593,1,calibrate 1176,3,calibrate 918,4,calibrate 3092,4,calibrate -3600,2,calibrate -48,4,calibrate +1096,1,calibrate +2404,3,calibrate +550,4,calibrate +3756,2,calibrate 2343,2,calibrate -1651,3,calibrate +104,3,calibrate +4091,1,calibrate +3411,4,calibrate +1811,1,calibrate 1086,2,calibrate +3422,4,calibrate +1800,1,calibrate 1997,2,calibrate +887,3,calibrate +2053,1,calibrate +1758,4,calibrate 344,2,calibrate -1165,2,calibrate +545,1,calibrate +3322,2,calibrate +462,3,calibrate 3205,2,calibrate +2088,4,calibrate +3406,1,calibrate 3122,4,calibrate +3626,4,calibrate 1249,1,calibrate +1697,2,calibrate 557,2,calibrate +2172,3,calibrate +3379,2,calibrate 2676,3,calibrate -465,4,calibrate +1962,4,calibrate +1647,1,calibrate +3669,2,calibrate +3262,2,calibrate +2518,2,calibrate +1274,3,calibrate +2267,2,calibrate +1127,2,calibrate +906,3,calibrate 1765,2,calibrate +2217,1,calibrate 811,3,calibrate +1693,4,calibrate 4018,3,calibrate +2186,4,calibrate +1381,3,calibrate +230,3,calibrate +207,1,calibrate +1275,3,calibrate +2430,1,calibrate +2878,2,calibrate +359,4,calibrate 325,2,calibrate -537,1,calibrate -3186,2,calibrate +1248,4,calibrate +3288,4,calibrate +1677,1,calibrate 2790,2,calibrate +3783,1,calibrate 1929,2,calibrate +3607,4,calibrate +1282,2,calibrate 1483,1,calibrate -488,1,calibrate +1176,2,calibrate +2406,3,calibrate +3691,3,calibrate 3440,3,calibrate -3569,4,calibrate -1958,1,calibrate -2178,4,calibrate -93,1,calibrate -871,3,calibrate -3386,4,calibrate -3520,4,calibrate -1867,4,calibrate -1,3,calibrate -3470,3,calibrate -872,4,calibrate -2475,3,calibrate -306,1,calibrate -3379,1,calibrate -3337,4,calibrate -906,2,calibrate -1118,1,calibrate -4029,2,calibrate -1381,2,calibrate -293,3,calibrate -3500,3,calibrate -3846,2,calibrate -3154,3,calibrate -3288,3,calibrate -1282,1,calibrate -2406,2,calibrate -3926,3,calibrate -3797,1,calibrate -104,1,calibrate -1748,1,calibrate -1927,3,calibrate -887,1,calibrate -1403,3,calibrate -2744,2,calibrate -2315,4,calibrate -1616,3,calibrate -2661,3,calibrate -2740,4,calibrate -1962,2,calibrate -1483,4,calibrate -1829,3,calibrate -1433,3,calibrate -3432,2,calibrate -3170,2,calibrate -2478,3,calibrate -3120,1,calibrate -734,1,calibrate -1517,1,calibrate -1300,3,calibrate -685,1,calibrate -468,3,calibrate -643,4,calibrate -2895,3,calibrate -2155,1,calibrate -3933,1,calibrate -3200,1,calibrate -3666,2,calibrate -3617,2,calibrate -3059,3,calibrate -2226,2,calibrate -3963,1,calibrate -673,3,calibrate -3534,3,calibrate -2143,3,calibrate -1790,1,calibrate -1831,2,calibrate -1748,4,calibrate -786,1,calibrate -1395,2,calibrate -3039,2,calibrate -787,2,calibrate -88,1,calibrate -2128,1,calibrate -2214,4,calibrate -3343,4,calibrate -1599,2,calibrate -1728,3,calibrate -1170,4,calibrate -292,1,calibrate -512,4,calibrate -1337,1,calibrate -2249,3,calibrate -817,2,calibrate -1254,3,calibrate -3635,4,calibrate -3981,3,calibrate -3678,2,calibrate -3282,2,calibrate -322,1,calibrate -676,4,calibrate -3141,4,calibrate -2096,3,calibrate -3833,2,calibrate -106,3,calibrate -1793,1,calibrate -2746,4,calibrate -918,3,calibrate -1093,4,calibrate -3092,3,calibrate -3438,2,calibrate -48,3,calibrate -1610,1,calibrate -2343,1,calibrate -3221,4,calibrate -1086,1,calibrate -1265,3,calibrate -1997,1,calibrate -523,3,calibrate -1165,1,calibrate -3780,3,calibrate -3122,3,calibrate -557,1,calibrate -1378,1,calibrate -3335,3,calibrate -3073,3,calibrate -1811,4,calibrate -3851,4,calibrate -158,4,calibrate -292,4,calibrate -325,1,calibrate -1337,4,calibrate -3186,1,calibrate -1929,1,calibrate -934,1,calibrate -717,3,calibrate -2757,3,calibrate -2404,1,calibrate -322,4,calibrate -1401,2,calibrate -3520,3,calibrate -2088,2,calibrate -831,2,calibrate -872,3,calibrate -2475,2,calibrate -3783,4,calibrate -2172,1,calibrate -2130,4,calibrate -3600,4,calibrate -1693,2,calibrate -4029,1,calibrate -2343,4,calibrate -1381,1,calibrate -1997,4,calibrate -2901,2,calibrate -344,4,calibrate -1248,2,calibrate -3288,2,calibrate -1165,4,calibrate -3205,4,calibrate -203,1,calibrate -1249,3,calibrate -557,4,calibrate -3926,2,calibrate -1765,4,calibrate -1412,2,calibrate -761,4,calibrate -3015,1,calibrate -1927,2,calibrate -325,4,calibrate -537,3,calibrate -2315,3,calibrate -3186,4,calibrate -2790,4,calibrate -1616,2,calibrate -2661,2,calibrate -1962,1,calibrate -1483,3,calibrate -791,4,calibrate -488,3,calibrate -1829,2,calibrate -1096,2,calibrate -3432,1,calibrate -3170,1,calibrate -1958,3,calibrate -3645,1,calibrate -785,2,calibrate -93,3,calibrate -1300,2,calibrate -43,2,calibrate -468,2,calibrate -643,3,calibrate -2205,1,calibrate -3379,3,calibrate -1647,2,calibrate -906,4,calibrate -1118,3,calibrate -4029,4,calibrate -2855,2,calibrate -207,2,calibrate -3846,4,calibrate -1677,2,calibrate -673,2,calibrate -1282,3,calibrate -3534,2,calibrate -2406,4,calibrate -2143,2,calibrate -3797,3,calibrate -1748,3,calibrate -1395,1,calibrate -2744,4,calibrate -2440,1,calibrate -1049,1,calibrate -787,1,calibrate -2999,1,calibrate -3432,4,calibrate -1170,3,calibrate -3170,4,calibrate -867,2,calibrate -3120,3,calibrate -817,1,calibrate -1254,2,calibrate -734,3,calibrate -3678,1,calibrate -1517,3,calibrate -3812,1,calibrate -685,3,calibrate -2155,3,calibrate -3933,3,calibrate -3666,4,calibrate -106,2,calibrate -452,1,calibrate -3617,4,calibrate -2226,4,calibrate -3963,3,calibrate -141,1,calibrate -1265,2,calibrate -1831,4,calibrate -3780,2,calibrate -786,3,calibrate -3039,4,calibrate -2948,2,calibrate -2128,3,calibrate -3335,2,calibrate -1599,4,calibrate -1811,3,calibrate -292,3,calibrate -1337,3,calibrate -3282,4,calibrate -717,2,calibrate -3669,4,calibrate -2192,1,calibrate -322,3,calibrate -2929,1,calibrate -2405,1,calibrate -1276,1,calibrate -1401,1,calibrate -2088,1,calibrate -3833,4,calibrate -831,1,calibrate -3783,3,calibrate -1793,3,calibrate -3346,1,calibrate -3480,1,calibrate -1693,1,calibrate -3438,4,calibrate -1610,3,calibrate -1651,4,calibrate -2343,3,calibrate -911,2,calibrate -174,1,calibrate -1086,3,calibrate -1997,3,calibrate -3559,1,calibrate -2901,1,calibrate -344,3,calibrate -41,2,calibrate -1165,3,calibrate -3205,3,calibrate -1249,2,calibrate -557,3,calibrate -1378,3,calibrate -1765,3,calibrate -1462,2,calibrate -1412,1,calibrate -325,3,calibrate -3186,3,calibrate -1929,3,calibrate -934,3,calibrate -488,2,calibrate -1096,1,calibrate -2404,3,calibrate -1230,1,calibrate -1958,2,calibrate -4091,1,calibrate -785,1,calibrate -93,2,calibrate -1401,4,calibrate -2088,4,calibrate -2475,4,calibrate -1697,2,calibrate -2172,3,calibrate -306,2,calibrate -3379,2,calibrate -1647,1,calibrate -2518,2,calibrate -1127,2,calibrate -906,3,calibrate -1693,4,calibrate -4029,3,calibrate -2855,1,calibrate -2335,2,calibrate -1381,3,calibrate -207,1,calibrate -2901,4,calibrate -470,2,calibrate -1248,4,calibrate -3288,4,calibrate -1677,1,calibrate -682,1,calibrate -3197,2,calibrate -203,3,calibrate -1282,2,calibrate -1628,1,calibrate -2406,3,calibrate 3926,4,calibrate +3200,3,calibrate 3797,2,calibrate +2384,2,calibrate 104,2,calibrate -3015,3,calibrate 1927,4,calibrate +39,3,calibrate 887,2,calibrate +514,4,calibrate +1559,4,calibrate +344,1,calibrate +2463,2,calibrate +3322,1,calibrate +2631,4,calibrate +3520,4,calibrate +3205,1,calibrate +2285,4,calibrate +1867,4,calibrate +1,3,calibrate 1616,4,calibrate -1446,1,calibrate +1638,4,calibrate +3626,3,calibrate +16,1,calibrate 2661,4,calibrate +3379,1,calibrate +381,4,calibrate 1962,3,calibrate +2676,2,calibrate +1274,2,calibrate 3262,1,calibrate +2593,4,calibrate +2626,1,calibrate +906,2,calibrate +1765,1,calibrate 1829,4,calibrate 1433,4,calibrate 3432,3,calibrate +1118,1,calibrate +811,2,calibrate 3170,3,calibrate -2478,4,calibrate +4018,2,calibrate 867,1,calibrate -734,2,calibrate -3645,3,calibrate -1517,2,calibrate -1300,4,calibrate -43,4,calibrate -685,2,calibrate -468,4,calibrate -2205,3,calibrate -1647,4,calibrate -3942,2,calibrate -2155,2,calibrate -3200,2,calibrate -2855,4,calibrate -3497,1,calibrate -3059,4,calibrate -3626,2,calibrate -673,4,calibrate -3364,2,calibrate -1274,1,calibrate -3534,4,calibrate -2143,4,calibrate -666,1,calibrate -1790,2,calibrate -1395,3,calibrate -2440,3,calibrate -1049,3,calibrate -2948,1,calibrate -787,3,calibrate -1953,1,calibrate -88,2,calibrate -2128,2,calibrate -2999,3,calibrate -696,1,calibrate -1133,2,calibrate -3211,2,calibrate -1728,4,calibrate -2687,1,calibrate -867,4,calibrate -1296,1,calibrate -817,3,calibrate -1254,4,calibrate -39,1,calibrate -2554,2,calibrate -3678,3,calibrate -3812,3,calibrate -2633,2,calibrate -2455,1,calibrate -1539,1,calibrate -106,4,calibrate -452,3,calibrate -2485,1,calibrate -1793,2,calibrate -3530,1,calibrate -3438,3,calibrate -1610,2,calibrate -141,3,calibrate -911,1,calibrate -1265,4,calibrate -437,1,calibrate -41,1,calibrate -523,4,calibrate -3780,4,calibrate -650,1,calibrate -2036,2,calibrate -2948,4,calibrate -1378,2,calibrate -3335,4,calibrate -3073,4,calibrate -1462,1,calibrate -72,1,calibrate -934,2,calibrate -717,4,calibrate -2757,4,calibrate -2192,3,calibrate -2404,2,calibrate -1359,1,calibrate -2405,3,calibrate -1276,3,calibrate -1401,3,calibrate -2701,1,calibrate -2088,3,calibrate -831,3,calibrate -1697,1,calibrate -2568,2,calibrate -2172,2,calibrate -2914,1,calibrate -2518,1,calibrate -1127,1,calibrate -3346,3,calibrate -1693,3,calibrate -2335,1,calibrate -911,4,calibrate -174,3,calibrate -3559,3,calibrate -2901,3,calibrate -41,4,calibrate -470,1,calibrate -1248,3,calibrate -2252,2,calibrate -3197,1,calibrate -1291,1,calibrate -203,2,calibrate -1249,4,calibrate -2203,2,calibrate -550,2,calibrate -2153,1,calibrate -1462,4,calibrate -1412,3,calibrate -3411,2,calibrate -3015,2,calibrate -1758,2,calibrate -537,4,calibrate -3362,2,calibrate -488,4,calibrate -1096,3,calibrate -1230,3,calibrate -2134,1,calibrate -1958,4,calibrate -4091,3,calibrate -3645,2,calibrate -785,3,calibrate -93,4,calibrate -43,3,calibrate -1697,4,calibrate -306,4,calibrate -3379,4,calibrate -2205,2,calibrate -1647,3,calibrate -3942,1,calibrate -1118,4,calibrate -2814,2,calibrate -2855,3,calibrate -2552,2,calibrate -2335,4,calibrate -207,3,calibrate -2631,2,calibrate -1677,3,calibrate -682,3,calibrate -2285,2,calibrate -3197,4,calibrate -3626,1,calibrate -3364,1,calibrate -1282,4,calibrate -1628,3,calibrate -1974,2,calibrate -3797,4,calibrate -2186,1,calibrate -104,4,calibrate -887,4,calibrate -2053,2,calibrate -2440,2,calibrate -1049,2,calibrate -2999,2,calibrate -1133,1,calibrate -3607,1,calibrate -3211,1,calibrate -3262,3,calibrate -867,3,calibrate -3120,4,calibrate -514,1,calibrate -2554,1,calibrate -734,4,calibrate -1559,1,calibrate -1517,4,calibrate -3812,2,calibrate -2633,1,calibrate -1638,1,calibrate -685,4,calibrate -381,1,calibrate -2155,4,calibrate -3200,4,calibrate -3933,4,calibrate -1327,1,calibrate -2797,1,calibrate -452,2,calibrate -3497,3,calibrate -16,2,calibrate -3963,4,calibrate -141,2,calibrate -666,3,calibrate -3872,1,calibrate -878,2,calibrate -1790,4,calibrate -786,4,calibrate -4085,1,calibrate -2036,1,calibrate -2948,3,calibrate -1953,3,calibrate -88,4,calibrate -2128,4,calibrate -696,3,calibrate -1133,4,calibrate -3211,4,calibrate -2037,2,calibrate -2687,3,calibrate -1296,3,calibrate -2334,1,calibrate -2554,4,calibrate -2067,2,calibrate -2633,4,calibrate -2192,2,calibrate -2455,3,calibrate -2929,2,calibrate -2405,2,calibrate -1276,2,calibrate -1539,3,calibrate -3488,1,calibrate -232,2,calibrate -2568,1,calibrate -2485,3,calibrate -1793,4,calibrate -3530,3,calibrate -1702,2,calibrate -3346,2,calibrate -3480,2,calibrate -1610,4,calibrate -911,3,calibrate -174,2,calibrate -1086,4,calibrate -3559,2,calibrate -3256,1,calibrate -262,2,calibrate -437,3,calibrate -41,3,calibrate -2252,1,calibrate -650,3,calibrate -2253,2,calibrate -2036,4,calibrate -862,2,calibrate -1378,4,calibrate -2203,1,calibrate -550,1,calibrate -1462,3,calibrate -1075,2,calibrate -3411,1,calibrate -813,2,calibrate -1758,1,calibrate -2283,2,calibrate -3362,1,calibrate -72,3,calibrate -976,1,calibrate -1929,4,calibrate -934,4,calibrate -843,2,calibrate -2404,4,calibrate -1230,2,calibrate -1359,3,calibrate -4091,2,calibrate -1443,2,calibrate -2701,3,calibrate -3047,2,calibrate -1697,3,calibrate -2568,4,calibrate -2172,4,calibrate -306,3,calibrate -2997,1,calibrate -2518,3,calibrate -215,1,calibrate -1127,3,calibrate -2814,1,calibrate -2552,1,calibrate -1819,1,calibrate -2335,3,calibrate -1381,4,calibrate -2631,1,calibrate -470,3,calibrate -2252,4,calibrate -682,2,calibrate -2285,1,calibrate -3197,3,calibrate -1291,3,calibrate -203,4,calibrate -1628,2,calibrate -1974,1,calibrate -550,4,calibrate -2153,3,calibrate -3756,2,calibrate -104,3,calibrate -3411,4,calibrate -1800,1,calibrate -3015,4,calibrate -887,3,calibrate -2449,1,calibrate -2053,1,calibrate -1758,4,calibrate -1446,2,calibrate -747,1,calibrate -1962,4,calibrate -3262,2,calibrate -2267,2,calibrate -2217,1,calibrate -2134,3,calibrate -2430,1,calibrate -3645,4,calibrate -2205,4,calibrate -3030,1,calibrate -3942,3,calibrate -3200,3,calibrate -2552,4,calibrate -3322,1,calibrate -2631,4,calibrate -3497,2,calibrate -2285,4,calibrate -3626,3,calibrate -16,1,calibrate -3364,3,calibrate -1274,2,calibrate -666,2,calibrate -1974,4,calibrate -878,1,calibrate 2186,3,calibrate -1790,3,calibrate +878,1,calibrate +1381,2,calibrate +3014,2,calibrate +734,2,calibrate 2053,4,calibrate 2878,1,calibrate 1395,4,calibrate -2440,4,calibrate +1517,2,calibrate +3846,2,calibrate +3154,3,calibrate +1969,1,calibrate +1300,4,calibrate +3288,3,calibrate +366,2,calibrate +545,4,calibrate 1049,4,calibrate 787,4,calibrate -1953,2,calibrate +2790,1,calibrate 88,3,calibrate -2999,4,calibrate +3406,4,calibrate 696,2,calibrate -1133,3,calibrate +685,2,calibrate 3607,3,calibrate 3211,3,calibrate 2037,1,calibrate +1282,1,calibrate +1647,4,calibrate +791,1,calibrate 1176,1,calibrate +2406,2,calibrate 3691,2,calibrate +2155,2,calibrate +3440,2,calibrate +3044,2,calibrate +3926,3,calibrate +3200,2,calibrate +3797,1,calibrate +3872,4,calibrate 2687,2,calibrate 2384,1,calibrate +104,1,calibrate 1296,2,calibrate +1748,1,calibrate +1927,3,calibrate 39,2,calibrate -817,4,calibrate +887,1,calibrate 514,3,calibrate 2554,3,calibrate +1403,3,calibrate 1559,3,calibrate +2744,2,calibrate +4085,4,calibrate 2463,1,calibrate -2067,1,calibrate 3678,4,calibrate -3812,4,calibrate +1258,2,calibrate 2633,3,calibrate +1867,3,calibrate +1,2,calibrate +1616,3,calibrate 1638,3,calibrate +3626,2,calibrate +673,4,calibrate +2661,3,calibrate 381,3,calibrate 2676,1,calibrate +2740,4,calibrate +1962,2,calibrate 2455,2,calibrate -1023,1,calibrate -465,2,calibrate -3192,2,calibrate -1327,3,calibrate +1274,1,calibrate +1483,4,calibrate +3534,4,calibrate +906,1,calibrate +2143,4,calibrate +1829,3,calibrate +1433,3,calibrate +3432,2,calibrate +3170,2,calibrate 1539,2,calibrate +3120,1,calibrate 3014,1,calibrate -2797,3,calibrate -232,1,calibrate +734,1,calibrate +1395,3,calibrate +1517,1,calibrate 366,1,calibrate 452,4,calibrate -2485,2,calibrate +3154,2,calibrate +1300,3,calibrate +3846,1,calibrate +1049,3,calibrate +787,3,calibrate 3530,2,calibrate +88,2,calibrate 1702,1,calibrate +2128,2,calibrate +685,1,calibrate +696,1,calibrate 16,4,calibrate +3211,2,calibrate 141,4,calibrate +2406,1,calibrate +2155,1,calibrate +2626,4,calibrate 3044,1,calibrate -1653,1,calibrate -262,1,calibrate +3933,1,calibrate +3200,1,calibrate 3872,3,calibrate +2687,1,calibrate 878,4,calibrate -437,2,calibrate +867,4,calibrate +1296,1,calibrate +39,1,calibrate +3309,2,calibrate +1403,2,calibrate +2554,2,calibrate +2744,1,calibrate 4085,3,calibrate -213,1,calibrate +3678,3,calibrate +1219,1,calibrate 650,2,calibrate 2253,1,calibrate +1969,4,calibrate 1258,1,calibrate -862,1,calibrate 2036,3,calibrate -996,1,calibrate +3617,2,calibrate +2914,3,calibrate +2633,2,calibrate +2226,2,calibrate 1,1,calibrate +3963,1,calibrate +673,3,calibrate +2740,3,calibrate 2037,4,calibrate +2455,1,calibrate 1075,1,calibrate -1209,1,calibrate -813,1,calibrate -2283,1,calibrate -72,2,calibrate -2067,4,calibrate -843,1,calibrate -3279,1,calibrate -2192,4,calibrate -2929,4,calibrate -1359,2,calibrate -2405,4,calibrate -1276,4,calibrate -1443,1,calibrate -2701,2,calibrate -3309,1,calibrate -3047,1,calibrate -831,4,calibrate -2568,3,calibrate -2914,2,calibrate -3346,4,calibrate -3480,4,calibrate -3127,2,calibrate -174,4,calibrate -3559,4,calibrate -2252,3,calibrate -1291,2,calibrate -2253,4,calibrate -862,4,calibrate -2203,3,calibrate -550,3,calibrate -2153,2,calibrate -3756,1,calibrate -2895,1,calibrate -1412,4,calibrate -3411,3,calibrate -1758,3,calibrate -2283,4,calibrate -3362,3,calibrate -976,3,calibrate -2267,1,calibrate -1096,4,calibrate -1230,4,calibrate -2134,2,calibrate -4091,4,calibrate -1443,4,calibrate -785,4,calibrate -2997,3,calibrate -694,1,calibrate -215,3,calibrate -2214,2,calibrate -3343,2,calibrate -2814,3,calibrate -2552,3,calibrate -1819,3,calibrate -3422,2,calibrate -207,4,calibrate -512,2,calibrate -2631,3,calibrate -462,1,calibrate -1677,4,calibrate -682,4,calibrate -2285,3,calibrate -3585,1,calibrate -3061,1,calibrate -1628,4,calibrate -1974,3,calibrate -3536,1,calibrate -3756,4,calibrate -2186,2,calibrate -230,1,calibrate -3141,2,calibrate -2449,3,calibrate -1275,1,calibrate -2053,3,calibrate -359,2,calibrate -2096,1,calibrate -3607,2,calibrate -1446,4,calibrate -747,3,calibrate -3262,4,calibrate -3691,1,calibrate -2267,4,calibrate -1093,2,calibrate -48,1,calibrate -514,2,calibrate -1559,2,calibrate -2430,3,calibrate -1638,2,calibrate -381,2,calibrate -515,2,calibrate -2593,2,calibrate -3030,3,calibrate -465,1,calibrate -3192,1,calibrate -1327,2,calibrate -2797,2,calibrate -545,2,calibrate -3322,3,calibrate -3497,4,calibrate -3406,2,calibrate -16,3,calibrate -3144,2,calibrate -1274,4,calibrate -666,4,calibrate -3872,2,calibrate -878,3,calibrate -2178,1,calibrate -4085,2,calibrate -3386,1,calibrate -3520,1,calibrate -1867,1,calibrate -1953,4,calibrate -696,4,calibrate -2037,3,calibrate -3337,1,calibrate -3691,4,calibrate -2687,4,calibrate -2384,3,calibrate -1296,4,calibrate -39,4,calibrate -2334,2,calibrate -2463,3,calibrate -2067,3,calibrate -2455,4,calibrate -2929,3,calibrate -1023,3,calibrate -2626,2,calibrate -3192,4,calibrate -761,2,calibrate -1539,4,calibrate -3014,3,calibrate -3488,2,calibrate -232,3,calibrate -366,3,calibrate -1969,2,calibrate -2485,4,calibrate -2315,1,calibrate -3530,4,calibrate -1702,3,calibrate -3480,3,calibrate -2740,1,calibrate -791,2,calibrate -3127,1,calibrate -3044,3,calibrate -1653,3,calibrate -3256,2,calibrate -262,3,calibrate -437,4,calibrate -213,3,calibrate -650,4,calibrate -2253,3,calibrate -1258,3,calibrate -862,3,calibrate -996,3,calibrate -297,2,calibrate -643,1,calibrate -1075,3,calibrate -1209,3,calibrate -813,3,calibrate -2283,3,calibrate -72,4,calibrate -976,2,calibrate -843,3,calibrate -3279,3,calibrate -1359,4,calibrate -1443,3,calibrate -11,2,calibrate -2701,4,calibrate -3309,3,calibrate -3047,3,calibrate -1219,2,calibrate -3655,2,calibrate -2997,2,calibrate -2914,4,calibrate -2518,4,calibrate -215,2,calibrate -2214,1,calibrate -3343,1,calibrate -1127,4,calibrate -1819,2,calibrate -3422,1,calibrate -3127,4,calibrate -824,2,calibrate -1170,1,calibrate -512,1,calibrate -470,4,calibrate -3635,1,calibrate -1291,4,calibrate -854,2,calibrate -2153,4,calibrate -3756,3,calibrate -676,1,calibrate -1800,2,calibrate -3141,1,calibrate -2449,2,calibrate -359,1,calibrate -622,2,calibrate -1405,2,calibrate -1446,3,calibrate -747,2,calibrate -2746,1,calibrate -2267,3,calibrate -1093,1,calibrate -2217,2,calibrate -3221,1,calibrate -2134,4,calibrate -2430,2,calibrate -2564,2,calibrate -515,1,calibrate -694,3,calibrate -2593,1,calibrate -3030,2,calibrate -3942,4,calibrate -3422,4,calibrate -1811,1,calibrate -3851,1,calibrate -158,1,calibrate -545,1,calibrate -3322,2,calibrate -3718,2,calibrate -462,3,calibrate -3406,1,calibrate -3585,3,calibrate -3144,1,calibrate -3626,4,calibrate -3364,4,calibrate -3061,3,calibrate -3669,2,calibrate -1274,3,calibrate -3536,3,calibrate -2186,4,calibrate -230,3,calibrate -1275,3,calibrate -2878,2,calibrate -359,4,calibrate -3783,1,calibrate -3607,4,calibrate -2130,1,calibrate -1176,2,calibrate -3691,3,calibrate -3600,1,calibrate -1651,2,calibrate -2384,2,calibrate -39,3,calibrate -514,4,calibrate -1559,4,calibrate -344,1,calibrate -2463,2,calibrate -3205,1,calibrate -1638,4,calibrate -381,4,calibrate -2676,2,calibrate -515,4,calibrate -2593,4,calibrate -1023,2,calibrate -2626,1,calibrate -465,3,calibrate -1765,1,calibrate -811,2,calibrate -3192,3,calibrate -1327,4,calibrate -4018,2,calibrate -761,1,calibrate -3014,2,calibrate -2797,4,calibrate -366,2,calibrate -1969,1,calibrate -545,4,calibrate -2790,1,calibrate -3406,4,calibrate -3144,4,calibrate -791,1,calibrate -3440,2,calibrate -3044,2,calibrate -1653,2,calibrate -3872,4,calibrate -2178,3,calibrate -871,2,calibrate -4085,4,calibrate -213,2,calibrate -3386,3,calibrate -1258,2,calibrate -996,2,calibrate -1867,3,calibrate -1,2,calibrate -297,1,calibrate -3470,2,calibrate -3337,3,calibrate -1209,2,calibrate -906,1,calibrate -293,2,calibrate -2334,4,calibrate -3500,2,calibrate -3846,1,calibrate -3154,2,calibrate -3279,2,calibrate -2406,1,calibrate -2626,4,calibrate -11,1,calibrate -3309,2,calibrate -1403,2,calibrate -3488,4,calibrate -2744,1,calibrate -1219,1,calibrate -3655,1,calibrate -1969,4,calibrate -2914,3,calibrate -2740,3,calibrate diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index e7b30a6..de209b9 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -4,7 +4,7 @@ num_workers: 0 use_existing_split: false target: "eir" stratify: true -calib_frac: 0.1 +calib_frac: 0.06 # model width: 256 @@ -16,7 +16,7 @@ n_bins: 24 rqs_bounds: 6 # Hyperparameters -num_epochs: 300 +num_epochs: 200 min_epochs: 100 patience: 50 lr: 1e-3 @@ -25,7 +25,7 @@ weight_decay: 1e-4 n_ensembles: 1 # Checkpoint -checkpoint_dir: "${output_dir}/ckpts-${cur_time}" +checkpoint_dir: "${output_dir}ckpts-${cur_time}" # General cur_time: ${now:%Y-%m-%dT%H:%M:%S} diff --git a/src/estimint/v2/training/train_step.py b/src/estimint/v2/training/train_step.py index 4325df3..0307705 100644 --- a/src/estimint/v2/training/train_step.py +++ b/src/estimint/v2/training/train_step.py @@ -2,6 +2,7 @@ import optax from typing import Callable from jaxtyping import Array + def create_optimizer( model: nnx.Module, learning_rate: float, total_steps: int, weight_decay: float = 1e-4 ) -> nnx.Optimizer: diff --git a/test_estimint_nn.py b/test_estimint_nn.py deleted file mode 100644 index d74318f..0000000 --- a/test_estimint_nn.py +++ /dev/null @@ -1,857 +0,0 @@ -""" -============================================================================ - test_estimint_nn.py — REVIEW / SCRATCH FILE (not wired into the package) -============================================================================ -Consolidates the "replace XGBoost" findings into ONE readable file so you can -review before splitting the model code into the real v2 modules. - -DATA code now lives in the package (imported below, not redefined here): - * src/estimint/v2/data/preprocess.py group_split() — leakage-free param split - (+ stratification & calib split), sharing its core with the existing - _create_split()/split.csv pipeline. - * src/estimint/v2/data/features.py resolve_mono(), MONO_FEATURES, StandardScaler - -Fixes applied (from our discussion): - FIX 1 KMeans row split -> group-by-parameter split (no replicate leakage). - FIX 2 10-fold OOF calibration -> QMAP+scale on the VAL split. - FIX 3 monotone feature resolved BY NAME (works with prev_y9-last order). - FIX 4 per-row records: data is 1 row per (parameter, sim); just stack rows. - -GPU-budget upgrades (this pass): - * Residual pre-LayerNorm MLP (`MLP(..., residual=True)`) for depth >= 4. - * Warmup + cosine LR schedule in train_model. - * 4-way split (train/val/calib/test): conformal offset fit on the held-out - CALIB split (not val) for honest coverage. - * TIERS config dicts (smoke / solid / max) + resolve_tier(). - -Run: PYTHONPATH=src python test_estimint_nn.py (fast 'smoke' tier) -Deps: jax, flax(nnx), optax, numpy, pandas — all already in pyproject.toml. -""" - -from __future__ import annotations -from dataclasses import dataclass -import numpy as np -import pandas as pd -import jax -import jax.numpy as jnp -import optax -from flax import nnx - -# Project calibrator helpers. -from estimint.utils import fit_qmap_w, predict_qmap_w, scale_pos, r2, rmse, mae -from estimint.data_processing import make_value_weights - -# DATA code, now living in src/estimint/v2/data/ (SECTIONS 1 & 2 moved there). -# group_split lives in preprocess.py alongside the existing parameter split. -from estimint.v2.data.preprocess import _create_split -from estimint.v2.data.features import StandardScaler - -FEATURES_BASE = [ - "dn0_use", - "Q0", - "phi_bednets", - "seasonal", - "itn_use", - "irs_use", - "prev_y9", -] - -# The two monotone inputs to EIR. The monotone model (MonotoneUMNN) resolves its -# constrained feature by NAME via resolve_mono(), so feature column order is -# irrelevant (FEATURES_BASE keeps prev_y9 last). -MONO_FEATURES = ("prev_y9", "hbr_y9") - - -def resolve_mono(features: list[str]) -> int | None: - """Return the index of the monotone feature in ``features``, or None. - - None means there is no monotone input (e.g. the EIR->HBR forward map), in - which case a monotone model does not apply. - """ - for name in MONO_FEATURES: - if name in features: - return features.index(name) - return None -# ============================================================================ -# TIER CONFIGS -> src/estimint/v2/conf/train_config.yaml (or a dataclass) -# ---------------------------------------------------------------------------- -# 'smoke' = fast CPU sanity check. 'solid' = sensible GPU default. 'max' = the -# heavy setting for the hard hbr->EIR map (residual net, big ensemble, long -# training). epochs is a CAP; early-stopping decides the real length. -# ============================================================================ -TIERS = { - "smoke": dict( - width=128, - depth=2, - residual=False, - epochs=60, - patience=20, - batch=512, - lr=3.0e-3, - wd=1e-4, - n_ensemble=1, - n_bins=12, - n_quad=48, - ), - "solid": dict( - width=256, - depth=4, - residual=False, - epochs=2000, - patience=150, - batch=1024, - lr=1.5e-3, - wd=3e-4, - n_ensemble=6, - n_bins=24, - n_quad=96, - ), - "max": dict( - width=512, - depth=6, - residual=True, - epochs=4000, - patience=250, - batch=1024, - lr=1.0e-3, - wd=1e-3, - n_ensemble=10, - n_bins=32, - n_quad=128, - ), -} - - -def resolve_tier(name: str, kind: str): - """Split a flat tier dict into (n_ensemble, model_kwargs, train_kwargs). - - kind: 'flow' (uses n_bins) or 'umnn' (uses n_quad). - """ - t = dict(TIERS[name]) - n_ensemble = t.pop("n_ensemble") - n_bins, n_quad = t.pop("n_bins"), t.pop("n_quad") - model_kw = dict(width=t.pop("width"), depth=t.pop("depth"), residual=t.pop("residual")) - if kind == "flow": - model_kw["n_bins"] = n_bins - elif kind == "umnn": - model_kw["n_quad"] = n_quad - # kind == "fm": width/depth/residual only (no spline/quad params) - train_kw = t # epochs, patience, batch, lr, wd - return n_ensemble, model_kw, train_kw - - -# ============================================================================ -# SECTION 3 -> src/estimint/v2/models/common.py (NEW FILE) -# ---------------------------------------------------------------------------- -# Shared NN plumbing: a GELU MLP that is either a plain stack (residual=False) -# or a pre-LayerNorm residual net (residual=True, use for depth>=4), plus a -# generic AdamW + warmup-cosine trainer with val early-stopping. -# ============================================================================ -class MLP(nnx.Module): - def __init__(self, din, dout, *, width=128, depth=3, residual=False, rngs): - self.residual = residual - self.inp = nnx.Linear(din, width, rngs=rngs) - if residual: - self.norms = nnx.List([nnx.LayerNorm(width, rngs=rngs) for _ in range(depth)]) - self.fc1 = nnx.List([nnx.Linear(width, width, rngs=rngs) for _ in range(depth)]) - self.fc2 = nnx.List([nnx.Linear(width, width, rngs=rngs) for _ in range(depth)]) - else: - self.hidden = nnx.List([nnx.Linear(width, width, rngs=rngs) for _ in range(max(0, depth - 1))]) - self.out = nnx.Linear(width, dout, rngs=rngs) - - def __call__(self, x): - x = self.inp(x) - if self.residual: - for ln, f1, f2 in zip(self.norms, self.fc1, self.fc2): - x = x + f2(nnx.gelu(f1(ln(x)))) # pre-LN residual block - x = nnx.gelu(x) - else: - x = nnx.gelu(x) - for h in self.hidden: - x = nnx.gelu(h(x)) - return self.out(x) - - -def train_model( - model, - loss_fn, - Xtr, - ytr, - wtr, - Xva, - yva, - wva, - *, - epochs=2000, - batch=1024, - lr=1.5e-3, - wd=3e-4, - patience=150, - warmup_frac=0.05, - seed=0, -): - steps = max(1, len(Xtr) // batch) * epochs - warmup = max(1, int(warmup_frac * steps)) - sched = optax.warmup_cosine_decay_schedule( - init_value=lr * 0.01, - peak_value=lr, - warmup_steps=warmup, - decay_steps=steps, - end_value=lr * 0.02, - ) - opt = nnx.Optimizer(model, optax.adamw(sched, weight_decay=wd), wrt=nnx.Param) - - @nnx.jit - def step(model, opt, xb, yb, wb): - loss, grads = nnx.value_and_grad(loss_fn)(model, xb, yb, wb) - opt.update(model, grads) - return loss - - @nnx.jit - def val_loss(model, x, y, w): - return loss_fn(model, x, y, w) - - Xtr, ytr, wtr = map(jnp.asarray, (Xtr, ytr, wtr)) - Xva, yva, wva = map(jnp.asarray, (Xva, yva, wva)) - rng = np.random.default_rng(seed) - best = (np.inf, nnx.state(model)) - bad = 0 - n = len(Xtr) - for _ in range(epochs): - perm = rng.permutation(n) - for i in range(0, n, batch): - idx = perm[i : i + batch] - step(model, opt, Xtr[idx], ytr[idx], wtr[idx]) - vl = float(val_loss(model, Xva, yva, wva)) - if vl < best[0] - 1e-5: - best = (vl, nnx.state(model)) - bad = 0 - else: - bad += 1 - if bad >= patience: - break - nnx.update(model, best[1]) - return model - - -# ============================================================================ -# SECTION 4 -> src/estimint/v2/models/umnn.py (NEW FILE) -# ---------------------------------------------------------------------------- -# CHOICE 1 — MonotoneUMNN. Monotone-by-construction: f(m,c) = b(c) + integral of -# a strictly-positive integrand (softplus MLP) via Gauss-Legendre quadrature => -# smooth AND monotone in m by design. Use on prev_y9->EIR and hbr_y9->EIR; it -# makes run.py's _smooth_staircase / dense sweep obsolete. -# ============================================================================ -class MonotoneUMNN(nnx.Module): - def __init__(self, n_context, *, width=128, depth=3, n_quad=48, residual=False, rngs): - self.bias = MLP(n_context, 1, width=width, depth=depth, residual=residual, rngs=rngs) - self.integrand = MLP(1 + n_context, 1, width=width, depth=depth, residual=residual, rngs=rngs) - nodes, weights = np.polynomial.legendre.leggauss(n_quad) - self.nodes = jnp.asarray(nodes) - self.weights = jnp.asarray(weights) - - def _integral(self, m, c): - m = m[:, None] - half = 0.5 * m - t = half * (self.nodes[None, :] + 1.0) # (N,Q) - cE = jnp.broadcast_to(c[:, None, :], (c.shape[0], t.shape[1], c.shape[1])) - inp = jnp.concatenate([t[..., None], cE], -1) - g = nnx.softplus(self.integrand(inp))[..., 0] # >0 - return half[:, 0] * (self.weights[None, :] * g).sum(1) - - def __call__(self, m, c): - return self.bias(c)[:, 0] + self._integral(m, c) - - -def _umnn_loss(model, X, y, w): - m, c = X[:, 0], X[:, 1:] # X arranged as [mono, *context] - pred = model(m, c) - return jnp.sum(w * (pred - y) ** 2) / jnp.sum(w) - - -# ============================================================================ -# SECTION 5 -> src/estimint/v2/models/flow.py (NEW FILE) -# ---------------------------------------------------------------------------- -# CHOICE 2 (recommended primary) — ConditionalRQS. A conditional -# rational-quadratic-spline normalizing flow (Durkan 2019). Matches/beats -# XGBoost point accuracy via the median AND returns a calibrated posterior with -# exact, non-crossing quantiles: quantile_q = T^{-1}(Phi^{-1}(q)). Works for -# all three maps. The _rqs forward/inverse pair passed an invertibility unit -# check (max error ~1e-6). -# ============================================================================ -_B = 6.0 # spline support half-width (standardized units); linear tails outside - - -def _rqs(x, w_un, h_un, d_un, B, inverse): - N, K = w_un.shape - widths = jax.nn.softmax(w_un, -1) * (2 * B) - heights = jax.nn.softmax(h_un, -1) * (2 * B) - derivs = jax.nn.softplus(d_un) + 1e-3 - cx = jnp.concatenate([jnp.full((N, 1), -B), -B + jnp.cumsum(widths, -1)], -1) - cy = jnp.concatenate([jnp.full((N, 1), -B), -B + jnp.cumsum(heights, -1)], -1) - - inside = (x > -B) & (x < B) - xc = jnp.clip(x, -B + 1e-6, B - 1e-6) - search = cy if inverse else cx - b = jnp.clip(jnp.sum((xc[:, None] >= search[:, :-1]).astype(jnp.int32), -1) - 1, 0, K - 1) - g = lambda A, i: jnp.take_along_axis(A, i[:, None], 1)[:, 0] - xk, xk1 = g(cx, b), g(cx, b + 1) - yk, yk1 = g(cy, b), g(cy, b + 1) - dk, dk1 = g(derivs, b), g(derivs, b + 1) - s = (yk1 - yk) / (xk1 - xk) - - if not inverse: - xi = (xc - xk) / (xk1 - xk) - num = (yk1 - yk) * (s * xi**2 + dk * xi * (1 - xi)) - den = s + (dk1 + dk - 2 * s) * xi * (1 - xi) - y = yk + num / den - dnum = s**2 * (dk1 * xi**2 + 2 * s * xi * (1 - xi) + dk * (1 - xi) ** 2) - logdet = jnp.log(dnum) - 2 * jnp.log(den) - return jnp.where(inside, y, x), jnp.where(inside, logdet, 0.0) - else: - yrel = xc - yk - a = (yk1 - yk) * (s - dk) + yrel * (dk1 + dk - 2 * s) - bb = (yk1 - yk) * dk - yrel * (dk1 + dk - 2 * s) - cc = -s * yrel - xi = 2 * cc / (-bb - jnp.sqrt(jnp.maximum(bb**2 - 4 * a * cc, 0.0))) - xout = xi * (xk1 - xk) + xk - den = s + (dk1 + dk - 2 * s) * xi * (1 - xi) - dnum = s**2 * (dk1 * xi**2 + 2 * s * xi * (1 - xi) + dk * (1 - xi) ** 2) - logdet = -(jnp.log(dnum) - 2 * jnp.log(den)) - return jnp.where(inside, xout, x), jnp.where(inside, logdet, 0.0) - - -class ConditionalRQS(nnx.Module): - def __init__(self, n_context, *, n_bins=12, width=128, depth=3, B=_B, residual=False, rngs): - self.K = n_bins - self.B = B - self.net = MLP( - n_context, - 3 * n_bins + 1, - width=width, - depth=depth, - residual=residual, - rngs=rngs, - ) - - def _params(self, c): - raw = self.net(c) - return jnp.split(raw, [self.K, 2 * self.K], axis=-1) - - def log_prob(self, y0, c): - w, h, d = self._params(c) - z, logdet = _rqs(y0, w, h, d, self.B, inverse=False) - return -0.5 * (z**2 + jnp.log(2 * jnp.pi)) + logdet - - def quantile(self, c, q): - w, h, d = self._params(c) - z = jax.scipy.stats.norm.ppf(jnp.full(c.shape[0], q)) - y0, _ = _rqs(z, w, h, d, self.B, inverse=True) - return y0 - - -def _rqs_loss(model, X, y0, w): - lp = model.log_prob(y0, X) - return -jnp.sum(w * lp) / jnp.sum(w) - - -# ============================================================================ -# SECTION 5b (EXPERIMENTAL) -> src/estimint/v2/models/flow_matching.py -# ---------------------------------------------------------------------------- -# ConditionalFM — conditional flow matching / rectified flow (Lipman 2023). -# ADDED FOR BENCHMARKING, *NOT* RECOMMENDED AS THE PRIMARY for these maps. Why: -# the target is 1-D, and in 1-D the RQS flow already gives an EXACT, monotone, -# invertible CDF => exact non-crossing quantiles + exact log-prob in one forward -# pass, and fast inference. Flow matching needs an ODE solve to draw samples and -# only gives EMPIRICAL quantiles (noisy, needs many samples, monotonicity not -# guaranteed), with no expressiveness gain in 1-D (a monotone RQS can already be -# multimodal). Expect it to match RQS at best while costing more at inference. -# FM earns its keep on JOINT / high-dim posteriors — not scalar-out maps. -# -# Training (simulation-free): y0~N(0,1), y1=standardized target, t~U(0,1), -# yt = (1-t)*y0 + t*y1, regress velocity v(yt,t,c) -> (y1 - y0). -# Sampling: integrate dy/dt = v(y,t,c) from t=0 (y~N(0,1)) to t=1 (Euler). -# ============================================================================ -class ConditionalFM(nnx.Module): - def __init__(self, n_context, *, width=128, depth=3, residual=False, rngs): - # input = [y_t, t, context] -> scalar velocity - self.net = MLP(2 + n_context, 1, width=width, depth=depth, residual=residual, rngs=rngs) - - def velocity(self, y, t, c): - inp = jnp.concatenate([y[..., None], t[..., None], c], -1) - return self.net(inp)[..., 0] - - -def _fm_batch_loss(model, c, y1, w, key): - k1, k2 = jax.random.split(key) - y0 = jax.random.normal(k1, y1.shape) # base sample - t = jax.random.uniform(k2, y1.shape) # random time - yt = (1 - t) * y0 + t * y1 # linear interpolant path - v = model.velocity(yt, t, c) - return jnp.sum(w * (v - (y1 - y0)) ** 2) / jnp.sum(w) - - -@nnx.jit -def _fm_velocity(model, y, t, c): - return model.velocity(y, t, c) - - -def train_fm_one( - model, - Xtr, - ytr, - wtr, - Xva, - yva, - wva, - *, - epochs, - batch, - lr, - wd, - patience, - warmup_frac=0.05, - seed=0, -): - """Dedicated FM trainer (loss is stochastic per step, so it needs its own - key stream rather than the shared train_model).""" - steps = max(1, len(Xtr) // batch) * epochs - warmup = max(1, int(warmup_frac * steps)) - sched = optax.warmup_cosine_decay_schedule( - init_value=lr * 0.01, - peak_value=lr, - warmup_steps=warmup, - decay_steps=steps, - end_value=lr * 0.02, - ) - opt = nnx.Optimizer(model, optax.adamw(sched, weight_decay=wd), wrt=nnx.Param) - - @nnx.jit - def step(model, opt, xb, yb, wb, key): - loss, grads = nnx.value_and_grad(_fm_batch_loss)(model, xb, yb, wb, key) - opt.update(model, grads) - return loss - - @nnx.jit - def vloss(model, x, y, w, key): # average a few noise draws for a stable metric - ks = jax.random.split(key, 8) - return jnp.mean(jnp.stack([_fm_batch_loss(model, x, y, w, k) for k in ks])) - - Xtr, ytr, wtr = map(jnp.asarray, (Xtr, ytr, wtr)) - Xva, yva, wva = map(jnp.asarray, (Xva, yva, wva)) - rng = np.random.default_rng(seed) - key = jax.random.PRNGKey(seed) - val_key = jax.random.PRNGKey(seed + 999) - best = (np.inf, nnx.state(model)) - bad = 0 - n = len(Xtr) - for _ in range(epochs): - perm = rng.permutation(n) - for i in range(0, n, batch): - idx = perm[i : i + batch] - key, sub = jax.random.split(key) - step(model, opt, Xtr[idx], ytr[idx], wtr[idx], sub) - vl = float(vloss(model, Xva, yva, wva, val_key)) - if vl < best[0] - 1e-5: - best = (vl, nnx.state(model)) - bad = 0 - else: - bad += 1 - if bad >= patience: - break - nnx.update(model, best[1]) - return model - - -# ============================================================================ -# SECTION 6 -> src/estimint/v2/calibration.py (NEW FILE) -# ---------------------------------------------------------------------------- -# FIX 2: QMAP + positive-scale calibrator fit on VAL predictions (same objects -# the XGBoost trainers used). Plus split-conformal offset fit on the CALIB split. -# ============================================================================ -def calibrate_on_val(val_pred_raw, val_obs_raw): - cal = fit_qmap_w(val_pred_raw, val_obs_raw, ngrid=1024, round_digits=8) - a = scale_pos(val_obs_raw, predict_qmap_w(val_pred_raw, cal)) - return { - "kind": "qmap+scale", - "qmap": {"xq": cal["xq"], "yq": cal["yq"]}, - "scale": a, - } - - -def apply_cal(raw, cal): - return np.maximum(0.0, cal["scale"] * predict_qmap_w(raw, cal["qmap"])) - - -def conformal_offset(lo, hi, obs, alpha=0.10): - """Split-conformal (CQR, Romano 2019) width correction on a HELD-OUT split. - - Returns offset Q so that widening to [lo-Q, hi+Q] gives >= (1-alpha) - marginal coverage. Fit this on the CALIB split (disjoint from the val split - used for early stopping) so the guarantee is honest. - """ - scores = np.maximum(lo - obs, obs - hi) - n = len(scores) - k = min(max(int(np.ceil((1 - alpha) * (n + 1))), 1), n) - return float(np.sort(scores)[k - 1]) - - -# ============================================================================ -# SECTION 7 -> src/estimint/v2/train_base.py (EXTENDS existing) -# ---------------------------------------------------------------------------- -# Bundles expose the same natural-scale `.predict(X_raw)` contract as run.py's -# `_predict_direct`, plus `.quantile`/`.interval` for the flow. Trainers use the -# group split (v2/data/preprocess), deep ensembling, val calibration, and a 4-way -# split so conformal coverage is fit on held-out CALIB data. -# ============================================================================ -class UMNNBundle: - def __init__(self, models, scaler, cal, features, mono_idx): - self.models, self.scaler, self.cal = models, scaler, cal - self.features, self.mono_idx = features, mono_idx - - def _mc(self, X_raw): - Xs = self.scaler.transform(np.asarray(X_raw, dtype=np.float64)) - ctx = np.delete(Xs, self.mono_idx, axis=1) - return jnp.asarray(Xs[:, self.mono_idx]), jnp.asarray(ctx) - - def predict(self, X_raw): - m, c = self._mc(X_raw) - log10 = np.mean([np.asarray(mdl(m, c)) for mdl in self.models], 0) - return apply_cal(np.power(10.0, log10), self.cal) - - -class RQSBundle: - def __init__(self, models, scaler, y_mu, y_sd, cal, features): - self.models, self.scaler = models, scaler - self.y_mu, self.y_sd, self.cal, self.features = y_mu, y_sd, cal, features - self.conformal = {} # alpha -> offset Q (fit on CALIB split) - - def _q(self, X_raw, q): - c = jnp.asarray(self.scaler.transform(np.asarray(X_raw, dtype=np.float64))) - y0 = np.mean([np.asarray(m.quantile(c, q)) for m in self.models], 0) - return np.power(10.0, y0 * self.y_sd + self.y_mu) - - def predict(self, X_raw): - return apply_cal(self._q(X_raw, 0.5), self.cal) # calibrated median - - def quantile(self, X_raw, q): - return apply_cal(self._q(X_raw, q), self.cal) # raw calibrated band - - def interval(self, X_raw, alpha=0.10): - """Conformalized (1-alpha) band with guaranteed coverage.""" - lo = self.quantile(X_raw, alpha / 2) - hi = self.quantile(X_raw, 1 - alpha / 2) - Q = self.conformal.get(alpha, 0.0) - return np.maximum(0.0, lo - Q), hi + Q - - -class FMBundle: - """EXPERIMENTAL sample-based bundle (see SECTION 5b). Point estimate is the - sample median; quantiles are empirical order statistics of ODE samples.""" - - def __init__( - self, - models, - scaler, - y_mu, - y_sd, - cal, - features, - *, - n_steps=100, - n_samples=256, - seed=0, - ): - self.models, self.scaler = models, scaler - self.y_mu, self.y_sd, self.cal, self.features = y_mu, y_sd, cal, features - self.n_steps, self.n_samples, self.seed = n_steps, n_samples, seed - self.conformal = {} - - def _samples_natural(self, X_raw): - """Draw ODE samples -> raw (uncalibrated) natural-scale target samples.""" - c = jnp.asarray(self.scaler.transform(np.asarray(X_raw, dtype=np.float64))) - N, ctx = c.shape - dt = 1.0 / self.n_steps - cols = [] - for i, m in enumerate(self.models): - key = jax.random.PRNGKey(self.seed + 1000 + i) - y = jax.random.normal(key, (N, self.n_samples)) # base draws - cE = jnp.broadcast_to(c[:, None, :], (N, self.n_samples, ctx)) - for stp in range(self.n_steps): # Euler ODE solve - t = jnp.full((N, self.n_samples), stp * dt) - y = y + dt * _fm_velocity(m, y, t, cE) - cols.append(np.asarray(y)) - S = np.concatenate(cols, axis=1) # (N, n_samples*ens) - return np.power(10.0, S * self.y_sd + self.y_mu) - - def predict(self, X_raw): - return apply_cal(np.median(self._samples_natural(X_raw), axis=1), self.cal) - - def quantile(self, X_raw, q): - return apply_cal(np.quantile(self._samples_natural(X_raw), q, axis=1), self.cal) - - def interval(self, X_raw, alpha=0.10): - lo = self.quantile(X_raw, alpha / 2) - hi = self.quantile(X_raw, 1 - alpha / 2) - Q = self.conformal.get(alpha, 0.0) - return np.maximum(0.0, lo - Q), hi + Q - - -@dataclass -class SplitArrays: - X: np.ndarray - Xs: np.ndarray - ylog: np.ndarray - w: np.ndarray - - -@dataclass -class PrepSplits: - train: SplitArrays - val: SplitArrays - calib: SplitArrays - test: SplitArrays - scaler: StandardScaler - - -def _records_for_split(df, param_sims, scaler, features, target): - groups = df.groupby(["parameter_index", "simulation_index"]) - records = [] - for ps in sorted(param_sims): - if ps not in groups.groups: - continue - - idx = groups.groups[ps] - X = df.loc[idx, features].to_numpy(dtype=np.float64) - y_raw = df.loc[idx, target].to_numpy(dtype=np.float64) - records.append( - { - "x": scaler.transform(X), - "x_raw": X, - "y": np.log10(y_raw), - "y_raw": y_raw, - "w": df.loc[idx, "_weight"].to_numpy(dtype=np.float64), - "ps": np.asarray(ps, dtype=np.int32), - } - ) - return records - - -def _as_arrays(records, n_features): - if not records: - empty_x = np.empty((0, n_features), dtype=np.float64) - empty_y = np.empty((0,), dtype=np.float64) - return SplitArrays(X=empty_x, Xs=empty_x.copy(), ylog=empty_y, w=empty_y.copy()) - - return SplitArrays( - X=np.concatenate([r["x_raw"] for r in records], axis=0), - Xs=np.concatenate([r["x"] for r in records], axis=0), - ylog=np.concatenate([r["y"] for r in records], axis=0), - w=np.concatenate([r["w"] for r in records], axis=0), - ) - - -def _prep(df, features, target, seed, stratify, calib_frac): - df = df.copy() - if np.any(df[target].to_numpy(dtype=np.float64) <= 0): - raise ValueError(f"target {target!r} must be strictly positive for log10 training") - - df["_ps"] = list(zip(df["parameter_index"], df["simulation_index"])) - df["_weight"] = make_value_weights(df[target].to_numpy(dtype=np.float64), digits=3) - splits = _create_split( - df, - seed=seed, - calib_frac=calib_frac, - stratify=stratify, - target=target, - ) - - train_mask = df["_ps"].isin(splits.train) - scaler = StandardScaler().fit(df.loc[train_mask, features].to_numpy(dtype=np.float64)) - n_features = len(features) - - return PrepSplits( - train=_as_arrays(_records_for_split(df, splits.train, scaler, features, target), n_features), - val=_as_arrays(_records_for_split(df, splits.val, scaler, features, target), n_features), - calib=_as_arrays(_records_for_split(df, splits.calib, scaler, features, target), n_features), - test=_as_arrays(_records_for_split(df, splits.test, scaler, features, target), n_features), - scaler=scaler, - ) - - -def train_umnn(df, features, target="eir", *, tier="solid", seed=42, stratify=True): - mono_idx = resolve_mono(features) # FIX 3 - assert mono_idx is not None, "UMNN needs a monotone feature (prev_y9/hbr_y9)" - n_ens, model_kw, train_kw = resolve_tier(tier, "umnn") - prep = _prep(df, features, target, seed, stratify, 0.0) - tr, va = prep.train, prep.val - # arrange columns as [mono, *context] - Xtr = np.column_stack([tr.Xs[:, mono_idx], np.delete(tr.Xs, mono_idx, axis=1)]) - Xva = np.column_stack([va.Xs[:, mono_idx], np.delete(va.Xs, mono_idx, axis=1)]) - - models = [] - for e in range(n_ens): - mdl = MonotoneUMNN(len(features) - 1, rngs=nnx.Rngs(seed + e), **model_kw) - mdl = train_model( - mdl, - _umnn_loss, - Xtr, - tr.ylog, - tr.w, - Xva, - va.ylog, - va.w, - seed=seed + e, - **train_kw, - ) - models.append(mdl) - - bundle = UMNNBundle(models, prep.scaler, None, features, mono_idx) - val_pred = np.mean( - [np.asarray(mm(jnp.asarray(Xva[:, 0]), jnp.asarray(Xva[:, 1:]))) for mm in models], - 0, - ) - bundle.cal = calibrate_on_val( - np.power(10.0, val_pred), # FIX 2 - np.power(10.0, va.ylog), - ) - return bundle, (prep.test.X, np.power(10.0, prep.test.ylog)) - - -def train_rqs(df, features, target="eir", *, tier="solid", seed=42, stratify=True): - n_ens, model_kw, train_kw = resolve_tier(tier, "flow") - # 4-way split so conformal is fit on held-out CALIB data - prep = _prep(df, features, target, seed, stratify, calib_frac=0.10) - tr, va, ca, te = prep.train, prep.val, prep.calib, prep.test - y_mu, y_sd = tr.ylog.mean(), tr.ylog.std() + 1e-8 - - models = [] - for e in range(n_ens): - mdl = ConditionalRQS(len(features), rngs=nnx.Rngs(seed + e), **model_kw) - mdl = train_model( - mdl, - _rqs_loss, - tr.Xs, - (tr.ylog - y_mu) / y_sd, - tr.w, - va.Xs, - (va.ylog - y_mu) / y_sd, - va.w, - seed=seed + e, - **train_kw, - ) - models.append(mdl) - - bundle = RQSBundle(models, prep.scaler, y_mu, y_sd, None, features) - val_med = np.mean([np.asarray(mm.quantile(jnp.asarray(va.Xs), 0.5)) for mm in models], 0) * y_sd + y_mu - bundle.cal = calibrate_on_val( - np.power(10.0, val_med), # FIX 2 - np.power(10.0, va.ylog), - ) - # conformal offset fit on CALIB (disjoint from val) for honest coverage - lo, hi = bundle.quantile(ca.X, 0.05), bundle.quantile(ca.X, 0.95) - bundle.conformal[0.10] = conformal_offset(lo, hi, np.power(10.0, ca.ylog), alpha=0.10) - return bundle, (te.X, np.power(10.0, te.ylog)) - - -def train_fm( - df, - features, - target="eir", - *, - tier="solid", - seed=42, - stratify=True, - n_steps=100, - n_samples=256, -): - """EXPERIMENTAL: conditional flow matching. Same 4-way split + conformal as - train_rqs; point estimate = sample median, quantiles = empirical.""" - n_ens, model_kw, train_kw = resolve_tier(tier, "fm") # width/depth/residual only - prep = _prep(df, features, target, seed, stratify, calib_frac=0.10) - tr, va, ca, te = prep.train, prep.val, prep.calib, prep.test - y_mu, y_sd = tr.ylog.mean(), tr.ylog.std() + 1e-8 - - models = [] - for e in range(n_ens): - mdl = ConditionalFM(len(features), rngs=nnx.Rngs(seed + e), **model_kw) - mdl = train_fm_one( - mdl, - tr.Xs, - (tr.ylog - y_mu) / y_sd, - tr.w, - va.Xs, - (va.ylog - y_mu) / y_sd, - va.w, - seed=seed + e, - **train_kw, - ) - models.append(mdl) - - bundle = FMBundle( - models, - prep.scaler, - y_mu, - y_sd, - None, - features, - n_steps=n_steps, - n_samples=n_samples, - seed=seed, - ) - val_med = np.median(bundle._samples_natural(va.X), axis=1) # raw (pre-cal) - bundle.cal = calibrate_on_val(val_med, np.power(10.0, va.ylog)) - lo, hi = bundle.quantile(ca.X, 0.05), bundle.quantile(ca.X, 0.95) - bundle.conformal[0.10] = conformal_offset(lo, hi, np.power(10.0, ca.ylog), alpha=0.10) - return bundle, (te.X, np.power(10.0, te.ylog)) - - -# ============================================================================ -# SECTION 8 -> smoke test (this file's __main__; not shipped) -# ---------------------------------------------------------------------------- -# Fast CPU sanity check on the 'smoke' tier. For real runs use tier="solid" or -# tier="max" on GPU. Also exercises the residual MLP + warmup path. -# ============================================================================ -if __name__ == "__main__": - TIER = "max" # switch to "solid" / "max" on GPU - df = pd.read_parquet("models/prevalence/training.parquet") - feats = [ - "dn0_use", - "Q0", - "phi_bednets", - "seasonal", - "itn_use", - "irs_use", - "prev_y9", - ] - - print("== residual MLP path ==") - rm = MLP(7, 1, width=32, depth=3, residual=True, rngs=nnx.Rngs(0)) - print(" output shape", tuple(rm(jnp.zeros((4, 7))).shape)) - - print("== MonotoneUMNN (prev->EIR) ==") - umnn, (Xte, yte) = train_umnn(df, feats, tier=TIER) - p = umnn.predict(Xte) - base = np.tile(Xte[0], (60, 1)) - base[:, -1] = np.linspace(0.02, 0.8, 60) - print(f" test R2={r2(yte, p):.4f} RMSE={rmse(yte, p):.2f} MAE={mae(yte, p):.2f}") - print(f" monotone in prev_y9: {bool(np.all(np.diff(umnn.predict(base)) >= -1e-6))}") - - print("== ConditionalRQS (prev->EIR) ==") - flow, (Xte2, yte2) = train_rqs(df, feats, tier=TIER) - p2 = flow.predict(Xte2) - lo, hi = flow.quantile(Xte2, 0.05), flow.quantile(Xte2, 0.95) - cov_raw = float(np.mean((yte2 >= lo) & (yte2 <= hi))) - clo, chi = flow.interval(Xte2, alpha=0.10) - cov_conf = float(np.mean((yte2 >= clo) & (yte2 <= chi))) - print(f" test R2={r2(yte2, p2):.4f} RMSE={rmse(yte2, p2):.2f} MAE={mae(yte2, p2):.2f}") - print(f" 90% coverage: raw={cov_raw:.3f} conformalized={cov_conf:.3f}") - - print("== ConditionalFM (EXPERIMENTAL, prev->EIR) ==") - # fm, (Xte3, yte3) = train_fm(df, feats, tier=TIER, n_steps=50, n_samples=64) - # p3 = fm.predict(Xte3) - # clo3, chi3 = fm.interval(Xte3, alpha=0.10) - # cov3 = float(np.mean((yte3 >= clo3) & (yte3 <= chi3))) - # print(f" test R2={r2(yte3, p3):.4f} RMSE={rmse(yte3, p3):.2f} MAE={mae(yte3, p3):.2f}") - # print(f" 90% conformalized coverage={cov3:.3f} (vs RQS above — expect FM ~= RQS at best)") - print("SMOKE_OK") From 98069979758bdb1a81d2c27ffd0330a5dcb93f44 Mon Sep 17 00:00:00 2001 From: Anmol Date: Wed, 15 Jul 2026 13:50:50 +0000 Subject: [PATCH 11/32] Refactor model artifacts and update training functions to use new class structures --- src/estimint/v2/eval/metrics.py | 13 ++--- src/estimint/v2/models/rqs.py | 77 +++++++++++++++++++++++++--- src/estimint/v2/models/umnn.py | 19 +++---- src/estimint/v2/train_base.py | 91 +++++++++++++-------------------- 4 files changed, 119 insertions(+), 81 deletions(-) diff --git a/src/estimint/v2/eval/metrics.py b/src/estimint/v2/eval/metrics.py index 8a5ad15..0fed755 100644 --- a/src/estimint/v2/eval/metrics.py +++ b/src/estimint/v2/eval/metrics.py @@ -13,10 +13,10 @@ class Metrics: bias: float def compute_metrics( - model_bundle, + model_artifact, loader: DataLoader, ): - preds, targets = get_preds_targets(model_bundle, loader) + preds, targets = get_preds_targets(model_artifact, loader) return Metrics( mse=mse(targets, preds), @@ -27,14 +27,15 @@ def compute_metrics( ) -def get_preds_targets(model_bundle, data_loader: DataLoader) -> tuple[np.ndarray, np.ndarray]: +def get_preds_targets(model_artifact, data_loader: DataLoader) -> tuple[np.ndarray, np.ndarray]: all_preds, all_targets = [], [] for batch in data_loader: - preds = model_bundle.predict(batch["x_raw"]) + preds = model_artifact.predict(batch["x_raw"]) all_preds.append(preds) all_targets.append(batch["y_raw"]) - all_preds = np.concat(all_preds, axis=0) - all_targets = np.concat(all_targets, axis=0) + + all_preds = np.concat(all_preds) + all_targets = np.concat(all_targets) return all_preds, all_targets diff --git a/src/estimint/v2/models/rqs.py b/src/estimint/v2/models/rqs.py index 2af233f..8cee167 100644 --- a/src/estimint/v2/models/rqs.py +++ b/src/estimint/v2/models/rqs.py @@ -3,6 +3,7 @@ import jax.numpy as jnp import jax from estimint.v2.data.features import StandardScaler +from estimint.utils import fit_qmap_w, predict_qmap_w, scale_pos import numpy as np @@ -39,25 +40,85 @@ def quantile(self, context, quantile): y0, _ = _rqs(z, widths, heights, derivatives, self.bounds, inverse=True) return y0 + def quantiles(self, context, probs): + """Evaluate many quantile levels at once, reusing the per-row spline params. + + Args: + context: (B, C) conditioning features. + probs: (Q,) probability levels in (0, 1). + + Returns: + (Q, B) standardized targets y0, one row per probability level. + """ + widths, heights, derivatives = self._params(context) # (B,K),(B,K),(B,K+1) + zs = jax.scipy.stats.norm.ppf(probs) # (Q,) + + def _invert(z_scalar): + z_col = jnp.full((context.shape[0],), z_scalar) + y0, _ = _rqs(z_col, widths, heights, derivatives, self.bounds, inverse=True) + return y0 + + return jax.vmap(_invert)(zs) # (Q, B) + @nnx.jit -def _forward(models: list[ConditionalRQS], context: jnp.ndarray, quantile: float): - return [model.quantile(context, quantile) for model in models] +def _forward(model: nnx.Module, context: jnp.ndarray, quantile: float): + return model.quantile(context, quantile) # type: ignore -class RQSBundle: - def __init__(self, models: list[ConditionalRQS], feature_scaler: StandardScaler, target_scaler: StandardScaler, features: list[str]): - self.models = models +@nnx.jit +def _forward_quantiles(model: nnx.Module, context: jnp.ndarray, probs: jnp.ndarray): + return model.quantiles(context, probs) # type: ignore + +class RQSArtifact: + # Number of quantile levels used to numerically integrate the conditional + # mean E[EIR] = ∫_0^1 F^{-1}(q) dq via the midpoint rule. + N_MEAN_QUANTILES = 128 + + def __init__(self, model: nnx.Module, feature_scaler: StandardScaler, target_scaler: StandardScaler, features: list[str]): + self.model = model self.feature_scaler = feature_scaler self.target_scaler = target_scaler self.features = features - self.conformal = {} # alpha -> offset Q (fit on calibration set) + self.conformal = {} # alpha -> offset Q + self.calibrator = None # qmap dict from fit_qmap_w, applied to point predictions + self.scale = 1.0 # positive multiplicative debias applied after qmap def _quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: context = jnp.array(self.feature_scaler.transform(X_raw)) - y0 = np.mean(_forward(self.models, context, quantile), axis=0) + y0 = _forward(self.model, context, quantile) return np.maximum(0, np.power(10, self.target_scaler.inverse_transform(y0))) + def _raw_mean(self, X_raw: np.ndarray) -> np.ndarray: + """Uncalibrated conditional mean E[EIR] by integrating the flow's quantiles.""" + probs = (np.arange(self.N_MEAN_QUANTILES) + 0.5) / self.N_MEAN_QUANTILES + context = jnp.array(self.feature_scaler.transform(X_raw)) + y0 = np.asarray(_forward_quantiles(self.model, context, jnp.asarray(probs))) # (Q, B) + eir = np.maximum(0, np.power(10, self.target_scaler.inverse_transform(y0))) # (Q, B) + return eir.mean(axis=0) + + def _apply_calibration(self, pred: np.ndarray) -> np.ndarray: + """Apply fitted QMAP + positive scale, if a calibrator has been fit.""" + if self.calibrator is None: + return pred + return np.maximum(0, self.scale * predict_qmap_w(pred, self.calibrator)) + + def fit_calibrator(self, X_raw: np.ndarray, y_raw: np.ndarray, ngrid: int = 1024) -> None: + """Fit QMAP + positive-scale calibration for point predictions on a held-out split. + + Mirrors the XGBoost pipeline: map the predicted marginal onto the observed + marginal, then apply a positive multiplicative debias. + """ + base = self._raw_mean(X_raw) + cal = fit_qmap_w(base, y_raw, ngrid=ngrid) + calibrated = predict_qmap_w(base, cal) + self.scale = scale_pos(y_raw, calibrated) + self.calibrator = cal + def predict(self, X_raw: np.ndarray) -> np.ndarray: - return self._quantile(X_raw, 0.5) # median prediction + """Calibrated conditional-mean prediction (falls back to raw mean if uncalibrated).""" + return self._apply_calibration(self._raw_mean(X_raw)) + + def predict_median(self, X_raw: np.ndarray) -> np.ndarray: + return self._quantile(X_raw, 0.5) def quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: return self._quantile(X_raw, quantile) diff --git a/src/estimint/v2/models/umnn.py b/src/estimint/v2/models/umnn.py index cb13d91..bbc3a60 100644 --- a/src/estimint/v2/models/umnn.py +++ b/src/estimint/v2/models/umnn.py @@ -33,19 +33,15 @@ def __call__(self, m, c): return self.bias(c)[:, 0] + self._integral(m, c) @nnx.jit -def _forward(models: list[MonotoneUMNN], m: jnp.ndarray, c: jnp.ndarray): - return [model(m, c) for model in models] +def _forward(model: nnx.Module, monotone: jnp.ndarray, context: jnp.ndarray): + return model(monotone, context) -class UMNNBundle: - def __init__(self, models: list[MonotoneUMNN], scaler: StandardScaler, features: list[str]): - self.models = models +class UMNNArtifact: + def __init__(self, model: nnx.Module, scaler: StandardScaler, features: list[str]): + self.model = model self.scaler = scaler self.features = features - def set_models_to_eval(self): - for model in self.models: - model.eval() - def _transform_inputs(self, X_raw) -> tuple[jnp.ndarray, jnp.ndarray]: X_scaled = self.scaler.transform(X_raw) context = X_scaled[:, 1:] # all but first column @@ -55,9 +51,8 @@ def _transform_inputs(self, X_raw) -> tuple[jnp.ndarray, jnp.ndarray]: def predict(self, X_raw: np.ndarray) -> np.ndarray: m, c = self._transform_inputs(X_raw) - preds = _forward(self.models, m, c) - mean_pred = jnp.mean(jnp.stack(preds), axis=0) - return np.power(10, mean_pred) # return in original scale + pred = _forward(self.model, m, c) + return np.power(10, pred) # return in original scale def umnn_loss(model, X, y, w): diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index 809cb89..f040762 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -9,7 +9,7 @@ from hydra.utils import get_method from omegaconf import DictConfig, OmegaConf from tqdm import tqdm -from .models.umnn import MonotoneUMNN, umnn_loss, UMNNBundle +from .models.umnn import MonotoneUMNN, umnn_loss, UMNNArtifact from .data.preprocess import PreparedData, prepare_data from .data.dataset import make_loader import wandb @@ -24,7 +24,7 @@ from estimint.v2.eval.metrics import compute_metrics from typing import Callable from jaxtyping import Array -from .models.rqs import ConditionalRQS, rqs_loss, RQSBundle, conformal_offset +from .models.rqs import ConditionalRQS, rqs_loss, RQSArtifact, conformal_offset logging.getLogger("absl").setLevel(logging.WARNING) log = logging.getLogger(__name__) @@ -48,6 +48,7 @@ def train_model( cfg: DictConfig, prepared_data: PreparedData, loss_fn: Callable[[nnx.Module, Array, Array, Array], Array], + name: str, use_standardized_y: bool = False, ) -> nnx.Module: train_step = make_train_step(loss_fn) @@ -107,22 +108,29 @@ def train_model( break nnx.update(model, best_model) + # --------- checkpointing the best model --------- + ckpt_dir = (epath.Path(cfg.checkpoint_dir) / name).resolve() + preservation_policy = ocp.training.preservation_policies.LatestN(n=1) + with ocp.training.Checkpointer(ckpt_dir, preservation_policy=preservation_policy) as ckptr: # type: ignore[arg-type] + ckptr.save_checkpointables( + 0, + { + "model": nnx.state(model), + }, + overwrite=True + ) return model -def train_umnn(cfg: DictConfig, prepared_data: PreparedData) -> UMNNBundle: - models = [] - for ensemble in range(cfg.n_ensembles): - model = MonotoneUMNN(len(FEATURES_BASE) - 1, rngs=nnx.Rngs(cfg.seed + ensemble), width=cfg.width, depth=cfg.depth, n_quad=cfg.n_quad, mlp_residual=cfg.mlp_residual, dropout_rate=cfg.dropout_rate) - if ensemble == 0: - log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") - model = train_model(model, cfg, prepared_data, umnn_loss) - models.append(model) - # TODO: unsure if need to ensemble - umnn_bundle = UMNNBundle(models, prepared_data.feature_scaler, FEATURES_BASE) +def train_umnn(cfg: DictConfig, prepared_data: PreparedData) -> UMNNArtifact: + model = MonotoneUMNN(len(FEATURES_BASE) - 1, rngs=nnx.Rngs(cfg.seed), width=cfg.width, depth=cfg.depth, n_quad=cfg.n_quad, mlp_residual=cfg.mlp_residual, dropout_rate=cfg.dropout_rate) + log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") + model = train_model(model, cfg, prepared_data, umnn_loss, name="UMNN") + + umnn_artifact = UMNNArtifact(model, prepared_data.feature_scaler, FEATURES_BASE) # ------------ test evaluation ---------------- - umnn_bundle.set_models_to_eval() + umnn_artifact.model.eval() test_loader = make_loader( data=prepared_data.test_data, batch_size=cfg.batch_size, @@ -131,33 +139,18 @@ def train_umnn(cfg: DictConfig, prepared_data: PreparedData) -> UMNNBundle: num_workers=cfg.num_workers, drop_remainder=True, ) - metrics = compute_metrics(umnn_bundle, test_loader) + metrics = compute_metrics(umnn_artifact, test_loader) log.info(f"test R2={metrics.r2:.4f} RMSE={metrics.rmse:.2f} MAE={metrics.mae:.2f} MSE={metrics.mse:.2f} Bias={metrics.bias:.2f}") if cfg.use_wandb: wandb.log({"test/r2": metrics.r2, "test/rmse": metrics.rmse, "test/mae": metrics.mae, "test/mse": metrics.mse, "test/bias": metrics.bias}) - # ------------- checkpointing ---------------- - # TODO: check checkpointing works okay. and then be able to load the model back in for inference. For now, just save the model states. - ckpt_dir = (epath.Path(cfg.checkpoint_dir) / "umnn").resolve() - preservation_policy = ocp.training.preservation_policies.LatestN(n=1) - with ocp.training.Checkpointer(ckpt_dir, preservation_policy=preservation_policy) as ckptr: # type: ignore[arg-type] - ckptr.save_checkpointables( - 0, - { - "models": [nnx.state(model) for model in umnn_bundle.models], - }, - overwrite=True - ) - return umnn_bundle + return umnn_artifact def train_rqs(cfg: DictConfig, prepared_data: PreparedData): - models = [] - for ensemble in range(cfg.n_ensembles): - model = ConditionalRQS(len(FEATURES_BASE), rngs=nnx.Rngs(cfg.seed + ensemble), width=cfg.width, depth=cfg.depth, n_bins=cfg.n_bins, bounds=cfg.rqs_bounds, residual=cfg.mlp_residual, dropout_rate=cfg.dropout_rate) - if ensemble == 0: - log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") - model = train_model(model, cfg, prepared_data, rqs_loss, use_standardized_y=True) - models.append(model) - rqs_bundle = RQSBundle(models, prepared_data.feature_scaler, prepared_data.target_scaler, FEATURES_BASE) + model = ConditionalRQS(len(FEATURES_BASE), rngs=nnx.Rngs(cfg.seed), width=cfg.width, depth=cfg.depth, n_bins=cfg.n_bins, bounds=cfg.rqs_bounds, residual=cfg.mlp_residual, dropout_rate=cfg.dropout_rate) + log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") + model = train_model(model, cfg, prepared_data, rqs_loss, name="RQS", use_standardized_y=True) + + rqs_artifact = RQSArtifact(model, prepared_data.feature_scaler, prepared_data.target_scaler, FEATURES_BASE) # ------------ calibration ------------------- calib_loader = make_loader( @@ -170,8 +163,8 @@ def train_rqs(cfg: DictConfig, prepared_data: PreparedData): ) for batch in calib_loader: calib_x_raw, calib_y_raw = batch["x_raw"], batch["y_raw"] - lower, upper = rqs_bundle.quantile(calib_x_raw, 0.05), rqs_bundle.quantile(calib_x_raw, 0.95) - rqs_bundle.conformal[0.10] = conformal_offset(lower, upper, calib_y_raw, alpha=0.10) + lower, upper = rqs_artifact.quantile(calib_x_raw, 0.05), rqs_artifact.quantile(calib_x_raw, 0.95) + rqs_artifact.conformal[0.10] = conformal_offset(lower, upper, calib_y_raw, alpha=0.10) # ------------ test evaluation ---------------- test_loader = make_loader( @@ -182,7 +175,7 @@ def train_rqs(cfg: DictConfig, prepared_data: PreparedData): num_workers=cfg.num_workers, drop_remainder=True, ) - metrics = compute_metrics(rqs_bundle, test_loader) + metrics = compute_metrics(rqs_artifact, test_loader) log.info(f"test R2={metrics.r2:.4f} RMSE={metrics.rmse:.2f} MAE={metrics.mae:.2f} MSE={metrics.mse:.2f} Bias={metrics.bias:.2f}") if cfg.use_wandb: wandb.log({"test/r2": metrics.r2, "test/rmse": metrics.rmse, "test/mae": metrics.mae, "test/mse": metrics.mse, "test/bias": metrics.bias}) @@ -198,8 +191,8 @@ def train_rqs(cfg: DictConfig, prepared_data: PreparedData): ) for batch in test_loader: test_x_raw, test_y_raw = batch["x_raw"], batch["y_raw"] - raw_lower, raw_upper = rqs_bundle.quantile(test_x_raw, 0.05), rqs_bundle.quantile(test_x_raw, 0.95) - conformal_lower, conformal_upper = rqs_bundle.interval(test_x_raw, alpha=0.10) + raw_lower, raw_upper = rqs_artifact.quantile(test_x_raw, 0.05), rqs_artifact.quantile(test_x_raw, 0.95) + conformal_lower, conformal_upper = rqs_artifact.interval(test_x_raw, alpha=0.10) coverage_raw = np.mean((test_y_raw >= raw_lower) & (test_y_raw <= raw_upper)) coverage_conformal = np.mean((test_y_raw >= conformal_lower) & (test_y_raw <= conformal_upper)) @@ -207,19 +200,7 @@ def train_rqs(cfg: DictConfig, prepared_data: PreparedData): log.info(f"Conformal 90% interval coverage: {coverage_conformal:.4f}") if cfg.use_wandb: wandb.log({"test/raw_coverage": coverage_raw, "test/conformal_coverage": coverage_conformal}) - # ------------ checkpointing ---------------- - # TODO: check checkpointing works okay. and then be able to load the model back in for inference. For now, just save the model states. - ckpt_dir = (epath.Path(cfg.checkpoint_dir) / "rqs").resolve() - preservation_policy = ocp.training.preservation_policies.LatestN(n=1) - with ocp.training.Checkpointer(ckpt_dir, preservation_policy=preservation_policy) as ckptr: # type: ignore[arg-type] - ckptr.save_checkpointables( - 0, - { - "models": [nnx.state(model) for model in rqs_bundle.models], - }, - overwrite=True - ) - return rqs_bundle + return rqs_artifact @hydra.main(version_base=None, config_path="conf", config_name="train_config") def main(cfg: DictConfig) -> None: @@ -239,8 +220,8 @@ def main(cfg: DictConfig) -> None: prepared_data = prepare_data(raw_df, cfg, calib_frac=cfg.calib_frac) - # umnn_bundle = train_umnn(cfg, prepared_data) - models = train_rqs(cfg, prepared_data) + umnn_bundle = train_umnn(cfg, prepared_data) + rqs_artifact = train_rqs(cfg, prepared_data) if cfg.use_wandb: wandb.finish() From d071554bb177f331eb39e3eca35d008ee407c463 Mon Sep 17 00:00:00 2001 From: Anmol Date: Wed, 15 Jul 2026 14:17:24 +0000 Subject: [PATCH 12/32] remove bad code and fix rqs --- src/estimint/v2/conf/train_config.yaml | 2 +- src/estimint/v2/models/rqs.py | 38 +------------------------- 2 files changed, 2 insertions(+), 38 deletions(-) diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index de209b9..257376b 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -16,7 +16,7 @@ n_bins: 24 rqs_bounds: 6 # Hyperparameters -num_epochs: 200 +num_epochs: 150 min_epochs: 100 patience: 50 lr: 1e-3 diff --git a/src/estimint/v2/models/rqs.py b/src/estimint/v2/models/rqs.py index 8cee167..f081e79 100644 --- a/src/estimint/v2/models/rqs.py +++ b/src/estimint/v2/models/rqs.py @@ -69,56 +69,20 @@ def _forward_quantiles(model: nnx.Module, context: jnp.ndarray, probs: jnp.ndarr return model.quantiles(context, probs) # type: ignore class RQSArtifact: - # Number of quantile levels used to numerically integrate the conditional - # mean E[EIR] = ∫_0^1 F^{-1}(q) dq via the midpoint rule. - N_MEAN_QUANTILES = 128 - def __init__(self, model: nnx.Module, feature_scaler: StandardScaler, target_scaler: StandardScaler, features: list[str]): self.model = model self.feature_scaler = feature_scaler self.target_scaler = target_scaler self.features = features self.conformal = {} # alpha -> offset Q - self.calibrator = None # qmap dict from fit_qmap_w, applied to point predictions - self.scale = 1.0 # positive multiplicative debias applied after qmap def _quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: context = jnp.array(self.feature_scaler.transform(X_raw)) y0 = _forward(self.model, context, quantile) return np.maximum(0, np.power(10, self.target_scaler.inverse_transform(y0))) - def _raw_mean(self, X_raw: np.ndarray) -> np.ndarray: - """Uncalibrated conditional mean E[EIR] by integrating the flow's quantiles.""" - probs = (np.arange(self.N_MEAN_QUANTILES) + 0.5) / self.N_MEAN_QUANTILES - context = jnp.array(self.feature_scaler.transform(X_raw)) - y0 = np.asarray(_forward_quantiles(self.model, context, jnp.asarray(probs))) # (Q, B) - eir = np.maximum(0, np.power(10, self.target_scaler.inverse_transform(y0))) # (Q, B) - return eir.mean(axis=0) - - def _apply_calibration(self, pred: np.ndarray) -> np.ndarray: - """Apply fitted QMAP + positive scale, if a calibrator has been fit.""" - if self.calibrator is None: - return pred - return np.maximum(0, self.scale * predict_qmap_w(pred, self.calibrator)) - - def fit_calibrator(self, X_raw: np.ndarray, y_raw: np.ndarray, ngrid: int = 1024) -> None: - """Fit QMAP + positive-scale calibration for point predictions on a held-out split. - - Mirrors the XGBoost pipeline: map the predicted marginal onto the observed - marginal, then apply a positive multiplicative debias. - """ - base = self._raw_mean(X_raw) - cal = fit_qmap_w(base, y_raw, ngrid=ngrid) - calibrated = predict_qmap_w(base, cal) - self.scale = scale_pos(y_raw, calibrated) - self.calibrator = cal - def predict(self, X_raw: np.ndarray) -> np.ndarray: - """Calibrated conditional-mean prediction (falls back to raw mean if uncalibrated).""" - return self._apply_calibration(self._raw_mean(X_raw)) - - def predict_median(self, X_raw: np.ndarray) -> np.ndarray: - return self._quantile(X_raw, 0.5) + return self._quantile(X_raw, 0.5) # median prediction def quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: return self._quantile(X_raw, quantile) From 7b1a9c54c928b29e8637ee1ad4a9eff7af5ffee2 Mon Sep 17 00:00:00 2001 From: Anmol Date: Thu, 16 Jul 2026 07:05:34 +0000 Subject: [PATCH 13/32] Refactor checkpointing in training process and add sweep configuration - Moved checkpoint saving logic to a separate function `save_checkpoint` in `checkpoint.py`. - Updated `train_model` function in `train_base.py` to utilize the new checkpointing function. - Removed unused checkpoint session management code for clarity. - Introduced a new YAML configuration file for sweep parameters to facilitate hyperparameter tuning. --- datasets/split.csv | 12732 ++++++++++---------- src/estimint/v2/conf/sweeps/prev_eir.yaml | 44 + src/estimint/v2/train_base.py | 17 +- src/estimint/v2/training/checkpoint.py | 94 +- 4 files changed, 6435 insertions(+), 6452 deletions(-) create mode 100644 src/estimint/v2/conf/sweeps/prev_eir.yaml diff --git a/datasets/split.csv b/datasets/split.csv index 442b441..49a4fd7 100644 --- a/datasets/split.csv +++ b/datasets/split.csv @@ -1,40 +1,38 @@ parameter_index,simulation_index,split 1128,4,train 2344,2,train -2082,2,train -2519,3,train +2478,2,train 1820,2,train 1999,4,train 1603,4,train -1737,4,train -1341,4,train +2295,2,train 1899,2,train -2336,3,train 2033,2,train +1637,2,train 2508,2,train 2112,2,train -2549,3,train 2945,3,train +2246,2,train 1850,2,train +2029,4,train 1767,4,train 2845,1,train -2628,3,train 2325,2,train -2366,3,train -2500,3,train +2063,2,train 3058,1,train -2796,1,train -2713,3,train -2317,3,train +64,2,train 3271,1,train 277,2,train 3009,1,train 3484,1,train 3088,1,train +3222,1,train 2826,1,train -3442,4,train +3005,3,train +3046,4,train 2347,3,train 2784,4,train +2481,3,train 3301,1,train 307,2,train 348,3,train @@ -42,169 +40,172 @@ parameter_index,simulation_index,split 2643,1,train 45,2,train 482,3,train +3039,1,train 3259,4,train -2560,3,train +3655,4,train 2694,3,train 778,1,train 3514,1,train 3555,2,train 957,3,train -3689,2,train 2856,1,train 299,3,train 2990,1,train 3076,4,train 2773,3,train +857,1,train 991,1,train -595,1,train +3768,2,train 3902,2,train -378,3,train 3506,2,train -75,2,train +512,3,train 3289,4,train 3027,4,train 2765,4,train 1070,1,train -808,1,train -546,1,train +3981,2,train +3585,2,train 1028,4,train -3323,2,train -725,3,train +3282,1,train 766,4,train -3502,4,train -463,3,train -3240,4,train +3061,2,train +67,3,train 2844,4,train +3240,4,train 2978,4,train -1283,1,train 625,1,train 1241,4,train 1375,4,train +979,4,train 3274,2,train -3191,4,train +3670,2,train +676,3,train 1496,1,train -972,1,train -576,1,train -1058,4,train +1275,2,train 1454,4,train +576,1,train +3353,2,train +3749,2,train 3790,3,train +796,4,train 3487,2,train +1051,1,train +1488,2,train 1185,1,train 3962,2,train 3566,2,train 4003,3,train 1009,4,train -3700,2,train -3741,3,train -1264,1,train -1305,2,train +706,3,train +1567,2,train 1701,2,train +1305,2,train 1484,4,train 606,1,train +1043,2,train 3820,3,train -826,4,train 3954,3,train -960,4,train 564,4,train 1914,2,train -1518,2,train 1652,2,train 1256,2,train 4033,3,train 1435,4,train +3771,3,train 777,4,train 1731,2,train -1335,2,train +1772,3,train 1032,1,train 1073,2,train -1252,4,train -3984,3,train 1944,2,train -2381,3,train 1723,3,train +4018,1,train +1420,2,train +1203,4,train +2198,3,train +1802,3,train 1936,3,train 1103,2,train +2494,1,train +2015,3,train 2452,4,train 1712,2,train 1316,2,train 2149,3,train 1491,3,train 2311,1,train -2445,1,train -2228,3,train +2665,4,train 1966,3,train -2524,1,train 2262,1,train 2699,2,train 2441,3,train -2000,1,train -2482,4,train +2878,4,train +2179,3,train 2616,4,train -1783,3,train 2737,1,train 2912,2,train +2079,1,train 2609,1,train 2213,1,train 2695,4,train 3091,4,train -2991,2,train +2829,4,train 2688,1,train 2292,1,train -3125,2,train +131,3,train 2426,1,train 2030,1,train +2512,4,train +2646,4,train 2250,4,train -427,1,train +293,1,train 2639,1,train 2243,1,train 2680,2,train 3121,4,train -2597,4,train 2201,4,train 244,1,train -423,3,train -3155,2,train +3417,2,train +2759,2,train +202,4,train 2456,1,train +2893,2,train +2676,4,train 2280,4,train 719,1,train 457,1,train 61,1,train 591,1,train -3368,2,train 3409,3,train -3106,2,train -2669,1,train +811,4,train +415,4,train 2710,2,train +2669,1,train 2493,4,train -2627,4,train 3705,1,train 670,1,train -408,1,train +711,2,train +3488,3,train 12,1,train -2923,2,train -2527,2,train -487,1,train -3701,3,train +232,4,train 621,1,train 662,2,train 3398,2,train -3573,3,train -3177,3,train +2740,2,train 142,3,train -579,4,train +183,4,train 741,2,train 3869,1,train 438,1,train 479,2,train -875,2,train +3256,3,train 4089,4,train 176,1,train +658,4,train 2953,2,train -3390,3,train 396,4,train 3948,1,train 1350,2,train -4082,1,train 3686,1,train 1088,2,train 692,2,train @@ -212,109 +213,119 @@ parameter_index,simulation_index,split 3865,3,train 389,1,train 3906,4,train -3207,3,train -347,4,train +213,4,train 3765,1,train 1167,2,train 1208,3,train -3899,1,train +468,1,train 509,2,train -3816,3,train +3682,3,train +643,2,train 3420,3,train -3857,4,train +3816,3,train 3554,3,train 560,4,train +1421,3,train 3716,1,train +1118,2,train +722,2,train +1159,3,train 1555,3,train -3454,1,train 856,2,train +3633,3,train 4070,4,train +3454,1,train 3237,3,train -3633,3,train -3674,4,train +3936,4,train 1851,1,train -1238,3,train -3929,1,train +1768,3,train 935,2,train 539,2,train 3667,1,train +3846,3,train 3450,3,train 1668,1,train 1847,3,train +1451,3,train 3746,1,train -1148,2,train -1585,3,train +1189,3,train 1626,4,train 3704,4,train 3838,4,train +2143,1,train 1747,1,train 1881,1,train 1798,3,train 1839,4,train -1536,3,train -1140,3,train 3917,4,train +4051,4,train 2094,1,train 2135,2,train 1832,1,train 1436,1,train -2052,4,train -1656,4,train +1353,3,train 2045,1,train -1649,1,train 2131,4,train 2265,4,train 1432,3,train -2427,2,train +1869,4,train 2124,1,train 2561,2,train -2344,4,train +1862,1,train 1466,1,train -1600,1,train -1686,4,train -2082,4,train +2344,4,train 1820,4,train 2640,2,train +2378,2,train 2075,1,train 1679,1,train 2116,2,train +1813,1,train 1899,4,train +2295,4,train 2033,4,train -76,1,train +1637,4,train 2853,2,train 2591,2,train 2195,2,train 1892,1,train -1933,2,train 2112,4,train 1850,4,train +27,1,train +2408,2,train 2845,3,train 2105,1,train 2146,2,train 2542,2,train 2325,4,train 1884,2,train +2063,4,train +106,1,train 147,2,train 2621,2,train 3058,3,train +64,4,train 2359,2,train -1963,2,train -2796,3,train 2097,2,train +3092,1,train 57,1,train 98,2,train 3271,3,train 277,4,train 2572,2,train 2176,2,train +2613,3,train 3009,3,train 3567,1,train -177,2,train 3305,1,train +311,2,train 3088,3,train +3222,3,train 2826,3,train +3780,1,train 3384,1,train -390,2,train +786,2,train +3518,1,train 87,1,train 128,2,train 2860,1,train @@ -322,184 +333,187 @@ parameter_index,simulation_index,split 307,4,train 2602,2,train 2643,3,train -3080,4,train +3039,3,train 45,4,train +3080,4,train 3342,4,train +644,3,train +3335,1,train 341,2,train 778,3,train +3073,1,train 3555,4,train -3689,4,train 2856,3,train 2990,3,train -3152,1,train +1074,1,train +3851,2,train +857,3,train +3548,1,train 991,3,train -595,3,train +158,2,train 3372,4,train +3768,4,train +292,2,train 3506,4,train -3110,4,train -75,4,train +4064,2,train 1070,3,train -674,3,train +3802,2,train 371,2,train -808,3,train +3103,1,train 3499,1,train -546,3,train -3323,4,train -1500,1,train -1104,1,train -1283,3,train +3585,4,train +3282,3,train +3981,4,train +3061,4,train +3881,2,train 842,1,train -3578,1,train +3619,2,train 4015,2,train 625,3,train -1062,4,train 3753,2,train 363,3,train 3140,4,train +3670,4,train 3274,4,train -1317,1,train 1055,1,train 3832,2,train -3966,2,train +1275,4,train 3570,2,train -972,3,train 576,3,train +3353,4,train +3749,4,train 3487,4,train 1571,2,train -1354,4,train -3649,2,train +872,1,train 4045,2,train -1092,4,train +1051,3,train +1488,4,train +3783,2,train +393,3,train 3566,4,train 1481,1,train 1085,1,train +1567,4,train 3862,2,train 1701,4,train 823,1,train 1305,4,train 4037,3,train 606,3,train -3734,2,train +1043,4,train 1560,1,train +1298,1,train 902,1,train -1518,4,train +1735,2,train 1122,4,train 3813,2,train 1256,4,train -2210,2,train 1814,2,train 1115,1,train -1552,2,train +1249,1,train 1731,4,train -1335,4,train 4026,2,train 4067,3,train 1032,3,train 1073,4,train 3805,3,train 2027,2,train +1765,2,train 1369,2,train +4018,3,train +1420,4,train 2240,2,train -1541,1,train 1978,2,train 2019,3,train 1716,2,train 1103,4,train -1795,2,train +2494,3,train +1399,2,train 1533,2,train 1316,4,train +2924,1,train 2528,1,train 2311,3,train -2008,2,train -1612,2,train 2049,3,train -2445,3,train 1787,3,train 2607,1,train 3137,1,train 2741,1,train -2524,3,train 2262,3,train 2699,4,train -1959,2,train -2000,3,train +2820,1,train +222,2,train 2954,1,train +1,3,train +2296,1,train 2737,3,train 2778,4,train 2912,4,train +2079,3,train 2213,3,train -1817,3,train 3033,1,train -3167,1,train 3208,2,train 2509,1,train -2991,4,train 2688,3,train 2292,3,train -3125,4,train 2426,3,train 2030,3,train -2984,1,train +293,3,train 3025,2,train 3421,2,train -427,3,train 2722,1,train -2808,4,train 2546,4,train 2243,3,train 2680,4,train -3634,2,train 2801,1,train 3238,2,train 244,3,train +2539,1,train 2976,2,train -3155,4,train +3417,4,train +2759,4,train 2456,3,train +2893,4,train 540,1,train 719,3,train 3451,2,train 3055,2,train 457,3,train 61,3,train +498,4,train 3189,2,train 2576,4,train -3106,4,train 2710,4,train 753,1,train +491,1,train 3664,2,train -3268,2,train 3705,3,train 670,3,train +711,4,train 2965,1,train 3006,2,train -408,3,train 12,3,train -2923,4,train -2527,4,train +2744,2,train 966,1,train -570,1,train +308,1,train 3481,2,train -487,3,train -528,4,train -3219,2,train 662,4,train 2957,2,train -783,1,train +2740,4,train 917,1,train +521,1,train 958,2,train 655,1,train -259,1,train 741,4,train -3036,2,train +3432,2,train +3473,3,train 438,3,train 479,4,train -875,4,train -3473,3,train +3869,3,train 176,3,train 2953,4,train -3869,3,train +338,1,train 3948,3,train -4082,3,train 558,4,train 3686,3,train 1088,4,train @@ -507,94 +521,86 @@ parameter_index,simulation_index,split 3383,2,train 1250,2,train 3982,1,train +947,1,train 551,1,train 988,2,train 3765,3,train 1167,4,train -3462,2,train 3503,3,train -3899,3,train +468,3,train 509,4,train 3241,3,train -764,1,train -805,2,train +643,4,train 1201,2,train -939,2,train +805,2,train 3716,3,train +722,4,train 3454,3,train 856,4,train 1676,2,train 1414,2,train 1018,2,train -1455,3,train 1851,3,train -1152,2,train -756,2,train 3750,1,train -3929,3,train +1152,2,train 935,4,train 539,4,train 3667,3,train 1231,2,train 1668,3,train -1365,2,train +3963,1,train 969,2,train 3746,3,train 3921,4,train +2143,3,train 1747,3,train +4042,1,train 1881,3,train -1485,3,train 1182,2,train 1223,3,train -2043,1,train -2177,1,train 1915,1,train 2094,3,train 2135,4,train -1832,3,train +1395,2,train 1436,3,train -1994,1,train +1832,3,train +2390,1,train +2128,1,train 1732,1,train -1515,3,train -1649,3,train +2214,4,train 1253,3,train -2207,1,train 2341,1,train 1945,1,train -2427,4,train 2124,3,train 2561,4,train +1862,3,train 1466,3,train 1903,4,train -1600,3,train 2420,1,train 2158,1,train +1762,1,train 2640,4,train -1896,1,train -1982,4,train +2378,4,train 1679,3,train 2116,4,train -76,3,train 2371,1,train 2412,2,train 2853,4,train -2109,1,train -2195,4,train 2591,4,train +2195,4,train 1892,3,train -1933,4,train 110,1,train 2887,2,train 2491,2,train 2188,1,train 1792,1,train -2625,2,train +2408,4,train 2542,4,train 2146,4,train 1884,4,train 189,1,train 323,1,train -2704,2,train +106,3,train 147,4,train 2401,1,train 2442,2,train @@ -602,130 +608,141 @@ parameter_index,simulation_index,split 2621,4,train 2180,2,train 2359,4,train -1963,4,train 2097,4,train 2917,2,train +2655,2,train +3092,3,train 98,4,train -2393,2,train 2572,4,train 2176,4,train 3388,1,train 353,1,train 394,2,train -790,2,train 3567,3,train -177,4,train -2909,3,train 3305,3,train +2909,3,train +311,4,train +2606,2,train +473,2,train 3601,1,train 170,1,train 607,2,train 3384,3,train -390,4,train +3780,3,train +3518,3,train 128,4,train 2819,2,train 2860,3,train -3680,1,train -686,2,train +3814,1,train 820,2,train 861,3,train 3156,1,train -2939,3,train +3335,3,train 341,4,train -2677,3,train -899,2,train -3631,1,train +3073,3,train +3893,1,train 4027,1,train -637,2,train -375,2,train -3152,3,train +3631,1,train +1074,3,train +3851,4,train +771,2,train +3548,3,train +158,4,train +292,4,train +3448,1,train 3885,2,train 891,3,train +3186,1,train 3582,1,train 588,2,train -192,2,train +3802,4,train +4064,4,train 371,4,train -1500,3,train -1104,3,train +3103,3,train +667,2,train 3399,1,train +3795,1,train +3881,4,train 4015,4,train -405,2,train 842,3,train -3578,3,train +3619,4,train 3753,4,train 3357,4,train -1400,1,train 1138,1,train 3874,1,train 3915,2,train -1317,3,train 921,3,train -3216,1,train 3612,1,train 618,2,train 1055,3,train 3832,4,train -4049,2,train -3966,4,train 3570,4,train 1351,1,train 1571,4,train -3825,1,train +3429,1,train 3866,2,train +872,3,train 4045,4,train -3649,4,train -1826,1,train +3783,4,train 1564,1,train -4079,2,train 1085,3,train 689,3,train 3862,4,train 823,3,train -3734,4,train +2039,1,train 1777,1,train +1381,1,train 1560,3,train 1119,1,train 3896,2,train +1298,3,train 902,3,train +1735,4,train 4030,2,train 3813,4,train 1856,1,train -1594,1,train -1198,1,train 2031,2,train -1332,1,train +1198,1,train 1814,4,train +1418,4,train 1115,3,train -1552,4,train +1249,3,train 4026,4,train 2110,2,train 1807,1,train -1848,2,train -2244,2,train +1411,1,train 1545,1,train 2027,4,train +3926,2,train +1765,4,train 1369,4,train -1362,1,train +1107,4,train +1927,2,train +1624,1,train 1978,4,train 1716,4,train -2536,2,train 1878,2,train +2315,3,train 1575,1,train -1795,4,train +1616,2,train +1399,4,train 1533,4,train +2924,3,train 2528,3,train 2225,2,train -2008,4,train -1612,4,train -2824,1,train +1829,2,train 2607,3,train 2304,2,train 2345,3,train 2741,3,train +2042,2,train 1646,2,train 3037,1,train +43,2,train +2820,3,train 2954,3,train 2255,2,train +2296,3,train 3250,1,train 2854,1,train 3033,3,train @@ -733,26 +750,28 @@ parameter_index,simulation_index,split 3208,4,train 2375,3,train 2509,3,train -3463,1,train -3067,1,train 73,2,train 2805,1,train -2984,3,train -3025,4,train +3201,1,train 3421,4,train +3025,4,train 2722,3,train -3280,1,train -2884,1,train +286,2,train 327,3,train 2622,1,train 24,2,train 2801,3,train 3238,4,train +2539,3,train 2976,4,train 3493,1,train +3097,1,train +3534,2,train 540,3,train 2835,1,train +237,2,train 2969,1,train +2573,1,train 3055,4,train 3451,4,train 3189,4,train @@ -761,482 +780,471 @@ parameter_index,simulation_index,split 574,1,train 753,3,train 357,3,train -2652,1,train -3485,2,train -95,3,train +54,2,train 2786,1,train -3268,4,train +95,3,train +491,3,train 3006,4,train +2744,4,train +1049,1,train 1183,1,train +787,1,train +3960,2,train 966,3,train -570,3,train -2865,1,train -745,4,train +3302,2,train +308,3,train +2999,1,train 3481,4,train -3219,4,train 2823,4,train 2957,4,train -1262,1,train 866,1,train 604,1,train -3777,2,train -783,3,train -3515,2,train 3911,2,train +3515,2,train +521,3,train 958,4,train -125,3,train +3253,2,train 655,3,train -259,3,train -3036,4,train +3432,4,train 1475,1,train -1079,1,train +1213,1,train +1254,2,train 3990,2,train +4031,3,train +951,1,train 555,1,train -3332,2,train 3728,2,train +3769,3,train +338,3,train +775,4,train 3466,2,train -3070,2,train 1333,2,train 1030,1,train -634,1,train -1467,2,train 1250,4,train 3545,2,train 3982,3,train 551,3,train 988,4,train -3679,2,train -3462,4,train +1546,2,train 1680,2,train 1284,2,train -981,1,train 585,1,train -1022,2,train 3758,2,train -764,3,train -805,4,train 1201,4,train -939,4,train -543,4,train -1759,2,train +805,4,train 1893,2,train +1497,2,train 798,1,train 1235,2,train 1414,4,train 1018,4,train 3750,3,train 1152,4,train -756,4,train 1972,2,train 1710,2,train 1314,2,train -4046,1,train -3829,3,train 1231,4,train +3963,3,train 969,4,train 1661,2,train +1265,2,train +4042,3,train 1182,4,train -2043,3,train -2177,3,train +2260,1,train 4076,1,train 1478,2,train -1082,2,train 1915,3,train -2211,1,train -1994,3,train +2390,3,train 1691,2,train +1295,2,train 1732,3,train -2290,1,train +2128,3,train +2686,1,train 2424,1,train -2207,3,train 1945,3,train 2503,1,train 2637,1,train 2420,3,train -1979,1,train +1721,2,train +1762,3,train 2158,3,train -2199,4,train -1896,3,train +2716,1,train +2454,1,train +2192,1,train 2412,4,train 1579,3,train -2109,3,train 193,1,train -2970,2,train +2929,1,train +2667,1,train 2271,1,train -2708,2,train 110,3,train -2887,4,train +2405,1,train 2491,4,train +2887,4,train 2188,3,train 1792,3,train 2229,4,train -2625,4,train +1967,4,train +406,1,train 10,1,train 2787,2,train -3183,2,train 189,3,train 2484,1,train -2921,2,train +2088,1,train 3317,2,train -2704,4,train +2222,1,train 2442,4,train 2180,4,train 223,1,train 3396,2,train 2697,1,train 2738,2,train -3175,3,train +181,4,train 2917,4,train -2476,2,train +2655,4,train 2259,4,train -2393,4,train -436,1,train +40,1,train +174,1,train 2951,2,train 3388,3,train -790,4,train 394,4,train +2689,2,train 3085,2,train -3684,1,train +2606,4,train 649,1,train 253,1,train +690,2,train 3467,3,train -3164,2,train +473,4,train 2768,2,train -3601,3,train +3164,2,train 170,3,train -211,4,train 607,4,train -2506,2,train 2902,2,train -466,1,train +3205,3,train +3601,3,train 70,1,train -903,2,train -3680,3,train 204,1,train -686,4,train 2981,2,train +3377,2,train 820,4,train -3115,2,train +3814,3,train 3156,3,train -3377,2,train -3714,1,train 679,1,train 720,2,train -1116,2,train +3893,3,train 417,1,train 458,2,train -899,4,train -3235,3,train -637,4,train -241,4,train 3631,3,train -375,4,train +2932,2,train 1329,2,train 3665,1,train +3448,3,train 3885,4,train 368,1,train 3145,2,train +3186,3,train 3582,3,train 588,4,train -192,4,train 3744,1,train 1146,2,train 750,2,train 1187,3,train 3964,4,train -884,2,train +667,4,train 3399,3,train -405,4,train -9,4,train 3957,1,train -1400,3,train +4091,1,train 1138,3,train 3874,3,train 3915,4,train 3612,3,train -3216,3,train -4049,4,train +3653,4,train 618,4,train 3512,1,train 1351,3,train 3646,1,train +3429,3,train 3866,4,train -1826,3,train -3725,1,train +1647,1,train +1127,2,train 1564,3,train -731,2,train 865,2,train -4079,4,train 1726,1,train +1860,1,train 1464,1,train -3938,1,train +1381,3,train 1119,3,train 3896,4,train 4030,4,train +2073,1,train +1677,1,train 1856,3,train -1594,3,train -1198,3,train +1415,1,train 2031,4,train -1332,3,train +1198,3,train 936,3,train +2152,1,train 1890,1,train 1494,1,train -2327,2,train +1628,1,train 2110,4,train -2244,4,train -1848,4,train +1411,3,train 1545,3,train +3926,4,train 2144,2,train 1841,1,train 1445,1,train +1927,4,train +1624,3,train 1665,4,train -1362,3,train 2753,2,train -1920,1,train 1658,1,train 1878,4,train 1575,3,train -55,1,train +1616,4,train +2012,4,train 2133,1,train -1871,1,train -1912,2,train 2308,2,train -1695,4,train +1912,2,train +1829,4,train 6,1,train -2387,2,train -2824,3,train -2521,2,train 2125,2,train 2304,4,train +2042,4,train 1646,4,train 85,1,train 126,2,train 3037,3,train +2641,3,train +43,4,train 1942,2,train -2076,2,train 339,2,train 77,2,train 2854,3,train 3250,3,train +2155,2,train 2592,3,train 2289,2,train -115,1,train 3284,1,train -3067,3,train -2671,3,train +290,2,train 73,4,train 2805,3,train +3201,3,train 3363,1,train 765,2,train 369,2,train -3280,3,train -2884,3,train +3497,1,train +503,2,train 3321,4,train +286,4,train 2581,2,train 2622,3,train +3059,4,train 24,4,train 3180,1,train 582,2,train 623,3,train -3314,1,train 320,2,train +3097,3,train +3534,4,train 2835,3,train 2969,3,train -795,2,train +2573,3,train +3789,1,train 836,3,train -3131,1,train 3527,1,train 533,2,train 137,2,train 574,3,train 970,3,train -2869,1,train -3265,1,train -2652,3,train -3485,4,train -3747,4,train +54,4,train 2786,3,train -3781,2,train +1266,1,train +1049,3,train +653,3,train +2948,1,train 1183,3,train -350,2,train 3478,1,train -2865,3,train -3860,2,train -1262,3,train +350,2,train +787,3,train +3344,1,train +88,2,train +3302,4,train +3960,4,train +2999,3,train 866,3,train 3161,1,train -3598,2,train +3994,2,train 563,2,train -3777,4,train 604,3,train 1041,4,train -3295,1,train -301,2,train -342,3,train -3119,4,train 3336,2,train +342,3,train 3515,4,train -1162,1,train +3253,4,train +1296,1,train +900,1,train 4073,2,train -1079,3,train 3990,4,train -3728,4,train +1254,4,train +3549,2,train +951,3,train 555,3,train -3332,4,train +3728,4,train 3466,4,train -3070,4,train -1113,1,train -851,1,train 1333,4,train +3628,2,train 4024,2,train 1030,3,train -634,3,train -1467,4,train 3366,2,train 3545,4,train 1326,1,train 930,1,train 1460,1,train -1064,1,train +1546,4,train 3841,2,train +1064,1,train 1680,4,train 1284,4,train 3579,2,train -981,3,train +3975,2,train 585,3,train -1022,4,train 3758,4,train -1976,2,train -1143,1,train +1539,1,train 1580,2,train -1759,4,train -4054,2,train +1497,4,train 1101,4,train 3792,2,train 798,3,train 1235,4,train +2189,2,train +1793,2,train +1490,1,train 1094,1,train 1228,1,train 1314,4,train 1710,4,train -4046,3,train +4005,2,train +1610,2,train 1307,1,train +911,1,train +1348,2,train 1744,2,train +1265,4,train 869,4,train 2219,2,train 1823,2,train +2260,3,train +1957,2,train 1561,2,train 4076,3,train 1478,4,train -1082,4,train 1774,2,train -2211,3,train +1378,2,train +1295,4,train 2507,1,train -2290,3,train +2686,3,train 1987,2,train 2424,3,train +2720,1,train 2503,3,train 2107,3,train 2637,3,train -1804,2,train -1979,3,train 2799,1,train -2933,1,train -2537,1,train +2716,3,train 2275,1,train +2757,4,train +2454,3,train +2192,3,train 1796,3,train 3012,1,train -2750,1,train 193,3,train -2970,4,train +2488,1,train +2667,3,train 2271,3,train -2708,4,train +2405,3,train +3225,1,train 3400,2,train 2567,1,train 3004,2,train +406,3,train 10,3,train +2305,1,train 2787,4,train -3183,4,train +2701,1,train 2484,3,train +2088,3,train 2525,4,train -2921,4,train -3613,2,train +2222,3,train 89,3,train 2780,1,train -3217,2,train 223,3,train +2518,1,train 3396,4,train 2738,4,train -2476,4,train 519,1,train 3296,2,train 257,1,train 2993,1,train 3034,2,train -436,3,train -477,4,train -2731,1,train -2772,2,train +3430,2,train +40,3,train 3168,2,train +2772,2,train +174,3,train 2951,4,train -3430,2,train -3684,3,train +2689,4,train +732,1,train +3247,2,train 253,3,train +690,4,train 2548,1,train -2944,1,train 2985,2,train 3164,4,train 2768,4,train -3381,2,train 2902,4,train -2506,4,train -683,1,train +549,1,train 287,1,train 3064,2,train -466,3,train +3460,2,train 70,3,train 507,4,train -903,4,train +2761,1,train 204,3,train -2802,2,train 2981,4,train 896,1,train 500,1,train -3673,2,train -3714,3,train -1116,4,train 238,1,train 720,4,train +3411,2,train 417,3,train -3149,2,train 458,4,train +2932,4,train 975,1,train 1016,2,train 713,1,train -317,1,train -754,2,train -3228,2,train +1150,2,train +451,1,train 3665,3,train 3961,1,train 926,1,train -530,1,train -967,2,train 1363,2,train +3744,3,train 664,1,train 750,4,train 1146,4,train 3441,2,train -884,4,train -3744,3,train 4040,1,train -1442,2,train 1046,2,train -1180,2,train 784,2,train 3957,3,train +4091,3,train 1655,2,train 1259,2,train +997,2,train 1434,3,train +3729,1,train 1131,2,train 735,2,train 3512,3,train @@ -1244,303 +1252,316 @@ parameter_index,simulation_index,split 3646,3,train 1210,2,train 814,2,train -3725,3,train -731,4,train +1647,3,train +1344,2,train +3942,1,train 865,4,train 1943,1,train 1726,3,train 4021,1,train +1860,3,train +1027,2,train 1464,3,train +3759,1,train 1161,2,train -3938,3,train +1202,3,train 2156,1,train -3972,1,train +2073,3,train +1677,3,train +1415,3,train +2152,3,train +1711,1,train 1890,3,train 1494,3,train 1931,4,train -2327,4,train +1628,3,train 1232,3,train +4009,4,train 2448,1,train 2144,4,train 1841,3,train 1445,3,train +2399,1,train +2440,2,train 1741,1,train 2223,4,train -1920,3,train 1961,4,train 1658,3,train -55,3,train -1954,1,train +2653,2,train 2391,2,train -1871,3,train -1912,4,train 2308,4,train +1912,4,train 2866,2,train 2470,2,train 2167,1,train -2604,2,train -2387,4,train +1771,1,train 1991,4,train 2125,4,train 168,1,train 302,1,train 3079,2,train -2683,2,train 126,4,train 2380,1,train 2421,2,train 2159,2,train 1942,4,train -2076,4,train +381,1,train 339,4,train -2197,1,train -2238,2,train 2634,2,train +2238,2,train 77,4,train +2372,2,train +2155,4,train 2289,4,train 198,1,train 332,1,train -3109,2,train -3284,3,train +373,2,train +2847,2,train 2888,3,train -2585,2,train -3446,1,train +3284,3,train +290,4,train +452,2,train +3580,1,train 149,1,train -586,2,train 3363,3,train 369,4,train 2664,2,train -2268,2,train +3497,3,train 3659,1,train 665,2,train -3397,1,train -362,1,train +3793,1,train 799,2,train 3180,3,train -100,1,train 582,4,train +141,2,train 2877,2,train 2918,3,train 320,4,train -3314,3,train 2656,3,train +3872,1,train 3476,1,train +878,2,train 4006,1,train -3610,1,train 616,2,train 220,2,train 3348,1,train -354,2,train -3131,3,train 3527,3,train 137,4,train -2869,3,train -3265,3,train +4085,1,train +1091,2,train +829,2,train +1266,3,train 3561,1,train 130,1,train 171,2,train 567,2,train -3385,4,train +2948,3,train 350,4,train -3781,4,train +3344,3,train +3385,4,train +88,4,train 4036,1,train -3640,1,train 646,2,train 3378,1,train 3774,1,train 780,2,train -3860,4,train -3161,3,train -3598,4,train 3994,4,train -3295,3,train +3161,3,train 3336,4,train -301,4,train 1379,1,train -1162,3,train -3853,1,train 3894,2,train -3591,1,train -4073,4,train +859,2,train +900,3,train +1296,3,train +3195,1,train 597,2,train -3811,4,train +638,3,train 3415,4,train +3811,4,train +4073,4,train +3549,4,train 1592,1,train -1330,1,train -1113,3,train -3408,1,train 3804,1,train 3845,2,train -851,3,train 4024,4,train +3628,4,train 3366,4,train +1805,1,train +1409,1,train +1543,1,train 1326,3,train 930,3,train +1367,4,train 627,2,train +668,3,train 1064,3,train 3841,4,train +3975,4,train 3579,4,train -1622,1,train -1976,4,train -1143,3,train +1360,1,train +1539,3,train 1580,4,train -4054,4,train 3792,4,train 1835,1,train +1876,2,train +1793,4,train 915,1,train -1397,4,train -4088,2,train 1094,3,train 698,3,train +4005,4,train 2089,2,train +1786,1,train +1390,1,train 1827,2,train 1524,1,train 1128,1,train -3905,2,train +1610,4,train 1307,3,train +911,3,train +1348,4,train 1744,4,train 2302,2,train 1906,2,train 1603,1,train 1207,1,train 2040,2,train -1341,1,train 1823,4,train +1957,4,train 1561,4,train 2515,2,train 2119,2,train +2253,2,train 2294,3,train 1774,4,train +1378,4,train 2332,2,train 2070,2,train 2507,3,train -2204,2,train -1808,2,train +2803,1,train +2720,3,train 1887,2,train +2324,3,train 2021,2,train 1625,2,train -1804,4,train 22,2,train 2799,3,train -2933,3,train 2100,2,train -2537,3,train 1838,2,train 2275,3,train 101,2,train 235,2,train 3012,3,train -2750,3,train +2313,2,train 2051,2,train 2092,3,train +2488,3,train 314,2,train -3442,1,train +3046,1,train 2784,1,train 3400,4,train 2567,3,train 3004,4,train 2264,2,train +2305,3,train +2701,3,train 3259,1,train -2863,1,train -3300,2,train -2601,1,train -3083,4,train +306,3,train +3,2,train 2780,3,train -3217,4,train +2518,3,train 2122,3,train 3076,1,train 3513,2,train -82,2,train -3296,4,train 519,3,train +3296,4,train 257,3,train +2552,1,train 2993,3,train 3034,4,train -3430,4,train -2731,3,train -2772,4,train 3168,4,train +2772,4,train +3430,4,train 3289,1,train 3726,2,train 295,2,train +732,3,train 3027,1,train -3464,2,train -33,2,train 74,3,train 2765,1,train -3381,4,train +2851,4,train +3247,4,train 2548,3,train 2985,4,train 1028,1,train 766,1,train -3543,2,train 3939,2,train -3240,1,train +549,3,train 2844,1,train -683,3,train +3240,1,train +3677,2,train 287,3,train 2978,1,train 3064,4,train -2802,4,train +3460,4,train +2761,3,train 1241,1,train +845,1,train +979,1,train 803,4,train 3494,2,train 500,3,train +104,3,train 238,3,train -3149,4,train -1058,1,train +3411,4,train +796,1,train 975,3,train 534,1,train 1016,4,train 3311,2,train 713,3,train -317,3,train -754,4,train -3049,2,train +1150,4,train 3445,2,train -3228,4,train 3707,2,train +451,3,train +3748,3,train 1009,1,train -613,1,train +1446,2,train 833,4,train 3961,3,train 1363,4,train -530,3,train -967,4,train -3658,2,train +3262,2,train 3441,4,train -826,1,train -1263,2,train +1659,2,train 4040,3,train -960,1,train 564,1,train 1046,4,train -1442,4,train -1180,4,train -784,4,train 3778,3,train +784,4,train 522,4,train 1738,2,train 1342,2,train 1476,2,train 777,1,train 1259,4,train +997,4,train 3688,2,train +3729,3,train 1131,4,train 735,4,train 1951,2,train -1252,1,train -1293,2,train 1689,2,train +1293,2,train 4025,1,train 1427,2,train 1210,4,train 814,4,train -1506,2,train +3942,3,train 1943,3,train 1640,2,train 1244,2,train 4021,3,train +1027,4,train +3759,3,train 1161,4,train 1719,2,train 1323,2,train @@ -1548,142 +1569,148 @@ parameter_index,simulation_index,split 4055,1,train 1457,2,train 1061,2,train -3972,3,train 2452,1,train 1670,2,train +1274,2,train +1711,3,train +2665,1,train +2269,1,train 2448,3,train 2007,1,train +1790,3,train 1487,2,train -2482,1,train +2878,1,train 2616,1,train +2399,3,train +2440,4,train 1700,2,train 1741,3,train 2695,1,train 2299,1,train -2736,2,train -1954,3,train -1558,3,train +2653,4,train 2391,4,train +2512,1,train +2646,1,train 2250,1,train +2687,2,train 2866,4,train -1988,1,train 2470,4,train 2167,3,train -2604,4,train +1771,3,train +2766,2,train 168,3,train 2900,2,train 2201,1,train 2287,4,train -2683,4,train 2421,4,train 2159,4,train -3375,2,train -3113,2,train +202,1,train +381,3,train +2676,1,train 2280,1,train -2197,3,train -2238,4,train +2717,2,train +2455,2,train 2634,4,train +2238,4,train +2372,4,train 281,1,train +415,1,train 198,3,train -239,4,train 2493,1,train 2930,2,train +3326,2,train +373,4,train 2668,2,train -2585,4,train +2847,4,train +232,1,train 669,2,train 3405,2,train -3446,3,train -3143,2,train +452,4,train +3580,3,train 149,3,train -586,4,train +2485,2,train 2664,4,train -2268,4,train +882,2,train 3659,3,train -665,4,train +183,1,train 269,4,train -2960,2,train +665,4,train 799,4,train -3397,3,train +3793,3,train 2698,2,train +141,4,train 2877,4,train 4089,1,train -1095,2,train +3693,1,train +658,1,train 699,2,train -3476,3,train +1095,2,train +3872,3,train 396,1,train +437,2,train +878,4,train 3173,2,train -3610,3,train 616,4,train 220,4,train -2911,2,train 3348,3,train -354,4,train +3476,3,train 3906,1,train 912,2,train -347,1,train +4085,3,train +213,1,train +650,2,train +829,4,train 3124,2,train 3561,3,train 567,4,train 171,4,train 3723,1,train 729,2,train -1166,3,train 3461,1,train 863,2,train 467,2,train 3244,3,train -3640,3,train 646,4,train 3378,3,train -3857,1,train +3936,1,train 942,2,train 1379,3,train -3674,1,train -1076,2,train -3853,3,train -3894,4,train 4070,1,train -3591,3,train +3894,4,train +3195,3,train 3632,4,train 597,4,train -1155,2,train 1592,3,train -3491,1,train 893,2,train 497,2,train -1330,3,train -3408,3,train 3845,4,train 1626,1,train +1805,3,train +1409,3,train 3704,1,train -710,2,train +1543,3,train 3838,1,train 844,2,train 3662,4,train 627,4,train 1839,1,train -1622,3,train +1443,1,train 1226,3,train 3917,1,train 923,2,train -964,3,train -2052,1,train -1656,1,train +1360,3,train 1835,3,train -3909,2,train +1876,4,train 915,3,train -4088,4,train 2131,1,train +1869,1,train 1473,1,train 2089,4,train +1390,3,train 1827,4,train 1524,3,train 1128,3,train -3905,4,train 2344,1,train -2082,1,train -1686,1,train -2519,2,train 1820,1,train 1424,1,train 1906,4,train @@ -1691,138 +1718,137 @@ parameter_index,simulation_index,split 1603,3,train 1207,3,train 2040,4,train -1341,3,train 2202,2,train 1899,1,train 1503,1,train -2336,2,train +1637,1,train 2119,4,train +2253,4,train 2112,1,train -2549,2,train +2153,2,train 2590,3,train 1850,1,train -1891,2,train 2332,4,train 2070,4,train -1808,4,train -2628,2,train -2366,2,train -2500,2,train +1412,4,train +2803,3,train 2104,2,train 1887,4,train 2021,4,train 1625,4,train +64,1,train 22,4,train -2317,2,train 1921,2,train 2100,4,train 1838,4,train 101,4,train 235,4,train +2134,2,train +2313,4,train 2051,4,train 3129,1,train 2867,1,train 314,4,train -2650,3,train +3046,3,train 2347,2,train 2784,3,train 3342,1,train 348,2,train 3080,1,train 482,2,train +86,2,train 3259,3,train -2863,3,train -3300,4,train -2560,2,train -2601,3,train +3,4,train 3555,1,train 2897,1,train 299,2,train 3076,3,train 3513,4,train -82,4,train +2552,3,train +3768,1,train 3372,1,train -378,2,train -3110,1,train 3506,1,train +512,2,train 3726,4,train 2848,1,train 3289,3,train 295,4,train 3027,3,train -3464,4,train -33,4,train +3068,4,train 2765,3,train +849,1,train +3585,1,train 1028,3,train 632,3,train 2927,1,train -3323,1,train 766,3,train -3543,4,train +3061,1,train 3939,4,train +67,2,train 2844,3,train +3677,4,train 2978,3,train -1062,1,train +3839,2,train 1241,3,train +845,3,train 3140,1,train 3577,2,train -146,2,train +979,3,train 3274,1,train -321,3,train -3098,4,train 3494,4,train -3656,2,train -1058,3,train +3098,4,train +2836,4,train +1275,1,train +3353,1,train 3790,2,train -3528,2,train +796,3,train 534,3,train 3311,4,train 3707,4,train 3445,4,train -3049,4,train -1354,1,train -1092,1,train +1488,1,train 4003,2,train 3566,1,train -4044,3,train +3607,2,train 1009,3,train -613,3,train -1050,4,train -3741,2,train +1446,4,train +4044,3,train 3128,4,train +3262,4,train +1567,1,train 1305,1,train 909,1,train +1043,1,train 3820,2,train -826,3,train +1659,4,train +3954,2,train 430,3,train -1263,4,train -960,3,train -564,3,train 3558,2,train -3954,2,train -1518,1,train +564,3,train 1122,1,train +1559,2,train 1256,1,train 1342,4,train 1738,4,train -3637,2,train -1476,4,train 4033,2,train +1476,4,train +3771,2,train 4074,3,train 777,3,train -818,4,train -1335,1,train +1638,2,train +1772,2,train 1073,1,train 1689,4,train 1293,4,train -3984,2,train 4025,3,train 1427,4,train 1723,2,train 890,1,train -1506,4,train +1327,2,train 1110,4,train 1244,4,train +2198,2,train +1802,2,train 1936,2,train 1103,1,train 1719,4,train @@ -1830,194 +1856,195 @@ parameter_index,simulation_index,split 4055,3,train 1457,4,train 1061,4,train -2452,3,train +2015,2,train 2056,3,train +2452,3,train 1316,1,train +1357,2,train 1491,2,train +1274,4,train +2665,3,train +2269,3,train 1966,2,train +1570,2,train 2007,3,train 1487,4,train +2565,1,train 2699,1,train -2482,3,train -2086,3,train -1783,2,train 1387,2,train 2778,1,train 2912,1,train 2516,1,train 2695,3,train 2299,3,train -2736,4,train -2991,1,train +1775,3,train 2595,1,train +2512,3,train 2250,3,train -1988,3,train -2808,1,train +2687,4,train 2546,1,train 2983,2,train 2680,1,train 2284,1,train +2766,4,train 2900,4,train 2201,3,train 285,1,train 68,3,train 2363,1,train +2759,1,train +202,3,train +2893,1,train 3196,2,train -3375,4,train -3113,4,train 2280,3,train +2717,4,train +2455,4,train +498,1,train 281,3,train 2576,1,train 3013,2,train -3409,2,train +415,3,train 2710,1,train -2314,1,train -2751,2,train +3409,2,train 2493,3,train 2534,4,train 2930,4,train 2668,4,train 577,1,train +711,1,train +3488,2,train 3226,2,train +232,3,train 669,4,train -2527,1,train -2923,1,train -2964,2,train -3143,4,train -528,1,train -3701,2,train +2485,4,train 662,1,train 3043,2,train -3177,2,train +3480,3,train +882,4,train +2740,1,train 2781,2,train -2960,4,train +183,3,train 2698,4,train 741,1,train -345,1,train -875,1,train 479,1,train -4089,3,train +3256,2,train +3693,3,train 1095,4,train 699,4,train -3390,2,train +4089,3,train 396,3,train +437,4,train 3173,4,train -2911,4,train -3989,1,train 558,1,train 995,2,train 3772,3,train 692,1,train 296,1,train -733,2,train +3510,3,train 3469,2,train 912,4,train 34,1,train -516,4,train 2811,2,train -3207,2,train 3906,3,train +213,3,train +650,4,train 1208,2,train +3940,1,train 509,1,train 946,2,train -3723,3,train +3682,2,train +643,1,train 729,4,train 3420,2,train 3461,3,train 863,4,train 467,4,train -3857,3,train -4019,1,train -763,2,train -3540,3,train +3723,3,train +1421,2,train +722,1,train +326,1,train +1159,2,train +3936,3,train 942,4,train 3237,2,train -3674,3,train 4070,3,train 284,4,train -1238,2,train 3970,1,train 539,1,train -1155,4,train 714,2,train 3450,2,train -3491,3,train +3928,4,train 893,4,train 497,4,train -1626,3,train +1451,2,train +1189,2,train 793,2,train +1626,3,train 3921,1,train 3704,3,train -710,4,train 3838,3,train 844,4,train 1922,1,train 4000,1,train 1839,3,train 1006,2,train +1443,3,train 3738,1,train -1140,2,train 3917,3,train 3958,4,train 923,4,train 2135,1,train +1522,3,train 3817,1,train -2052,3,train -1656,3,train -3909,4,train +2214,1,train 2131,3,train 1690,1,train 1432,2,train 1473,3,train +1869,3,train 1910,4,train 1211,3,train -2427,1,train -1769,1,train +3988,4,train 1903,1,train -2519,4,train -1686,3,train 1820,3,train 1424,3,train 2640,1,train -1982,1,train +2378,1,train 2419,2,train 2116,1,train 2202,4,train 1899,3,train 1503,3,train 1940,4,train -2336,4,train +1637,3,train 2195,1,train -1933,1,train -2549,4,train +2153,4,train 1850,3,train -1891,4,train +2711,2,train +2408,1,train +2449,2,train 2845,2,train 2146,1,train -2628,4,train 1884,1,train -1970,4,train -2366,4,train 2104,4,train 147,1,train 3058,2,train 2359,1,train -1963,1,train 2400,2,train -2796,2,train 2097,1,train -2317,4,train +2183,4,train 1921,4,train 98,1,train -2479,2,train 2176,1,train -177,1,train +2613,2,train +2134,4,train +311,1,train 3088,2,train 3129,3,train 2826,2,train +2430,2,train 2867,3,train 2347,4,train -390,1,train 431,2,train 128,1,train 169,2,train @@ -2026,366 +2053,361 @@ parameter_index,simulation_index,split 2643,2,train 2247,2,train 3080,3,train +86,4,train +644,2,train 3376,1,train 778,2,train -382,2,train 3555,3,train 2856,2,train 2460,2,train 2897,3,train 299,4,train 2635,3,train -3455,1,train -595,2,train +3851,1,train +857,2,train +158,1,train 3372,3,train -378,4,train -3110,3,train 3506,3,train 2848,3,train +4064,1,train 1070,2,train -674,2,train -3843,2,train -808,2,train +3802,1,train 412,2,train -546,2,train -150,2,train +849,3,train +3585,3,train +3626,4,train 2927,3,train -3323,3,train +3364,4,train +3061,3,train +67,4,train +3881,1,train +3619,1,train 625,2,train -1062,3,train 3357,1,train 3753,1,train +3839,4,train 363,2,train 3140,3,train 3577,4,train -146,4,train 3274,3,train 3832,1,train 3436,1,train -3873,2,train +1275,3,train 442,2,train 3174,1,train 3570,1,train 576,2,train 180,2,train -3394,4,train -3656,4,train +617,3,train +3353,3,train 3790,4,train -3528,4,train 1571,1,train -1354,3,train -3649,1,train 4086,2,train -1092,3,train +1488,3,train +3783,1,train +3824,2,train +393,2,train +3607,4,train 4003,4,train -3741,4,train +1567,3,train 1126,1,train 3862,1,train +3903,2,train 1305,3,train 909,3,train 3641,2,train 4037,2,train 606,2,train -647,3,train +1043,3,train 3820,4,train 3558,4,train +1735,1,train 1122,3,train +1559,4,train 3813,1,train -3854,2,train 1256,3,train +3854,2,train 4033,4,train -3637,4,train +3771,4,train 1814,1,train -1855,2,train -1552,1,train +1418,1,train 1156,1,train -1335,3,train +1638,4,train +1772,4,train 894,1,train +1376,4,train 4067,2,train 1073,3,train 677,3,train 3805,2,train 2068,2,train +1765,1,train 1369,1,train 1806,2,train +1107,1,train 1723,4,train 890,3,train +1327,4,train +4018,2,train 1885,2,train 2019,2,train -1623,2,train +1186,1,train +1802,4,train 1406,4,train 1103,3,train +2494,2,train 2098,2,train -1795,1,train +1399,1,train 1836,2,train 1533,1,train +2015,4,train 1316,3,train +1357,4,train 1491,4,train 2311,2,train -1612,1,train 2049,2,train +1653,2,train 1787,2,train -2524,2,train +1570,4,train +1174,4,train +2565,3,train 2262,2,train -2303,3,train +1866,2,train 2699,3,train -2000,2,train -1783,4,train +1604,2,train 1387,4,train +1,2,train 2778,3,train 2912,3,train +2079,2,train 2516,3,train -1683,2,train 2213,2,train -1817,2,train 80,2,train +2812,1,train 3208,1,train -2991,3,train 2595,3,train 2292,2,train 2770,4,train 2030,2,train 2071,3,train -3421,1,train +2891,1,train +293,2,train 3025,1,train -2808,3,train +3421,1,train 2546,3,train 2983,4,train 2680,3,train 2284,3,train 3238,1,train +3279,2,train 244,2,train 285,3,train 2580,1,train 2976,1,train -3196,4,train +2759,3,train 2363,3,train 2800,4,train -2101,3,train +3196,4,train 3055,1,train +3492,2,train 61,2,train +498,3,train 3189,1,train 3409,4,train 2576,3,train 3013,4,train 2710,3,train -2314,3,train -2751,4,train 3705,2,train 577,3,train 2872,1,train -3268,1,train +711,3,train 3006,1,train +3309,2,train +3488,4,train 12,2,train 53,3,train -2830,4,train +2744,1,train 3226,4,train -2527,3,train -2964,4,train -745,1,train -528,3,train +3522,2,train 2823,1,train -3219,1,train +3260,2,train 662,3,train 2957,1,train 3043,4,train -3260,2,train -3701,4,train -3177,4,train +2740,3,train 2781,4,train +824,1,train 958,1,train 3339,2,train 741,3,train -345,3,train -782,4,train -3036,1,train -479,3,train -83,3,train 3473,2,train +479,3,train +3256,4,train +775,1,train 3948,2,train -3552,2,train -3989,3,train 3686,2,train 558,3,train 995,4,train 3290,2,train 692,3,train 296,3,train -733,4,train 3028,2,train 3469,4,train 34,3,train 2811,4,train -3207,4,train 1250,1,train +854,1,train 988,1,train 592,1,train 3765,2,train 1208,4,train 330,1,train +812,4,train 3503,2,train 509,3,train 946,4,train 3241,2,train +3940,3,train 1201,1,train 805,1,train -1242,2,train -4019,3,train -939,1,train -543,1,train +1421,4,train 3716,2,train +3320,2,train 3757,3,train -763,4,train +722,3,train +326,3,train +1159,4,train 3454,2,train 3237,4,train 1321,2,train 1018,1,train +622,1,train 1059,2,train -1455,2,train -756,1,train -1238,4,train 3970,3,train 539,3,train 3667,2,train 714,4,train 1534,2,train 1231,1,train -1272,2,train 1668,2,train 4004,1,train 969,1,train 1010,2,train +1451,4,train 3746,2,train +1189,4,train 793,4,train +3787,3,train 3921,3,train 531,4,train 1747,2,train -1485,2,train -1089,2,train 1922,3,train +1089,2,train 1223,2,train 4000,3,train 1006,4,train 3738,3,train -1140,4,train 2135,3,train 1302,2,train -1739,3,train 1436,2,train -1040,2,train 3817,3,train -1515,2,train -1649,2,train +2214,3,train 1253,2,train 1690,3,train 2248,1,train -2427,3,train 1986,1,train -1769,3,train 1466,2,train 1507,3,train 1903,3,train -2199,1,train -1982,3,train +2378,3,train 2419,4,train 2116,3,train 2278,1,train 2412,1,train -2016,1,train 2195,3,train 2236,4,train -1933,3,train 2491,1,train -2625,1,train 2229,1,train +2711,4,train +2408,3,train +1967,1,train +2449,4,train 2845,4,train 2146,3,train 1884,3,train -2704,1,train -2745,2,train 147,3,train 2442,1,train +2046,1,train 2879,2,train 2180,1,train -2796,4,train -1963,3,train +2266,4,train 2400,4,train +181,1,train 2958,2,train +2655,1,train 2259,1,train +3092,2,train 98,3,train -2393,1,train -2479,4,train 2176,3,train -1955,4,train +2613,4,train +260,1,train 394,1,train -2775,2,train -177,3,train +218,4,train 2909,2,train 2826,4,train +2430,4,train +473,1,train 607,1,train -211,1,train 3384,2,train -390,3,train 431,4,train 2726,2,train 3163,3,train 128,3,train 169,4,train -2464,2,train 2860,2,train 2643,4,train 2247,4,train -686,1,train 861,2,train +644,4,train 248,4,train 2543,2,train 778,4,train -382,4,train -2677,2,train -2939,2,train +3073,2,train 3376,3,train 2460,4,train 3672,1,train -637,1,train -241,1,train -3455,3,train -375,1,train -3152,2,train +1074,2,train +3851,3,train +857,4,train 2756,2,train -3193,3,train -595,4,train +158,3,train 2931,3,train 3751,1,train -757,2,train 3885,1,train 891,2,train -495,2,train -192,1,train -674,4,train -3843,4,train +3802,3,train 412,4,train -546,4,train -150,4,train +3103,2,train 3964,1,train -1104,2,train +3702,1,train +667,1,train 708,2,train 3922,4,train 1145,3,train -405,1,train -9,1,train -446,2,train 842,2,train -625,4,train +3619,3,train 3223,3,train +3440,1,train +625,4,train 3357,3,train +3881,3,train 363,4,train 3915,1,train 921,2,train -4049,1,train +3653,1,train 1055,2,train 3832,3,train 3436,3,train -3873,4,train 442,4,train 3174,3,train 3570,3,train @@ -2395,10 +2417,10 @@ parameter_index,simulation_index,split 738,2,train 1175,3,train 3866,1,train -3952,4,train -3649,3,train +872,2,train 4086,4,train -4079,1,train +3824,4,train +393,4,train 1085,2,train 689,2,train 1126,3,train @@ -2406,47 +2428,51 @@ parameter_index,simulation_index,split 823,2,train 4037,4,train 3641,4,train +3903,4,train 606,4,train 1684,1,train +1422,1,train 1205,3,train +3500,1,train 3896,1,train 902,2,train -943,3,train -3720,4,train 3854,4,train 2031,1,train 1814,3,train -1855,4,train -1552,3,train +1418,3,train 1156,3,train -3888,2,train 894,3,train 4067,4,train 3805,4,train 2110,1,train 1714,1,train -1848,1,train 1452,1,train 2068,4,train +3926,1,train 1369,3,train -973,3,train 1806,4,train +1107,3,train +4018,4,train +1927,1,train 1665,1,train +2102,2,train 1885,4,train 2019,4,train -1623,4,train +1186,3,train 2181,2,train 1878,1,train -1482,1,train -2098,4,train +2315,2,train +1616,1,train 1220,1,train +2098,4,train +1399,3,train 1836,4,train 2528,2,train -1695,1,train -2311,4,train +1829,1,train 1870,2,train -1612,3,train +2311,4,train 2049,4,train +1653,4,train 1787,4,train 1391,4,train 2607,2,train @@ -2454,11 +2480,16 @@ parameter_index,simulation_index,split 1646,1,train 2083,2,train 2262,4,train -2000,4,train -1683,4,train -1817,4,train +1866,4,train +1604,4,train +43,1,train +2820,2,train +1,4,train +2296,2,train +2079,4,train 80,4,train 2375,2,train +2812,3,train 3208,3,train 2509,2,train 2113,2,train @@ -2466,265 +2497,255 @@ parameter_index,simulation_index,split 3108,1,train 73,1,train 114,2,train +2891,3,train +293,4,train 3025,3,train 2629,3,train 2367,3,train 3187,1,train 3321,1,train 327,2,train +3059,1,train 65,2,train 3238,3,train -2976,3,train +3279,4,train +2539,2,train 2580,3,train +2976,3,train +3534,1,train 3138,1,train 540,2,train 144,2,train +2876,1,train 3055,3,train 2659,3,train +3492,4,train 61,4,train 2397,3,train -3747,1,train 357,2,train -3485,1,train +491,2,train 95,2,train 2872,3,train -3268,3,train +3309,4,train 3705,4,train 3006,3,train +3047,4,train 12,4,train -2906,1,train -745,3,train +2744,3,train +3605,2,train +3302,1,train +308,2,train 349,3,train +3522,4,train 2823,3,train 3260,4,train 2957,3,train 1041,1,train -3777,1,train +824,3,train 3515,1,train -3119,1,train +521,2,train 958,3,train -125,2,train -2857,1,train +3253,1,train 3339,4,train -259,2,train -3036,3,train -3077,4,train 3473,4,train +3077,4,train 2815,4,train 1120,1,train -858,1,train -3332,1,train +1254,1,train +4031,2,train +3635,2,train +3769,2,train 2936,1,train -379,3,train -3070,1,train -3552,4,train +338,2,train +775,3,train 3686,4,train 3290,4,train 3028,4,train 1333,1,train -1467,1,train 1250,3,train +854,3,train 3545,1,train -4023,3,train 3586,2,train 551,2,train 592,3,train 988,3,train -3324,2,train 3765,4,train +3982,2,train 330,3,train 3503,4,train 3241,4,train +1546,1,train 1284,1,train -888,1,train -1022,1,train 1108,4,train 805,3,train 409,3,train -1242,4,train -939,3,train -543,3,train 3716,4,train -3537,2,train +3320,4,train 3454,4,train -1759,1,train +1497,1,train 1101,1,train -1538,2,train 1235,1,train 839,1,train 1321,4,train -3616,2,train 1018,3,train -3750,2,train +622,3,train 1059,4,train -1455,4,train -756,3,train +3750,2,train 1617,2,train 1314,1,train 1534,4,train 656,1,train -3829,2,train 1668,4,train -1272,4,train +3963,2,train 4004,3,train 1010,4,train 3746,4,train 1830,2,train 1568,2,train -1747,4,train +1265,1,train 869,1,train -1485,4,train +1747,4,train +4042,2,train 1089,4,train 1223,4,train -2043,2,train 1915,2,train -1082,1,train 1519,2,train 1302,4,train 1436,4,train -1040,4,train -1994,2,train 1598,2,train +1295,1,train 1732,2,train -1336,2,train -1515,4,train 1253,4,train 2248,3,train 1945,2,train +1549,2,train 1986,3,train 1466,4,train 2065,3,train -2199,3,train +1762,2,train +2757,1,train 2278,3,train 2412,3,train 1579,2,train -2016,3,train -2970,1,train 2574,1,train -2708,1,train +2312,1,train 2491,3,train 1792,2,train 2229,3,train -3183,1,train +1967,3,train 2787,1,train -2921,1,train 2525,1,train -2704,3,train 2263,1,train -2745,4,train 2442,3,train +2046,3,train 2879,4,train 2180,3,train -264,1,train -47,3,train 2738,1,train -3175,2,train -2476,1,train +2342,1,train +181,3,train 2958,4,train +3092,4,train 2259,3,train 1863,3,train -2393,3,train -477,1,train +260,3,train 2951,1,train -3388,2,train +2992,2,train 394,3,train -2293,1,train -2775,4,train +2689,1,train +3388,2,train 2909,4,train 2513,4,train +690,1,train 3467,2,train -3601,2,train +473,3,train 2768,1,train -211,3,train -2506,1,train +3205,2,train +3601,2,train 2726,4,train 2860,4,train -2464,4,train -903,1,train 507,1,train -3680,2,train -686,3,train +245,1,train 2981,1,train -3022,2,train -3459,3,train 861,4,train -3156,2,train +465,4,train 2760,2,train -2939,4,train +3156,2,train 2543,4,train -2677,4,train 720,1,train 458,1,train -3235,2,train 3631,2,train 3672,3,train -241,3,train -375,3,train -3152,4,train +1074,4,train 2756,4,train 3968,1,train 3751,3,train -757,4,train +3448,2,train 3052,2,train 3489,3,train 891,4,train -495,4,train +3186,2,train +2790,2,train 3885,3,train -192,3,train 233,4,train 750,1,train 1187,2,train 3964,3,train -1104,4,train +3702,3,train 708,4,train 3003,2,train 3399,2,train 842,4,train -9,3,train -446,4,train -1400,2,train +3440,3,train 1004,2,train 3736,1,train 1138,2,train 742,2,train 3915,3,train 921,4,train -3216,2,train +3653,3,train 263,4,train 3949,1,train 1351,2,train 955,2,train 738,4,train +3429,2,train 3866,3,train +872,4,train 4028,1,train +1034,2,train 1471,3,train -3766,1,train -731,1,train 772,2,train +510,2,train 689,4,train 1684,3,train +1381,2,train +1422,3,train 3717,1,train 1119,2,train 723,2,train +3500,3,train 3896,3,train 902,4,train +3937,4,train 1718,1,train 1501,3,train 3796,1,train 1198,2,train 802,2,train 936,2,train -3888,4,train -2327,1,train 1931,1,train 2110,3,train 1714,3,train -1848,3,train +4009,1,train +1411,2,train 1452,3,train -1889,4,train 1190,3,train +3926,3,train 3967,4,train 2144,1,train +1748,1,train +1927,3,train +2102,4,train 1665,3,train 1269,3,train 2223,1,train @@ -2732,40 +2753,39 @@ parameter_index,simulation_index,split 2398,2,train 2181,4,train 1878,3,train -1482,3,train 1919,4,train +2315,4,train +1616,3,train 1220,3,train -2611,2,train 2308,1,train 1912,1,train 2528,4,train -1695,3,train +1829,3,train 1870,4,train -2387,1,train 1991,1,train 2428,2,train -2824,2,train 2125,1,train -1729,1,train +2166,2,train 2607,4,train 2345,4,train 1646,3,train 2083,4,train 126,1,train 3037,2,train +2641,2,train 1942,1,train 2379,2,train -2076,1,train +2296,4,train 339,1,train 77,1,train 2854,2,train 2458,2,train +2895,3,train +2155,1,train 2592,2,train 2375,4,train 2113,4,train 1717,4,train -3067,2,train -2671,2,train 3108,3,train 114,4,train 2805,2,train @@ -2773,512 +2793,494 @@ parameter_index,simulation_index,split 369,1,train 3187,3,train 148,2,train -2884,2,train 3321,3,train 327,4,train 2622,2,train +3059,3,train 65,4,train 623,2,train -3355,1,train 361,2,train 3138,3,train +3534,3,train 540,4,train 144,4,train 2835,2,train +2876,3,train +2573,2,train 836,2,train 137,1,train 178,2,train 574,2,train 357,4,train -2652,2,train 95,4,train -3781,1,train +653,2,train 3385,1,train +787,2,train 391,2,train -3123,1,train +3605,4,train +88,1,train 129,2,train -2865,2,train -2906,3,train +3302,3,train +3343,4,train +308,4,train 2644,3,train -3860,1,train 866,2,train -907,3,train 3202,1,train -3598,1,train 604,2,train 1041,3,train 3336,1,train 342,2,train -3119,3,train -125,4,train -2857,3,train +3253,3,train +1337,1,train 4073,1,train 1120,3,train 3415,1,train +1254,3,train +3549,1,train +4031,4,train 421,2,train -858,3,train -3153,1,train 555,2,train -3332,3,train +3635,4,train 2936,3,train -3070,3,train +3373,4,train +338,4,train +3769,4,train 1333,3,train 937,3,train -3232,1,train +3628,1,train 4065,2,train -634,2,train 3366,1,train 3982,4,train 3586,4,train -3324,4,train -1105,1,train +1367,1,train +1546,3,train 3841,1,train 3882,2,train 847,2,train -888,3,train 1284,3,train 1325,4,train +3579,1,train 585,2,train -1022,3,train +626,3,train 3403,4,train -3579,1,train -3620,2,train -3537,4,train 1580,1,train 1184,1,train 4095,2,train 1101,3,train -1538,4,train 3792,1,train 1235,3,train 839,3,train -3616,4,train 3750,4,train -1397,1,train +1793,1,train +1834,2,train 1135,1,train 1617,4,train 3912,2,train 1314,3,train 1355,4,train -3650,2,train -4046,2,train 656,3,train -3829,4,train -2047,2,train +1610,1,train 1214,1,train +2047,2,train 1744,1,train +1348,1,train 1830,4,train 1568,4,train -3863,2,train +1265,3,train 869,3,train +4042,4,train 1823,1,train 1864,2,train +2260,2,train 1561,1,train 1602,2,train -2043,4,train -1385,4,train 4076,2,train -1082,3,train -1123,4,train 1519,4,train -2211,2,train -1994,4,train +1123,4,train +1378,1,train 1598,4,train +1295,3,train 1732,4,train -1336,4,train -4068,3,train -2290,2,train 2331,3,train 1632,2,train +1549,4,train 2503,2,train 2107,2,train 1845,2,train -1979,2,train +1762,4,train +2757,3,train 1796,2,train 1579,4,train 193,2,train -2970,3,train 2574,3,train 2271,2,train -2708,3,train +1875,2,train +2312,3,train 1792,4,train 2870,1,train 3004,1,train 10,2,train 2787,3,train -2921,3,train +2088,2,train 2525,3,train 2263,3,train -3083,1,train 89,2,train -3217,1,train 3258,2,train 223,2,train -264,3,train 2738,3,train -3175,4,train -2476,3,train +2342,3,train 3296,1,train 3034,1,train -477,3,train +3471,2,train +40,2,train 2772,1,train 3168,1,train 3388,4,train -2293,3,train -3684,2,train +2992,4,train +2689,3,train +3247,1,train 253,2,train +690,3,train 2985,1,train 3467,4,train 32,3,train 2768,3,train 2809,4,train -2506,3,train +3205,4,train 3064,1,train -3680,4,train 70,2,train 507,3,train -2802,1,train 3239,2,train -3022,4,train +245,3,train 3156,4,train 2760,4,train 803,1,train 541,1,train -3714,2,train 720,3,train +761,4,train 2619,1,train +3056,2,train 458,3,train -62,3,train 2839,4,train -3235,4,train 1016,1,train 620,1,train -754,1,train +1150,1,train 3531,2,train 3968,3,train -3228,1,train -3269,2,train 3665,2,train +3269,2,train +3448,4,train 3052,4,train +3186,4,train +2790,4,train 833,1,train -967,1,train -571,1,train 3744,2,train 750,3,train +791,4,train 1187,4,train 3003,4,train 1046,1,train -1180,1,train 784,1,train 3957,2,train -1400,4,train 522,1,train +3736,3,train 1004,4,train 3299,2,train 1138,4,train 742,4,train -3736,3,train -3216,4,train 1259,1,train -1434,2,train +1300,2,train +997,1,train 1038,2,train -3815,3,train +1434,2,train 735,1,train 821,4,train 3512,2,train 3949,3,train 955,4,train -559,4,train +1647,2,train 814,1,train 1251,2,train 4028,3,train -3725,2,train -3766,3,train -731,3,train +1034,4,train 772,4,train 3504,3,train +510,4,train 1726,2,train -1464,2,train +1027,1,train 1068,2,train +1464,2,train +1202,2,train +589,4,train 3717,3,train 1119,4,train 723,4,train -1281,2,train +1677,2,train 1718,3,train 4013,1,train +1415,2,train 3796,3,train 1198,4,train 802,4,train 936,4,train -1797,3,train -2327,3,train 1494,2,train 1098,2,train 1931,3,train 1232,2,train +4009,3,train 2227,1,train 2144,3,train +1748,3,train 2185,4,train -4043,1,train 1445,2,train +1486,3,train 2306,1,train +2440,1,train 2223,3,train 1961,3,train 2398,4,train -2257,1,train +2653,1,train 2391,1,train -1995,1,train -2611,4,train 2215,4,train 1912,3,train +1516,3,train 2470,1,train -2604,1,train -2824,4,train 1991,3,train 2428,4,train 2125,3,train -1729,3,train -2683,1,train +2166,4,train 2287,1,train -2724,2,train 126,3,train 2421,1,train 2025,1,train -2462,2,train 2159,1,train +2641,4,train 1942,3,train 2379,4,train 2937,2,train 2634,1,train 2238,1,train -2675,2,train 77,3,train -2854,4,train +2372,1,train 2458,4,train +2854,4,train +2155,3,train 2592,4,train 1934,4,train -239,1,train +373,1,train 197,4,train 2055,1,train 2888,2,train -2671,4,train 2147,4,train -586,1,train +452,1,train 3363,2,train 2967,2,train 2664,1,train -2268,1,train +2705,2,train 148,4,train -2443,2,train -2884,4,train 2622,4,train 665,1,train 269,1,train -7,1,train +444,2,train 3180,2,train +141,1,train +227,4,train 623,4,train -2918,2,train 2522,2,train -3355,3,train 361,4,train 2656,2,train +2918,2,train +2573,4,train 3651,1,train 616,1,train 220,1,train -657,2,train -354,1,train 836,4,train -3131,2,train -3172,3,train 137,3,train 178,4,train 574,4,train -2869,2,train -2652,4,train 3730,1,train 736,2,train 171,1,train +653,4,train +2948,2,train 3385,3,train -3781,3,train 391,4,train -3123,3,train 129,4,train 3681,1,train 646,1,train -3860,3,train +687,2,train 866,4,train -425,2,train 3161,2,train 3202,3,train 604,4,train 3336,3,train -3598,3,train 342,4,train -1162,2,train 3894,1,train +900,2,train 504,2,train +1337,3,train 3632,1,train +638,2,train 3415,3,train 421,4,train 25,4,train -3153,3,train +3549,3,train 555,4,train -1113,2,train +717,2,train 3845,1,train -851,2,train +3931,4,train +3628,3,train 4065,4,train -3232,3,train -634,4,train 3366,3,train -1233,3,train 930,2,train +1367,3,train 3662,1,train -1105,3,train -3841,3,train +668,2,train 3882,4,train +3841,3,train 3579,3,train -3620,4,train 585,4,train -1143,2,train -1184,3,train +1401,1,train 1580,3,train -922,3,train +1184,3,train +485,2,train 3699,4,train 4095,4,train -1397,3,train -4088,1,train +1876,1,train +1793,3,train +1834,4,train 698,2,train 1135,3,train 3912,4,train -4046,4,train -3650,4,train 2089,1,train 1827,1,train -1431,1,train -2047,4,train +1610,3,train 1214,3,train -3905,1,train -952,3,train -3863,4,train +2047,4,train +911,2,train +1348,3,train 1906,1,train 2040,1,train +2260,4,train 1864,4,train 1561,3,train 1602,4,train 4076,4,train 2119,1,train -2160,2,train 2294,2,train -1199,1,train -1681,4,train -3976,2,train +1378,3,train 982,3,train 2070,1,train 2507,2,train -1808,1,train -2290,4,train +1412,1,train 1632,4,train 1370,4,train -2190,2,train 1887,1,train 1928,2,train +2324,2,train 1625,1,train 2107,4,train 1845,4,train -1979,4,train 22,1,train 2799,2,train 2100,1,train 2141,2,train -2537,2,train 1838,1,train 2275,2,train 1796,4,train 101,1,train +2488,2,train 2092,2,train +1875,4,train +3087,1,train +93,2,train 2870,3,train 2567,2,train 2171,2,train 2608,3,train 10,4,train -3004,3,train +2305,2,train 1909,2,train 2346,3,train -3300,1,train -3083,3,train +3004,3,train +2088,4,train +172,2,train +306,2,train 89,4,train -3217,3,train 3258,4,train +2518,2,train 2122,2,train -385,2,train -3117,1,train 3513,1,train -82,1,train +3117,1,train 519,2,train 3296,3,train 257,2,train 3034,3,train +3471,4,train +40,4,train 2772,3,train 2376,3,train 3726,1,train -3464,1,train +3068,1,train 74,2,train -3684,4,train +2851,3,train +3247,3,train 2985,3,train -3543,1,train -3584,2,train -153,2,train +549,2,train 2885,1,train +3367,4,train 287,2,train -328,3,train -2623,1,train 3064,3,train +2623,1,train +3105,4,train 70,4,train -2802,3,train 3239,4,train +2406,3,train +3797,2,train 803,3,train 3098,1,train 3494,1,train +104,2,train 541,3,train -3714,4,train +2836,1,train 238,2,train 2619,3,train -1099,1,train -837,1,train +3056,4,train 3614,2,train 1016,3,train 620,3,train +2915,1,train 3311,1,train -317,2,train +3748,2,train 358,3,train -754,3,train -3049,1,train 3531,4,train -3269,4,train 3665,4,train -1050,1,train +3269,4,train +1446,1,train 833,3,train 3128,1,train 3961,2,train -967,3,train -571,3,train +3262,1,train 3303,2,train 3744,4,train -1263,1,train 4040,2,train 1046,3,train 605,1,train +1087,4,train 3778,2,train 784,3,train -388,3,train +3516,2,train 522,3,train 3299,4,train 1342,1,train 1476,1,train +1517,2,train 1259,3,train -818,1,train -1434,4,train +1300,4,train +997,3,train 1038,4,train +1434,4,train +3729,2,train 735,3,train 3512,4,train 1596,2,train @@ -3286,277 +3288,289 @@ parameter_index,simulation_index,split 897,1,train 635,1,train 1117,4,train -3412,2,train +1647,4,train 814,3,train 1251,4,train +3942,2,train 1809,2,train -1506,1,train +1943,2,train 1110,1,train 1547,2,train -1943,2,train 1244,1,train 1726,4,train 4021,2,train 4062,3,train -1464,4,train +1027,3,train 1068,4,train -3800,3,train +1464,4,train +3759,2,train +1202,4,train 806,4,train +3800,3,train 1323,1,train 1364,2,train 1061,1,train -1281,4,train -3972,2,train 4013,3,train -1577,2,train +1415,4,train +1274,1,train 1315,2,train +1711,2,train 4092,3,train 1494,4,train 1098,4,train 1232,4,train +1790,2,train 2227,3,train -4043,3,train 1445,4,train 2523,1,train 2306,3,train +2440,3,train 2044,3,train 1741,2,train -1345,2,train 1782,3,train -2736,1,train -2257,3,train -1954,2,train +2653,3,train 2391,3,train -1558,2,train -1995,3,train 2553,1,train +2687,1,train +2291,1,train 2470,3,train +1771,2,train +2766,1,train 2900,1,train -2683,3,train 2287,3,train -2724,4,train 2421,3,train 2025,3,train -2462,4,train 2159,3,train 2583,1,train 3020,2,train +26,3,train +2321,1,train +2717,1,train 2937,4,train +2455,1,train 2541,4,train 2238,3,train 1842,3,train -2675,4,train 3233,2,train -239,3,train -2534,1,train 2930,1,train +2534,1,train +373,3,train 2668,1,train 2888,4,train 2055,3,train 669,1,train -3446,2,train +452,3,train +2351,1,train +2485,1,train 2967,4,train -2268,3,train -2443,4,train +2705,4,train +882,1,train 3659,2,train 665,3,train 269,3,train -2960,1,train -3001,2,train -3397,2,train -7,3,train +3438,3,train +444,4,train 2698,1,train 2739,2,train -3180,4,train +141,3,train 2918,4,train 2522,4,train +3180,4,train 2656,4,train 699,1,train +303,1,train 3476,2,train +437,1,train +41,1,train 3651,3,train 220,3,train -657,4,train -2952,2,train 3348,2,train -3131,4,train -2869,4,train 912,1,train -516,1,train 953,2,train 3730,3,train +650,1,train 736,4,train -3468,3,train +3031,2,train 2769,2,train 171,3,train +2948,4,train 729,1,train -1166,2,train 467,1,train -71,1,train 3244,2,train 3681,3,train +687,4,train 3378,2,train -425,4,train 3977,1,train 942,1,train 983,2,train 1379,2,train -3715,1,train -1162,4,train 284,1,train -721,2,train 3498,3,train 3894,3,train +900,4,train 504,4,train +3195,2,train 3236,3,train -3632,3,train +638,4,train 242,4,train -1330,2,train +3632,3,train +3928,1,train 497,1,train -3408,2,train +934,2,train +717,4,train 3845,3,train -851,4,train 4007,1,train +1409,2,train 1013,2,train 3745,1,train -710,1,train 751,2,train 930,4,train 489,2,train 3662,3,train +668,4,train 1226,2,train 3958,1,train -964,2,train +1360,2,train +1401,3,train 3696,1,train 702,2,train -1480,3,train -3909,1,train +485,4,train +1697,1,train +1876,3,train +781,2,train 915,2,train 698,4,train 1910,1,train 2089,3,train +3988,1,train +1390,2,train 1827,3,train -1431,3,train 1128,2,train -3905,3,train 3946,4,train +911,4,train 1989,1,train +1727,1,train 1906,3,train 1207,2,train +1248,3,train 2202,1,train -2336,1,train 1940,1,train 2119,3,train 1678,1,train -2160,4,train 2294,4,train -1199,3,train -3976,4,train -2590,2,train +2153,1,train 1757,1,train -1891,1,train -1977,4,train +2590,2,train 2507,4,train -1808,3,train -2628,1,train -2366,1,train -1970,1,train +1412,3,train +2803,2,train 2104,1,train 1708,1,train -2190,4,train 1887,3,train 1928,4,train +2324,4,train 1625,3,train +1666,4,train 2486,2,train 1921,1,train -2537,4,train 2141,4,train 2275,4,train 101,3,train 2437,2,train +2874,3,train +2134,1,train +2175,2,train 2092,4,train -2650,2,train -2784,2,train +1696,4,train +3087,3,train +93,4,train 2388,2,train +2784,2,train 2567,4,train 2171,4,train +2305,4,train 1909,4,train 348,1,train -2863,2,train +86,1,train +172,4,train 2904,3,train -3300,3,train -2601,2,train +306,4,train 2122,4,train -385,4,train -3117,3,train 3513,3,train +3117,3,train 519,4,train 257,4,train -378,1,train +2552,2,train 419,2,train 3151,1,train +3068,3,train 74,4,train +3626,1,train 632,2,train +3364,1,train 766,2,train 370,2,train -3543,3,train -3584,4,train -153,4,train +67,1,train 2844,2,train 2885,3,train 287,4,train 2623,3,train +3839,1,train +845,2,train 449,2,train 3577,1,train -146,1,train -321,2,train +187,2,train +3797,4,train 3098,3,train -3656,1,train -1099,3,train -3831,2,train -3394,1,train +2702,3,train +104,4,train +2836,3,train 3790,1,train -837,3,train -3528,1,train +3831,2,train +796,2,train +3132,1,train 3614,4,train 534,2,train +138,2,train +2915,3,train 3311,3,train 3352,4,train -317,4,train -3049,3,train -3910,2,train +3748,4,train 916,3,train +3211,1,train +3607,1,train 4044,2,train -613,2,train -1050,3,train 3961,4,train 3128,3,train +3262,3,train 3303,4,train 3820,1,train 3861,2,train -826,2,train -3558,1,train -3599,2,train 4040,4,train 430,2,train -1263,3,train +3558,1,train 564,2,train 605,3,train -3382,4,train 3778,4,train +3516,4,train 1425,1,train +1559,1,train 1342,3,train -3637,1,train 4074,2,train -684,3,train -818,3,train +1517,4,train +3812,2,train +3729,4,train +1638,1,train +1772,1,train +1376,1,train 1114,1,train 1596,4,train 1293,3,train 897,3,train 4025,2,train 635,3,train -3412,4,train 1193,1,train +1327,1,train 1809,4,train 1943,4,train 1110,3,train @@ -3564,9 +3578,10 @@ parameter_index,simulation_index,split 1244,3,train 1285,4,train 4021,4,train +3759,4,train +1802,1,train 1406,1,train 1843,2,train -1581,2,train 1323,3,train 1364,4,train 4055,2,train @@ -3574,116 +3589,120 @@ parameter_index,simulation_index,split 1102,4,train 2452,2,train 2056,2,train -1794,2,train +1357,1,train 961,1,train 1491,1,train -1577,4,train +1711,4,train 1315,4,train +2269,2,train +1873,2,train +1570,1,train +1174,1,train 2007,2,train -2086,2,train +1790,4,train 2523,3,train 1387,1,train 1824,2,train 1741,4,train -1345,4,train 2299,2,train 2340,3,train -2736,3,train 1641,2,train -1558,4,train +1775,2,train 2770,1,train 2553,3,train 2250,2,train -1854,2,train -1988,2,train +2291,3,train +2687,3,train +1771,4,train 2983,1,train +2766,3,train 2370,3,train 68,2,train 2800,1,train 3196,1,train +202,2,train 2583,3,train 3020,4,train 2280,2,train +2321,3,train +2717,3,train +2455,3,train 2059,3,train 281,2,train 3013,1,train 2617,1,train -2751,1,train 3233,4,train 2534,3,train -2138,3,train 2668,3,train +3488,1,train 3226,1,train -2830,1,train -3267,2,train +232,2,train 669,3,train -2964,1,train -3446,4,train +2568,1,train +2351,3,train 2788,4,train +2485,3,train 569,1,train 352,3,train 3043,1,train +3480,2,train 90,3,train 2781,1,train -3397,4,train -3001,4,train 2698,3,train 2739,4,train -782,1,train +3559,2,train +3693,2,train +3256,1,train 3297,2,train 699,3,train -740,4,train -2598,1,train -3035,2,train +303,3,train 3476,4,train +437,3,train +41,3,train 2818,4,train -2952,4,train 995,1,train 599,1,train 3772,2,train -733,1,train 3906,2,train -516,3,train -120,3,train +3510,2,train 953,4,train 2811,1,train +650,3,train +3031,4,train 2769,4,train 1208,1,train +812,1,train 946,1,train +550,1,train +3327,2,train 3723,2,train -3764,3,train 729,3,train -3461,2,train 770,4,train -1166,4,train 3065,2,train +3461,2,train 467,3,train -71,3,train 508,4,train 3244,4,train -629,1,train -763,1,train -3540,2,train +3936,2,train 3977,3,train 1379,4,train 983,4,train 3278,2,train -3674,2,train -3715,3,train 284,3,train -721,4,train -1238,1,train +3195,4,train 1279,2,train 1017,2,train 3794,3,train 714,1,train -800,4,train +318,1,train 3095,2,train -3491,2,train +3928,3,train 497,3,train +934,4,train 1626,2,train 793,1,train 4007,3,train +1409,4,train 531,1,train 1013,4,train 3308,2,train @@ -3693,151 +3712,153 @@ parameter_index,simulation_index,split 489,4,train 1006,1,train 1047,2,train +1443,2,train 1226,4,train 3958,3,train -964,4,train 568,4,train 3696,3,train 702,4,train -1656,2,train -1260,2,train +1522,2,train +1697,3,train 3992,1,train -998,2,train -3909,3,train +781,4,train 915,4,train -1776,3,train +4071,1,train 1473,2,train 1077,2,train 1910,3,train 1211,2,train -2206,1,train +3988,3,train 1989,3,train -1686,2,train -1290,2,train +1727,3,train 4022,1,train 1424,2,train 1465,3,train 1207,4,train +2285,1,train 2419,1,train 2202,3,train 1503,2,train 1940,3,train 1678,3,train 2236,1,train -2590,4,train +1974,1,train +2153,3,train 1757,3,train -2194,4,train -1891,3,train +2590,4,train 1495,3,train -1970,3,train +2711,1,train +2449,1,train +2053,1,train +2803,4,train 2104,3,train 1708,3,train +2266,1,train 2703,2,train 2400,1,train +2004,1,train 2486,4,train 2224,4,train 1921,3,train 5,1,train -2479,1,train -2916,2,train -2654,2,train -1955,1,train +2782,2,train +2613,1,train 2437,4,train +2134,3,train +2175,4,train +218,1,train 3129,2,train 2733,2,train -2867,2,train +2430,1,train 2034,1,train 2471,2,train -2650,4,train +2867,2,train 2254,4,train 2388,4,train -1992,4,train 431,1,train 35,1,train 169,1,train 3342,2,train 3080,2,train 2247,1,train -2863,4,train -2601,4,train +2684,2,train +86,3,train +644,1,train 248,1,train -382,1,train 2763,2,train -206,4,train +3200,3,train 2460,1,train 2501,2,train 2897,2,train 2635,2,train +2552,4,train 636,2,train 3372,2,train 419,4,train -3110,2,train 3151,3,train 2848,2,train 3709,1,train -674,1,train -3843,1,train 412,1,train +3626,3,train +16,1,train 453,2,train -3230,3,train -150,1,train +849,2,train 236,4,train 632,4,train 2927,2,train 370,4,train +3230,3,train +3364,3,train 3922,1,train -3660,1,train -1062,2,train +666,2,train +3839,3,train 363,1,train 449,4,train +845,4,train 3140,2,train -3577,3,train -146,3,train +3618,4,train +187,4,train 2919,3,train -321,4,train -3739,1,train -3873,1,train +3577,3,train 442,1,train -3656,3,train 180,1,train -3394,3,train +617,2,train 3831,4,train -3528,3,train 4,4,train +3132,3,train 534,4,train -3952,1,train -1354,2,train +138,4,train 4086,1,train -3690,1,train -1092,2,train +3824,1,train 3428,1,train -3910,4,train +393,1,train 434,2,train +3211,3,train +3607,3,train 3648,4,train 4044,4,train -613,4,train 1212,3,train 3507,1,train +3903,1,train 909,2,train -513,2,train 3641,1,train 4037,1,train -647,2,train 251,2,train 3861,4,train 430,4,train 3558,3,train -3599,4,train 1642,1,train 1425,3,train -3720,1,train 1122,2,train -3854,1,train +1559,3,train 3458,1,train +3854,1,train +3895,2,train 901,3,train -3637,3,train 4074,4,train -1855,1,train +3812,4,train +1638,3,train +1376,3,train 4067,1,train 677,2,train 1114,3,train @@ -3846,219 +3867,212 @@ parameter_index,simulation_index,split 2068,1,train 1806,1,train 1193,3,train -3925,2,train 890,2,train -931,3,train +1327,3,train 1885,1,train 1489,1,train 2019,1,train -1623,1,train 1406,3,train 1843,4,train -1581,4,train 3876,2,train 4055,4,train 2098,1,train 2139,2,train 1836,1,train -1440,1,train 2056,4,train 1178,1,train -1794,4,train +3955,2,train +1357,3,train 961,3,train 2352,2,train 2049,1,train -1787,1,train +1653,1,train +2269,4,train 1391,1,train +1873,4,train +1787,1,train +1570,3,train +1174,3,train 2007,4,train -2303,2,train +2565,2,train +2169,2,train +1866,1,train 1470,1,train 1907,2,train -2086,4,train +1604,1,train 1387,3,train 1824,4,train +1,1,train 2778,2,train 2516,2,train -1683,1,train -1817,1,train -1858,2,train 2299,4,train +1858,2,train 1641,4,train +1775,4,train 80,1,train 2595,2,train -2636,3,train 2770,3,train -1937,2,train 2071,2,train -1854,4,train 1458,4,train -1988,4,train -3066,1,train -2808,2,train +72,2,train 2546,2,train 2983,3,train 2284,2,train 1888,2,train 151,2,train +3279,1,train 285,2,train 68,4,train 2363,2,train 2800,3,train 3196,3,train -2101,2,train +3492,1,train 3096,1,train +498,2,train 2834,1,train 281,4,train 2576,2,train 2617,3,train 3013,3,train -2314,2,train -2355,3,train -2751,3,train +3054,4,train 577,2,train +3309,1,train +3047,1,train 53,2,train -2830,3,train 3226,3,train -3267,4,train -2964,3,train -3563,2,train -528,2,train +2568,3,train +3522,1,train +132,2,train 569,3,train 2864,1,train 3260,1,train 3043,3,train 3084,4,train +3480,4,train 2781,3,train -2385,3,train 3339,1,train 2943,1,train 3776,2,train -345,2,train -782,3,train -3077,1,train 3473,1,train -83,2,train +3077,1,train +3559,4,train +3693,4,train 2815,1,train 3297,4,train -2598,3,train -3035,4,train -3552,1,train 3593,2,train -3989,2,train 558,2,train 599,3,train 995,3,train 3290,1,train 296,2,train -337,3,train -733,3,train +3510,4,train 3028,1,train +3114,4,train 34,2,train 2811,3,train -3114,4,train +3772,4,train +3806,2,train +3940,2,train +812,3,train 3503,1,train 3544,2,train -946,3,train 3723,4,train +946,3,train +550,3,train 3241,1,train +3327,4,train 3461,4,train 3065,4,train 1108,1,train -1242,1,train 846,1,train -4019,2,train 3757,2,train -629,3,train -1066,4,train -763,3,train +3320,1,train 3361,2,train -3540,4,train +326,2,train +367,3,train +105,3,train 3278,4,train 1321,1,train -1455,1,train 1059,1,train 1279,4,train 4011,3,train -3574,2,train 3970,2,train 1017,4,train 714,3,train -3491,4,train +318,3,train 3095,4,train 1534,1,train -1272,1,train 876,1,train 1313,2,train 1010,1,train 614,1,train +1096,4,train 3391,2,train 793,3,train 397,3,train +3787,2,train 3921,2,train 531,3,train 3308,4,train 1788,2,train -1485,1,train -1089,1,train 1922,2,train +1089,1,train +1526,2,train 1223,1,train 4000,2,train -4041,3,train 3604,2,train 1006,3,train 1047,4,train +1443,4,train 3738,2,train -3779,3,train +785,4,train 1302,1,train -1739,2,train -1040,1,train +1343,2,train +1522,4,train 3817,2,train -1260,4,train 3992,3,train -998,4,train -1818,2,train -1515,1,train -1993,3,train +2214,2,train 1253,1,train 1690,2,train +4071,3,train 1473,4,train 1077,4,train 1211,4,train -1769,2,train -2206,3,train 1903,2,train 1507,2,train -1290,4,train 4022,3,train 1424,4,train -1982,2,train -1586,2,train +2285,3,train 2419,3,train -1324,2,train +1586,2,train 1503,4,train 2236,3,train -2532,1,train +1974,3,train +2711,3,train +2449,3,train +2053,3,train +2490,4,train 1791,3,train -2745,1,train 2879,1,train +2266,3,train 2703,4,train 2400,3,train +2004,3,train 2958,1,train -2562,1,train 5,3,train -2479,3,train +2300,1,train +2782,4,train 2038,1,train 2520,4,train -2916,4,train -2654,4,train -1955,3,train -2775,1,train -2909,1,train +218,3,train 2513,1,train +2909,1,train +2950,2,train 3129,4,train 2733,4,train 2867,4,train 2471,4,train +2430,3,train 2034,3,train 252,1,train 3029,2,train @@ -4067,195 +4081,199 @@ parameter_index,simulation_index,split 2726,1,train 3163,2,train 169,3,train -2464,1,train 2247,3,train +2684,4,train 861,1,train -3242,2,train +465,1,train 248,3,train 2543,1,train -2939,1,train -382,3,train -2677,1,train -2763,4,train 3376,2,train +2763,4,train 2460,3,train 2501,4,train 2897,4,train 2635,4,train 2239,4,train +544,1,train 282,1,train -3455,2,train +20,1,train 2756,1,train -3193,2,train +2797,2,train 636,4,train 2931,2,train 2848,4,train -757,1,train 891,1,train -495,1,train 932,2,train 3709,3,train 233,1,train 3010,2,train -3843,3,train 412,3,train +16,3,train 453,4,train +849,4,train 2748,2,train -150,3,train 2927,4,train 708,1,train 312,1,train 1145,2,train 3922,3,train -446,1,train 532,4,train 2827,2,train 3223,2,train +666,4,train 3357,2,train -3660,3,train 3956,1,train 921,1,train 962,2,train -3739,3,train -3873,3,train 263,1,train 700,2,train 3436,2,train 442,3,train 3174,2,train +3215,3,train +3477,3,train 180,3,train +617,4,train 4035,1,train 738,1,train 779,2,train 1175,2,train -3952,3,train 4086,3,train -3690,3,train +3824,3,train 3428,3,train 434,4,train 3986,1,train +992,2,train 1429,3,train -3724,1,train 689,1,train 730,2,train -3944,4,train 1126,2,train 3507,3,train 909,4,train -513,4,train -3245,3,train 3641,3,train -647,4,train +3245,3,train +3903,3,train 251,4,train 1205,2,train 1642,3,train -943,2,train -3720,3,train +3937,1,train 681,2,train 3458,3,train 3854,3,train +3895,4,train 4016,1,train -1855,3,train +1418,2,train +3754,1,train 1156,2,train 760,2,train -3888,1,train 894,2,train 677,4,train -1889,1,train 2068,3,train 3967,1,train 1806,3,train -973,2,train -3925,4,train +1107,2,train 890,4,train 3663,4,train +2102,1,train 1706,1,train 1885,3,train 1489,3,train 3784,1,train -1623,3,train +1186,2,train 1227,3,train 3876,4,train 2181,1,train +2315,1,train 1919,1,train 2098,3,train 2139,4,train 1836,3,train -1440,3,train 1178,3,train +3955,4,train 1870,1,train 2352,4,train +1653,3,train 1257,3,train 1391,3,train 2345,1,train 2386,2,train +2565,4,train 2083,1,train -2303,4,train +2169,4,train +1866,3,train 1470,3,train 1907,4,train +1604,3,train 2465,2,train -1766,1,train 1504,1,train 2516,4,train -1683,3,train 1858,4,train +2678,2,train 80,3,train 2375,1,train +2812,2,train 2113,1,train 1717,1,train 2154,2,train 2595,4,train -1937,4,train 2071,4,train 1675,4,train 114,1,train +2891,2,train 2629,2,train -2233,2,train -3066,3,train +72,4,train 2367,2,train 2284,4,train 1888,4,train 327,1,train 65,1,train 151,4,train -2883,3,train +2446,2,train +3279,3,train 285,4,train 2580,2,train 2363,4,train -2101,4,train 144,1,train +3492,3,train 2659,2,train 3096,3,train 2397,2,train 2834,3,train -2314,4,train +3392,1,train 357,1,train 398,2,train 95,1,train +136,2,train 577,4,train 2872,2,train +2913,3,train +3047,3,train 2651,3,train +3309,3,train 53,4,train -745,2,train +3605,1,train +215,2,train +3343,1,train 349,2,train -3563,4,train +3522,3,train +132,4,train 2823,2,train 2864,3,train 3260,3,train -428,2,train -125,1,train +3422,1,train +824,2,train 166,2,train 2943,3,train 3339,3,train -345,4,train -3077,3,train 3776,4,train -83,4,train +3077,3,train 2815,3,train -3989,4,train -379,2,train +4031,1,train +3635,1,train +3769,1,train +3373,1,train +775,2,train 3111,1,train -3552,3,train 3593,4,train 117,2,train 3290,3,train @@ -4263,157 +4281,146 @@ parameter_index,simulation_index,split 3028,3,train 34,4,train 3889,2,train +854,2,train 895,3,train 3586,1,train 592,2,train +196,2,train 633,3,train -3324,1,train 3410,4,train 330,2,train 3544,4,train +3806,4,train +3940,4,train 1325,1,train 1108,3,train 3403,1,train 3840,2,train -1242,3,train 409,2,train 846,3,train -3537,1,train -543,2,train -3757,4,train +3320,3,train 3361,4,train -4019,4,train -3099,4,train -1538,1,train -1142,1,train +3757,4,train +326,4,train 3919,2,train 1321,3,train -3616,1,train +622,2,train 1059,3,train 3970,4,train -3574,4,train 1617,1,train 1355,1,train 1534,3,train -3829,1,train 3870,2,train -1272,3,train 876,3,train 1313,4,train 4004,2,train 1010,3,train 614,3,train 3391,4,train +3787,4,train 1830,1,train 1568,1,train 1172,1,train 1788,4,train 910,1,train +1392,4,train 1922,4,train 1089,3,train +1526,4,train +3821,2,train 4000,4,train 3604,4,train 3738,4,train -1385,1,train 1519,1,train 1123,1,train 3900,2,train 1302,3,train -1739,4,train -1040,3,train +1343,4,train +1081,4,train 3817,4,train 1598,1,train -2035,2,train -1336,1,train -1818,4,train 1690,4,train 2248,2,train -1852,2,train +1549,1,train 1986,2,train -1590,2,train -1769,4,train 1507,4,train 2065,2,train -1669,2,train -2199,2,train +1803,2,train 1586,4,train -1324,4,train 2278,2,train 1882,2,train 2319,3,train 1579,1,train 1620,2,train -2016,2,train 2057,3,train -2532,3,train 2229,2,train -2745,3,train +1967,2,train 2349,3,train +2046,2,train 1650,2,train -47,2,train -3175,1,train +181,2,train 2958,3,train -2562,3,train 2259,2,train 1863,2,train +2300,3,train 2038,3,train 2858,1,train -2775,3,train +260,2,train +2992,1,train +2596,1,train +39,3,train 2513,3,train +2950,4,train 3467,1,train +3205,1,train 2809,1,train -211,2,train 252,3,train -2547,1,train 3029,4,train 2726,3,train 2767,4,train 3163,4,train -2464,3,train 548,1,train 3325,2,train -3459,2,train -3022,1,train -69,3,train +2626,1,train +465,3,train 2760,1,train 2846,4,train -3242,4,train -2543,3,train 3376,4,train -3538,2,train -3235,1,train +2543,3,train +761,1,train +544,3,train 3276,2,train 2839,1,train -241,2,train +3672,2,train 282,3,train 2577,1,train -3455,4,train -3672,2,train +20,3,train 2756,3,train -3193,4,train +2797,4,train 2931,4,train 578,1,train 3751,2,train -757,3,train 3052,1,train 3489,2,train -495,3,train 932,4,train 3227,2,train +99,3,train +2790,1,train 233,3,train 3010,4,train 2748,4,train 1187,1,train +791,1,train 3964,2,train 529,1,train 3306,2,train -3743,3,train +3702,2,train 708,3,train +3440,2,train 312,3,train 1145,4,train 3003,1,train -9,2,train -446,3,train +3044,2,train 2827,4,train 3223,4,train 1004,1,train @@ -4421,6 +4428,7 @@ parameter_index,simulation_index,split 346,1,train 3956,3,train 962,4,train +3653,2,train 263,3,train 700,4,train 3436,4,train @@ -4428,26 +4436,30 @@ parameter_index,simulation_index,split 821,1,train 4035,3,train 955,1,train -559,1,train 738,3,train 779,4,train 1175,4,train 517,4,train +1034,1,train 1471,2,train 772,1,train -376,1,train 3986,3,train +376,1,train +1209,2,train +510,1,train +992,4,train 3287,2,train -3724,3,train 1126,4,train 730,4,train 1684,2,train -4020,1,train -1026,2,train +1288,2,train +1422,2,train +589,1,train 3803,3,train 723,1,train 1205,4,train -943,4,train +3500,2,train +3937,3,train 547,4,train 681,4,train 1501,2,train @@ -4456,145 +4468,152 @@ parameter_index,simulation_index,split 4016,3,train 936,1,train 977,2,train +3754,3,train 1156,4,train 760,4,train -3888,3,train 894,4,train 1714,2,train +1755,3,train 1452,2,train 1056,2,train -1889,3,train 1190,2,train 794,2,train 3571,3,train 3967,3,train -973,4,train 2185,1,train +2102,3,train +1706,3,train 1665,2,train 1269,2,train -4001,1,train -1706,3,train 1007,2,train 3784,3,train +1186,4,train 3959,4,train 2398,1,train 2002,1,train 2181,3,train 1785,3,train -4080,1,train -1482,2,train 1919,3,train 1220,2,train -2611,1,train 2215,1,train -1695,2,train 1870,3,train 2428,1,train +2166,1,train 2386,4,train -1553,3,train 2083,3,train +2641,1,train 2682,2,train 2379,1,train +1983,1,train 2465,4,train -1766,3,train +2203,4,train 1504,3,train -1941,4,train 2458,1,train 2062,1,train +2895,2,train +2678,4,train +2812,4,train 1934,1,train 2113,3,train 1717,3,train 2154,4,train 197,1,train 2974,2,train -2671,1,train 3108,2,train +2712,2,train 114,3,train +2891,4,train 2013,1,train 2450,2,train 2147,1,train 2629,4,train -2233,4,train 2367,4,train 1971,4,train 3187,2,train 148,1,train 3321,2,train +3059,2,train 65,3,train +2446,4,train 2580,4,train 623,1,train +227,1,train 361,1,train 3138,2,train 3179,3,train 144,3,train +2876,2,train 2659,4,train 2218,2,train 2397,4,train 44,1,train 178,1,train +3392,3,train 398,4,train +2693,2,train +136,4,train 2872,4,train -2431,2,train +653,1,train 391,1,train +3605,3,train 3209,3,train 129,1,train -2906,2,train +215,4,train +2510,2,train +3343,3,train 349,4,train 2644,2,train -907,2,train 1041,2,train -645,2,train +3422,3,train 342,1,train -428,4,train +824,4,train 2723,2,train -3119,2,train 166,4,train -2857,2,train +3718,1,train 1120,2,train -724,2,train 421,1,train 25,1,train -858,2,train +462,2,train +3635,3,train 2936,2,train -379,4,train +3373,3,train 3111,3,train 117,4,train +3931,1,train 937,2,train 4065,1,train 675,2,train 3407,1,train 3889,4,train +854,4,train +413,2,train 3586,3,train -3627,4,train -4023,4,train 592,4,train -3324,3,train +196,4,train 330,4,train 1408,1,train -1191,3,train 3882,1,train -888,2,train -492,2,train +3486,1,train 1325,3,train -3620,1,train +492,2,train +626,2,train 3403,3,train 3840,4,train +230,2,train 409,4,train -3537,3,train 4095,1,train 3699,1,train 1101,2,train -1142,3,train -1538,3,train 3919,4,train 839,2,train -3616,3,train 3657,4,train +622,4,train +1834,1,train 1438,1,train 1617,3,train 3912,1,train 1355,3,train -3650,1,train +959,3,train 656,2,train 3870,4,train 4004,4,train @@ -4603,89 +4622,87 @@ parameter_index,simulation_index,split 1568,3,train 1172,3,train 1609,4,train -3863,1,train +3904,2,train 869,2,train 910,3,train -3904,2,train -3425,4,train +3821,4,train 1864,1,train 1468,1,train 1602,1,train -1385,3,train 989,3,train 1519,3,train 1123,3,train 3900,4,train -1681,1,train +2118,2,train 1419,1,train 1598,3,train 1157,1,train 1639,4,train -2035,4,train -1336,3,train 1377,4,train -4068,2,train -3934,2,train 2331,2,train 1632,1,train -2069,2,train 2248,4,train 1370,1,train -1852,4,train +1549,3,train 1986,4,train -1590,4,train 2107,1,train 1845,1,train -1449,1,train -1886,2,train 2065,4,train -1669,4,train +1803,4,train +2757,2,train 1796,1,train 2278,4,train 1882,4,train -2016,4,train 1620,4,train 2574,2,train +2178,2,train 2615,3,train -1437,4,train +1875,1,train +1916,2,train +2312,2,train 51,2,train 2525,2,train 2129,2,train 2263,2,train +1867,2,train +2046,4,train 1650,4,train 89,1,train 3258,1,train -264,2,train -47,4,train +2645,3,train +2342,2,train 1946,2,train 1863,4,train -477,2,train +3471,1,train 2858,3,train -2293,2,train +260,4,train +2992,3,train +2596,3,train +2334,3,train +3154,1,train 32,2,train 2809,3,train -2547,3,train +3367,1,train +3105,1,train 3542,2,train 507,2,train 111,2,train 548,3,train 2843,1,train +245,2,train 3239,1,train -3022,3,train -3459,4,train +2626,3,train 3325,4,train 2760,3,train -2364,3,train 3755,2,train 2922,1,train -3538,4,train -62,2,train +761,3,train +3056,1,train +3672,4,train 2839,3,train 3276,4,train -3672,4,train 2577,3,train 3531,1,train -3572,2,train 3968,2,train 578,3,train 2873,1,train @@ -4693,246 +4710,256 @@ parameter_index,simulation_index,split 3310,2,train 316,3,train 3052,3,train -3093,4,train 3489,4,train -3227,4,train +3751,4,train +2790,3,train 2831,4,train +3227,4,train +874,1,train +791,3,train 529,3,train 3306,4,train +3702,4,train 3003,3,train -825,1,train +3440,4,train +3044,4,train +1087,1,train 3602,2,train +4039,3,train 1004,3,train 1045,4,train 2903,1,train 3299,1,train 742,3,train 346,3,train +3340,2,train 3736,2,train +1300,1,train 904,1,train 1434,1,train 1038,1,train -3815,2,train 821,3,train 3553,2,train 3949,2,train 955,3,train -559,3,train +3291,2,train 1117,1,train 1251,1,train 855,1,train -4069,3,train 1292,2,train -1471,4,train -3766,2,train -593,1,train 4028,2,train +1034,3,train +1075,4,train +1471,4,train 772,3,train 376,3,train +813,4,train 3504,2,train +510,3,train 3287,4,train +1209,4,train 1068,1,train 1505,2,train -1684,4,train +1202,1,train 806,1,train -3583,2,train -4020,3,train -1026,4,train +1288,4,train +1684,4,train +1422,4,train +589,3,train 3717,2,train +3583,2,train 723,3,train -1584,2,train -1281,1,train -1322,2,train +3500,4,train 1718,2,train +885,1,train +1322,2,train 1501,4,train 3796,2,train 802,3,train 1239,4,train +843,4,train 977,4,train -1797,2,train 1931,2,train 1098,1,train -1232,1,train 1714,4,train +1232,1,train +4009,2,train 1452,4,train 1056,4,train 3788,3,train 1190,4,train 794,4,train +1748,2,train 2185,3,train -1352,2,train +1486,2,train 1269,4,train 873,4,train -4001,3,train 1007,4,train 2223,2,train 1961,2,train 2002,3,train 2398,3,train 1303,2,train -4080,3,train -1482,4,train 1220,4,train -2611,3,train 2215,3,train +1516,2,train 2511,1,train +2249,1,train 1991,2,train 2428,3,train 2469,4,train -1729,2,train -2724,1,train -2462,1,train +2166,3,train +1770,3,train 2682,4,train 2379,3,train +1983,3,train 2937,1,train 2541,1,train -2675,1,train -2279,1,train 2458,3,train 2062,3,train -2499,4,train +2895,4,train +1800,3,train 1934,3,train -2358,1,train 197,3,train 2888,1,train 2974,4,train 3108,4,train -2450,4,train +2712,4,train 2013,3,train +2450,4,train 2147,3,train 2967,1,train 3008,2,train -3187,4,train +2705,1,train 2309,1,train +2746,2,train 148,3,train -2443,1,train +3187,4,train 2529,4,train 310,1,train -2918,1,train +444,1,train +227,3,train 2522,1,train -2959,2,train +2918,1,train 361,3,train 2656,1,train +2959,2,train 3138,4,train -3355,2,train +2876,4,train 2218,4,train -657,1,train +261,1,train 3038,2,train 44,3,train -481,4,train -3172,2,train 178,3,train -2297,4,train -2431,4,train +2693,4,train 736,1,train 3385,2,train +2989,2,train 3426,3,train 391,3,train -3123,2,train -2727,2,train 129,3,train -2906,4,train +2510,4,train 2644,4,train +687,1,train 291,1,train -425,1,train -511,4,train -907,4,train +29,1,train 3202,2,train -645,4,train -249,4,train 2723,4,train -2857,4,train 3935,1,train +1337,2,train 504,1,train -1120,4,train +941,2,train +3718,3,train +638,1,train 242,1,train -724,4,train +1120,4,train 3019,2,train 421,3,train 25,3,train -858,4,train -3153,2,train +462,4,train 3194,3,train -2936,4,train 3415,2,train +2936,4,train +4014,1,train 1020,2,train +717,1,train 758,2,train +3931,3,train 937,4,train 59,1,train -3232,2,train 4065,3,train 675,4,train 3407,3,train -1233,2,train +413,4,train 3965,1,train +1367,2,train +971,2,train 1408,3,train -1105,2,train +3703,1,train +668,1,train 709,2,train +3486,3,train 3882,3,train -3923,4,train -888,4,train 492,4,train 3224,3,train -3620,3,train +626,4,train +230,4,train 1184,2,train 788,2,train -922,2,train +485,1,train 3699,3,train 4095,3,train 839,4,train -1397,2,train +1834,3,train 1438,3,train 698,1,train 1135,2,train +1176,3,train 3912,3,train 3953,4,train -3650,3,train 656,4,train 2047,3,train 1214,2,train 3946,1,train -952,2,train 556,2,train -3863,3,train 3904,4,train 1864,3,train 1468,3,train +1905,4,train 3763,1,train 1602,3,train -1206,3,train -3983,4,train -2160,1,train -1764,1,train 2294,1,train -1681,3,train -3976,1,train +2118,4,train 982,2,train 1419,3,train 1157,3,train -3934,4,train -4068,4,train -1977,1,train 2331,4,train 1453,1,train +1935,4,train 1632,3,train 1236,3,train -2069,4,train 1370,3,train -2190,1,train +2324,1,train 1928,1,train 2365,2,train +1666,1,train 1845,3,train -1449,3,train -1886,4,train 2444,2,train 2141,1,train -1745,1,train 2182,2,train +1483,1,train 1965,4,train 2657,2,train +2395,2,train 2092,1,train +1696,1,train +2178,4,train 2574,4,train +1875,3,train +1916,4,train +2312,4,train 1654,4,train +93,1,train 2870,2,train 2171,1,train 2212,2,train @@ -4943,94 +4970,96 @@ parameter_index,simulation_index,split 2129,4,train 1733,4,train 2263,4,train -3083,2,train +1867,4,train +172,1,train +306,1,train 3258,3,train 2425,2,train -264,4,train 2122,1,train +2163,2,train +2342,4,train 1946,4,train -385,1,train +164,2,train +3471,3,train 2242,2,train 2376,2,train -2293,4,train 3371,1,train 377,2,train +3154,3,train 74,1,train +2851,2,train 3329,4,train 2193,2,train 32,4,train -3584,1,train -153,1,train 194,2,train -328,2,train +3367,3,train +3105,3,train 3542,4,train 111,4,train +2406,2,train 2843,3,train +245,4,train 3239,3,train -3401,1,train +3797,1,train 803,2,train 407,2,train -3139,1,train -541,2,train +104,1,train 145,2,train +541,2,train 2922,3,train 3755,4,train 2619,2,train 2660,3,train -62,4,train +3056,3,train 3614,1,train 620,2,train +224,2,train 3352,1,train +3748,1,train 358,2,train 3531,3,train -3572,4,train 3968,4,train 3269,3,train 2873,3,train 3310,4,train 3431,1,train -3868,2,train 833,2,train -571,2,train +874,3,train 175,2,train +612,3,train 2907,1,train 3303,1,train 4081,2,train +1087,3,train 3778,1,train -3382,1,train 3819,2,train -388,2,train -825,3,train +3516,1,train 3602,4,train 522,2,train 3299,3,train 2903,3,train +3340,4,train 3736,4,train -1383,1,train +1517,1,train 1121,1,train -3898,2,train +1300,3,train 904,3,train 1038,3,train -205,2,train -3815,4,train 3553,4,train +3291,4,train 1596,1,train 1117,3,train -3412,1,train -3849,2,train 1251,3,train 855,3,train 1292,4,train 3587,2,train 4028,4,train -593,3,train -3766,4,train 3504,4,train 1809,1,train -1413,1,train 1547,1,train -1151,1,train 1285,1,train +889,1,train +1371,4,train 4062,2,train 1068,3,train 1505,4,train @@ -5039,513 +5068,483 @@ parameter_index,simulation_index,split 3583,4,train 3717,4,train 1364,1,train +1801,2,train 1102,1,train -1584,4,train 3879,2,train -1281,3,train -1322,4,train 1718,4,train +885,3,train +1322,4,train 4013,2,train -1060,4,train 3796,4,train 1880,2,train -1577,1,train 1181,1,train 1618,2,train 1315,1,train -1797,4,train 4092,2,train 1098,3,train 2093,2,train +1790,1,train +1831,2,train 2227,2,train 1569,2,train -1352,4,train -4043,2,train +1748,4,train 4084,3,train +1486,4,train 1090,4,train 2306,2,train 2044,2,train -1648,2,train -1345,1,train 1782,2,train 1169,4,train 1303,4,train -2257,2,train 1861,2,train -2298,3,train -1558,1,train -1995,2,train +1599,2,train +1516,4,train 2377,3,train 2511,3,train -1729,4,train +2249,3,train 2807,1,train 2287,2,train -2724,3,train 2025,2,train 1629,2,train 2066,3,train -2462,3,train 3020,1,train +26,2,train 2937,3,train 2541,3,train -2675,3,train 1842,2,train -2279,3,train 3233,1,train -239,2,train 2575,1,train -2358,3,train -2795,4,train 2055,2,train +2096,3,train 2788,1,train 2967,3,train 3008,4,train +2705,3,train 2309,3,train -2443,3,train +2746,4,train 527,1,train 3304,2,train 269,2,train 310,3,train -3001,1,train -7,2,train +3438,2,train +444,3,train +48,3,train +2343,1,train 2739,1,train -2825,4,train -3355,4,train 2522,3,train 2126,3,train 2959,4,train -740,1,train 3651,2,train 2818,1,train -657,3,train -2952,1,train +261,3,train 3038,4,train -3172,4,train 2514,4,train 953,1,train 3730,2,train 736,3,train -3468,2,train +3031,1,train 78,3,train 2769,1,train -3123,4,train -2727,4,train -1166,1,train +2989,4,train 770,1,train +3547,2,train 508,1,train 3722,3,train 3244,1,train 3285,2,train +687,3,train 291,3,train 3023,2,train 3681,2,train -425,3,train +29,3,train 3202,4,train 2940,4,train 983,1,train 587,1,train -721,1,train 3498,2,train 3935,3,train +325,1,train 807,4,train +1337,4,train 504,3,train -108,3,train +941,4,train 3102,2,train -3236,2,train 242,3,train 3019,4,train +3236,2,train 3632,2,train -3153,4,train -800,1,train 1237,2,train +4014,3,train +934,1,train 1020,4,train 3752,3,train -276,1,train +717,3,train 758,4,train -3053,2,train 59,3,train -3232,4,train 1013,1,train -1054,2,train 751,1,train -355,1,train -1233,4,train 3965,3,train 489,1,train +971,4,train 3662,2,train -1105,4,train +3703,3,train 709,4,train 1226,1,train -964,1,train +1401,2,train 568,1,train -1005,2,train 3782,3,train 702,1,train 788,4,train 1184,4,train -922,4,train -1480,2,train +3520,3,train +485,3,train +781,1,train 1135,4,train -1734,3,train -1431,2,train 1035,2,train 1472,3,train 1214,4,train 773,2,train 3550,3,train 3946,3,train -952,4,train 556,4,train +1248,2,train +3980,1,train 986,2,train 3763,3,train -2160,3,train -1764,3,train -1065,2,train 1502,3,train -1199,2,train -3976,3,train 982,4,train 2590,1,train -2194,1,train -1977,3,train +1412,2,train 1453,3,train 2273,1,train -2011,1,train -2190,3,train 1928,3,train 1532,3,train 2365,4,train 2486,1,train 2224,1,train +2661,2,train 2444,4,train 2141,3,train -1745,3,train 2182,4,train +1483,3,train 2437,1,train 2041,1,train -2657,4,train +2874,2,train +2175,1,train 1779,1,train 2261,4,train -2650,1,train +2657,4,train +2395,4,train +1696,3,train +3087,2,train 2254,1,train 2691,2,train +93,3,train 2388,1,train -1992,1,train 2429,2,train 2870,4,train 2171,3,train 2212,4,train 2608,4,train 1909,3,train -1950,4,train 2346,4,train +172,3,train 2904,2,train +2642,2,train 2425,4,train -206,1,train -385,3,train +2163,4,train 3117,2,train 2721,2,train +164,4,train 2242,4,train 2376,4,train -1980,4,train 419,1,train +23,1,train 3371,3,train 2538,2,train 377,4,train 2672,2,train +3068,2,train 2193,4,train 632,1,train 236,1,train +673,2,train 370,1,train -411,2,train -3584,3,train -153,3,train 194,4,train 2489,2,train 2885,2,train -328,4,train -2623,2,train 2926,3,train +2623,2,train +2406,4,train 449,1,train -624,2,train -3401,3,train -321,1,train +3618,1,train +3797,3,train +187,1,train 407,4,train +2702,2,train 3098,2,train -3139,3,train 541,4,train 145,4,train +2836,2,train 2619,4,train 3697,1,train -1099,2,train 3831,1,train -837,2,train +3435,1,train 3614,3,train 4,1,train 441,2,train 3218,3,train +138,1,train +224,4,train 620,4,train +2915,2,train +358,4,train 2956,3,train 3352,3,train -358,4,train -3910,1,train 916,2,train 520,2,train 3648,1,train -1050,2,train 4044,1,train 3431,3,train -3868,4,train 3128,2,train 3606,4,train -571,4,train 175,4,train 2907,3,train 3303,3,train 3727,1,train 3861,1,train 430,1,train -3599,1,train 471,2,train +908,3,train 4081,4,train 605,2,train -209,2,train -2986,3,train -3382,3,train -388,4,train 3819,4,train -1383,3,train +2986,3,train +3516,3,train 4074,1,train -684,2,train +1517,3,train 1121,3,train -3898,4,train -818,2,train +3416,1,train +3812,1,train 3636,4,train -205,4,train 3374,4,train 1417,1,train 1596,3,train +1200,3,train 897,2,train -938,3,train 635,2,train -3412,3,train -3849,4,train 3587,4,train 1809,3,train -1413,3,train 1110,2,train -1151,3,train 1547,3,train 1588,4,train 3883,2,train +889,3,train 4062,4,train 3800,4,train +1709,1,train 1843,1,train -1581,1,train -1667,4,train 1364,3,train -968,3,train +1801,4,train +4096,2,train 1102,3,train 3879,4,train 4013,4,train 2056,1,train -1794,1,train +1398,1,train 1880,4,train -1577,3,train 1181,3,train 1618,4,train 3913,2,train 1315,3,train 1356,4,train 4092,4,train +1873,1,train 1477,1,train 2093,4,train 1215,1,train 2227,4,train +1831,4,train 1569,4,train -4043,4,train -2086,1,train -2127,2,train 2523,2,train 1824,1,train 2306,4,train 2044,4,train -1648,4,train -1345,3,train 1782,4,train 2340,2,train 1641,1,train -2078,2,train -2257,4,train +1775,1,train 1861,4,train -1995,4,train +1599,4,train 2553,2,train -1854,1,train +2291,2,train 1458,1,train 1895,2,train -1633,2,train +1416,4,train 2370,2,train 2807,3,train 2108,2,train +1846,2,train 2025,4,train 1629,4,train 68,1,train +2841,1,train 2583,2,train 2624,3,train 3020,3,train +26,4,train +2321,2,train 2059,2,train 1842,4,train +3054,1,train 3233,3,train 2534,2,train -2138,2,train 2575,3,train 2055,4,train 3133,1,train 139,2,train -3267,1,train -2788,3,train +2871,1,train +2351,2,train 2392,3,train +2788,3,train 352,2,train 3084,1,train +3480,1,train 90,2,train 527,3,train 2822,1,train 3304,4,train -3001,3,train +3438,4,train 3042,4,train -7,4,train 2739,3,train +2343,3,train +3559,1,train 3297,1,train -740,3,train -3035,1,train -3651,4,train +2901,1,train +303,2,train +41,2,train 2818,3,train 2422,3,train -2952,3,train +3651,4,train 3772,1,train +3510,1,train 3114,1,train 3551,2,train -516,2,train -120,2,train 953,3,train -2852,1,train 3730,4,train -3468,4,train +3031,3,train 2769,3,train -2810,4,train 853,1,train -3764,2,train -3751,4,train +3327,1,train 770,3,train 3065,1,train -71,2,train +3547,4,train 508,3,train 3285,4,train 3681,4,train 3023,4,train -1066,1,train 804,1,train -3540,1,train +3581,2,train 3977,2,train 983,3,train -3715,2,train 587,3,train 3278,1,train 284,2,train -721,3,train +325,3,train 3102,4,train -3319,2,train 3498,4,train 3236,4,train -2840,4,train 1279,1,train 1017,1,train 3794,2,train -800,3,train -404,3,train 1237,4,train +404,3,train 3095,1,train -276,3,train -3053,4,train +934,3,train +3928,2,train +1096,1,train +834,1,train 4007,2,train 4048,3,train 1013,3,train -572,1,train -1054,4,train 3308,1,train +3745,2,train 751,3,train -355,3,train 792,4,train -3745,2,train 489,3,train 1047,1,train -651,1,train -3958,2,train +785,1,train 3562,2,train +3958,2,train +1401,4,train 568,3,train -1005,4,train 3696,2,train 702,3,train -1260,1,train -998,1,train -1480,4,train +1522,1,train +1697,2,train +4078,3,train +3379,2,train +781,3,train 822,4,train -1776,2,train 1910,2,train 1077,1,train 1211,1,train -1431,4,train +3988,2,train +3592,2,train 1035,4,train 3767,3,train 773,4,train 1989,2,train -1290,1,train +1727,2,train +1331,2,train 1465,2,train -1069,2,train +1248,4,train +3980,3,train 986,4,train 1940,2,train 1678,2,train -1065,4,train -1199,4,train +1282,2,train 2277,1,train -2060,3,train 1757,2,train 1361,2,train -2194,3,train 1495,2,train +2490,1,train 2273,3,train -1970,2,train -2011,3,train 1708,2,train 2569,1,train 2703,1,train 2486,3,train 2224,3,train -1828,3,train -2916,1,train +2661,4,train +2782,1,train 2520,1,train -2654,1,train 2258,1,train 2437,3,train 2041,3,train +2478,4,train +2874,4,train +2175,3,train 1779,3,train 2733,1,train 2337,1,train 2471,1,train +3087,4,train 2254,3,train 2691,4,train 2388,3,train -1992,3,train 2429,4,train +2684,1,train 2288,1,train 2725,2,train 2904,4,train +2026,1,train 2508,4,train +2642,4,train +2246,4,train 289,1,train 2763,1,train -206,3,train +3200,2,train 2501,1,train -2938,2,train 2635,1,train 2239,1,train 2721,4,train @@ -5553,40 +5552,47 @@ parameter_index,simulation_index,split 636,1,train 3017,2,train 419,3,train -3151,2,train +23,3,train 2755,2,train +3151,2,train 2538,4,train 2672,4,train 319,1,train 453,1,train 3230,2,train +3626,2,train 236,3,train +673,4,train 2968,2,train 370,3,train -411,4,train +3364,2,train 2706,2,train 2885,4,train 2489,4,train 2623,4,train 532,1,train +666,1,train 707,2,train 3484,3,train 449,3,train 8,1,train 2785,2,train -624,4,train +3618,3,train +187,3,train 2919,2,train -3914,1,train +2702,4,train +920,2,train 3697,3,train -1099,4,train +617,1,train 3831,3,train 2998,2,train -3394,2,train -837,4,train +3435,3,train 4,3,train 441,4,train +3132,2,train +138,3,train +2915,4,train 3993,1,train -999,2,train 300,1,train 737,2,train 3514,3,train @@ -5594,27 +5600,23 @@ parameter_index,simulation_index,split 38,1,train 520,4,train 916,4,train +3211,2,train 3648,3,train -3910,3,train 1212,2,train -3944,1,train -513,1,train 3727,3,train -647,1,train 251,1,train 3861,3,train 3902,4,train 471,4,train -3599,3,train 605,4,train -209,4,train 1425,2,train 767,2,train +3895,1,train 901,2,train -684,4,train -980,2,train +3812,3,train +3416,3,train +1376,2,train 1417,3,train -3712,1,train 677,1,train 718,2,train 1114,2,train @@ -5624,227 +5626,225 @@ parameter_index,simulation_index,split 1496,3,train 3791,1,train 1193,2,train -3925,1,train -931,2,train 535,2,train 3663,1,train 3883,4,train +1709,3,train 1406,2,train 1843,3,train -1581,3,train 1185,3,train 3876,1,train 3962,4,train -3700,4,train +4096,4,train 2139,1,train 1743,1,train -1264,3,train -1794,3,train +3955,1,train 961,2,train +1398,3,train 3913,4,train 2352,1,train +1873,3,train 1477,3,train 1914,4,train +1174,2,train 1215,3,train 1652,4,train -2303,1,train +2169,1,train 1907,1,train 2523,4,train -2127,4,train 1824,3,train -2423,2,train 2161,2,train 1858,1,train 1944,4,train 2340,4,train 1641,3,train -2078,4,train -2636,2,train 2770,2,train -1937,1,train 2374,2,train 2071,1,train 1675,1,train 2553,4,train -1854,3,train +2291,4,train 1458,3,train 1895,4,train -1633,4,train -2453,2,train +72,1,train +2191,2,train 1888,1,train 2370,4,train 2108,4,train 1712,4,train +1846,4,train 151,1,train 2800,2,train -2101,1,train -2142,2,train +2404,2,train +2841,3,train 2583,4,train +2321,4,train 2059,4,train 2617,2,train -2221,2,train -2355,2,train -2138,4,train +3054,3,train 3133,3,train 53,1,train 139,4,train 2434,2,train -2830,2,train -3267,3,train +2871,3,train +2568,2,train +2172,2,train 2609,3,train +2351,4,train 435,2,train -3563,1,train -569,2,train +132,1,train 173,2,train +569,2,train 352,4,train 3084,3,train 90,4,train -2385,2,train 2822,3,train 3776,1,train -782,2,train 386,2,train -3118,1,train -83,1,train +3559,3,train +124,2,train +2901,3,train 3297,3,train -2598,2,train +303,4,train 2639,3,train -3035,3,train +41,4,train 3593,1,train +3197,1,train 599,2,train -337,2,train +203,2,train 3114,3,train 3551,4,train -120,4,train -2852,3,train +3806,1,train 3410,1,train +812,2,train 3544,1,train -416,2,train 853,3,train -3148,1,train +550,2,train 154,2,train 591,3,train 2886,1,train -3368,4,train +3327,3,train 3065,3,train 2669,3,train -3764,4,train -71,4,train 4060,2,train -629,2,train -1066,3,train -3361,1,train 3757,1,train +3361,1,train +367,2,train 804,3,train -3099,1,train +3581,4,train 3977,4,train +105,2,train 3278,3,train -3319,4,train -3715,4,train 1100,1,train 3877,2,train 1279,3,train -3574,1,train 4011,2,train +3615,2,train 1017,3,train 184,2,train 621,3,train 3398,4,train -3794,4,train +318,2,train 3095,3,train -1179,1,train +3794,4,train 1313,1,train 4090,2,train +1096,3,train 3391,1,train +3787,1,train +3828,2,train 397,2,train +834,3,train 4007,4,train 531,2,train -572,3,train 3308,3,train 3745,4,train 1788,1,train -1130,1,train +1392,1,train +1526,1,train 3907,2,train 868,1,train 1350,4,train 3604,1,train 1047,3,train -651,3,train -3779,2,train -4041,2,train +3645,2,train +785,3,train 389,3,train 3562,4,train 3696,4,train -1739,1,train -1780,2,train -1260,3,train +1343,1,train +1081,1,train +1697,4,train 3992,2,train -998,3,train -1818,1,train +3596,2,train +3379,4,train 1859,2,train -1993,2,train 1160,1,train -1597,2,train -1776,4,train 898,1,train 3675,2,train +4071,2,train 1077,3,train -2206,2,train -1810,2,train +1118,4,train +3592,4,train 1507,1,train 1989,4,train -1290,3,train +1727,4,train +1331,4,train 4022,2,train 1465,4,train -1069,4,train +2285,2,train 1586,1,train -1627,2,train -1324,1,train -1148,4,train 1678,4,train +1282,4,train 2236,2,train 2277,3,train -1578,2,train +1974,2,train 1757,4,train 1361,4,train 1495,4,train -1657,2,train +2053,2,train +2490,3,train 1791,2,train 1708,4,train 2569,3,train +2266,2,train 2703,3,train +2004,2,train 2045,3,train 5,2,train -2916,3,train +2782,3,train 2520,3,train -2654,3,train 2258,3,train -1955,2,train +218,2,train +2950,1,train +2554,1,train 2733,3,train 2337,3,train 2034,2,train 2075,3,train 2471,3,train +1813,3,train 3029,1,train 35,2,train 2767,1,train 3163,1,train +2684,3,train 2288,3,train 2725,4,train -3242,1,train +2026,3,train 2846,1,train 248,2,train 289,3,train 2584,1,train 3021,2,train +27,3,train 2763,3,train -2322,1,train +3200,4,train 2501,3,train 2105,3,train -2938,4,train 2239,3,train 3496,2,train -3193,1,train +2797,1,train 3234,2,train 636,3,train 2931,1,train @@ -5856,8 +5856,10 @@ parameter_index,simulation_index,split 3709,2,train 319,3,train 3010,1,train -453,3,train +3051,2,train +16,2,train 57,3,train +453,3,train 2748,1,train 3230,4,train 2968,4,train @@ -5865,72 +5867,65 @@ parameter_index,simulation_index,split 615,1,train 1145,1,train 3922,2,train -3660,2,train 532,3,train 2827,1,train 3223,1,train +666,3,train 707,4,train -3002,2,train 3264,2,train 8,3,train 2785,4,train 2919,4,train 962,1,train -3739,2,train +566,1,train +1003,2,train 700,1,train 304,1,train -3081,2,train -3914,3,train +786,4,train +3477,2,train +920,4,train 87,3,train +3215,2,train 2998,4,train 2602,4,train +3132,4,train 1175,1,train 779,1,train 3993,3,train -3952,2,train -3690,2,train 517,1,train -999,4,train 300,3,train 737,4,train -3032,2,train +3428,2,train 434,3,train 38,3,train -3428,2,train +3211,4,train +992,1,train 1429,2,train -596,1,train -1033,2,train 730,1,train 1212,4,train 3507,2,train -3944,3,train -513,3,train 3245,2,train 251,3,train 1205,1,train +1246,2,train 1642,2,train 3978,1,train -943,1,train -547,1,train 1425,4,train -3720,2,train +547,1,train 681,1,train 767,4,train 3458,2,train 3499,3,train 901,4,train +3895,3,train 760,1,train -980,4,train -3712,3,train 1114,4,train 718,4,train 1713,3,train -973,1,train +1014,2,train 3791,3,train 1193,4,train 752,2,train -3925,3,train -931,4,train 535,4,train 3663,3,train 1489,2,train @@ -5938,276 +5933,271 @@ parameter_index,simulation_index,split 3959,1,train 965,2,train 3876,3,train -1960,1,train 2139,3,train 1743,3,train 4038,1,train -1440,2,train -1044,2,train 1481,3,train 1178,2,train +3955,3,train 961,4,train 2352,3,train 1257,2,train 1391,2,train +2252,1,train 2386,1,train -2210,4,train +1990,1,train +2169,3,train 1470,2,train 1907,3,train 2465,1,train -1941,1,train -2423,4,train +2203,1,train 2161,4,train 1858,3,train +2678,1,train 2020,1,train 2154,1,train 2240,4,train -2636,4,train -1937,3,train -1541,3,train 2374,4,train 1675,3,train 2629,1,train -2233,1,train 2670,2,train -3066,2,train +72,3,train 2367,1,train 1971,1,train -2453,4,train +2191,4,train 1888,3,train -2749,2,train 151,3,train -2883,2,train +2446,1,train 2487,2,train -2142,4,train +2404,4,train 2962,2,train 2659,1,train 2700,2,train 3096,2,train 3137,3,train 2397,1,train +2438,2,train 2834,2,train 2617,4,train -2221,4,train -2355,4,train -1959,4,train 398,1,train +136,1,train +222,4,train +2517,2,train +2913,2,train +3047,2,train 2651,2,train 2434,4,train +2568,4,train +2172,4,train +215,1,train 349,1,train 435,4,train 2730,2,train -3167,3,train -569,4,train +132,3,train 173,4,train +569,4,train 2468,2,train 2864,2,train -3563,3,train -2385,4,train -428,1,train 469,2,train 166,1,train 2943,2,train 3776,3,train 386,4,train 3077,2,train -3118,3,train +124,4,train 2815,2,train -2598,4,train -3676,1,train -3414,1,train -379,1,train -420,2,train +682,2,train 3593,3,train -3634,4,train +3197,3,train 117,1,train +203,4,train 599,4,train -337,4,train 3889,1,train 895,2,train 499,2,train -3627,1,train +196,1,train 633,2,train 3410,3,train -416,4,train -3148,3,train +3806,3,train 3544,3,train +550,4,train 154,4,train 2886,3,train 1108,2,train -3840,1,train +712,2,train 3444,1,train +3840,1,train 409,1,train 4060,4,train -450,2,train 846,2,train -629,4,train -3361,3,train -2965,3,train 3664,4,train -3099,3,train +188,2,train +2965,3,train +3361,3,train +367,4,train +105,4,train 3919,1,train 3657,1,train 1100,3,train 3877,4,train -3574,3,train +401,2,train +3615,4,train 4011,4,train 184,4,train +318,4,train 1396,1,train -1179,3,train -3474,1,train 3870,1,train +3474,1,train 876,2,train +480,2,train 917,3,train 1313,3,train -3212,1,train 614,2,train +3212,1,train 3391,3,train -4090,4,train +3828,4,train 397,4,train +4090,4,train 1609,1,train 1788,3,train -1130,3,train -3425,1,train +1392,3,train +1526,3,train +3821,1,train 3907,4,train 868,3,train 3604,3,train -4041,4,train -3779,4,train +3645,4,train 3383,4,train -1688,1,train -1426,1,train +1164,1,train 3900,1,train -1780,4,train +1343,3,train +947,3,train 4075,2,train +1081,3,train 3992,4,train -2035,1,train +3596,4,train 1639,1,train -1818,3,train 1377,1,train 1859,4,train -1993,4,train 1160,3,train -1597,4,train 898,3,train 3675,4,train -1852,1,train -1590,1,train +4071,4,train 1676,4,train -2206,4,train -1810,4,train 4022,4,train 2065,1,train -1669,1,train -2106,2,train +1803,1,train 1844,2,train +2285,4,train 1586,3,train -1627,4,train -1324,3,train -1365,4,train 1882,1,train 1923,2,train 2319,2,train 1620,1,train 1224,1,train 2057,2,train -1578,4,train -2532,2,train +1974,4,train 2136,2,train -1437,1,train -1657,4,train +2053,4,train 1791,4,train +1395,4,train 2349,2,train +1953,2,train 1650,1,train 1825,2,train -47,1,train -2562,2,train +2004,4,train 5,4,train 1863,1,train 1904,2,train +2300,2,train 2341,3,train 2038,2,train +39,2,train 2513,2,train +2554,3,train +2950,3,train 2034,4,train 118,2,train -2850,1,train 252,2,train 3029,3,train 35,4,train 2767,3,train 2371,3,train 3325,1,train -3459,1,train -69,2,train +465,2,train 2846,3,train -3242,3,train 2584,3,train 3021,4,train -2322,3,train -3538,1,train 3142,1,train +544,2,train 3276,1,train +2880,1,train 282,2,train 323,3,train 3496,4,train -3234,4,train +20,2,train +2797,3,train 2401,3,train +3234,4,train 3489,1,train -3093,1,train +3530,2,train 932,3,train +99,2,train 536,3,train 2831,1,train -3227,1,train 233,2,train 3010,3,train -3709,4,train +3051,4,train +3227,1,train +16,4,train 2748,3,train -832,1,train +3709,4,train 615,3,train 2910,1,train 3306,1,train 312,2,train 353,3,train 2648,1,train +3044,1,train 3743,2,train -3660,4,train 2827,3,train 3264,4,train -3002,4,train 1045,1,train 3822,2,train 3956,2,train 962,3,train -3739,4,train +566,3,train +1003,4,train 263,2,train 304,3,train 700,3,train -3081,4,train +3477,4,train +3215,4,train 2819,4,train 4035,2,train 779,3,train 3511,2,train 517,3,train -3690,4,train 3428,4,train -3032,4,train 1471,1,train -3986,2,train +1075,1,train +1209,1,train +813,1,train 4027,3,train -3590,2,train +3986,2,train +992,3,train 1429,4,train -596,3,train -1033,4,train 3287,1,train -730,3,train 3328,2,train +730,3,train +771,4,train 3507,4,train -3724,2,train 3245,4,train -1026,1,train +1288,1,train 3803,2,train 1642,4,train -3541,2,train +1246,4,train +3937,2,train 3978,3,train 547,3,train 681,3,train @@ -6215,75 +6205,74 @@ parameter_index,simulation_index,split 1501,1,train 1542,2,train 1239,1,train +843,1,train 4016,2,train 977,1,train -581,1,train 1459,4,train 3358,2,train +3754,2,train 760,3,train -1889,2,train +3795,3,train +1755,2,train +1359,2,train 1056,1,train 660,1,train +1493,2,train 1190,1,train 794,1,train 3571,2,train 3967,2,train +1014,4,train 752,4,train 1572,2,train 1269,1,train 873,1,train -1310,2,train 1706,2,train 1007,1,train 1489,4,train 3784,2,train -3825,3,train 1227,4,train 3959,3,train 965,4,train 1785,2,train 1919,2,train -1960,3,train -1261,2,train 4038,3,train -1440,4,train -1044,4,train 1178,4,train 2256,1,train +2039,3,train 1340,2,train 1777,3,train -1078,2,train 1257,4,train 2469,1,train +2252,3,train 2386,3,train -1553,2,train +1990,3,train 1470,4,train 2682,1,train 2286,1,train 2465,3,train -1766,2,train +2203,3,train 1807,3,train 1504,2,train -1941,3,train -2499,1,train +2895,1,train +2678,3,train 2237,1,train 2020,3,train 1717,2,train 2154,3,train 2974,1,train +2712,1,train 2316,1,train 2450,1,train -2536,4,train -3066,4,train -2233,3,train 2670,4,train 1971,3,train 2529,1,train 2966,2,train -2749,4,train -2883,4,train +2267,1,train +2446,3,train 2487,4,train 2225,4,train +268,1,train 3045,2,train 3179,2,train 2962,4,train @@ -6292,109 +6281,105 @@ parameter_index,simulation_index,split 2218,1,train 2700,4,train 2834,4,train -481,1,train +2438,4,train 219,1,train +2996,2,train +3392,2,train 398,3,train -2297,1,train -2734,2,train -2431,1,train +2693,1,train +136,3,train +2913,4,train +2517,4,train 2651,4,train 2255,4,train -36,1,train 3209,2,train +215,3,train +2510,1,train +2947,2,train +3343,2,train 2644,1,train 2730,4,train 2864,4,train 2468,4,train -907,1,train -511,1,train -645,1,train -249,1,train +3422,2,train 3026,2,train -3463,3,train -428,3,train 469,4,train 2723,1,train 166,3,train 2943,4,train 2502,2,train -724,1,train -66,1,train -3676,3,train -3414,3,train -420,4,train -2715,2,train +462,1,train +682,4,train +3373,2,train 3111,2,train +2715,2,train 117,3,train 937,1,train 978,2,train 675,1,train 3889,3,train 3493,3,train -895,4,train +413,1,train 17,1,train 499,4,train -2794,2,train +895,4,train +196,3,train +237,4,train 633,4,train -3627,3,train -1191,2,train -3923,1,train +2794,2,train 1325,2,train 492,1,train +626,1,train +230,1,train +712,4,train 3403,2,train +846,4,train 3444,3,train 3840,3,train -846,4,train -450,4,train +188,4,train 4002,1,train 1008,2,train -1142,2,train 746,2,train 3919,3,train -484,2,train 3657,3,train +401,4,train 3953,1,train 1355,2,train +959,2,train 1396,3,train +3691,1,train 3870,3,train 3474,3,train 3911,4,train 876,4,train +480,4,train 3212,3,train 614,4,train -1692,1,train 1475,3,train -3770,1,train 1172,2,train +1213,3,train 1609,3,train 3904,1,train 910,2,train -3425,3,train -1688,3,train -3983,1,train -1385,2,train +514,2,train +3821,3,train +1905,1,train 989,2,train -1426,3,train 3721,1,train 1123,2,train +1164,3,train 3900,3,train 4075,4,train -3679,4,train +2118,1,train 1722,1,train 1639,3,train -3934,1,train 1377,3,train -4068,1,train 2331,1,train -2069,1,train -1852,3,train +1935,1,train 1893,4,train -1590,3,train 1752,1,train -1886,1,train 1972,4,train -1669,3,train -2106,4,train +1803,3,train 1844,4,train 1965,1,train 1703,1,train @@ -6406,28 +6391,34 @@ parameter_index,simulation_index,split 1224,3,train 1661,4,train 2057,4,train +2178,1,train 2615,2,train +1916,1,train +1520,1,train 2353,2,train -2532,4,train 1654,1,train 2136,4,train -1437,3,train 51,1,train 2432,2,train 2129,1,train 1733,1,train 2170,2,train +1867,1,train +1953,4,train 2349,4,train 1650,3,train 1691,4,train 1825,4,train +2645,2,train 1946,1,train -2562,4,train +2300,4,train 1904,4,train 2038,4,train -122,2,train 2858,2,train -1938,2,train +2596,2,train +39,4,train +2334,2,train +1721,4,train 3329,1,train 335,2,train 32,1,train @@ -6435,113 +6426,113 @@ parameter_index,simulation_index,split 2413,2,train 2809,2,train 252,4,train -2547,2,train 2151,2,train -2850,3,train 3542,1,train -3146,1,train 111,1,train 152,2,train 548,2,train +2929,3,train 3325,3,train -69,4,train -2364,2,train +2626,2,train 3755,1,train -3538,3,train +761,2,train 3142,3,train -62,1,train +544,4,train 2839,2,train +2880,3,train 3276,3,train -3317,4,train 282,4,train 2577,2,train -3572,1,train +3317,4,train +20,4,train +3176,1,train 578,2,train 182,2,train 3310,1,train 316,2,train -3093,3,train +3530,4,train 2697,3,train -3227,3,train +99,4,train 2831,3,train +3227,3,train +791,2,train 395,2,train -832,3,train +3127,1,train 529,2,train 133,2,train 2910,3,train 3306,3,train 312,4,train -3743,4,train +3044,3,train 2648,3,train 3085,4,train +3743,4,train +1349,3,train 3602,1,train -3206,1,train +4039,2,train 1045,3,train 649,3,train +3340,1,train 3822,4,train 346,2,train 3956,4,train -3815,1,train 821,2,train 4035,4,train 3553,1,train -3157,1,train -559,2,train 3594,2,train +3291,1,train 3377,4,train 3511,4,train -3115,4,train 1292,1,train -4069,2,train +1075,3,train 679,3,train -3807,2,train +1209,3,train 376,2,train +813,3,train 3504,1,train -3590,4,train 3986,4,train 3287,3,train 3328,4,train -3724,4,train +1371,1,train 1505,1,train 1109,1,train 3886,2,train +1288,3,train 1329,4,train 3583,1,train -3624,2,train -1026,3,train +589,2,train 3803,4,train -4020,2,train 368,3,train 3145,4,train -3541,4,train -1584,1,train +1188,1,train 1322,1,train -1060,1,train 1542,4,train 3837,2,train 1239,3,train -4016,4,train +843,3,train 3575,2,train +4016,4,train 977,3,train -581,3,train +3754,4,train 3358,4,train -1797,1,train 1576,2,train +1755,4,train 877,1,train +1359,4,train 1056,3,train 660,3,train +1493,4,train 3788,2,train 794,3,train 3571,4,train 2185,2,train -1352,1,train 1789,2,train +1486,1,train 1090,1,train 1572,4,train +3867,2,train 1706,4,train 873,3,train -1310,4,train -4001,2,train 1007,3,train 3784,4,train 1868,2,train @@ -6549,78 +6540,84 @@ parameter_index,simulation_index,split 1169,1,train 1303,1,train 1785,4,train -4080,2,train -1261,4,train +1127,4,train 2215,2,train +1819,2,train 2256,3,train +1516,1,train 1557,2,train 1340,4,train -1078,4,train 2469,3,train 1636,2,train +1770,2,train 1374,2,train -1553,4,train 2682,3,train +1849,2,train 2286,3,train +1983,2,train 1587,2,train -1766,4,train 1504,4,train 2062,2,train -2499,3,train +1800,2,train 2237,3,train 1934,2,train -2795,1,train 197,2,train 2974,3,train +2533,1,train +2712,3,train 2316,3,train 2753,4,train 2013,2,train 2450,3,train 3008,1,train +2746,1,train 2529,3,train 2133,3,train 2966,4,train -2825,1,train -2959,1,train +2267,3,train +227,2,train +268,3,train 2563,1,train +2959,1,train 3045,4,train 6,3,train 2301,1,train 3179,4,train 2084,3,train -2521,4,train 2218,3,train 3038,1,train 44,2,train 85,3,train -481,3,train -3172,1,train 219,3,train 2514,1,train -3213,2,train -2297,3,train -2734,4,train -2431,3,train +2996,4,train +3392,4,train +2693,3,train +515,1,train 3292,2,train +2989,1,train +2593,1,train +3030,2,train 3426,2,train -36,3,train -2727,1,train 3209,4,train -511,3,train -115,3,train +2510,3,train +2947,4,train +594,1,train 3243,2,train -645,3,train -249,3,train +3422,4,train 3026,4,train 2723,3,train 2502,4,train 807,1,train -724,3,train +941,1,train +545,1,train +3718,2,train 765,4,train 3019,1,train 3060,2,train 25,2,train -66,3,train +462,3,train +503,4,train 3194,2,train 2581,4,train 3111,4,train @@ -6628,73 +6625,67 @@ parameter_index,simulation_index,split 1020,1,train 758,1,train 1195,2,train +3931,2,train 978,4,train 3273,2,train 675,3,train 3407,2,train -3011,2,train +413,3,train 17,3,train 2794,4,train -1233,1,train +971,1,train 1408,2,train -575,1,train +3789,3,train 709,1,train 313,1,train -795,4,train -1191,4,train +3486,2,train 492,3,train 533,4,train 3224,2,train -3923,3,train +230,3,train 788,1,train 4002,3,train -922,1,train 1008,4,train 3699,2,train -1142,4,train 746,4,train 3478,3,train -484,4,train -1304,2,train 1438,2,train -1042,2,train +1176,2,train 3953,3,train +959,4,train 563,4,train +3691,3,train 1255,2,train -1692,3,train 3987,1,train -952,1,train 556,1,train 993,2,train -3770,3,train 1172,4,train 3904,3,train 910,4,train -4066,1,train +514,4,train 1468,2,train -1072,2,train -1206,2,train +1905,3,train 810,2,train -3983,3,train 989,4,train 3721,3,train -1681,2,train +2118,3,train 1722,3,train 4017,1,train 982,1,train +1023,2,train 1419,2,train 1460,3,train 1157,2,train -3934,3,train 2018,1,train -2069,3,train +1935,3,train 1236,2,train -840,2,train 1370,2,train 2365,1,train +1969,1,train 1752,3,train -1449,2,train -1886,3,train +2189,4,train +4047,1,train +1490,3,train 1228,3,train 2444,1,train 2048,1,train @@ -6704,111 +6695,114 @@ parameter_index,simulation_index,split 1441,3,train 2657,1,train 2261,1,train +2395,1,train 1999,1,train -2615,4,train -1737,1,train +2178,3,train 2219,4,train +2615,4,train +1916,3,train +1520,3,train 2353,4,train 1654,3,train 2608,1,train 2212,1,train -2649,2,train 51,3,train 2346,1,train -1950,1,train 2432,4,train 2129,3,train 1733,3,train 2170,4,train +1867,3,train 2728,2,train 2425,1,train +2029,1,train 2466,2,train +2163,1,train 1767,1,train +2645,4,train 1946,3,train 1987,4,train +164,1,train 2242,1,train 2679,2,train -122,4,train -1980,1,train 2376,1,train 2858,4,train -1938,4,train +2596,4,train +2334,4,train 377,1,train +3154,2,train 3329,3,train +2496,2,train 335,4,train 2193,1,train 2413,4,train -2547,4,train 2151,4,train 194,1,train -328,1,train +3367,2,train 3542,3,train -3146,3,train +3105,2,train +2709,2,train 111,3,train 152,4,train 548,4,train +2406,1,train 2447,2,train +2626,4,train 2843,2,train -2364,4,train 407,1,train +3225,3,train 145,1,train 2922,2,train 3755,3,train 2660,2,train 2577,4,train +3655,1,train +224,1,train +661,2,train 358,1,train -399,2,train -3572,3,train -3613,4,train +3176,3,train 578,4,train 182,4,train -2477,2,train 2873,2,train -316,4,train 3310,3,train -3868,1,train +316,4,train +874,2,train 478,2,train 3606,1,train +612,2,train 175,1,train 395,4,train +3127,3,train 529,4,train 133,4,train 4081,1,train +1087,2,train 3819,1,train -388,1,train -825,2,train -3206,3,train 3602,3,train +4039,4,train 167,2,train 2903,2,train -2944,3,train +3340,3,train 346,4,train -3898,1,train -3502,1,train 904,2,train 3636,1,train -205,1,train 246,2,train 3374,1,train +380,2,train 3553,3,train -3157,3,train 3594,4,train +3291,3,train 1375,1,train 1117,2,train -3849,1,train 3890,2,train 855,2,train 896,3,train 1292,3,train -3191,1,train -593,2,train 3587,1,train -3673,4,train -3807,4,train 376,4,train -4069,4,train 1454,1,train 1588,1,train +1371,3,train 4062,1,train 1505,3,train 1109,3,train @@ -6816,15 +6810,13 @@ parameter_index,simulation_index,split 3886,4,train 806,2,train 3583,3,train -3624,4,train -4020,4,train -1667,1,train -1584,3,train +1801,1,train +1188,3,train 3879,1,train 3920,2,train -1322,3,train +885,2,train 926,3,train -1060,3,train +1322,3,train 664,3,train 3837,4,train 3575,4,train @@ -6834,20 +6826,20 @@ parameter_index,simulation_index,split 1356,1,train 4092,1,train 1576,4,train +3871,2,train 877,3,train 3788,4,train 2093,1,train +1831,1,train 1435,1,train +1872,2,train 1569,1,train 1655,4,train -3950,2,train -1352,3,train 1789,4,train 4084,2,train 1090,3,train -4001,4,train +3867,4,train 2044,1,train -1648,1,train 2085,2,train 1782,1,train 1868,4,train @@ -6855,199 +6847,218 @@ parameter_index,simulation_index,split 1169,3,train 3901,2,train 1303,3,train -4080,4,train +1344,4,train 2164,2,train 1861,1,train -1902,2,train -2298,2,train +1599,1,train +1203,1,train +1819,4,train 1557,4,train 2377,2,train 2511,2,train -2115,2,train +2249,2,train +1416,1,train 1636,4,train +1770,4,train 1374,4,train 1629,1,train 2066,2,train +1849,4,train +1983,4,train 1587,4,train +26,1,train 2541,2,train 2145,2,train 1842,1,train 1883,2,train -2279,2,train 2062,4,train -2358,2,train -2795,3,train +1800,4,train +2096,2,train +2533,3,train 2013,4,train 3091,1,train +2829,1,train 3008,3,train 2309,2,train +2746,3,train 3304,1,train 310,2,train 3042,1,train -2825,3,train +3438,1,train +48,2,train 2959,3,train 2126,2,train 2563,3,train 2301,3,train 3121,1,train 127,2,train +261,2,train 302,3,train -2597,1,train 3038,3,train -44,4,train 3079,4,train +44,4,train 2380,3,train -3213,4,train 2514,3,train -3468,1,train 78,2,train -2810,1,train +515,3,train 3292,4,train +2989,3,train +2593,3,train +3030,4,train 3426,4,train -2727,3,train +811,1,train +3547,1,train +594,3,train 3285,1,train 3722,2,train 291,2,train 332,3,train -2627,1,train 3023,1,train -3109,4,train +29,2,train 3243,4,train 3801,2,train 807,3,train 3539,2,train 3102,1,train 3498,1,train -108,2,train -2840,1,train -3236,1,train +3718,4,train +941,3,train +545,3,train 242,2,train 3019,3,train 3060,4,train +3236,1,train 3194,4,train 1237,1,train +4014,2,train 1020,3,train -579,1,train 3752,2,train 758,3,train -362,3,train 1195,4,train -3053,1,train 59,2,train -100,3,train 3273,4,train 3407,4,train -3011,4,train -1054,1,train 792,1,train 4006,3,train +3569,2,train 3965,2,train +971,3,train 1408,4,train -575,3,train 3307,2,train 709,3,train 313,3,train +3486,4,train +3703,2,train 3224,4,train -1005,1,train +1091,4,train +3386,2,train 3782,2,train 788,3,train +3520,2,train 130,3,train -1480,1,train +1521,2,train 822,1,train -1304,4,train 4036,3,train 1438,4,train 560,1,train -1042,4,train +3337,2,train 3774,3,train +1176,4,train 780,4,train -1734,2,train 1338,2,train 1035,1,train 1472,2,train 773,1,train +859,4,train 1255,4,train 3550,2,train -3946,2,train 556,3,train 993,4,train +3946,2,train 3987,3,train -4066,3,train +1551,2,train +1248,1,train +1289,2,train 986,1,train -1072,4,train 1468,4,train 3763,2,train -1206,4,train -810,4,train 3804,3,train -1764,2,train +810,4,train 1368,2,train -1065,1,train 1502,2,train 4017,3,train 1419,4,train +1023,4,train 1157,4,train -1977,2,train 2018,3,train +4051,1,train 1453,2,train 1057,2,train 1236,4,train -840,4,train 2365,3,train 1532,2,train +1969,3,train 1270,2,train -1449,4,train +4047,3,train +2661,1,train 2265,1,train 2444,3,train 2048,3,train -3982,2,train -1745,2,train -1349,2,train 2182,3,train +1349,2,train +1786,3,train +1483,2,train +2874,1,train +2478,1,train 2657,3,train 2261,3,train +2395,3,train 1999,3,train -1737,3,train +1696,2,train 2691,1,train +2295,1,train 2429,1,train 2033,1,train 2515,4,train 2212,3,train -2649,4,train -1950,3,train 2904,1,train 2508,1,train 2945,2,train +2642,1,train +2246,1,train 2728,4,train 2425,3,train +2029,3,train 2466,4,train +2163,3,train 1767,3,train -2204,4,train 2721,1,train 2325,1,train +164,3,train +2063,1,train 2242,3,train 2679,4,train -1980,3,train 3371,2,train 2538,1,train 377,3,train 2672,1,train -2713,2,train +3154,4,train +2496,4,train 2193,3,train +673,1,train 277,1,train -411,1,train 194,3,train 2489,1,train 2926,2,train +2709,4,train 2843,4,train 2447,4,train -624,1,train -3401,2,train -3442,3,train +3005,2,train 407,3,train -3139,2,train +2702,1,train 145,3,train 2922,4,train +2481,2,train 2660,4,train 2264,4,train 307,1,train @@ -7055,69 +7066,61 @@ parameter_index,simulation_index,split 441,1,train 45,1,train 3218,2,train -3352,2,train +3655,3,train +224,3,train +661,4,train 2956,2,train -399,4,train +3352,2,train 2694,2,train 2873,4,train -2477,4,train 916,1,train 520,1,train 957,2,train -3689,1,train 3431,2,train -3868,3,train +874,4,train 478,4,train 2773,2,train 3606,3,train 175,3,train +612,4,train 2907,2,train 3902,1,train 4081,3,train 471,1,train -75,1,train -209,1,train -2986,2,train -3382,2,train -825,4,train +908,2,train 3819,3,train +2986,2,train 167,4,train 2903,4,train -1383,2,train -684,1,train -3898,3,train -725,2,train +3981,1,train 1121,2,train -3502,3,train 904,4,train -463,2,train -3240,3,train 3636,3,train -205,3,train +3240,3,train 246,4,train 3374,3,train -938,2,train +380,4,train +1200,2,train 1375,3,train -3849,3,train +3670,1,train +676,2,train 3890,4,train 855,4,train 3587,3,train -3191,3,train -593,4,train -1413,2,train 1454,3,train -1151,2,train +3749,1,train 1588,3,train -3487,1,train 3883,1,train -1667,3,train +3487,1,train +889,2,train 3962,1,train -968,2,train -3700,1,train +1801,3,train +4096,1,train 1102,2,train +706,2,train 3879,3,train 3920,4,train -3658,4,train +885,4,train 1701,1,train 1880,3,train 1484,3,train @@ -7125,220 +7128,223 @@ parameter_index,simulation_index,split 1618,3,train 3913,1,train 1356,3,train +3871,4,train 1914,1,train 2093,3,train 1652,1,train +1831,3,train 1435,3,train +1872,4,train 1569,3,train -3950,4,train 4084,4,train 3688,4,train -2127,1,train 1731,1,train 1951,4,train -1648,3,train -1252,3,train 2085,4,train 3901,4,train 2340,1,train 1944,1,train -2381,2,train -2078,1,train 2164,4,train 1861,3,train -1902,4,train -2298,4,train +1420,1,train +1599,3,train +1203,3,train 1640,4,train 1895,1,train 2377,4,train 2511,4,train -1633,1,train -2115,4,train +2249,4,train +1416,3,train 2370,1,train 2807,2,train 2108,1,train 1712,1,train 2149,2,train +1846,1,train 1629,3,train 1670,4,train 2066,4,train 2624,2,train -2228,2,train 2059,1,train 2145,4,train -2279,4,train 1883,4,train 2441,2,train -2138,1,train +2878,3,train 2575,2,train +2179,2,train 2616,3,train -2358,4,train +2096,4,train 1700,4,train 139,1,train 3091,3,train 2788,2,train 2392,2,train +2829,3,train 2309,4,train 352,1,train -3125,1,train 90,1,train +131,2,train 527,2,train 3304,3,train 310,4,train 3042,3,train +2646,3,train +48,4,train +2343,2,train 2126,4,train -740,2,train 3121,3,train 127,4,train 2422,2,train 2818,2,train -2597,3,train -423,2,train -3155,1,train +261,4,train +3417,1,train 3551,1,train -120,1,train +2676,3,train 78,4,train -2810,3,train -3764,1,train -3368,1,train 770,2,train -3106,1,train +811,3,train +3547,3,train 508,2,train 3285,3,train +3326,4,train 3722,4,train 291,4,train 3023,3,train -2627,3,train +29,4,train +3581,1,train 587,2,train -3319,1,train -3405,4,train 3801,4,train -3935,4,train +3405,4,train +325,2,train 3102,3,train 3539,4,train -108,4,train -2840,3,train +3935,4,train 3794,1,train 3398,1,train -800,2,train -404,2,train 1237,3,train -3573,2,train +404,2,train +4014,4,train 142,2,train -579,3,train 3752,4,train -276,2,train -3053,3,train 59,4,train 4048,2,train -1054,3,train +658,3,train 2953,1,train -355,2,train 792,3,train +3569,4,train 3965,4,train +3703,4,train 3307,4,train 1350,1,train 1088,1,train 3865,2,train 3562,1,train 568,2,train -1005,3,train 3782,4,train -347,3,train +3386,4,train +3520,4,train 3124,4,train 1167,1,train +4078,2,train +1521,4,train +3379,1,train 3816,2,train 822,3,train 3554,2,train 560,3,train -1776,1,train +3337,4,train +1118,1,train 1555,2,train -1734,4,train 856,1,train 1338,4,train -3633,2,train +3592,1,train 1035,3,train -1076,4,train 1472,4,train +3633,2,train 3767,2,train 773,3,train 3550,4,train +1331,1,train 935,1,train +1768,2,train 1465,1,train -1069,1,train +1551,4,train +3846,2,train +1289,4,train +3980,2,train 986,3,train 3763,4,train 1847,2,train -1148,1,train -1585,2,train -1764,4,train +1282,1,train 1368,4,train -1065,3,train 1502,4,train -2060,2,train -2194,2,train 1361,1,train 1798,2,train 1495,1,train -1536,2,train +4051,3,train 1453,4,train 1057,4,train 2273,2,train -2011,2,train +1353,2,train 1532,4,train 1270,4,train 2224,2,train -1828,2,train 2265,3,train -1745,4,train +2661,3,train 1349,4,train +1483,4,train 2561,1,train 2344,3,train 2041,2,train -2082,3,train +2478,3,train 1779,2,train 2254,2,train +2295,3,train 2691,3,train -1992,2,train -2033,3,train 2429,3,train +2033,3,train 2853,1,train 2591,1,train 2725,1,train 2508,3,train 2112,3,train 2945,4,train -206,2,train -2938,1,train +2642,3,train +2246,3,train +3200,1,train 2542,1,train 2721,3,train 2325,3,train -2500,4,train +2063,3,train 3017,1,train 2621,1,train +23,2,train +64,3,train 2755,1,train 3371,4,train 2538,3,train 2672,3,train -2713,4,train 3230,1,train 3271,2,train 236,2,train 277,3,train +673,3,train 2572,1,train 2968,1,train -411,3,train 2706,1,train 3009,2,train 2489,3,train 2926,4,train 707,1,train 3484,2,train +3618,2,train 2785,1,train -624,3,train +3222,2,train 2919,1,train -3401,4,train -3139,4,train +3005,4,train +2481,4,train +786,1,train +920,1,train 3697,2,train 3301,2,train 307,3,train @@ -7350,17 +7356,15 @@ parameter_index,simulation_index,split 482,4,train 2998,1,train 2956,4,train -2560,4,train +3039,2,train 3218,4,train 2694,4,train -999,1,train 737,1,train 341,1,train 3514,2,train 520,3,train 957,4,train 3648,2,train -3689,3,train 3431,4,train 2990,2,train 2773,4,train @@ -7368,377 +7372,371 @@ parameter_index,simulation_index,split 1212,1,train 991,2,train 3727,2,train +3768,3,train +292,1,train 3902,3,train 471,3,train -75,3,train -209,3,train +512,4,train +908,4,train 2986,4,train 767,1,train 371,1,train +3981,3,train 901,1,train -1383,4,train +3282,2,train 1121,4,train -725,4,train -463,4,train -1283,2,train +3416,2,train 4015,1,train -980,1,train 1417,2,train 718,1,train -938,4,train +1200,4,train +3670,3,train +676,4,train 1496,2,train -3966,1,train -931,1,train 535,1,train -972,2,train -1413,4,train -1151,4,train +3749,3,train 3883,3,train 3487,3,train +889,4,train +1709,2,train 4045,1,train +1051,2,train 1185,2,train 3962,3,train 3566,3,train -968,4,train -3700,3,train -1264,2,train +4096,3,train +706,4,train 1701,3,train -3734,1,train +1398,2,train 1181,4,train 3913,3,train 3954,4,train 1477,2,train -1518,3,train 1914,3,train 1215,2,train 1652,3,train -2210,1,train -2127,3,train +3743,3,train 1731,3,train 4026,1,train 1032,2,train -3984,4,train -2423,1,train 2027,1,train 2161,1,train 1944,3,train -2381,4,train -2078,3,train -2636,1,train +1420,3,train 2240,1,train 2374,1,train 1978,1,train 1716,1,train +2198,4,train 1458,2,train 1895,3,train 1936,4,train -1633,3,train -2453,1,train +2191,1,train 2807,4,train 2108,3,train 1712,3,train 2149,4,train -2008,1,train -2445,2,train -2142,1,train -2228,4,train +1846,3,train +2404,1,train +2841,2,train 2624,4,train 1966,4,train -2221,1,train -2355,1,train -1959,1,train +3054,2,train 2441,4,train 2575,4,train +2179,4,train +222,1,train 3133,2,train 2737,2,train 139,3,train 2434,1,train +2871,2,train +2172,1,train 2609,2,train 2392,4,train 435,1,train 173,1,train 3084,2,train 2688,2,train -3125,3,train 527,4,train -2385,1,train +131,4,train 2426,2,train 2822,2,train +2343,4,train 386,1,train -427,2,train +124,1,train +2901,2,train 2639,2,train 2243,2,train 2422,4,train -3634,1,train -337,1,train -423,4,train +203,1,train +3417,3,train 3114,2,train -3155,3,train 3551,3,train -2852,2,train 2456,2,train +2893,3,train 719,2,train 3451,1,train -416,1,train -457,2,train 853,2,train +457,2,train 154,1,train 591,2,train -3368,3,train 2669,2,train -3106,3,train 4060,1,train 3664,1,train -1066,2,train 670,2,train +367,1,train 804,2,train -408,2,train +3581,3,train +105,1,train 587,4,train -3319,3,train -2923,3,train +325,4,train 3877,1,train 3481,1,train 4011,1,train -487,2,train +3615,1,train 184,1,train 621,2,train 3398,3,train 404,4,train -3573,4,train 142,4,train -276,4,train 4090,1,train +1096,2,train +3828,1,train +3432,1,train 3869,2,train 397,1,train 4048,4,train 438,2,train -875,3,train -572,2,train +834,2,train 176,2,train 2953,3,train -3390,4,train -355,4,train 3907,1,train 1350,3,train -4041,1,train -4082,2,train -651,2,train +3645,1,train 1088,3,train 3383,1,train -3779,1,train +3865,4,train +785,2,train 389,2,train 3562,3,train -3865,4,train -1780,1,train 1167,3,train -3462,1,train -3899,2,train -3816,4,train +468,2,train +3596,1,train +3682,4,train +4078,4,train +643,3,train +3379,3,train 3420,4,train +3816,4,train 3554,4,train 1859,1,train -1993,1,train -1597,1,train 3675,1,train +1118,3,train 1555,4,train 856,3,train +3592,3,train 3633,4,train 3767,4,train 1676,1,train -1810,1,train 1414,1,train 1851,2,train 1152,1,train -3929,2,train +1331,3,train 935,3,train -1069,3,train +1768,4,train +3846,4,train 3450,4,train -1627,1,train -1365,1,train +3980,4,train 1847,4,train -1148,3,train -1585,4,train +1282,3,train +2143,2,train 2277,2,train 1881,2,train -1578,1,train 1182,1,train -2060,4,train 1361,3,train 1798,4,train -1536,4,train -1657,1,train +2490,2,train 2094,2,train 1791,1,train +1395,1,train 1832,2,train 2273,4,train -2011,4,train +1353,4,train 2569,2,train 2045,2,train -1828,4,train 1432,4,train 2520,2,train 2124,2,train 2561,3,train 2258,2,train +1862,2,train 2041,4,train -1600,2,train 1779,4,train 2640,3,train 2337,2,train 2075,2,train 1679,2,train -76,2,train +1813,2,train 2853,3,train 2591,3,train 2288,2,train 1892,2,train 2725,3,train +2026,2,train 2887,1,train 289,2,train 3021,1,train -2938,3,train +27,2,train 2105,2,train 2542,3,train 2239,2,train 3496,1,train +106,2,train 3234,1,train 3017,3,train 2621,3,train 3058,4,train +23,4,train 2755,3,train 2359,3,train 2097,3,train 2917,1,train 319,2,train +3051,1,train 57,2,train 3271,4,train 2968,3,train 2572,3,train 3009,4,train 2706,3,train -790,1,train 3567,2,train 532,2,train 3264,1,train 3305,2,train 707,3,train -3002,1,train +311,3,train +2606,1,train 3088,4,train -3484,4,train 8,2,train 2785,3,train -3914,2,train -3081,1,train +3222,4,train +3484,4,train +1003,1,train +3780,2,train +786,3,train +3518,2,train +3477,1,train +920,3,train 87,2,train 2819,1,train +3215,1,train 3301,4,train -3697,4,train 2998,3,train 2602,3,train +3039,4,train +3435,4,train +3697,4,train 820,1,train 3993,2,train -999,3,train +3335,2,train 300,2,train 341,3,train 737,3,train -3032,1,train -38,2,train 3514,4,train +38,2,train 2856,4,train 2990,4,train -899,1,train 1429,1,train -1033,1,train -3944,2,train +771,1,train +3548,2,train 991,4,train 3245,1,train 3727,4,train +292,3,train +1246,1,train +4064,3,train 588,1,train 1070,4,train 767,3,train 371,3,train -808,4,train 3499,2,train -1500,2,train -1283,4,train -3578,2,train +3282,4,train +3416,4,train 4015,3,train -980,3,train 1417,4,train -3712,2,train 3753,3,train 718,3,train 1713,2,train -1317,2,train -1496,4,train +1014,1,train 618,1,train +1496,4,train 3791,2,train 752,1,train -3966,3,train 535,3,train -972,4,train 3663,2,train 1227,1,train +1709,4,train 4045,3,train 965,1,train +1051,4,train +3783,3,train 1185,4,train 1743,2,train -1044,1,train 1481,2,train -1264,4,train -3734,3,train +1398,4,train 1560,2,train 1257,1,train +1298,2,train +1735,3,train 4030,1,train 1477,4,train 3813,3,train 1215,4,train -2210,3,train 1115,2,train +1249,2,train 4026,3,train 1032,4,train -2244,1,train -2423,3,train 2027,3,train 2161,3,train +1765,3,train 2240,3,train 2374,3,train -1541,2,train 1978,3,train 1675,2,train 1716,3,train -2536,1,train 2670,1,train -2453,3,train -1795,3,train +2494,4,train +2191,3,train 1533,3,train -2749,1,train -2883,1,train 2487,1,train +2924,2,train 2225,1,train -2008,3,train -2445,4,train -2142,3,train +2404,3,train +2841,4,train 2962,1,train 2700,1,train 2304,1,train 2741,2,train 3137,2,train -2524,4,train -2221,3,train -1959,3,train +2438,1,train +2042,1,train +222,3,train +2517,1,train +2913,1,train 2954,2,train 2651,1,train 2255,1,train 2737,4,train 3133,4,train 2434,3,train -2609,4,train +2871,4,train +2172,3,train 2213,4,train +2609,4,train 3033,2,train 435,3,train 2730,1,train -3167,2,train 173,3,train 2468,1,train 2688,4,train @@ -7746,496 +7744,487 @@ parameter_index,simulation_index,split 2822,4,train 2426,4,train 469,1,train -2984,2,train 3421,3,train 386,3,train -427,4,train 2722,2,train -3118,2,train +124,3,train +2901,4,train 2639,4,train 2243,4,train -420,1,train +682,1,train +286,1,train 24,1,train 2801,2,train -3634,3,train +3197,2,train +203,3,train 244,4,train -2852,4,train 2456,4,train 895,1,train 499,1,train 633,1,train -719,4,train +237,1,train 3451,3,train +719,4,train 3410,2,train -416,3,train 457,4,train 853,4,train -3148,2,train +3189,3,train 154,3,train 591,4,train 2886,2,train -3189,3,train 2669,4,train +712,1,train 753,2,train 4060,3,train -450,1,train +54,1,train 3664,3,train +188,1,train 670,4,train 2965,2,train 804,4,train -408,4,train -3099,2,train +3960,1,train 966,2,train 1100,2,train 3877,3,train 3481,3,train -487,4,train -3219,3,train +401,1,train +3615,3,train 184,3,train 621,4,train -1179,2,train -783,2,train 3911,1,train +480,1,train 917,2,train 4090,3,train 655,2,train -3869,4,train +3432,3,train +3828,3,train +834,4,train 438,4,train -572,4,train +3869,4,train 176,4,train 3990,1,train +1392,2,train 3728,1,train -1130,2,train 3907,3,train 3466,1,train 3948,4,train 868,2,train -4082,4,train -651,4,train +3645,3,train 3383,3,train 389,4,train -1780,3,train +947,2,train 4075,1,train -3679,1,train -3462,3,train -3899,4,train +1081,2,train +468,4,train +3596,3,train 1680,1,train 1859,3,train 3758,1,train 1160,2,train -764,2,train 1201,3,train -1597,3,train 898,2,train 3675,3,train 1893,1,train 1676,3,train -1810,3,train 1414,3,train 1851,4,train 1152,3,train -3929,4,train 3667,4,train 1972,1,train -2106,1,train 1710,1,train 1844,1,train -1627,3,train 1231,3,train -1365,3,train 969,3,train 2319,1,train 1923,1,train 2057,1,train 1661,1,train +2143,4,train 2277,4,train 1881,4,train -1578,3,train 1182,3,train 2136,1,train -2177,2,train 1478,1,train -1657,3,train 2094,4,train +1395,3,train 1832,4,train 2349,1,train +1953,1,train +2390,2,train 2569,4,train 1691,1,train +2128,2,train 1825,1,train 2045,4,train -1649,4,train -2207,2,train 1904,1,train 2341,2,train 2124,4,train 2258,4,train -1600,4,train +1862,4,train +39,1,train 2420,2,train +2554,2,train +1721,1,train 2158,2,train 2337,4,train -1896,2,train 2075,4,train 1679,4,train +1813,4,train 118,1,train -76,4,train -2371,2,train 2767,2,train -2109,2,train +2371,2,train 2288,4,train 1892,4,train -69,1,train +2026,4,train 110,2,train 2846,2,train 2887,3,train 289,4,train 2584,2,train 2188,2,train -2625,3,train 3021,3,train -2322,2,train +27,4,train 2105,4,train +3435,2,train 189,2,train 3317,1,train 323,2,train 3496,3,train -3234,3,train +106,4,train 2401,2,train +3234,3,train 3396,1,train +3530,1,train +99,1,train 536,2,train 2917,3,train 319,4,train +3051,3,train +2655,3,train 57,4,train 615,2,train 3743,1,train 353,2,train -790,3,train 3085,1,train 3567,4,train 3264,3,train 3305,4,train -3002,3,train +2606,3,train 8,4,train 3822,1,train 3164,1,train +566,2,train 170,2,train 607,3,train -2902,1,train +1003,3,train 304,2,train -3081,3,train +2902,1,train 3384,4,train -3914,4,train +3518,4,train 87,4,train 2819,3,train +3780,4,train 3377,1,train +3814,2,train 3993,4,train 820,3,train -3115,1,train 3511,1,train 517,2,train +3335,4,train 300,4,train -3032,3,train +3073,4,train 38,4,train -1116,1,train -899,3,train -3590,1,train +3893,2,train 4027,2,train -596,2,train -637,3,train -1033,3,train 3328,1,train +2932,1,train +771,3,train +3548,4,train 1329,1,train 3803,1,train -3541,1,train +1246,3,train +3978,2,train 3145,1,train 3582,2,train 547,2,train 588,3,train -3978,2,train 3499,4,train +3103,4,train 1542,1,train 1146,1,train -884,1,train -1500,4,train +667,3,train 3358,1,train -405,3,train -3578,4,train -3712,4,train +3795,2,train +1755,1,train +1359,1,train +1493,1,train 3874,2,train 1713,4,train -1317,4,train 3571,1,train 3612,2,train -4049,3,train +1014,3,train 618,3,train 1055,4,train 3791,4,train 752,3,train 1572,1,train -1310,1,train -3825,2,train 3959,2,train 965,3,train 1785,1,train -1826,2,train -1960,2,train +1127,1,train 1564,2,train -1261,1,train -865,1,train 1743,4,train +865,1,train 4038,2,train -1044,3,train -1085,4,train 1481,4,train -4079,3,train +1085,4,train 823,4,train +2039,2,train 1340,1,train 1777,2,train -1078,1,train 1560,4,train +1298,4,train 4030,3,train +2252,2,train 1856,2,train -1553,1,train -1594,2,train +1990,2,train 2031,3,train -1332,2,train 1115,4,train +1249,4,train +2203,2,train 1807,2,train -2244,3,train -1941,2,train 1545,2,train 2020,2,train -1362,2,train -1541,4,train +1624,2,train 2753,1,train -2536,3,train 2670,3,train +1837,2,train 1971,2,train 1575,2,train 2966,1,train -2749,3,train 2487,3,train +2924,4,train 2225,3,train 3045,1,train 3179,1,train 2962,3,train -2521,1,train 2700,3,train 2304,3,train 2741,4,train 3137,4,train -2734,1,train +2438,3,train +2042,3,train +2996,1,train +43,3,train +2820,4,train +2517,3,train 2954,4,train 2255,3,train 3209,1,train 3250,2,train +2947,1,train 3033,4,train 2730,3,train 2289,1,train -3167,4,train 2468,3,train 2509,4,train +290,1,train 3026,1,train -3463,2,train 469,3,train 73,3,train +3201,2,train 2502,1,train -2984,4,train -3118,4,train 2722,4,train 765,1,train -3676,2,train -3280,2,train -3414,2,train +503,1,train +682,3,train +286,3,train 2581,1,train -420,3,train 24,3,train 2715,1,train 2801,4,train +3197,4,train +2539,4,train 978,1,train 582,1,train 320,1,train +3097,2,train 3493,2,train 499,3,train 2794,1,train -3627,2,train +237,3,train 2969,2,train -3148,4,train 2886,4,train -1191,1,train -795,1,train 533,1,train 970,2,train -3747,3,train +712,3,train 753,4,train 3444,2,train -3485,3,train -450,3,train +54,3,train +491,4,train 2786,2,train +188,3,train 2965,4,train 1008,1,train +1049,2,train 746,1,train 350,1,train 1183,2,train -484,1,train +3960,3,train 966,4,train 3657,2,train 1100,4,train -3994,2,train -1262,2,train +2999,2,train +401,3,train 3994,1,train -1396,2,train +959,1,train 563,1,train -3777,3,train -1179,4,train +1396,2,train 3911,3,train -301,1,train -783,4,train -917,4,train -3212,2,train 3474,2,train 3515,3,train +480,3,train +521,4,train +917,4,train +3212,2,train 655,4,train -259,4,train 1475,2,train -1079,2,train 1609,2,train +1213,2,train 3990,3,train +514,1,train +951,2,train 3728,3,train -1130,4,train -3425,2,train 3466,3,train 868,4,train -1688,2,train 4024,1,train 989,1,train 1030,2,train -1426,2,train -1467,3,train +1164,2,train 3545,3,train -4075,3,train +947,4,train 551,4,train -3679,3,train +4075,3,train 1639,2,train 1680,3,train +3975,1,train 1377,2,train -981,2,train 3758,3,train 1160,4,train -764,4,train 898,4,train -1976,1,train -1759,3,train -4054,1,train 1893,3,train +1497,3,train 798,2,train +2189,1,train 1972,3,train -2106,3,train 1710,3,train +4005,1,train 1844,3,train +3963,4,train 1923,3,train 1224,2,train 1661,3,train 2615,1,train 2219,1,train 2353,1,train +1957,1,train 2136,3,train -2177,4,train -1437,2,train 1478,3,train 1915,4,train 2432,1,train 2170,1,train 1774,1,train +1953,3,train +2390,4,train 1691,3,train +2128,4,train 1825,3,train +2645,1,train +2686,2,train 1987,1,train 2424,2,train -2207,4,train 1904,3,train 1945,4,train 2341,4,train -122,1,train 2637,2,train -1804,1,train -1938,1,train +2334,1,train 2420,4,train +2554,4,train +1721,3,train 2158,4,train -1896,4,train 335,1,train +2716,2,train 118,3,train 2413,1,train -2850,2,train +2454,2,train 2151,1,train +2192,2,train 2371,4,train -2109,4,train 152,1,train +2929,2,train +2667,2,train 110,4,train -2364,1,train +2405,2,train 2584,4,train 2188,4,train -2322,4,train 3400,1,train +406,2,train 3142,2,train -3183,3,train 189,4,train 2484,2,train -3317,3,train +2880,2,train 323,4,train +3317,3,train +2222,2,train 2401,4,train -3613,1,train 182,1,train 3396,3,train 316,1,train -3093,2,train +3530,3,train 2697,2,train 536,4,train 2831,2,train 3430,1,train 395,1,train -436,2,train -832,2,train 133,1,train +174,2,train 615,4,train 2910,2,train -2951,3,train 353,4,train 2648,2,train +2951,3,train 3085,3,train +4039,1,train 1045,2,train 649,2,train -3381,1,train 3822,3,train 3164,3,train 3601,4,train +566,4,train 170,4,train 2902,3,train 304,4,train -466,2,train -903,3,train +3460,1,train 3594,1,train 204,2,train 2981,3,train 3377,3,train 3511,3,train -3115,3,train -4069,1,train -3673,1,train -3807,1,train +3814,4,train +1075,2,train 679,2,train -1116,3,train +3893,4,train +3411,1,train +813,2,train 417,2,train -3149,1,train -3590,3,train -596,4,train -3328,3,train 3631,4,train 4027,4,train +3328,3,train +2932,3,train 3886,1,train 1329,3,train -3624,1,train 368,2,train 3145,3,train -3541,3,train 3582,4,train 3978,4,train 1363,1,train @@ -8243,13 +8232,15 @@ parameter_index,simulation_index,split 1146,3,train 3441,1,train 3837,1,train -884,3,train +843,2,train 3575,1,train -581,2,train 3358,3,train 3399,4,train -1442,1,train +3795,4,train 1576,1,train +1359,3,train +4091,2,train +1493,3,train 660,2,train 3788,1,train 3874,4,train @@ -8258,93 +8249,88 @@ parameter_index,simulation_index,split 1789,1,train 1572,3,train 1131,1,train +3867,1,train 873,2,train -1310,3,train 1351,4,train 3646,2,train -3825,4,train +3429,4,train 1868,1,train 1210,1,train -1826,4,train -1960,4,train +1344,1,train +1127,3,train 1564,4,train -1261,3,train 865,3,train 4038,4,train +1819,1,train +1860,2,train 2256,2,train 1557,1,train 1161,1,train -3938,2,train +2039,4,train 1340,3,train +1381,4,train 1777,4,train -1078,3,train 2469,2,train 1636,1,train +2073,2,train +1770,1,train 1374,1,train 1856,4,train -1594,4,train -1332,4,train -2286,2,train +2252,4,train +1990,4,train +2152,2,train +1849,1,train 1890,2,train +2286,2,train 1587,1,train +1628,2,train 1807,4,train +1411,4,train 1545,4,train -2499,2,train -2237,2,train +1800,1,train 1841,2,train +2237,2,train 2020,4,train -1362,4,train +1624,4,train 2316,2,train -1920,2,train 2753,3,train 1658,2,train 1575,4,train -55,2,train 2529,2,train 2133,2,train 2966,3,train -1871,2,train +2267,2,train 2308,3,train 2866,1,train +268,2,train 3045,3,train 6,2,train -2387,3,train 2084,2,train -2521,3,train 3079,1,train -481,2,train 85,2,train -3213,1,train 219,2,train +2996,3,train 3037,4,train -2297,2,train -2734,3,train -2076,3,train 3292,1,train 339,3,train -36,2,train +3030,1,train 3250,4,train +2947,3,train 2289,3,train -3109,1,train -511,2,train -115,2,train -3284,2,train 3243,1,train -249,2,train +3284,2,train +2847,1,train +290,3,train 3026,3,train -2585,1,train -3067,4,train -3463,4,train +3201,4,train 2805,4,train 2502,3,train 765,3,train 369,3,train 3060,1,train -66,2,train +3497,2,train +503,3,train 3194,1,train -3280,4,train -3676,4,train -3414,4,train 2581,3,train 2715,3,train 1195,1,train @@ -8353,77 +8339,80 @@ parameter_index,simulation_index,split 582,3,train 2877,1,train 3273,1,train -3314,2,train 320,3,train -3011,1,train +3097,4,train 3493,4,train 17,2,train 2794,3,train 2835,4,train 2969,4,train -795,3,train +878,1,train +3789,2,train 3527,2,train -3923,2,train 533,3,train 970,4,train 3224,1,train -3265,2,train 3444,4,train 2786,4,train +1091,1,train +829,1,train +1266,2,train 4002,2,train 1008,3,train 567,1,train +1049,4,train +3344,2,train 746,3,train 350,3,train +787,4,train 1183,4,train 3478,2,train -484,3,train -2865,4,train -1304,1,train -1042,1,train +88,3,train +2999,4,train +1176,1,train 780,1,train -1262,4,train 3953,2,train +3994,3,train 1396,4,train 563,3,train -3295,2,train -3994,3,train -301,3,train +3691,2,train 3474,4,train 3212,4,train 1255,1,train -1692,2,train +859,1,train +1296,2,train 4073,3,train 993,1,train 597,1,train -1079,4,train 1475,4,train -3770,2,train -1072,1,train -1206,1,train +1213,4,train +514,3,train +951,4,train +1905,2,train 810,1,train -1688,4,train -3983,2,train -1426,4,train +4024,3,train 1030,4,train 3721,2,train -4024,3,train +1164,4,train 1722,2,train 1326,2,train -1460,2,train +1023,1,train 627,1,train 1064,2,train +1460,2,train 847,4,train -981,4,train -1976,3,train +3975,3,train +1935,2,train +1539,2,train 1236,1,train -840,1,train -4054,3,train 3792,3,train 798,4,train 1752,2,train +2189,3,train +1490,2,train 1094,2,train 1228,2,train +4005,3,train 1965,2,train 1703,2,train 1307,2,train @@ -8434,126 +8423,131 @@ parameter_index,simulation_index,split 2219,3,train 1823,3,train 2353,3,train +1520,2,train +1957,3,train 1654,2,train 2515,1,train -2649,1,train +2253,1,train 2432,3,train 1733,2,train 1774,3,train 2170,3,train -2211,4,train 2728,1,train 2332,1,train 2466,1,train -2204,1,train +2686,4,train 1987,3,train 2424,4,train 2679,1,train -122,3,train +2720,2,train 2021,1,train 2503,4,train 2637,4,train -1804,3,train -1938,3,train 3329,2,train -2933,2,train +2496,1,train 335,3,train +2716,4,train 2413,3,train -2850,4,train +2454,4,train 2151,3,train +2192,4,train 235,1,train 3012,2,train -3146,2,train -2750,2,train +2709,1,train +2313,1,train 152,3,train 193,4,train 2051,1,train 2447,1,train +2929,4,train +2667,4,train 2271,4,train +2405,4,train 314,1,train +3225,2,train 3400,3,train -2660,1,train +406,4,train 2264,1,train -3142,4,train +2660,1,train +2701,2,train +2880,4,train 2484,4,train -399,1,train -3613,3,train +3142,4,train +2222,4,train +661,1,train +3,1,train 2780,2,train +3176,2,train 182,3,train 223,4,train -2477,1,train 2697,4,train 478,1,train +612,1,train 3430,3,train 2993,2,train 395,3,train -436,4,train -832,4,train -2731,2,train +3127,2,train +3168,3,train 133,3,train +174,4,train 2910,4,train -3168,3,train 2648,4,train 295,1,train -33,1,train -3206,2,train +732,2,train 167,1,train 253,4,train 649,4,train 2548,2,train -2944,2,train -3381,3,train 3939,1,train +3677,1,train 246,1,train -683,2,train -466,4,train -3157,2,train +3460,3,train +380,1,train 3594,3,train +2761,2,train 204,4,train 3890,1,train 896,2,train 500,2,train -3673,3,train 679,4,train -3807,3,train +3411,3,train 417,4,train -3149,3,train +1371,2,train 975,2,train 3707,1,train 1109,2,train 713,2,train +1150,3,train 3445,1,train 3886,3,train -3624,3,train -3228,3,train +451,2,train 368,4,train +1188,2,train 3920,1,train 926,2,train -530,2,train 1363,3,train -1060,2,train 664,2,train 3441,3,train -3658,1,train 3837,3,train 3575,3,train -581,4,train -1442,3,train +1659,1,train 3935,2,train 1576,3,train -1180,3,train +3871,1,train 3957,4,train 877,2,train +4091,4,train 3695,4,train 660,4,train 1738,1,train +1872,1,train 1655,3,train -3950,1,train 1789,3,train 4084,1,train 3688,1,train 1090,2,train 1131,3,train +3867,3,train 3646,4,train 1951,1,train 2085,1,train @@ -8563,49 +8557,52 @@ parameter_index,simulation_index,split 1169,2,train 1210,3,train 3901,1,train -3725,4,train +1344,3,train 2164,1,train -2298,1,train -1902,1,train 1640,1,train +1819,3,train +1860,4,train 2256,4,train 1557,3,train 1161,3,train -3938,4,train 2377,1,train -2115,1,train 1719,1,train 2156,2,train 1457,1,train 1636,3,train +1677,4,train +2073,4,train 1374,3,train 2066,1,train 1670,1,train -2286,4,train +2152,4,train +1849,3,train 1890,4,train +2286,4,train 1587,3,train +1628,4,train 2448,2,train 2145,1,train 1883,1,train 1487,1,train 2237,4,train 1841,4,train -2795,2,train +2399,2,train +2096,1,train 1700,1,train +2533,2,train 2316,4,train -1920,4,train 1658,4,train -55,4,train 2133,4,train -1871,4,train -2825,2,train +2267,4,train +48,1,train 2866,3,train +268,4,train 2126,1,train 2167,2,train 2563,2,train 6,4,train 2301,2,train -2604,3,train 2084,4,train 127,1,train 168,2,train @@ -8613,287 +8610,286 @@ parameter_index,simulation_index,split 3079,3,train 85,4,train 2380,2,train -3213,3,train 219,4,train 2514,2,train -3375,1,train -3113,1,train +381,2,train 78,1,train +515,2,train 3292,3,train -2197,2,train +2593,2,train 2634,3,train -36,4,train -3722,1,train +3030,3,train +2372,3,train +594,2,train 198,2,train +3326,1,train +3722,1,train 332,2,train -3109,3,train -115,4,train 3243,3,train +2847,3,train 3284,4,train -2585,3,train 3801,1,train 3405,1,train 807,2,train 3539,1,train -3143,1,train -108,1,train +3580,2,train +545,2,train 149,2,train -586,3,train 3363,4,train 3060,3,train 2664,3,train -66,4,train +3497,4,train 3752,1,train +3793,2,train 1195,3,train -362,2,train 799,3,train -100,2,train -2877,3,train 3273,3,train -3314,4,train -3011,3,train +2877,3,train 17,4,train 1095,1,train +3872,2,train 4006,2,train +878,3,train 3173,1,train -3610,2,train -575,2,train 616,3,train -2911,1,train 3307,1,train +3789,4,train 313,2,train -354,3,train 3527,4,train -3265,4,train +4085,2,train +1091,3,train +3386,1,train 3782,1,train 4002,4,train +829,3,train +1266,4,train 3124,1,train -3561,2,train 130,2,train 567,3,train +3344,4,train +3520,1,train 3478,4,train -1304,3,train +3561,2,train +1521,1,train 863,1,train -3640,2,train 4036,2,train -1042,3,train 646,3,train +3337,1,train 3774,2,train 780,3,train 3161,4,train -3295,4,train -1734,1,train +3691,4,train 1338,1,train 1472,1,train -1076,1,train -3853,2,train 1255,3,train -1692,4,train +859,3,train +1296,4,train 3550,1,train -3591,2,train 993,3,train 597,3,train -3770,4,train 3987,2,train -1155,1,train +1551,1,train 1592,2,train +1289,1,train 893,1,train -4066,2,train -1072,3,train -1113,4,train 3804,2,train 810,3,train 3721,4,train 1368,1,train +1805,2,train 1502,1,train +1543,2,train 1722,4,train 844,1,train 1326,4,train 4017,2,train -1460,4,train +1023,3,train 627,3,train 1064,4,train +1460,4,train 2018,2,train -1622,2,train 923,1,train 1057,1,train -1143,4,train -840,3,train +1539,4,train 1835,2,train 1532,1,train +1969,2,train 1270,1,train 1752,4,train -4088,3,train +4047,2,train +1490,4,train 1094,4,train 1228,4,train 2048,2,train 1349,1,train +1786,2,train 1524,2,train 1703,4,train 1307,4,train 1441,4,train -2519,1,train 2261,2,train 2302,3,train 1999,2,train 1603,2,train 2040,3,train -1737,2,train -1341,2,train +1520,4,train 2515,3,train -2649,3,train -1950,2,train +2253,3,train 2945,1,train -2549,1,train 2728,3,train 2332,3,train -2466,3,train +2029,2,train 2070,3,train +2466,3,train 1767,2,train -2204,3,train -2500,1,train 2679,3,train -1980,2,train +2720,4,train 2021,3,train 22,3,train -2317,1,train -2713,1,train 2799,4,train -2933,4,train +2496,3,train 2100,3,train 1838,3,train 235,3,train 2926,1,train 3012,4,train -3146,4,train -2750,4,train +2709,3,train +2313,3,train 2447,3,train 2051,3,train +2488,4,train 314,3,train -3442,2,train +3005,1,train +3046,2,train +3225,4,train 2347,1,train +2481,1,train 2264,3,train +2701,4,train 744,1,train +3655,2,train 482,1,train 3218,1,train 3259,2,train +661,3,train 2956,1,train -2560,1,train -399,3,train +3,3,train 2694,1,train 2780,4,train -2477,3,train +3176,4,train +2518,4,train 957,1,train 299,1,train 3076,2,train 478,3,train -82,3,train 2773,1,train 3606,2,train 2993,4,train -2731,4,train +3127,4,train +908,1,train +512,1,train 3289,2,train 3726,3,train 295,3,train -3464,3,train +732,4,train 2986,1,train 3027,2,train -33,3,train 2765,2,train -3206,4,train 167,3,train -2944,4,train 2548,4,train 1028,2,train -725,1,train -3502,2,train 3939,3,train -463,1,train -3240,2,train 3636,2,train +3677,3,train +549,4,train +3240,2,train 246,3,train -683,4,train 2978,2,train 3374,2,train -3157,4,train +380,3,train +2761,4,train +1200,1,train 1241,2,train -938,1,train 1375,2,train +979,2,train +676,1,train 3890,3,train 3494,3,train 896,4,train 500,4,train -3191,2,train 238,4,train 1454,2,train -1058,2,train 1588,2,train 975,4,train 3707,3,train 1109,4,train 713,4,train 3445,3,train -1667,2,train +451,4,train 4003,1,train -968,1,train 1009,2,train -3741,1,train +1446,3,train +706,1,train +1188,4,train 3920,3,train 926,4,train -530,4,train -3658,3,train 664,4,train 1484,2,train +1659,3,train 3954,1,train 1356,2,train -960,2,train +3871,3,train 877,4,train 1738,3,train 4033,1,train 1435,2,train 1476,3,train +1872,3,train +3771,1,train 777,2,train -3950,3,train 3688,3,train 1951,3,train 2085,3,train -1252,2,train 1689,3,train -3984,1,train 1427,3,train 3901,3,train -2381,1,train +3942,4,train 2164,3,train 1723,1,train -1902,3,train -1506,3,train +1203,2,train 1640,3,train -3772,4,train +2198,1,train 1936,1,train -2115,3,train 1719,3,train 2156,4,train +1416,2,train 1457,3,train -3972,4,train +2015,1,train 2149,1,train 1670,3,train +1274,3,train 2624,1,train -2228,1,train +2665,2,train 1966,1,train 2448,4,train 2145,3,train 1883,3,train 1487,3,train 2441,1,train -2482,2,train +2878,2,train +2179,1,train 2616,2,train -1783,1,train +2399,4,train +2533,4,train 1700,3,train 3091,2,train 2695,2,train 2392,1,train -1954,4,train +2829,2,train +131,1,train +2512,2,train 3042,2,train +2646,2,train 2563,4,train 2167,4,train 2301,4,train @@ -8903,3973 +8899,3977 @@ parameter_index,simulation_index,split 2422,1,train 2900,3,train 302,4,train -2597,2,train 2201,2,train 2380,4,train -423,1,train -3375,3,train -3113,3,train -2810,2,train -2197,4,train +381,4,train +2676,2,train +515,4,train +2593,4,train 3409,1,train +811,2,train +415,2,train +594,4,train 198,4,train 2493,2,train 2930,3,train 332,4,train -2627,2,train +3326,3,train 3801,3,train 3405,3,train 3539,3,train -3143,3,train +3580,4,train +545,4,train 149,4,train -2840,2,train -3701,1,train 404,1,train -3573,1,train -3177,1,train +882,3,train 3659,4,train 142,1,train -579,2,train -2960,3,train -362,4,train -100,4,train +183,2,train +3793,4,train 4048,1,train 4089,2,train +658,2,train +3872,4,train 1095,3,train -3390,1,train 792,2,train 396,2,train 3173,3,train -3610,4,train -575,4,train +4006,4,train 3307,3,train -2911,3,train 3348,4,train 313,4,train -4006,4,train 3865,1,train 3469,1,train 912,3,train -3207,1,train -347,2,train +4085,4,train +213,2,train +3386,3,train 3124,3,train 3561,4,train 130,4,train +4078,1,train +3682,1,train +1521,3,train 3816,1,train 3420,1,train -3857,2,train 822,2,train 863,3,train 3554,1,train -3640,4,train +4036,4,train 560,2,train -3774,4,train +3337,3,train 3378,4,train -4036,4,train +3774,4,train +1421,1,train 1555,1,train +1159,1,train 1338,3,train 942,3,train 3237,1,train 3633,1,train -1076,3,train 3767,1,train -3853,4,train 4070,2,train 3987,4,train -3591,4,train -1155,3,train +1768,1,train +1551,3,train 1592,4,train 3450,1,train +3846,1,train +1289,3,train 893,3,train -1330,4,train -4066,4,train 3804,4,train -3408,4,train 1847,1,train -1585,1,train +1451,1,train +1189,1,train 1368,3,train -710,3,train +1805,4,train +1543,4,train 3838,2,train 844,3,train 4017,4,train -2060,1,train 1798,1,train 1839,2,train -1536,1,train -1140,1,train -1622,4,train 2018,4,train 3917,2,train 923,3,train +1360,4,train +4051,2,train 1057,3,train -2052,2,train +1353,1,train 1835,4,train +1969,4,train 1270,3,train +4047,4,train 2131,2,train -1828,1,train -1432,1,train 2265,2,train +1432,1,train +1869,2,train 2048,4,train -1349,3,train +1786,4,train +1390,4,train 1524,4,train -1087,2,validate +2132,3,validate +345,3,validate +83,3,validate +2082,2,validate +3685,1,validate +388,1,validate +3206,3,validate 2032,1,validate -84,4,validate +2944,3,validate +3898,1,validate +3207,4,validate +3502,1,validate +205,1,validate 3856,4,validate -3291,3,validate -2203,4,validate -812,4,validate +3157,3,validate +1766,3,validate +297,4,validate 247,3,validate -2246,2,validate -3453,1,validate -2029,4,validate -2678,4,validate -2812,4,validate -1421,4,validate -1159,4,validate -2063,2,validate -2409,1,validate -2891,4,validate -64,2,validate +3673,4,validate +1242,2,validate +763,4,validate +2366,3,validate +4020,4,validate +1455,2,validate +756,1,validate 3533,2,validate -1801,1,validate -885,2,validate -3059,2,validate -2663,2,validate +2796,1,validate +1405,1,validate +2713,3,validate +3617,1,validate +1060,3,validate +2226,1,validate 2842,4,validate -2446,4,validate -1451,4,validate -3787,3,validate -1189,4,validate -227,1,validate -3871,2,validate -2876,2,validate -3046,4,validate +2742,2,validate +94,2,validate +2564,1,validate 11,4,validate -2481,3,validate -3392,3,validate -2693,2,validate 3130,3,validate -653,1,validate -3605,3,validate -1344,4,validate -1952,3,validate -1203,1,validate +1219,4,validate +2560,3,validate +4080,4,validate +1515,2,validate +3689,2,validate +1902,2,validate +428,4,validate 3556,3,validate -857,1,validate 1728,2,validate -774,3,validate -1416,1,validate -3852,1,validate +3685,4,validate +1812,1,validate +724,2,validate 2032,4,validate -1770,4,validate -3282,1,validate -3061,2,validate -1932,2,validate -67,3,validate -413,2,validate -1537,3,validate +2461,1,validate +379,4,validate +808,1,validate +546,1,validate +3323,2,validate +3502,4,validate +3669,1,validate +4023,4,validate +3627,4,validate +1283,1,validate 3536,2,validate +3973,3,validate 1671,3,validate -979,4,validate -3453,4,validate -2711,4,validate -2408,3,validate -1234,1,validate -3353,2,validate -2533,3,validate -2266,4,validate -747,4,validate -2746,3,validate -959,3,validate -2655,1,validate -2696,2,validate -1567,2,validate -2613,4,validate -1043,2,validate -48,2,validate -3221,3,validate -1651,1,validate -260,1,validate +2320,3,validate +3620,1,validate +3141,3,validate +4052,3,validate +972,1,validate +2358,2,validate +2795,3,validate +493,3,validate +1538,3,validate +705,2,validate +2704,1,validate +3833,1,validate +3616,3,validate +2796,4,validate +1963,3,validate +1405,4,validate +3700,2,validate 3687,4,validate -3821,4,validate -261,2,validate -3771,3,validate -473,1,validate -2118,2,validate -644,4,validate -1420,2,validate -1203,4,validate -29,2,validate -1074,2,validate -3851,3,validate -857,4,validate -158,3,validate -941,3,validate -454,1,validate -2494,1,validate -1803,4,validate -3802,3,validate -3103,2,validate +819,1,validate +2564,4,validate +211,1,validate +390,3,validate +3122,2,validate +3468,1,validate +3072,1,validate +3984,3,validate +2381,3,validate +2627,1,validate +2806,3,validate +1852,4,validate +678,2,validate +3152,2,validate +108,2,validate +2544,2,validate +1449,1,validate +1886,2,validate +495,2,validate +674,4,validate +3406,3,validate +2232,1,validate +3843,4,validate +2411,3,validate 3144,3,validate -2495,2,validate -3702,1,validate -3619,3,validate -3703,2,validate -2178,2,validate -1875,1,validate -1916,2,validate -525,2,validate +546,4,validate +841,1,validate +100,3,validate +3011,4,validate +405,1,validate +9,1,validate +2445,1,validate +2228,3,validate +2961,3,validate 1833,4,validate -2220,4,validate -1091,4,validate -526,3,validate +3873,4,validate +2000,1,validate +871,1,validate +3916,2,validate 3470,1,validate -872,2,validate -2475,1,validate -2079,1,validate -393,4,validate -3337,2,validate -2779,3,validate -131,3,validate -3600,3,validate -2512,4,validate -3471,1,validate -639,1,validate -260,4,validate -2992,3,validate -293,1,validate +476,2,validate +1480,1,validate +1304,4,validate +264,2,validate +47,4,validate +3125,2,validate +1734,2,validate +2384,4,validate +477,2,validate +2293,2,validate +427,1,validate 31,1,validate -3500,1,validate 210,3,validate 1947,2,validate -3071,3,validate +3288,1,validate +4066,3,validate +294,2,validate +2547,3,validate 2718,1,validate -2759,2,validate -161,3,validate -2893,2,validate -3671,4,validate -2414,4,validate -415,4,validate -4051,1,validate -761,3,validate -2102,2,validate -3488,3,validate -232,4,validate -537,2,validate +3888,2,validate +1764,2,validate +1065,1,validate +1240,2,validate +973,3,validate +3106,2,validate +2627,4,validate +3538,4,validate +62,2,validate +840,4,validate +1403,1,validate +3572,2,validate +1449,4,validate 275,2,validate -2315,2,validate -3918,1,validate -1399,3,validate -874,1,validate -3702,4,validate +487,1,validate +3701,3,validate +1702,4,validate +2232,4,validate +841,4,validate +3177,3,validate 2091,1,validate -1653,4,validate -3652,3,validate -658,4,validate -1087,1,validate -84,3,validate +2132,2,validate +875,2,validate +262,4,validate +3390,3,validate +1221,1,validate 3257,4,validate -1866,4,validate -43,1,validate +4082,1,validate +255,1,validate +2000,4,validate +871,4,validate +475,4,validate +3207,3,validate +1950,3,validate 996,4,validate -2995,3,validate -3291,2,validate +297,3,validate 3470,4,validate -2296,2,validate -2079,4,validate -468,1,validate -3682,3,validate -643,2,validate -2642,1,validate -2246,1,validate -2029,3,validate -2163,3,validate -1034,3,validate -2812,3,validate -1421,3,validate -1159,3,validate +3857,4,validate 2459,1,validate -2063,1,validate -639,4,validate +1980,3,validate 2417,4,validate -1202,1,validate -2891,3,validate -293,4,validate +4020,3,validate +1026,4,validate 31,4,validate -3500,4,validate -4063,1,validate -885,1,validate -3059,1,validate +2713,2,validate +1281,1,validate 2842,3,validate -3279,4,validate -1451,3,validate -1189,3,validate -2709,4,validate -2876,1,validate +1148,2,validate +1585,3,validate +411,1,validate 1664,3,validate 11,3,validate -2702,1,validate -4051,4,validate -2481,2,validate -1486,2,validate -491,2,validate -224,3,validate -661,4,validate -3605,2,validate -3522,4,validate -392,1,validate -874,4,validate -216,4,validate +3485,1,validate +1403,4,validate +1219,3,validate +399,4,validate +3564,1,validate +4080,3,validate +745,3,validate +3689,1,validate +3868,3,validate 1778,2,validate -1516,2,validate 3556,2,validate 1728,1,validate -774,2,validate -908,2,validate -1254,1,validate +259,2,validate +2082,4,validate +1686,4,validate +3685,3,validate +3120,2,validate 2032,3,validate -1770,3,validate -3769,2,validate -338,2,validate -1813,1,validate -1200,2,validate -3453,3,validate -1546,1,validate -2804,2,validate -2408,2,validate -2063,4,validate -2409,3,validate -64,4,validate +1729,2,validate +379,3,validate +684,1,validate +3898,3,validate +3502,3,validate +2462,1,validate +205,3,validate +4023,3,validate +938,2,validate +2675,1,validate +1022,1,validate +1242,4,validate +1413,2,validate +2358,1,validate +493,2,validate +1538,2,validate +3616,2,validate +1455,4,validate +756,3,validate 3533,4,validate -1801,3,validate -2705,1,validate -2746,2,validate -885,4,validate -2663,4,validate -2613,3,validate -3221,2,validate -227,3,validate -3871,4,validate -2876,4,validate -573,2,validate -4042,2,validate -311,2,validate -261,1,validate -2693,4,validate -3518,1,validate -1295,1,validate -3731,1,validate -644,3,validate -1420,1,validate -1203,3,validate -29,1,validate -1074,1,validate -3851,2,validate -857,3,validate -158,2,validate -941,2,validate -638,1,validate -1416,3,validate -3852,3,validate -1762,2,validate -3365,1,validate -3802,2,validate -3103,1,validate -3282,3,validate -3061,4,validate -1932,4,validate -2495,1,validate -413,4,validate -3619,2,validate +2796,3,validate +1963,2,validate +968,2,validate +1405,3,validate +3700,1,validate +3617,3,validate +2443,1,validate +2226,3,validate +3355,2,validate +1527,1,validate +2742,4,validate +94,4,validate +2564,3,validate +1082,1,validate +390,2,validate +3122,1,validate +1994,2,validate +1515,4,validate +2381,2,validate +3689,4,validate +2078,1,validate +1902,4,validate +425,1,validate +511,4,validate +2806,2,validate +3152,1,validate +3110,4,validate +1633,1,validate +2544,1,validate +724,4,validate +3153,2,validate +2461,3,validate +674,3,validate +808,3,validate +2411,2,validate +546,3,validate +3323,4,validate +3669,3,validate +1283,3,validate +1062,4,validate +2228,2,validate +322,2,validate 3536,4,validate -1367,2,validate -3703,1,validate -668,1,validate +3923,4,validate +3620,3,validate 1833,3,validate -1234,3,validate -2837,2,validate -3353,4,validate -872,1,validate -393,3,validate -3000,1,validate -1347,1,validate -2696,4,validate -1567,4,validate -3600,2,validate -131,2,validate -1043,4,validate -48,4,validate -1651,3,validate -260,3,validate -2992,2,validate -1735,2,validate +972,3,validate +2358,4,validate +3916,1,validate +2921,1,validate +705,4,validate +2704,3,validate +3833,3,validate +1092,4,validate +264,1,validate +47,3,validate +3175,2,validate +3125,1,validate +3734,2,validate +477,1,validate +952,2,validate +1997,2,validate +2293,1,validate 210,2,validate 1947,1,validate -261,4,validate -3071,2,validate -1165,2,validate -473,3,validate -1511,1,validate -161,2,validate -2118,4,validate -465,4,validate +819,3,validate +294,1,validate +211,3,validate +2506,1,validate +3122,4,validate +120,1,validate +557,2,validate +1764,1,validate +3072,3,validate +903,1,validate 2719,1,validate -3326,4,validate -1420,4,validate -29,4,validate -1074,4,validate -3581,1,validate -2324,1,validate -1666,1,validate -537,1,validate -671,1,validate +3106,1,validate +2627,3,validate +678,4,validate +3152,4,validate +1541,1,validate +3319,1,validate +108,4,validate +2544,4,validate +1449,3,validate 275,1,validate -454,3,validate -2494,3,validate -1399,2,validate +1886,4,validate +495,4,validate +2232,3,validate +800,2,validate +841,3,validate +276,2,validate 3094,4,validate 488,1,validate -3702,3,validate -658,3,validate -2354,1,validate -1958,1,validate -3703,4,validate -2178,4,validate -1875,3,validate -1916,4,validate -525,4,validate -1217,2,validate -222,2,validate -2995,2,validate -3429,2,validate +9,3,validate +2445,3,validate +3216,2,validate +2000,3,validate +871,3,validate +3999,2,validate 3470,3,validate -2296,1,validate -872,4,validate -2475,3,validate -2079,3,validate -2559,2,validate -2163,2,validate -1034,2,validate -3337,4,validate +476,4,validate +3083,2,validate +264,4,validate +1168,2,validate +3125,4,validate +1734,4,validate 4029,2,validate -3592,1,validate -3471,3,validate -639,3,validate -293,3,validate +2293,4,validate +427,3,validate 31,3,validate -3500,3,validate 1947,4,validate -2851,2,validate -2935,1,validate +3288,3,validate +294,4,validate 2718,3,validate -1981,2,validate -2759,4,validate -2893,4,validate -4051,3,validate -2102,4,validate -491,1,validate -224,2,validate +3888,4,validate +1148,1,validate +1585,2,validate +1764,4,validate +153,1,validate +1065,3,validate +2327,1,validate +1240,4,validate +1889,4,validate +2194,2,validate +3106,4,validate +62,4,validate +1403,3,validate +3572,4,validate 275,4,validate -2315,4,validate -3918,3,validate -3827,1,validate -874,3,validate +487,3,validate +3219,2,validate +1828,2,validate +3868,2,validate 134,1,validate -3389,4,validate 1778,1,validate -1087,3,validate -338,1,validate -3291,4,validate -2296,4,validate -468,3,validate -643,4,validate +783,1,validate +2132,4,validate +259,1,validate +875,4,validate +2082,3,validate +1221,3,validate +388,2,validate +3120,1,validate +1729,1,validate +4082,3,validate +255,3,validate +3898,2,validate +1992,2,validate +205,2,validate +2076,1,validate 247,4,validate -2642,3,validate -2246,3,validate -2804,1,validate +764,1,validate +2938,1,validate +1413,1,validate 2459,3,validate -2063,3,validate -2409,2,validate -23,2,validate +3067,2,validate +1455,3,validate +756,2,validate 3533,3,validate -64,3,validate -1801,2,validate -885,3,validate -3059,3,validate -2876,3,validate -4042,1,validate -573,1,validate -1790,1,validate -1528,1,validate -2481,4,validate -1486,4,validate -920,1,validate -653,2,validate -3605,4,validate -392,3,validate +2713,4,validate +1281,3,validate +2884,2,validate +3617,2,validate +1060,4,validate +2226,2,validate +1365,2,validate +411,3,validate +1577,1,validate +3355,1,validate +94,3,validate +4043,2,validate +2177,1,validate +2560,4,validate +3781,1,validate +3564,3,validate +1994,1,validate +1515,3,validate +3689,3,validate +1995,2,validate 1778,4,validate -1516,4,validate 3556,4,validate 1728,3,validate -774,4,validate -908,4,validate -3852,2,validate -817,2,validate -1254,3,validate -3769,4,validate -1762,1,validate -338,4,validate -3282,2,validate -1200,4,validate +1812,2,validate +3153,1,validate +2461,2,validate +1729,4,validate +1896,1,validate +3678,2,validate +2462,3,validate +1283,2,validate +2109,1,validate +322,1,validate 1671,4,validate -1367,1,validate -1546,3,validate -2408,4,validate -1234,2,validate -2837,1,validate -2838,2,validate -748,1,validate -2705,3,validate -2746,4,validate -2655,2,validate -48,3,validate -3221,4,validate -1348,1,validate +938,4,validate +2675,3,validate +3620,2,validate +1022,3,validate +3141,4,validate +931,1,validate +972,2,validate +1413,4,validate +2358,3,validate +2795,4,validate +493,4,validate +1538,4,validate +3833,2,validate +2704,2,validate +3616,4,validate +1963,4,validate +968,4,validate +3700,3,validate +2443,3,validate +3734,1,validate +3355,4,validate +790,2,validate +1997,1,validate 91,1,validate -573,4,validate -4042,4,validate -311,4,validate -2606,2,validate -261,3,validate -2260,2,validate -1165,1,validate -473,2,validate -1299,1,validate -3518,3,validate -3814,1,validate -1295,3,validate -1420,3,validate -29,3,validate -1074,3,validate -3851,4,validate -158,4,validate -941,4,validate -454,2,validate -1762,4,validate -3365,3,validate -3802,4,validate -3103,3,validate -1196,1,validate -2495,3,validate -3795,1,validate -3619,4,validate +819,2,validate +1082,3,validate +390,4,validate +3122,3,validate +557,1,validate +3468,2,validate +3984,4,validate +1994,4,validate +2423,1,validate +1166,1,validate +2381,4,validate +2078,3,validate +425,3,validate +2806,4,validate +899,2,validate +2636,1,validate +3152,3,validate +1633,3,validate +108,3,validate +2544,3,validate +3153,4,validate +1979,2,validate +2453,1,validate +2411,4,validate +800,1,validate +276,1,validate +4057,1,validate +405,2,validate +2445,2,validate +2142,1,validate +2228,4,validate +322,4,validate 2791,1,validate -3703,3,validate -1875,2,validate -2837,4,validate -1401,2,validate -1613,1,validate -526,4,validate -222,1,validate +3216,1,validate +2355,1,validate +3999,1,validate +3916,3,validate +2921,3,validate +3825,1,validate 356,1,validate -3429,1,validate -872,3,validate -2475,2,validate -781,1,validate -3000,3,validate -2559,1,validate -2779,4,validate -1347,3,validate -3600,4,validate -131,4,validate +831,2,validate +1480,2,validate +3083,1,validate +3217,1,validate +264,3,validate +3175,4,validate +1168,1,validate +3125,3,validate +2385,1,validate +1734,3,validate +3734,4,validate 4029,1,validate -3471,2,validate -2039,1,validate -2992,4,validate -1735,4,validate +477,3,validate +952,4,validate +1997,4,validate +2293,3,validate +427,2,validate 210,4,validate -2901,2,validate 1947,3,validate -1644,2,validate -3071,4,validate -1165,4,validate -203,1,validate +3288,2,validate +294,3,validate +2506,3,validate +337,1,validate 2718,2,validate -1981,1,validate -161,4,validate -2893,3,validate +557,4,validate +2852,2,validate +1764,3,validate +1065,2,validate +1199,2,validate +2802,1,validate +2244,2,validate 2719,3,validate -761,4,validate -1624,1,validate -367,1,validate -3581,3,validate -105,1,validate -1150,1,validate -537,3,validate -671,3,validate +2194,1,validate +3106,3,validate +3015,1,validate +2323,2,validate +62,3,validate +1066,2,validate +3319,3,validate +754,1,validate +3228,1,validate 275,3,validate -2315,3,validate -1399,4,validate +487,2,validate +276,4,validate 488,3,validate 2091,2,validate -3652,4,validate -1958,3,validate -2042,2,validate -3645,1,validate -997,1,validate -1217,4,validate -43,2,validate -2995,4,validate -2296,3,validate -468,2,validate -3596,1,validate -3682,4,validate -643,3,validate -2205,1,validate -2642,2,validate -2559,4,validate -2163,4,validate -1034,4,validate -3592,3,validate +875,3,validate +572,2,validate +3390,4,validate +1221,2,validate +3216,4,validate +4041,1,validate +4082,2,validate +2650,1,validate +255,2,validate +3999,4,validate +1992,1,validate +1950,4,validate +1168,4,validate +1597,1,validate 4029,4,validate 2459,2,validate -1202,2,validate -2072,1,validate -23,1,validate -4063,2,validate -3068,2,validate -1415,2,validate -286,2,validate -1981,4,validate +3463,1,validate +3067,1,validate +1980,4,validate +1281,2,validate +3280,1,validate +2884,1,validate +1627,1,validate +1365,1,validate +1148,3,validate +411,2,validate +1585,4,validate +153,3,validate +2327,3,validate 3231,1,validate 1840,1,validate +1578,1,validate 1664,4,validate -2702,2,validate -2836,2,validate -1486,3,validate -3048,1,validate -54,2,validate -491,3,validate -2440,1,validate -138,1,validate -224,4,validate -3261,1,validate -2999,1,validate -3827,3,validate -2653,1,validate -392,2,validate +321,1,validate +4043,1,validate +3485,2,validate +1099,2,validate +3564,2,validate +745,4,validate +3219,4,validate +1050,2,validate +1828,4,validate +3868,4,validate +1262,1,validate +1995,1,validate 1778,3,validate -1516,3,validate -908,3,validate -817,1,validate -1254,2,validate -951,1,validate -3769,3,validate -338,3,validate -1813,2,validate -1200,3,validate -1546,2,validate -2372,1,validate -2804,3,validate -373,1,validate -2409,4,validate -2838,1,validate -23,4,validate -1801,4,validate -2705,2,validate -3051,1,validate -227,4,validate -4042,3,validate -573,3,validate +783,3,validate +259,3,validate +1079,1,validate +388,4,validate +3120,3,validate +1729,3,validate +3678,1,validate +684,2,validate +3898,4,validate +818,2,validate +2462,2,validate +205,4,validate +938,3,validate +2675,2,validate +981,1,validate +1022,2,validate +764,3,validate +2938,3,validate +1413,3,validate +756,4,validate +1581,1,validate +968,3,validate +2884,4,validate +2443,2,validate +3617,4,validate +2226,4,validate +1577,3,validate +3355,3,validate +1527,2,validate +790,1,validate 270,2,validate -311,3,validate -2606,1,validate -2260,1,validate -1003,1,validate -3518,2,validate -920,3,validate -653,4,validate -2948,2,validate -1295,2,validate -3731,2,validate +3002,1,validate +4043,4,validate +2177,3,validate +1082,2,validate +3914,2,validate +2086,1,validate +3781,3,validate +1994,3,validate 3294,1,validate -2474,2,validate -1775,1,validate -2686,1,validate -900,2,validate -638,2,validate -3852,4,validate -1416,4,validate -1246,1,validate -1762,3,validate -3365,2,validate -3282,4,validate -2454,1,validate -2321,2,validate -1367,3,validate -2929,1,validate -4058,1,validate -668,2,validate -1014,1,validate -1234,4,validate -2837,3,validate -1401,1,validate -2838,4,validate -1876,1,validate -748,3,validate -3000,2,validate -1347,2,validate -2655,4,validate -3480,1,validate -1651,4,validate -1348,3,validate +3032,1,validate +2078,2,validate +1995,4,validate +425,2,validate +899,1,validate +1033,1,validate +1854,1,validate +1162,2,validate +1633,2,validate +1812,4,validate +3153,3,validate +1979,1,validate +2461,4,validate +1896,3,validate +808,4,validate +3669,4,validate +1283,4,validate +2109,3,validate +3712,2,validate +322,3,validate +3620,4,validate +972,4,validate +1143,2,validate +2921,2,validate +3833,4,validate +2704,4,validate +831,1,validate +3175,3,validate +3734,3,validate +3347,2,validate +952,3,validate +790,4,validate +1997,3,validate 91,3,validate -1735,3,validate -2606,4,validate -2901,1,validate -303,2,validate -1644,1,validate -2260,4,validate -1165,3,validate -473,4,validate -1299,3,validate -1511,2,validate -3510,1,validate -3814,3,validate +3035,1,validate +819,4,validate +211,4,validate +2506,2,validate +120,2,validate +557,3,validate +2852,1,validate +3468,4,validate +3072,4,validate +903,2,validate +1199,1,validate +2244,1,validate +3115,2,validate 2719,2,validate -3327,1,validate +2423,3,validate +1462,2,validate 1674,1,validate -3581,2,validate -2324,2,validate -1067,2,validate -671,2,validate -454,4,validate -2494,4,validate -3928,2,validate +1808,1,validate +1116,2,validate +2323,1,validate +899,4,validate +1066,1,validate +1541,2,validate +3319,2,validate +1979,4,validate +2453,3,validate +800,3,validate +276,3,validate +3878,1,validate +2749,1,validate 488,2,validate -2354,2,validate -1958,2,validate -2488,2,validate -1875,4,validate -2042,1,validate -1401,4,validate -2305,2,validate -1613,3,validate -1217,3,validate -222,3,validate -2517,1,validate -2913,1,validate +405,4,validate +9,4,validate +1230,1,validate +2445,4,validate +2142,3,validate +572,1,validate +3216,3,validate +3999,3,validate 356,3,validate -3429,3,validate -2475,4,validate -781,3,validate -2559,3,validate -3988,2,validate -3592,2,validate +3300,1,validate +998,1,validate +1480,4,validate +3083,3,validate +3217,3,validate +1168,3,validate 4029,3,validate -3471,4,validate -2901,4,validate -3068,1,validate -470,2,validate -2851,3,validate -1415,1,validate -286,1,validate -203,3,validate -2935,2,validate +2335,2,validate +944,2,validate +427,4,validate +3464,1,validate +3288,4,validate 2718,4,validate -1981,3,validate -549,2,validate -2152,1,validate -1628,1,validate -2836,1,validate -712,1,validate -1624,3,validate -54,1,validate -3918,4,validate -2012,4,validate -3827,2,validate +2852,4,validate +153,2,validate +1065,4,validate +2327,2,validate +1199,4,validate +2802,3,validate +2244,4,validate +3148,2,validate +2194,3,validate +3015,3,validate +2323,4,validate +450,1,validate +1099,1,validate +3099,2,validate +317,2,validate +754,3,validate +487,4,validate +3219,3,validate +1050,1,validate +1828,3,validate 134,2,validate +1871,1,validate +1179,2,validate +783,2,validate 2091,4,validate -480,1,validate -1087,4,validate -1392,2,validate -2042,4,validate -3645,3,validate -997,3,validate -3729,2,validate -43,4,validate -2684,1,validate -468,4,validate -3596,3,validate -2205,3,validate -2246,4,validate -2642,4,validate -3942,2,validate +1263,1,validate +572,4,validate +1221,4,validate +388,3,validate +2521,2,validate +1130,2,validate +4082,4,validate +255,4,validate +1992,3,validate +818,1,validate +2076,2,validate +1597,3,validate +764,2,validate +2938,2,validate 2459,4,validate -290,2,validate -3759,2,validate -1202,4,validate +3067,3,validate 2368,2,validate -3971,1,validate -23,3,validate 2022,2,validate -4063,4,validate -1415,4,validate -286,4,validate -3059,4,validate +1281,4,validate +3280,3,validate +2884,3,validate +3972,2,validate +2106,1,validate +715,1,validate +1627,3,validate +1365,3,validate +411,4,validate +1577,2,validate 3231,3,validate 1840,3,validate 270,1,validate -1790,2,validate -2702,4,validate -1528,2,validate -3048,3,validate -54,4,validate -920,2,validate -3132,2,validate -2440,3,validate -138,3,validate -653,3,validate -2948,1,validate -2999,3,validate -2474,1,validate -2653,3,validate -392,4,validate +1578,3,validate +4043,3,validate +2177,2,validate +3485,4,validate +3914,1,validate +1099,4,validate +3781,2,validate +3082,1,validate +3564,4,validate +1133,2,validate +1262,3,validate +1995,3,validate +513,1,validate +2949,1,validate 1728,4,validate -900,1,validate -1771,2,validate -817,3,validate -1254,4,validate -951,3,validate -2766,1,validate -1813,4,validate -2321,1,validate -1546,4,validate +647,1,validate +1162,1,validate +1079,3,validate +1812,3,validate +1896,2,validate +3678,3,validate +684,4,validate +1247,1,validate +2462,4,validate +2109,2,validate +3712,1,validate +2675,4,validate 331,1,validate -3975,2,validate -373,3,validate -2838,3,validate -748,2,validate -1490,1,validate -2705,4,validate -99,1,validate -3051,3,validate -2655,3,validate -882,1,validate -3955,1,validate -1348,2,validate +981,3,validate +1022,4,validate +2322,2,validate +3925,1,validate +931,2,validate +1143,1,validate +1581,3,validate +3700,4,validate +2443,4,validate +3347,1,validate +1527,4,validate +790,3,validate 91,2,validate 270,4,validate -2606,3,validate -303,1,validate -437,1,validate -2260,3,validate -1299,2,validate -1003,3,validate -3518,4,validate -2948,4,validate -3814,2,validate -1295,4,validate +3002,3,validate +1082,4,validate +3914,4,validate +3468,3,validate +3115,1,validate +2423,2,validate 3294,3,validate -3731,4,validate -2686,3,validate -900,4,validate -638,4,validate -1067,1,validate -1246,3,validate -3365,4,validate -3103,4,validate -1196,2,validate -3928,1,validate -2017,2,validate -2454,3,validate -2495,4,validate -3795,2,validate -2321,4,validate -2488,1,validate -668,4,validate -1493,1,validate -1014,3,validate -3225,1,validate -1360,2,validate -1401,3,validate -2305,1,validate -1613,2,validate +3032,3,validate +1166,2,validate +1462,1,validate +2078,4,validate +1116,1,validate +425,4,validate +899,3,validate +3590,1,validate +1033,3,validate +2636,2,validate +1937,1,validate +1854,3,validate +1162,4,validate +1633,4,validate +1979,3,validate +3541,1,validate +2453,2,validate +1330,2,validate +4057,2,validate +405,3,validate +3712,4,validate +2142,2,validate +2750,1,validate +2355,2,validate +3916,4,validate +2921,4,validate 356,2,validate -1876,3,validate -781,2,validate -3000,4,validate -132,1,validate -1347,4,validate -3988,1,validate -2039,2,validate -2901,3,validate -303,4,validate -732,1,validate -1644,3,validate -470,1,validate -1990,2,validate -203,2,validate -1511,4,validate -549,1,validate -2761,1,validate -2203,2,validate -3806,1,validate +3825,2,validate +831,3,validate +2830,2,validate +1480,3,validate +3217,2,validate +2385,2,validate +477,4,validate +2335,1,validate +944,1,validate +83,1,validate +2598,2,validate +3035,3,validate +2944,1,validate +3381,2,validate +2506,4,validate +1291,1,validate +337,2,validate +120,4,validate +2852,3,validate +903,4,validate +1199,3,validate +2802,2,validate +2244,3,validate 2719,4,validate -812,2,validate -2415,1,validate -3327,3,validate +3148,1,validate +1462,4,validate +1891,1,validate 1674,3,validate -1624,2,validate -367,2,validate -2803,2,validate -3581,4,validate -105,2,validate -2324,4,validate -1150,2,validate -1666,4,validate -537,4,validate -671,4,validate -1837,2,validate -3312,1,validate +3673,2,validate +1808,3,validate +1116,4,validate +3015,2,validate +2323,3,validate +3149,2,validate +1066,3,validate +1541,4,validate +2366,1,validate +3099,1,validate +3319,4,validate +317,1,validate +754,2,validate +3228,2,validate +530,1,validate +3878,3,validate +2749,3,validate +1179,1,validate 488,4,validate 2091,3,validate -3787,1,validate -2354,4,validate -1958,4,validate -1392,1,validate -2042,3,validate -135,1,validate -3645,2,validate -997,2,validate -3729,1,validate -2305,4,validate -43,3,validate +1230,3,validate +572,3,validate +2521,1,validate +1130,1,validate +4041,2,validate +2650,2,validate 1605,1,validate -2517,3,validate -86,1,validate -3596,2,validate -2205,2,validate -3942,1,validate -1344,2,validate -2947,1,validate -3592,4,validate -3759,1,validate -290,1,validate -1202,3,validate -2072,2,validate +3300,3,validate +998,3,validate +1818,1,validate +1597,2,validate +3463,2,validate +2335,4,validate 2368,1,validate +944,4,validate +2206,2,validate 2022,1,validate -553,2,validate -4063,3,validate -3068,3,validate -1415,3,validate -286,3,validate -2935,4,validate -67,1,validate -2152,3,validate -1628,3,validate +2631,2,validate +3972,1,validate +3280,2,validate +3676,2,validate +1627,2,validate +1324,1,validate +1148,4,validate +153,4,validate +2327,4,validate +3627,2,validate 3231,2,validate 1840,2,validate -1537,1,validate -845,2,validate -1974,2,validate -2702,3,validate -2836,3,validate -712,3,validate -3048,2,validate -54,3,validate -491,4,validate -2399,1,validate -2440,2,validate -3132,1,validate -138,2,validate -3261,2,validate -2266,2,validate -2999,2,validate -2004,2,validate -3827,4,validate -2653,2,validate +3148,4,validate +1578,2,validate +146,1,validate +321,2,validate +2320,1,validate +3485,3,validate +450,3,validate +4052,1,validate +1099,3,validate +317,4,validate +1133,1,validate +613,2,validate +1050,3,validate +1262,2,validate 134,4,validate -959,1,validate -480,3,validate -1771,1,validate -951,2,validate +1871,3,validate +1179,4,validate +783,4,validate +259,4,validate +1263,3,validate +1079,2,validate +3120,4,validate 3687,2,validate -1813,3,validate -3729,4,validate -2684,3,validate -2372,2,validate -3975,1,validate -2980,1,validate -2804,4,validate -373,2,validate -2847,2,validate -290,4,validate -3759,4,validate -1456,2,validate +1130,4,validate +684,3,validate +818,3,validate +1688,2,validate +2076,4,validate +981,2,validate +764,4,validate +2322,1,validate +2938,4,validate 2368,4,validate 1194,2,validate -3971,3,validate -2797,1,validate 2022,4,validate -3580,1,validate -3051,2,validate -1357,1,validate +1581,2,validate +2106,3,validate +715,3,validate +1577,4,validate +100,1,validate +1527,3,validate +3660,2,validate 270,3,validate -1570,1,validate -1790,4,validate +2961,1,validate +3002,2,validate 179,1,validate -1528,4,validate -1003,2,validate -920,4,validate -2220,2,validate -1091,2,validate -3132,4,validate -829,2,validate -2948,3,validate +2177,4,validate +3914,3,validate +2086,2,validate +3781,4,validate +3082,3,validate 3294,2,validate -3731,3,validate -2474,3,validate -1775,2,validate -2686,2,validate -900,3,validate -1771,4,validate -638,3,validate -1246,2,validate -2766,3,validate -2017,1,validate -2454,2,validate -1805,1,validate -2321,3,validate -1367,4,validate -4058,2,validate -2929,2,validate -668,3,validate -3975,4,validate -1410,2,validate -1014,2,validate -19,2,validate -1360,1,validate -103,1,validate -3488,1,validate -232,2,validate -1876,2,validate -748,4,validate -3480,2,validate -49,2,validate -3955,3,validate +1133,4,validate +3032,2,validate +2037,2,validate +1033,2,validate +513,3,validate +2949,3,validate +1854,2,validate +1162,3,validate +3853,1,validate +1896,4,validate +1330,1,validate +1247,3,validate +2109,4,validate +3712,3,validate +973,1,validate +2322,4,validate +3925,3,validate +1622,1,validate +931,4,validate +1143,3,validate +2830,1,validate +2964,1,validate +1702,2,validate +1440,2,validate 3826,1,validate -1348,4,validate +832,2,validate +3347,3,validate 91,4,validate -3693,2,validate -303,3,validate -437,3,validate -1990,1,validate -1299,4,validate -84,1,validate -1511,3,validate -3510,2,validate +262,2,validate +2598,1,validate +3035,2,validate +3381,1,validate +120,3,validate 3856,1,validate 862,2,validate -3814,4,validate -2203,1,validate -812,1,validate -3327,2,validate +903,3,validate +3115,3,validate +2423,4,validate +1166,4,validate +1462,3,validate 1674,2,validate -2678,1,validate -2803,1,validate +3673,1,validate +1808,2,validate +1116,3,validate +3590,3,validate +3149,1,validate +2636,4,validate +1937,3,validate +763,1,validate +1541,3,validate 2283,2,validate -2324,3,validate -1067,3,validate -1196,4,validate -3928,3,validate -2446,1,validate -3795,4,validate -2354,3,validate -2488,3,validate -1493,3,validate -3046,1,validate -2305,3,validate -1613,4,validate -222,4,validate -2517,2,validate -2913,2,validate +3541,3,validate +2453,4,validate +800,4,validate +3878,2,validate +2749,2,validate +4057,4,validate +581,2,validate +1230,2,validate +2142,4,validate +2750,3,validate +2355,4,validate 356,4,validate -3429,4,validate -781,4,validate -1344,1,validate -132,3,validate -3988,3,validate -216,2,validate -2039,4,validate -553,1,validate -732,3,validate -470,3,validate -2851,4,validate -1770,1,validate -1990,4,validate -203,4,validate -2935,3,validate -549,3,validate -2152,2,validate -2761,3,validate -1628,2,validate -3806,3,validate -2415,3,validate -1974,1,validate -845,1,validate -979,1,validate -712,2,validate -2711,1,validate -1624,4,validate -367,4,validate -2803,4,validate -105,4,validate -1150,4,validate -2266,1,validate -2004,1,validate -3312,3,validate -747,1,validate +3825,4,validate +3300,2,validate +998,2,validate +3083,4,validate +3217,4,validate +2385,4,validate +2335,3,validate +428,1,validate +944,3,validate +2206,1,validate +1686,2,validate +2598,4,validate +3464,2,validate +2631,1,validate +33,2,validate +3381,4,validate +3676,1,validate +379,1,validate +1291,3,validate +337,4,validate +2802,4,validate +3627,1,validate +3148,3,validate +2194,4,validate +1891,3,validate +3015,4,validate +3149,4,validate +450,2,validate +3099,3,validate +317,3,validate +754,4,validate +3228,4,validate +613,1,validate +530,3,validate 134,3,validate -480,2,validate -2613,1,validate -3475,2,validate -1392,3,validate +1871,2,validate +1179,3,validate +1263,2,validate +2521,3,validate 3687,1,validate -3821,1,validate -135,3,validate -3645,4,validate -997,4,validate -3729,3,validate +1130,3,validate +4041,4,validate +2650,4,validate +1992,4,validate +1688,1,validate 1605,3,validate -2684,2,validate -86,3,validate -3596,4,validate -2205,4,validate -3942,3,validate -2947,3,validate -644,1,validate -2847,1,validate -3759,3,validate -290,3,validate -1456,1,validate -2072,4,validate -1194,1,validate -3971,2,validate +2076,3,validate +36,2,validate +1818,3,validate +1597,4,validate +511,2,validate +3463,4,validate +1852,1,validate +3067,4,validate 2368,3,validate +1194,1,validate +2206,4,validate +3110,2,validate 2022,3,validate -553,4,validate -1803,1,validate -849,2,validate +2631,4,validate +3972,3,validate +3280,4,validate +2106,2,validate +3676,4,validate +674,1,validate +715,2,validate +3843,1,validate +1627,4,validate +1324,3,validate +1365,4,validate +3011,1,validate 3231,4,validate +3660,1,validate +1062,2,validate 1840,4,validate -1974,4,validate -845,4,validate -1790,3,validate -1528,3,validate +1578,4,validate +146,3,validate +321,4,validate +3923,2,validate +2532,2,validate 1833,1,validate -3048,4,validate -2220,1,validate -1091,1,validate -2399,3,validate -2440,4,validate -3132,3,validate -138,4,validate -829,1,validate -3261,4,validate -3389,3,validate -2999,4,validate -2004,4,validate -393,1,validate -830,2,validate -2653,4,validate -2512,1,validate -1771,3,validate -817,4,validate -951,4,validate -2766,2,validate -860,2,validate -3671,1,validate -2414,1,validate +3873,1,validate +3082,2,validate +1092,2,validate +1133,3,validate +2037,1,validate +613,4,validate +1304,1,validate +47,1,validate +1262,4,validate +2562,2,validate +513,2,validate +2949,2,validate +647,2,validate +2384,1,validate +1079,4,validate +3770,2,validate +3678,4,validate +1688,4,validate +1247,2,validate +2330,2,validate +3375,2,validate 331,2,validate -2372,4,validate -465,2,validate -3975,3,validate -2980,3,validate -1410,1,validate -415,1,validate -19,1,validate -3192,2,validate -3326,2,validate -373,4,validate -2847,4,validate -1456,4,validate +981,4,validate +2322,3,validate +3925,2,validate +931,3,validate +3538,1,validate +1673,2,validate +840,1,validate 1194,4,validate -20,2,validate -2797,3,validate -232,1,validate -3580,3,validate -1490,2,validate -99,2,validate -3051,4,validate -882,2,validate -49,1,validate -3955,2,validate -1357,3,validate +1581,4,validate +1702,1,validate +1440,1,validate 3094,2,validate -1653,1,validate -3693,1,validate -658,1,validate -1570,3,validate -437,2,validate +832,1,validate +3660,4,validate +3002,4,validate +262,1,validate 179,3,validate -1003,4,validate -2565,2,validate 3257,1,validate -1866,1,validate -829,4,validate +2086,4,validate +475,1,validate 862,1,validate 996,1,validate 3294,4,validate -1775,4,validate -2686,4,validate +3032,4,validate +1166,3,validate +3857,1,validate +2037,4,validate +3590,2,validate +1033,4,validate +3724,2,validate +2636,3,validate +1937,2,validate +1854,4,validate +3853,3,validate 2283,1,validate 2417,1,validate -1246,4,validate -1196,3,validate -2017,3,validate -2454,4,validate -3279,1,validate -3754,2,validate -3795,3,validate -1805,3,validate -2709,1,validate -4058,4,validate -2929,4,validate -1493,2,validate -1410,4,validate -1014,4,validate -19,4,validate -3225,2,validate -1360,3,validate -103,3,validate -1876,4,validate -661,1,validate -3522,1,validate -132,2,validate -3480,4,validate -49,4,validate +1026,1,validate +3541,2,validate +1155,2,validate +1330,3,validate +4057,3,validate +581,1,validate +3146,2,validate +2750,2,validate +1889,2,validate +1622,3,validate +2355,3,validate +3825,3,validate +831,4,validate +2830,3,validate +2964,3,validate +399,1,validate +1440,4,validate +2385,3,validate 3826,3,validate -216,1,validate -3389,2,validate -2039,3,validate -3693,4,validate -732,2,validate -1644,4,validate -1990,3,validate -3510,4,validate +832,4,validate +345,2,validate +83,2,validate +2082,1,validate +1686,1,validate +2598,3,validate +3035,4,validate +33,1,validate +3206,2,validate +2944,2,validate +3381,3,validate +1291,2,validate +337,3,validate 3856,3,validate 862,4,validate -2761,2,validate -2203,3,validate -3806,2,validate -812,3,validate -2415,2,validate -3327,4,validate +3157,2,validate +1766,2,validate 247,2,validate +1891,2,validate 1674,4,validate -2678,3,validate -367,3,validate -2803,3,validate -105,3,validate +3673,3,validate +1808,4,validate +3149,3,validate +1242,1,validate +1066,4,validate +763,3,validate +2366,2,validate 2283,4,validate -1150,3,validate -64,1,validate +3228,3,validate +1455,1,validate 3533,1,validate -3312,2,validate -2663,1,validate -2446,3,validate -3787,2,validate -3871,1,validate -3475,1,validate -135,2,validate -3046,3,validate -3392,2,validate -2693,1,validate +530,2,validate +1060,2,validate +3878,4,validate +2749,4,validate +581,4,validate +1230,4,validate +2742,1,validate +94,1,validate +4041,3,validate +2650,3,validate 3130,2,validate 1605,2,validate -2913,4,validate -2517,4,validate -86,2,validate -1344,3,validate -2947,2,validate -2072,3,validate -553,3,validate -3068,4,validate -849,1,validate -3061,1,validate -1932,1,validate -67,2,validate -2152,4,validate -413,1,validate -1628,4,validate -1537,2,validate -845,3,validate +3300,4,validate +998,4,validate +2560,2,validate +36,1,validate +1818,2,validate +1515,1,validate +1902,1,validate +511,1,validate +3463,3,validate +428,3,validate +2206,3,validate +3110,1,validate +3464,4,validate +2631,3,validate +724,1,validate +33,4,validate +3676,3,validate +1324,2,validate +3323,1,validate +3627,3,validate +1062,1,validate 3536,1,validate -1974,3,validate -979,3,validate +3973,2,validate 1671,2,validate -2836,4,validate -712,4,validate -2711,3,validate -3353,1,validate -2399,2,validate -2533,2,validate -3261,3,validate -2266,3,validate -2004,3,validate -830,1,validate -747,3,validate -959,2,validate -2696,1,validate -1567,1,validate -480,4,validate -1043,1,validate -48,1,validate -3475,4,validate +146,2,validate +321,3,validate +2320,2,validate +3923,1,validate +2532,1,validate +450,4,validate +3141,2,validate +4052,2,validate +2795,2,validate +705,1,validate +1092,1,validate +613,3,validate +1050,4,validate +2562,1,validate +1871,4,validate +1263,4,validate +3770,1,validate 3687,3,validate -3821,3,validate -860,1,validate -3771,2,validate -2684,4,validate -2118,1,validate -2372,3,validate -465,1,validate -2980,2,validate -3192,1,validate -3326,1,validate -2847,3,validate -1456,3,validate +818,4,validate +1688,3,validate +2330,1,validate +3375,1,validate +3984,2,validate +36,4,validate +1673,1,validate +1852,3,validate +678,1,validate 1194,3,validate -20,1,validate -2797,2,validate -3971,4,validate -3580,2,validate -1803,3,validate -849,4,validate +108,1,validate +1886,1,validate +2106,4,validate +495,1,validate +715,4,validate +3406,2,validate +3843,3,validate 3144,2,validate -1357,2,validate 3094,1,validate -1570,2,validate +100,2,validate +3011,3,validate +3660,3,validate +2961,2,validate 179,2,validate -2178,1,validate -1916,1,validate -525,1,validate -2565,1,validate -2220,3,validate -1091,3,validate -829,3,validate -526,2,validate -830,4,validate -2474,4,validate -1775,3,validate -3337,1,validate -2779,2,validate -2512,3,validate -2766,4,validate -860,4,validate -3754,1,validate -2759,1,validate -2893,1,validate -3671,3,validate -1805,2,validate -2414,3,validate -4058,3,validate -2929,3,validate +2532,4,validate +3873,3,validate +2086,3,validate +3082,4,validate +476,1,validate +2037,3,validate +1304,3,validate +2562,4,validate +3724,1,validate +513,4,validate +2949,4,validate +1734,1,validate +647,4,validate +3853,2,validate +2384,3,validate +3770,4,validate +1155,1,validate +4066,2,validate +1247,4,validate +2547,2,validate +2330,4,validate +3888,1,validate +3375,4,validate +3146,1,validate +1240,1,validate 331,4,validate -1410,3,validate -415,3,validate -19,3,validate -3192,4,validate -761,2,validate -103,2,validate -2102,1,validate -3488,2,validate -20,4,validate -232,3,validate -1490,4,validate -2315,1,validate -99,4,validate -3480,3,validate -882,4,validate -49,3,validate -3955,4,validate -3389,1,validate +1889,1,validate +973,2,validate +3925,4,validate +1622,2,validate +3538,3,validate +1143,4,validate +1673,4,validate +62,1,validate +840,3,validate +2964,2,validate +3572,1,validate +1702,3,validate +3701,2,validate +1440,3,validate +3177,2,validate 3826,2,validate -1653,3,validate -3652,2,validate -3693,3,validate -437,4,validate -84,2,validate -2565,4,validate +832,3,validate +2132,1,validate +3347,4,validate +345,1,validate +875,1,validate +262,3,validate +3390,2,validate +3206,1,validate 3257,3,validate -1866,3,validate -3510,3,validate +475,3,validate +3207,2,validate 3856,2,validate +1950,2,validate 862,3,validate +3157,1,validate 996,3,validate -3291,1,validate -3682,2,validate -643,1,validate +1766,1,validate +297,2,validate +3115,4,validate 247,1,validate -2029,2,validate -2678,2,validate -2812,2,validate -1421,2,validate -1159,2,validate +3857,3,validate +3590,4,validate +3724,4,validate +1937,4,validate +763,2,validate 2283,3,validate +1980,2,validate 2417,3,validate -2891,2,validate -1067,4,validate -3928,4,validate +4020,2,validate +1026,3,validate +3541,4,validate +1155,4,validate +2713,1,validate +1060,1,validate 2842,2,validate -2446,2,validate -3279,3,validate -3754,4,validate -1451,2,validate -1189,2,validate -2709,3,validate -2488,4,validate -1493,4,validate +581,3,validate +3146,4,validate +2750,4,validate 1664,2,validate -3046,2,validate 11,2,validate -3225,4,validate -2481,1,validate -3392,1,validate -1486,1,validate 3130,1,validate -2913,3,validate -661,3,validate -3605,1,validate -3522,3,validate -1952,1,validate -132,4,validate -3988,4,validate -216,3,validate -1516,1,validate +1219,2,validate +2560,1,validate +399,3,validate +4080,2,validate +745,2,validate +428,2,validate 3556,1,validate -774,1,validate -908,1,validate -732,4,validate -470,4,validate +345,4,validate +83,4,validate +1686,3,validate +3685,2,validate +3464,3,validate +33,3,validate 2032,2,validate -1770,2,validate -3769,1,validate -549,4,validate -2761,4,validate -3806,4,validate -2415,4,validate -1200,1,validate +3206,4,validate +2944,4,validate +379,2,validate +1291,4,validate +3502,2,validate +3157,4,validate +1766,4,validate +3973,1,validate 1671,1,validate -979,2,validate -3453,2,validate -2711,2,validate -2408,1,validate -2533,1,validate -3312,4,validate -2183,4,validate -747,2,validate -2746,1,validate -2663,3,validate -3787,4,validate -2613,2,validate -3221,1,validate -227,2,validate -3871,3,validate -3475,3,validate -1392,4,validate -311,1,validate -3821,2,validate -135,4,validate -3771,1,validate -3392,4,validate -2693,3,validate +938,1,validate +1891,4,validate +1242,3,validate +3141,1,validate +2366,4,validate +3099,4,validate +2795,1,validate +493,1,validate +1538,1,validate +3616,1,validate +2796,2,validate +1963,1,validate +968,1,validate +1405,2,validate +530,4,validate +2742,3,validate +2521,4,validate +2564,2,validate 3130,4,validate +390,1,validate 1605,4,validate -86,4,validate -3942,4,validate -2947,4,validate -644,2,validate -1952,4,validate -1203,2,validate -3851,1,validate -857,2,validate -158,1,validate -941,1,validate -1416,2,validate -1803,2,validate -3802,1,validate -849,3,validate +3984,1,validate +36,3,validate +1818,4,validate +2381,1,validate +1902,3,validate +511,3,validate +2806,1,validate +1852,2,validate +3110,3,validate +724,3,validate +3972,4,validate +674,2,validate +3843,2,validate +3406,1,validate +808,2,validate 3144,1,validate -3061,3,validate -1932,3,validate -67,4,validate -413,3,validate -3619,1,validate -1537,4,validate +2411,1,validate +546,2,validate +3323,3,validate +1324,4,validate +3669,2,validate +3011,2,validate +1062,3,validate +2228,1,validate 3536,3,validate +3973,4,validate +146,4,validate +2320,4,validate +3923,3,validate +2532,3,validate 1833,2,validate -3353,3,validate -2399,4,validate -2533,4,validate -526,1,validate -393,2,validate -830,3,validate -2779,1,validate -959,4,validate -2696,3,validate -1567,3,validate -3600,1,validate -131,1,validate -2512,2,validate -1043,3,validate -1651,2,validate -260,2,validate -2992,1,validate -1735,1,validate +3873,2,validate +4052,4,validate +705,3,validate +1092,3,validate +1304,2,validate +47,2,validate +3175,1,validate +2562,3,validate +647,3,validate +2384,2,validate +952,1,validate +3770,3,validate 210,1,validate -860,3,validate -3771,4,validate -3071,1,validate -161,1,validate -3671,2,validate -2118,3,validate -2414,2,validate +4066,1,validate +211,2,validate +2547,1,validate +2330,3,validate +3375,3,validate +3072,2,validate 331,3,validate -465,3,validate -2980,4,validate -415,2,validate -3192,3,validate -3326,3,validate -761,1,validate -20,3,validate -2797,4,validate -3580,4,validate -1490,3,validate -2494,2,validate -99,3,validate -1399,1,validate +2627,2,validate +3538,2,validate +1673,3,validate +840,2,validate +678,3,validate +1449,2,validate +1886,3,validate +495,3,validate +3406,4,validate +2232,2,validate +3701,1,validate 3144,4,validate -882,3,validate -1357,4,validate +841,2,validate +3177,1,validate 3094,3,validate -3702,2,validate -1653,2,validate -3652,1,validate -658,2,validate -1570,4,validate +100,4,validate +9,2,validate +2961,4,validate +3390,1,validate 179,4,validate -2178,3,validate -1916,3,validate -525,3,validate 3257,2,validate -2565,3,validate -1866,2,validate -1217,1,validate +2000,2,validate +871,2,validate +475,2,validate +3207,1,validate +1950,1,validate 996,2,validate -2995,1,validate +297,1,validate 3470,2,validate -2079,2,validate -3682,1,validate -2029,1,validate -3337,3,validate -2163,1,validate -1034,1,validate -2812,1,validate -1421,1,validate -1159,1,validate -639,2,validate +476,3,validate +3857,2,validate +3724,3,validate +3853,4,validate +1980,1,validate 2417,2,validate -2891,1,validate -293,2,validate +4020,1,validate +1026,2,validate 31,2,validate -3500,2,validate -2017,4,validate +1155,3,validate +1330,4,validate +4066,4,validate 2842,1,validate -3279,2,validate -3754,3,validate -1451,1,validate -2759,3,validate -1189,1,validate -1805,4,validate -2709,2,validate +2547,4,validate +3888,3,validate +1585,1,validate +3146,3,validate +1240,3,validate +1889,3,validate 1664,1,validate +973,4,validate +1622,4,validate 11,1,validate -3225,3,validate -1360,4,validate -4051,2,validate -103,4,validate -2102,3,validate -3488,4,validate -224,1,validate -661,2,validate -3918,2,validate -3522,2,validate -874,2,validate +1403,2,validate +2830,4,validate +1219,1,validate +2964,4,validate +399,2,validate +3572,3,validate +4080,1,validate +745,1,validate +3219,1,validate +3701,4,validate +1828,1,validate +3868,1,validate +3177,4,validate 3826,4,validate -2132,3,test -2478,2,test -3256,4,test -3685,1,test -4039,4,test -3340,3,test -2166,1,test -775,1,test -2295,2,test +782,4,test +3036,1,test +2519,3,test +825,2,test +1341,4,test +1553,3,test +3989,3,test +84,4,test +733,4,test 2732,3,test -1637,2,test -2641,1,test -380,2,test -1983,1,test -297,4,test -3940,3,test -2895,2,test -3320,2,test -722,3,test -326,3,test -1371,3,test -3666,1,test -2712,2,test -622,1,test +2549,3,test +3849,1,test +3453,1,test +593,2,test +3807,4,test +4019,3,test +939,1,test +543,1,test +2628,3,test +2409,1,test +3624,4,test +3362,4,test 976,4,test -1188,3,test -2014,1,test -2742,2,test -94,2,test -3222,1,test -3005,3,test -2564,1,test -1872,2,test -3867,4,test -136,4,test -3655,4,test -3343,3,test -2214,3,test -2510,2,test +1272,2,test +1485,2,test +3442,4,test +1140,4,test +3950,2,test +1352,3,test +4001,4,test +2431,2,test +1739,3,test +1648,1,test +2997,4,test +694,2,test +2906,2,test +1952,3,test +1649,2,test +2298,2,test +2814,4,test 2081,4,test -1819,4,test -3768,2,test -3685,4,test -3718,1,test -1812,1,test -3635,3,test -2461,1,test +645,2,test +2427,3,test +2857,2,test +1769,3,test +595,1,test +378,3,test +2115,2,test +3852,1,test 641,4,test -3373,3,test -2378,3,test -3585,2,test -2328,2,test -3931,1,test -1849,4,test -1983,4,test -196,4,test -26,1,test -3973,3,test -3670,2,test -676,3,test -2320,3,test -3486,1,test -626,2,test -1967,1,test -2449,4,test -4052,3,test -3749,2,test -796,4,test -493,3,test -705,2,test +1982,3,test +1932,2,test +463,3,test +3324,3,test +1933,3,test +1537,3,test +3453,4,test +1191,3,test +3537,3,test +1234,1,test +1058,4,test +359,3,test 3437,1,test -3833,1,test -2046,1,test -622,4,test +2745,2,test 3395,4,test -1488,2,test -1051,1,test -2829,1,test -1834,1,test -706,3,test -181,1,test -218,4,test -819,1,test -2564,4,test -1772,3,test -3072,1,test +918,2,test +3650,1,test +1093,3,test +2696,2,test +2393,1,test +2479,4,test +2217,4,test +1955,4,test +826,4,test +3221,3,test +1651,1,test +2775,2,test +1518,2,test +523,2,test +2597,1,test +3213,4,test +1335,2,test 3509,2,test -515,3,test +1252,4,test 2077,1,test -2989,3,test -3030,4,test -1985,3,test -3547,1,test -594,3,test -2806,3,test -678,2,test -1549,3,test -2198,3,test -1802,3,test -3718,4,test -2544,2,test -283,3,test -2232,1,test -2411,3,test -2015,3,test -841,1,test -4014,2,test -496,3,test -667,1,test -3881,3,test -2665,4,test -2961,3,test -3569,2,test -971,3,test -3486,4,test -2312,2,test -3653,1,test -871,1,test -2179,3,test -3386,2,test -3916,2,test +1681,1,test +686,1,test +2727,3,test +3934,2,test +1336,3,test +2939,2,test +382,4,test +2069,2,test +3455,3,test +3193,3,test +595,4,test +2840,1,test +3322,4,test +1669,4,test +192,1,test +362,3,test +3053,1,test +2495,2,test +1104,2,test +446,2,test +1054,1,test +575,3,test +4049,1,test +2524,1,test +1437,4,test +2482,4,test +1783,3,test 2828,3,test 3437,4,test -2046,4,test -476,2,test -913,3,test -3824,4,test -1521,2,test -2829,4,test +3952,4,test +3649,3,test 1996,3,test 2130,3,test -2645,3,test -2342,2,test -3903,4,test +2779,3,test +2991,2,test 1297,1,test -2646,4,test -859,4,test -2596,3,test -1422,1,test -2334,3,test -1551,2,test -1289,2,test -294,2,test -1418,3,test -3417,2,test -202,4,test -3367,1,test -3105,1,test -1240,2,test -245,2,test -1023,4,test -1107,3,test +639,1,test +943,3,test +3720,4,test +2463,4,test +2597,4,test +3071,3,test +1206,4,test +1552,3,test +423,3,test +3155,2,test +3671,4,test +2414,4,test +3022,3,test +1848,1,test +3459,4,test +3368,2,test +1977,2,test 324,2,test -3056,1,test -711,2,test -1186,3,test +3014,4,test +408,1,test 3622,3,test -4047,3,test -2232,4,test -841,4,test -183,4,test -1786,3,test -2132,2,test -2874,1,test -3256,3,test -2478,1,test -262,4,test -2395,3,test -1221,1,test -4039,3,test -1696,2,test -3340,2,test -255,1,test -2295,1,test -871,4,test -475,4,test -1604,4,test -213,4,test -2820,2,test -297,3,test +2527,2,test +366,4,test +537,2,test +3093,4,test +1482,1,test +3918,1,test +1745,2,test +1612,3,test +825,1,test +84,3,test +2649,4,test +347,4,test +3815,2,test +559,3,test +2995,3,test 905,2,test -1209,4,test -813,4,test -510,3,test -722,2,test -3936,4,test -164,3,test -1288,4,test -1422,4,test -589,3,test -1768,3,test -2496,4,test -2539,2,test -4009,2,test -3492,4,test -3005,2,test -186,4,test -3655,3,test -1353,3,test -3564,1,test +1817,4,test +3766,2,test +593,1,test +3674,4,test +639,4,test +3929,1,test +1797,2,test +3401,2,test +3442,3,test +1140,3,test +3139,2,test +3747,1,test +1352,2,test +3268,3,test +4001,3,test +2052,4,test +1656,4,test 96,3,test -3302,1,test -308,2,test -1869,4,test +2906,1,test +1482,4,test +1649,1,test 1566,3,test +392,1,test 2081,3,test -612,4,test -521,2,test -3253,1,test -1862,1,test +216,4,test +3777,1,test +2427,2,test +125,2,test +2857,1,test +3036,3,test 1170,2,test -3685,3,test -4031,2,test -3635,2,test -2166,3,test +1600,1,test +825,4,test 641,3,test -775,3,test -2378,2,test -2295,4,test -2328,1,test -1637,4,test -380,4,test -1983,3,test -3670,1,test -676,2,test -2895,4,test -27,1,test -3320,4,test -3749,1,test -889,2,test -493,2,test -3666,3,test -1497,1,test -2712,4,test +1383,2,test +463,2,test +1467,1,test +3324,2,test +1933,2,test +3849,3,test +3453,3,test +2499,4,test +593,4,test +3537,2,test +939,3,test +543,3,test +1151,2,test +1759,1,test +2409,3,test 4012,2,test -622,3,test -4096,1,test -706,2,test -444,1,test -1527,1,test -2742,4,test -94,4,test -3222,3,test -2564,3,test -1872,4,test -786,2,test -2989,2,test -2510,4,test -603,2,test -687,1,test -2806,2,test -3810,1,test -1549,2,test -3548,1,test -3768,4,test -3718,3,test -2544,1,test -2461,3,test -4064,2,test -3585,4,test -2411,2,test -4014,1,test -1846,1,test -2328,4,test -3931,3,test -3881,2,test -3316,1,test -3670,4,test -971,2,test -3486,3,test -2312,1,test -626,4,test -1967,3,test -3749,4,test -2179,2,test -3916,1,test -485,1,test -705,4,test +918,1,test +1272,4,test +3221,2,test +573,2,test +1485,4,test +523,1,test +481,4,test +2043,2,test +3172,2,test +3950,4,test +2431,4,test +2127,1,test +1648,3,test +1252,3,test +694,4,test +3123,2,test +2727,2,test +2906,4,test +1336,2,test +2298,4,test +645,4,test +1811,2,test +2857,4,test +595,3,test +2115,4,test +3852,3,test +3365,1,test +1932,4,test +3232,2,test +2495,1,test +1500,1,test +1104,1,test +3578,1,test +1233,2,test +2970,1,test +1105,2,test +1317,1,test +1234,3,test +3966,2,test +2138,1,test +3183,1,test +922,2,test 3437,3,test -3833,3,test -2046,3,test -1051,3,test -1488,4,test -2829,3,test -1834,3,test +2745,4,test +1354,4,test +3649,2,test +1397,2,test 2130,2,test -2342,1,test -181,3,test -2646,3,test -2689,1,test -1298,1,test -819,3,test -690,1,test -294,1,test -1905,4,test -3417,1,test -3072,3,test +3000,1,test +918,4,test +3650,3,test +2476,1,test +1347,1,test +2696,4,test +2393,3,test +1651,3,test +1086,2,test +2775,4,test +1518,4,test +2597,3,test +3071,2,test +1206,3,test +3983,4,test +1511,1,test +1552,2,test +423,2,test +3155,1,test +1335,4,test +2160,1,test 3509,4,test -245,1,test +1681,3,test +3680,2,test +686,3,test +3022,2,test +3459,3,test +3934,4,test +2939,4,test +3764,1,test +3368,1,test 374,2,test -3547,3,test +1977,1,test 2111,1,test -1935,4,test 324,1,test -678,4,test -2544,4,test -3448,2,test -3186,2,test -2232,3,test -841,3,test -4014,4,test -2924,1,test +2069,4,test +3235,2,test +2840,3,test +537,1,test +671,1,test +192,3,test +1795,2,test +1929,2,test +1745,1,test +3053,3,test +1104,4,test +446,4,test +2008,2,test +1612,2,test +1054,3,test 3349,1,test -3569,4,test -2395,2,test -1696,1,test -2312,4,test -3653,3,test -93,1,test -871,3,test -3999,2,test -3386,4,test -2820,1,test -476,4,test -172,1,test +2354,1,test +1958,1,test +2524,3,test +347,3,test +1217,2,test +2995,2,test 905,1,test -4078,2,test -306,1,test -1521,4,test -2342,4,test -1168,2,test -510,2,test +1817,3,test +2559,2,test +3766,1,test +3167,1,test +2991,4,test 1297,3,test -164,2,test -1422,3,test -3937,4,test -1331,1,test -1768,2,test -1551,4,test -1289,4,test -3980,2,test -294,4,test -3417,4,test -2539,1,test -3367,3,test -3105,3,test -1240,4,test -4009,1,test -245,4,test -1411,2,test -498,4,test +639,3,test +1076,4,test +2808,4,test +1069,1,test +3634,2,test +2935,1,test +3155,4,test +3584,1,test +1848,3,test +3401,1,test +3139,1,test 324,4,test -3056,3,test -711,4,test -3748,1,test -1353,2,test +887,1,test +3268,2,test +408,3,test +2011,2,test +2527,4,test 96,2,test -308,1,test +570,1,test +1482,3,test +3918,3,test +528,4,test +1962,2,test 1566,2,test -612,3,test -2132,4,test -521,1,test -2478,3,test -1221,3,test -3516,1,test -3340,4,test -2166,2,test -255,3,test -2295,3,test +1745,4,test +3389,4,test +3036,2,test +3170,2,test +825,3,test +2387,1,test +2824,2,test +1383,1,test 2732,4,test -2641,2,test -947,1,test +3815,4,test +3462,2,test 905,4,test -2895,3,test -722,4,test -889,1,test -1371,4,test -3666,2,test +3849,2,test +593,3,test +3766,4,test +939,2,test +1151,1,test +2409,2,test 4012,1,test -2014,2,test -2573,2,test -3618,2,test -94,3,test -3222,2,test -3005,4,test -786,1,test -3435,2,test -3564,3,test -2390,1,test -3302,3,test -3343,4,test -2214,4,test -308,4,test -603,1,test -3253,3,test -3768,3,test -1862,3,test +3929,3,test +1797,4,test +573,1,test +1485,3,test +3401,4,test +3139,4,test +1528,1,test +2043,1,test +1352,4,test +2652,2,test +1648,2,test +3123,1,test +2865,2,test +2906,3,test +999,1,test +1649,3,test +2257,2,test +2298,3,test +392,3,test +3598,1,test +2207,1,test +2427,4,test +125,4,test +2857,3,test 1170,4,test -1812,2,test -4031,4,test -3635,4,test -2461,2,test -3549,1,test -3373,4,test -2378,4,test -3416,2,test -2328,3,test -3628,1,test -26,2,test -3670,3,test +1600,3,test +3852,2,test +817,2,test +1982,4,test +1383,4,test +463,4,test +3232,1,test +634,2,test +3324,4,test +1933,4,test 1763,1,test -676,4,test -626,3,test -3749,3,test -889,4,test -493,4,test -3833,2,test +1105,1,test +3537,4,test +1234,2,test +3966,1,test +239,2,test +1151,4,test 4012,4,test -1709,2,test -1051,2,test +2838,2,test 56,2,test -4096,3,test -1834,2,test -706,4,test -1398,2,test -444,3,test -819,2,test -3031,1,test +1397,1,test +918,3,test +3650,2,test +4046,2,test +1093,4,test +2393,2,test +3001,1,test +7,2,test +3221,4,test +1086,1,test +573,4,test +1518,3,test +523,3,test +3172,4,test +2043,4,test +2127,3,test 2077,2,test -2989,4,test +3680,1,test +2211,2,test +686,2,test +3123,4,test 1512,1,test -603,4,test -3547,2,test -687,3,test -3893,1,test -2806,4,test -771,2,test -3548,3,test -1549,4,test -2198,4,test -2544,3,test +2727,4,test +1336,4,test +2939,3,test +1811,4,test +721,1,test 3844,1,test -3448,1,test -4064,4,test -3186,1,test -2191,1,test -2411,4,test -4014,3,test -1846,3,test -496,4,test -4057,1,test -667,2,test -3881,4,test +192,2,test +3365,3,test +1196,1,test +1929,1,test +3053,2,test +3232,4,test +2495,3,test +1500,3,test +1104,3,test 2666,1,test -2841,2,test -3316,3,test -971,4,test -2312,3,test -3054,2,test -3999,1,test -2179,4,test -3916,3,test -485,3,test -831,2,test -2871,2,test +3578,3,test +2008,1,test +1054,2,test +1233,4,test +2970,3,test +1105,4,test +1317,3,test +4049,2,test +2221,1,test +3966,4,test +964,1,test +922,4,test +3649,4,test 1996,4,test 2130,4,test -2342,3,test -1168,1,test +3000,3,test +1826,1,test +2559,1,test +2779,4,test +2476,3,test +1347,3,test +1693,2,test 1297,2,test -40,2,test -2689,3,test -1298,3,test -124,1,test -3247,1,test -3980,1,test -690,3,test -294,3,test -1418,4,test -3417,3,test -245,3,test -1411,1,test +1431,2,test +3684,2,test +3071,4,test +1594,1,test +3634,1,test +1332,1,test +1552,4,test +423,4,test +3155,3,test +2160,3,test +3680,4,test +3022,4,test +1848,2,test 3847,1,test -1107,4,test +416,1,test +3368,3,test 374,4,test +1977,3,test 2111,3,test 324,3,test -2323,2,test -3015,1,test -3056,2,test +3235,4,test +408,2,test 3622,4,test -2882,2,test +2011,1,test 3927,2,test -3448,4,test -3186,4,test -3615,1,test -2924,3,test -3828,1,test -834,2,test -2874,2,test +537,3,test +671,3,test +1795,4,test +1962,1,test +967,1,test +1745,3,test +2008,4,test +1612,4,test +3170,1,test 3349,3,test -2175,1,test -2395,4,test -1221,2,test -1696,3,test -3087,2,test -255,2,test -785,2,test -93,3,test -3999,4,test -2820,3,test -3858,1,test -172,3,test +1180,1,test +1958,3,test +2824,1,test +651,2,test +3815,3,test +1217,4,test +559,4,test +2995,4,test +3462,1,test 905,3,test -4078,4,test -1168,4,test -510,4,test -164,4,test +2559,4,test +3725,2,test +3766,3,test +1993,1,test 2855,2,test -1027,1,test -3201,1,test -589,4,test -1331,3,test -1768,4,test -3980,4,test -2539,3,test -3097,1,test -4009,3,test -237,2,test -2573,1,test -3618,1,test -187,1,test -2490,2,test -3435,1,test -1353,4,test -2915,2,test -3960,2,test -3564,2,test +2072,1,test +207,2,test +1810,1,test +3929,2,test +1069,3,test +3584,3,test +1797,3,test +3401,3,test +3139,3,test +3048,1,test +2652,1,test +3268,4,test +1657,1,test +2011,4,test 96,4,test -3302,2,test -308,3,test +570,3,test +2865,1,test +3261,1,test +3910,1,test +2257,1,test 1566,4,test -521,3,test -3253,2,test -1862,2,test +392,2,test +3777,2,test +125,3,test +3036,4,test 1170,3,test -3516,3,test -1213,1,test -4031,3,test -2166,4,test -775,4,test +3170,4,test +867,2,test +3599,1,test +1600,2,test +2824,4,test +817,1,test +1383,3,test 1080,2,test -3812,1,test -3416,1,test -2641,4,test -2026,2,test -27,2,test -3150,2,test -889,3,test -3666,4,test -1497,2,test +2683,1,test +1467,2,test +634,1,test +3462,4,test +3849,4,test +939,4,test +543,4,test +239,1,test +1151,3,test +1759,2,test +2409,4,test 4012,3,test -1709,1,test +2838,1,test 56,1,test -4096,2,test -1011,1,test -1398,1,test -2014,4,test -444,2,test -1527,2,test -2573,4,test -1873,1,test -3222,4,test -786,3,test -3477,1,test -3215,1,test -3435,4,test -2390,3,test +586,1,test +2268,1,test +4046,1,test +1794,1,test +7,1,test +573,3,test +354,1,test +3172,3,test +2043,3,test +2652,4,test +3081,1,test +2127,2,test +1648,4,test +2211,1,test +3123,3,test 1216,1,test -603,3,test -687,2,test -3810,2,test -771,1,test -3548,2,test -2291,2,test -1812,4,test -201,1,test -3549,3,test -2461,4,test -4064,3,test -1721,2,test -3416,4,test -1846,2,test -2716,1,test -3931,4,test -3628,3,test -2841,1,test -3316,2,test -26,4,test +999,3,test +2474,2,test +2257,4,test +3598,3,test +2207,3,test +1811,3,test +3852,4,test +3365,2,test +1113,2,test +851,2,test +3232,3,test +634,4,test +1500,2,test +3578,2,test +1233,3,test 1763,3,test -2667,1,test -3054,1,test -1967,4,test -406,1,test -485,2,test -3833,4,test -2222,1,test -1709,4,test -831,1,test -2871,1,test -273,2,test -1051,4,test +2970,2,test +1105,3,test +1276,1,test +1317,2,test +1234,4,test +3966,3,test +2138,2,test +3183,2,test +922,3,test +2838,4,test +3267,1,test 56,4,test -2351,2,test -1834,4,test -181,4,test -3346,1,test -1398,4,test -40,1,test -911,2,test -3347,2,test -2689,2,test +1397,3,test +4088,1,test +3000,2,test +4046,4,test +3650,4,test +2476,2,test +1347,2,test +1044,1,test +2393,4,test +1693,1,test +3001,3,test +1431,1,test +7,4,test +436,1,test +1651,4,test +1086,3,test 1956,2,test 565,2,test -1298,2,test -41,2,test -819,4,test -690,2,test -3031,3,test -3072,4,test +3684,1,test +1511,2,test +516,2,test +2160,2,test 2077,4,test +1681,4,test +3680,3,test +686,4,test +3764,2,test 374,3,test -3547,4,test 2111,2,test -3893,3,test -2323,1,test -2932,2,test -2882,1,test +3235,3,test +3540,1,test +721,3,test 3927,1,test +2840,4,test +1067,2,test +671,2,test 3844,3,test -3448,3,test -3186,3,test -2191,3,test -3878,1,test -2924,2,test -667,4,test -2841,4,test -1230,1,test -834,1,test +192,4,test +1795,3,test +1929,3,test +2537,2,test +3053,4,test +884,2,test +2883,1,test +2008,3,test +1054,4,test 3349,2,test -3653,4,test -2438,1,test -3087,1,test -785,1,test -93,2,test -3999,3,test -1522,1,test -2871,4,test -172,2,test -4078,3,test -306,2,test -1168,3,test +2354,2,test +1958,2,test +4049,4,test +2524,4,test +2221,3,test +651,1,test +1217,3,test +1260,1,test +1826,3,test +2559,3,test +3725,1,test +3167,2,test +1693,4,test +82,1,test 1297,4,test 2855,1,test -1860,1,test -40,4,test -2335,2,test -944,2,test -124,3,test -1727,2,test -1331,2,test +1431,4,test +3938,1,test +207,1,test +3118,2,test +1290,1,test 3330,1,test -3247,3,test -2073,1,test -3980,3,test -682,1,test -3197,2,test -3367,4,test -3105,4,test -1411,3,test +1069,2,test +470,2,test +3684,4,test +1594,3,test +420,1,test +3634,3,test +1332,3,test +2935,2,test +3543,1,test +3584,2,test +1848,4,test 3847,3,test -237,1,test -3015,3,test -2323,4,test -3056,4,test -2490,1,test -188,1,test -2882,4,test -3748,2,test -2915,1,test -3960,1,test -401,1,test -3615,3,test -1312,1,test -1446,1,test -2782,1,test -3828,3,test -834,4,test -2874,4,test -2478,4,test -2175,3,test -1221,4,test -3516,2,test -3087,4,test -255,4,test +416,3,test +887,2,test +408,4,test +2011,3,test +1920,1,test +3918,4,test +1962,3,test +55,1,test +967,3,test +2916,1,test +2654,1,test +3170,3,test +867,1,test +2387,2,test +2824,3,test +651,4,test 1080,1,test -2641,3,test -947,2,test -1081,2,test -3858,3,test -2026,1,test -3150,1,test +3462,3,test 2855,4,test -1027,3,test -3201,3,test -3497,1,test -503,2,test -715,1,test -3364,2,test -2014,3,test -3576,1,test -1711,2,test -3097,3,test -2573,3,test -666,1,test -3618,3,test -187,3,test -3789,1,test -1874,1,test -617,1,test -3435,3,test -2003,2,test -1266,1,test -2915,4,test -3344,1,test -3960,4,test -3082,1,test -3564,4,test -1953,1,test -2390,2,test -3302,4,test -1133,2,test -3253,4,test -2949,1,test -1862,4,test -2291,1,test -1812,3,test -3549,2,test -1721,1,test -3895,1,test -3812,3,test -3416,3,test -1247,1,test -3628,2,test -1376,2,test -26,3,test -2717,1,test -2026,4,test +115,1,test +3971,1,test +1810,3,test +3929,4,test +3314,1,test +1528,2,test +3747,4,test +3048,3,test +2652,3,test +1657,3,test +3394,2,test +2865,3,test +999,2,test +696,1,test +3910,3,test +2736,1,test +1649,4,test +2474,1,test +2257,3,test +392,4,test +1954,2,test +3598,2,test +3295,1,test +3777,4,test +2207,2,test +301,2,test +867,4,test +3599,3,test +1600,4,test +817,3,test +2683,3,test +1113,1,test +851,1,test +1467,4,test +634,3,test +2633,2,test 1763,2,test -27,4,test -3150,4,test -1497,4,test -1709,3,test -273,1,test +69,1,test +239,3,test +1976,2,test +1759,4,test +4054,2,test +2838,3,test 56,3,test -2351,1,test -4096,4,test -2189,2,test -2485,1,test -4005,2,test -1011,3,test -1398,3,test -444,4,test -911,1,test -3347,1,test -1527,4,test +2268,3,test +4046,3,test +1794,3,test +2960,1,test +3001,2,test +7,3,test 1956,1,test 565,1,test -1873,3,test -1174,2,test -41,1,test -1957,2,test -566,2,test -2169,1,test -3031,2,test +523,4,test +2303,1,test +3081,3,test +2127,4,test +516,1,test +2036,2,test 2077,3,test +2211,3,test 1512,2,test 1216,3,test -687,4,test -3893,2,test -3810,4,test -2932,1,test -771,3,test -3548,4,test -2291,4,test -2720,1,test -3195,2,test -201,3,test +721,2,test +1804,2,test +1067,1,test 3844,2,test -72,1,test -2191,2,test -1846,4,test -2716,3,test -4057,2,test -667,3,test +3365,4,test +1196,2,test +2537,1,test +851,4,test +2495,4,test +884,1,test +1500,4,test 2666,2,test -2841,3,test -3316,4,test -1409,2,test -1755,1,test -2667,3,test -3054,3,test -406,3,test -3916,4,test -485,4,test -2222,3,test -831,3,test -2871,3,test -273,4,test -2351,4,test -3346,3,test +3578,4,test +2101,1,test +2970,4,test +1276,3,test +1317,4,test +4049,3,test +2221,2,test +2138,4,test +964,2,test +3183,4,test +1310,1,test +3267,3,test +3909,1,test +2914,1,test +3000,4,test +1826,2,test +1960,2,test +3563,1,test +2476,4,test +1261,1,test +1347,4,test +1044,3,test 2647,2,test -1390,2,test -40,3,test -2335,1,test -911,4,test -944,1,test -2689,4,test +1693,3,test +1431,3,test +436,3,test +2731,1,test +782,2,test +1078,1,test +3118,1,test 565,4,test -124,2,test -1298,4,test -1727,1,test -41,4,test -3247,2,test -690,4,test -3197,1,test -3460,2,test +470,1,test +3684,3,test +1553,1,test +1594,2,test +1332,2,test +1511,4,test +2160,4,test +683,1,test 3847,2,test -2153,1,test +416,2,test +2415,1,test +3764,4,test +3368,4,test +1977,4,test 2111,4,test -3015,2,test -2323,3,test -2932,4,test -2882,3,test +2628,1,test 3927,3,test -451,1,test -3615,2,test -318,2,test -3878,3,test -2924,4,test -3828,2,test -1230,3,test -834,3,test -2874,3,test -2134,1,test -2175,2,test +537,4,test +671,4,test +3362,2,test +2537,4,test +967,2,test +884,4,test 3349,4,test -1696,4,test -1526,1,test -2438,3,test -3087,3,test -785,3,test -93,4,test -2996,1,test -2820,4,test -1343,1,test -1081,1,test -3858,2,test -172,4,test -306,4,test -4071,2,test +1442,2,test +2354,4,test +1180,2,test +1958,4,test +135,1,test +651,3,test +1739,1,test +1260,3,test +2863,2,test +2601,2,test +3725,3,test +3167,4,test +1993,2,test +2814,2,test 2855,3,test -2552,2,test -1860,3,test -1027,2,test -2335,4,test -3201,2,test -944,4,test -1727,4,test -1331,4,test +3938,3,test +2072,2,test +207,3,test +1810,2,test +3118,4,test +378,1,test +1290,3,test 3330,3,test -2073,3,test -503,1,test -682,3,test -3197,4,test -2539,4,test -3364,1,test -1711,1,test -3097,2,test -4009,4,test -237,3,test -3839,1,test -187,2,test -2320,1,test -2490,3,test -4052,1,test -188,3,test -796,2,test -2003,1,test -3748,4,test -2915,3,test -3960,3,test +1069,4,test +3414,2,test +420,3,test +2935,4,test +3543,3,test +3584,4,test +1537,1,test +1191,1,test +3747,3,test +3048,2,test +887,4,test +1657,2,test +3656,1,test +3394,1,test +3528,1,test +1920,3,test +3261,2,test 3395,2,test -1133,1,test -401,3,test -1312,3,test +3910,2,test 1742,2,test +55,3,test +1954,1,test +3777,3,test 697,1,test -2782,3,test -521,4,test -3516,4,test -1213,2,test -218,2,test -2950,1,test +301,1,test +2916,3,test +2654,3,test +1955,2,test +826,2,test +867,3,test +3599,2,test +2387,4,test +3637,1,test 1080,3,test -3812,2,test +2683,2,test 1984,1,test -1164,2,test -947,4,test -1772,1,test -1376,1,test -2026,3,test -27,3,test -1327,1,test -3150,3,test -1497,3,test -1802,1,test -2189,1,test -3497,3,test -4005,1,test -715,3,test -1011,2,test -3793,1,test -3576,3,test -1711,4,test -1527,3,test -666,3,test -2961,1,test -2269,2,test -1873,2,test -1174,1,test -1957,1,test -566,1,test -1874,3,test -786,4,test -3477,2,test -3215,2,test -2003,4,test -1266,3,test -3344,3,test -3082,3,test -1953,3,test +1467,3,test +2633,1,test +2197,1,test +3242,1,test +2980,1,test +1976,1,test +1759,3,test +4054,1,test +2585,2,test +1456,2,test +3193,1,test +3971,3,test +586,2,test +2268,2,test +1794,2,test +362,1,test +3314,3,test +3610,1,test +1528,4,test +354,2,test +3739,2,test +1437,2,test +3081,2,test +2036,1,test 1216,2,test -2390,4,test -913,1,test -1133,4,test -2645,1,test -992,1,test -3810,3,test -2949,3,test -2291,3,test -859,2,test -3195,1,test -201,2,test -3549,4,test -2334,1,test -1721,3,test -3895,3,test +3952,2,test +3690,2,test +999,4,test +696,3,test +2736,3,test +2474,3,test +3598,4,test +3295,3,test +2207,4,test +301,4,test +122,1,test +1804,1,test +1938,1,test +943,1,test +3720,2,test 2067,2,test -2716,2,test -1247,3,test -3628,4,test -202,2,test -1409,1,test -2717,3,test -1543,1,test +1113,3,test +851,3,test +2633,4,test 1763,4,test -2667,2,test -406,2,test -2880,2,test -2222,2,test -273,3,test -2351,3,test -2485,3,test -4005,4,test -3346,2,test +1276,2,test +1410,2,test +19,2,test +2751,1,test +2138,3,test +1976,4,test +3183,3,test +4054,4,test +103,1,test +3267,2,test +1397,4,test +4088,2,test +3093,2,test +1960,1,test +1044,2,test 2647,1,test -1786,1,test -1390,1,test -911,3,test -3347,3,test +3001,4,test +436,2,test +1086,4,test 1956,3,test +782,1,test 565,3,test -3256,1,test -262,2,test -41,3,test -4039,1,test -1957,4,test -566,4,test -2169,3,test -3031,4,test -3460,1,test +1341,1,test +84,1,test +733,1,test +1511,3,test +516,3,test +2036,4,test 1512,4,test -3893,4,test -813,2,test -2932,3,test -3936,2,test -2720,3,test -3195,4,test +3764,3,test +3807,1,test +3540,2,test +3674,2,test +721,4,test +3624,1,test +1804,4,test +1067,3,test +3066,2,test +3362,1,test 3844,4,test -72,3,test 976,1,test -2191,4,test -318,1,test -3878,2,test -4057,4,test +1196,4,test +3491,2,test +1929,4,test +2537,3,test +884,3,test +2883,2,test 2666,4,test -1230,2,test -1409,4,test -2313,2,test +1442,1,test +2354,3,test 1705,2,test -2438,2,test -186,2,test -3867,1,test -136,1,test -1522,2,test -306,3,test -3,2,test -4071,1,test +2221,4,test +3442,1,test +964,4,test +1310,3,test +1656,2,test +1260,2,test +2863,1,test +2997,1,test +2601,1,test +3909,3,test +1826,4,test +1960,4,test +3563,3,test +3167,3,test +1261,3,test 2647,4,test +82,2,test +2814,1,test 2081,1,test -2552,1,test -1819,1,test -1860,2,test -2335,3,test -944,3,test -124,4,test -1727,3,test +216,2,test +2731,3,test +3938,2,test +1078,3,test +3118,3,test +1290,2,test 3330,2,test -3247,4,test -2073,2,test +470,3,test 641,1,test -682,2,test -3197,3,test -3677,2,test -3460,4,test -1849,1,test -196,1,test +3414,1,test +1594,4,test +420,2,test +3634,4,test +1332,4,test +2935,3,test +3543,2,test +683,3,test 3847,4,test -1411,4,test -2153,3,test -3015,4,test -2449,1,test -188,2,test -796,1,test -3748,3,test -451,3,test +416,4,test +2415,3,test +3756,2,test +2499,2,test +887,3,test +1058,1,test +1920,2,test 3395,1,test -401,2,test -3615,4,test -1312,2,test -1446,2,test 1742,1,test -318,4,test -2782,2,test -3828,4,test -1659,2,test -2134,3,test -2175,4,test -268,2,test -218,1,test -1526,3,test -2996,3,test -1164,1,test -1343,3,test -947,3,test -1081,3,test -3858,4,test -3030,1,test -4071,4,test -2552,4,test -1027,4,test -3201,4,test -3497,2,test -503,3,test -715,2,test -3364,3,test -3576,2,test -1711,3,test -3097,4,test -666,2,test -2665,1,test -2269,1,test -3839,3,test -3618,4,test -187,4,test -3789,2,test -1874,2,test -617,2,test -2003,3,test -1266,2,test -3344,2,test -3082,2,test -1953,2,test -1133,3,test -3824,1,test +1962,4,test +55,2,test +967,4,test +2479,1,test +2916,2,test +2217,1,test +2654,2,test +1955,1,test +826,1,test +1442,4,test +1180,4,test +2387,3,test +135,3,test +481,2,test +3213,1,test +2863,4,test +1252,1,test +2601,4,test +1993,4,test +382,1,test +115,2,test +2585,1,test +1456,1,test +2072,4,test +3971,2,test +1810,4,test +3322,1,test +66,2,test +1669,1,test +3414,4,test +3314,2,test +1528,3,test +3739,1,test +3048,4,test +1437,1,test +1657,4,test +3656,3,test +2482,1,test +3394,3,test +3528,3,test +3952,1,test +3261,4,test +1354,2,test +2865,4,test +3690,1,test +696,2,test +3910,4,test +2736,2,test 1742,4,test +1954,3,test +3295,2,test 697,3,test -2300,2,test -3903,1,test -2949,2,test -2646,1,test -859,1,test -1213,4,test -2950,3,test -3895,2,test +301,3,test +3599,4,test +1692,2,test +817,4,test +3720,1,test +860,2,test +3637,3,test +2463,1,test 2067,1,test -3812,4,test -1905,2,test +2683,4,test 1984,3,test -1247,2,test -1164,4,test -2330,2,test -1376,3,test -202,1,test -2717,2,test -1023,1,test -1327,3,test -1935,2,test -1673,2,test -544,2,test -2880,1,test -2485,2,test -2189,3,test -4005,3,test -1011,4,test -183,1,test -3793,3,test -2269,4,test -1873,4,test -262,1,test -1174,3,test -1520,2,test -1957,3,test -566,3,test -2169,2,test -3477,4,test -3215,4,test -1604,1,test -475,1,test -213,1,test +1206,1,test +3983,2,test +2633,3,test +3671,1,test +3113,2,test +2414,1,test +2197,3,test +3459,1,test +69,2,test +3242,3,test +2980,3,test +1410,1,test +19,1,test +3192,2,test +239,4,test +1976,3,test +4054,3,test +2585,4,test +1456,4,test +3014,1,test +366,1,test +3143,2,test +586,4,test +2268,4,test +3093,1,test +1794,4,test +2960,2,test +3610,3,test +2911,2,test +354,4,test +3739,4,test +2303,2,test +3081,4,test +2649,1,test +347,1,test +2036,3,test +2211,4,test 1216,4,test 1512,3,test -1209,1,test -813,1,test -992,3,test -771,4,test -3936,1,test -2720,2,test -3195,3,test -1288,1,test -201,4,test -3937,2,test -72,2,test +3690,4,test +1817,1,test +3674,1,test +1076,2,test +122,3,test +1804,3,test +3066,1,test +1938,3,test +2808,2,test +1196,3,test +3491,1,test 2067,4,test -2496,1,test -2716,4,test -4057,3,test 2666,3,test -1409,3,test -1543,3,test -2313,1,test -1755,2,test -2667,4,test -3492,1,test -498,2,test +2101,2,test +1276,4,test 1705,1,test -3054,4,test -186,1,test -406,4,test -2880,4,test -2222,4,test -831,4,test -3,1,test -3176,2,test -3346,4,test -1869,1,test +1410,4,test +19,4,test +2314,2,test +2751,3,test +964,3,test +103,3,test +1310,2,test +2052,1,test +1656,1,test +3267,4,test +3909,2,test +4088,4,test +2914,2,test +1960,3,test +3563,2,test +528,2,test +1261,2,test +1044,4,test 2647,3,test -1390,3,test -612,1,test +216,1,test +3389,2,test +436,4,test +2731,2,test +782,3,test +1078,2,test +2519,2,test +1341,3,test +1553,2,test +3989,2,test +733,3,test 2732,2,test -1637,1,test -3677,1,test -3460,3,test -380,1,test -3940,2,test -2153,2,test -2895,1,test -3320,1,test -326,2,test -1371,2,test -2712,1,test +683,2,test +2415,2,test +2549,2,test +3756,1,test +2499,1,test +3807,3,test +4019,2,test +2628,2,test +3540,4,test 3927,4,test -451,2,test +3624,3,test +3066,4,test +3362,3,test 976,3,test -318,3,test -1188,2,test -3878,4,test -1230,4,test -1659,1,test -2134,2,test -268,1,test -2313,4,test -2742,1,test -1526,2,test +3491,4,test +2883,4,test +1272,1,test +1442,3,test +1180,3,test +1485,1,test 1705,4,test -94,1,test -2438,4,test -1872,1,test -785,4,test -2996,2,test -3867,3,test -136,3,test -1343,2,test -1522,4,test -3,4,test -3343,2,test -2214,2,test -2510,1,test -4071,3,test -2552,3,test -1819,3,test -1860,4,test -3768,1,test +135,2,test +481,1,test +3950,1,test +2431,1,test +1739,2,test +1260,4,test +2863,3,test +2997,3,test +2601,3,test +694,1,test +3725,4,test +1993,3,test +2298,1,test +82,4,test +2814,3,test +645,1,test +3938,4,test +2072,3,test +207,4,test +1769,2,test +378,2,test +1290,4,test 3330,4,test -2073,4,test -682,4,test -3373,2,test -3585,1,test -3677,4,test -1849,3,test -196,3,test -237,4,test -3839,2,test -3973,2,test -2320,2,test -626,1,test -2449,3,test -2490,4,test -4052,2,test -188,4,test -796,3,test -705,1,test +2115,1,test +66,1,test +3414,3,test +420,4,test +1982,2,test +3543,4,test +1932,1,test +1537,2,test +3756,4,test +1191,2,test +3656,2,test +1058,3,test +359,2,test +3528,2,test +1920,4,test +2745,1,test +3261,3,test +1354,1,test 3395,3,test -1488,1,test -401,4,test -1312,4,test -1446,4,test 1742,3,test +55,4,test +1093,2,test 697,2,test -2300,1,test -2782,4,test -1659,4,test -268,4,test -1213,3,test -218,3,test -2950,2,test +2696,1,test +2479,3,test +2916,4,test +2654,4,test +1955,3,test +826,3,test +1692,1,test +2775,1,test +1518,1,test +860,1,test +3637,2,test 1080,4,test -1905,1,test +3213,3,test 1984,2,test -1164,3,test -2330,1,test -1772,2,test +3983,1,test +1335,1,test 3509,1,test -515,2,test -3030,3,test -1985,2,test -1327,2,test -594,2,test -1935,1,test -1673,1,test -544,1,test -678,1,test -2198,2,test -1802,2,test -283,2,test -3497,4,test -715,4,test -2015,2,test -3793,2,test -3576,4,test -496,2,test -666,4,test -2665,3,test -2269,3,test -2961,2,test -3789,4,test -1520,1,test -1874,4,test -3477,3,test -3215,3,test -617,4,test -3386,1,test -1266,4,test +3113,1,test +2197,2,test +3934,1,test +3242,2,test +2939,1,test +2980,2,test +382,3,test +3192,1,test +115,4,test +2069,1,test +2585,3,test +1456,3,test +3455,2,test +3193,2,test +3971,4,test +3143,1,test +586,3,test +3322,3,test +66,4,test +1669,3,test +362,2,test +3314,4,test +446,1,test +3610,2,test +575,2,test +2911,1,test +354,3,test +3739,3,test +1437,3,test +2482,3,test +1783,2,test 2828,2,test -3344,4,test -3082,4,test -1953,4,test -476,1,test -913,2,test -3824,3,test -1521,1,test +3952,3,test +3690,3,test +696,4,test +2736,4,test 1996,2,test -2645,2,test -992,2,test -2300,4,test -3903,3,test -2949,4,test -859,3,test -2596,2,test -2334,2,test -3937,1,test -1721,4,test -3895,4,test -1551,1,test +2474,4,test +2779,2,test +3295,4,test +2991,1,test +1076,1,test +1692,4,test +122,2,test +1938,2,test +2808,1,test +943,2,test +3720,3,test +860,4,test +2463,3,test 2067,3,test -1289,1,test -1247,4,test -1418,2,test -2330,4,test -202,3,test -2717,4,test -1543,2,test -1240,1,test -1023,3,test -498,1,test -1107,2,test -1673,4,test -544,4,test -2880,3,test -711,1,test -1186,2,test +1113,4,test +3671,3,test +3113,4,test +2414,3,test +69,4,test +1410,3,test +19,3,test +2314,1,test +2751,2,test +3192,4,test +103,2,test +3014,3,test 3622,2,test -3176,1,test -2485,4,test -4047,2,test -183,3,test -1786,2,test -2132,1,test -3347,4,test +2527,1,test +366,3,test +3143,4,test +4088,3,test +3093,3,test +528,1,test +2960,4,test +3389,1,test 1956,4,test -3256,2,test -262,3,test -1390,4,test -4039,2,test -3340,1,test -1520,4,test -2169,4,test +2519,1,test +2911,4,test +1341,2,test +3989,1,test +84,2,test +2303,4,test +733,2,test 2732,1,test -1604,3,test -475,3,test -213,3,test -297,2,test -3940,1,test -1209,3,test -813,3,test -722,1,test -326,1,test -3936,3,test -1371,1,test -2720,4,test -1288,3,test -589,2,test -72,4,test +516,4,test +2649,3,test +3815,1,test +559,2,test +2549,1,test +3807,2,test +4019,1,test +3540,3,test +3674,3,test +3624,2,test +1067,4,test +3066,3,test 976,2,test -1188,1,test -2496,3,test -2313,3,test -1755,4,test -3492,3,test +3491,3,test +2883,3,test +2101,4,test +1797,1,test 1705,3,test -3005,1,test -186,3,test -3867,2,test -136,2,test -1522,3,test -3655,2,test -3,3,test -3176,4,test -3343,1,test -2214,1,test -1869,3,test +3442,2,test +2314,4,test +1140,2,test +1352,1,test +1310,4,test +4001,2,test +2052,3,test +1656,3,test +2997,2,test +3909,4,test +2914,4,test +3563,4,test +1952,1,test +1261,4,test +82,3,test 2081,2,test -1819,2,test +216,3,test +2731,4,test +2427,1,test +125,1,test +1769,1,test +1078,4,test 1170,1,test -3685,2,test -4031,1,test -3635,1,test +2519,4,test +470,4,test 641,2,test -3373,1,test -775,2,test -2378,1,test -1637,3,test -3677,3,test -1849,2,test -380,3,test -1983,2,test -196,2,test -3940,4,test -3973,1,test -2153,4,test -676,1,test -2449,2,test -3320,3,test -326,4,test -493,1,test -2712,3,test -451,4,test -622,2,test -1446,3,test -706,1,test -1188,4,test -1659,3,test -2134,4,test -268,3,test -2742,3,test -1526,4,test -2564,2,test -1872,3,test -2996,4,test -1343,4,test -1081,4,test -515,1,test -2989,1,test -3030,2,test -2510,3,test -1985,1,test -594,1,test -2806,1,test -1549,1,test -2198,1,test -3718,2,test -283,1,test -503,4,test -4064,1,test -3585,3,test -2411,1,test -2015,1,test -3364,4,test -3931,2,test -496,1,test -3881,1,test -3839,4,test -2665,2,test -3973,4,test -971,1,test -3789,3,test -2320,4,test -3486,2,test -1967,2,test -4052,4,test -617,3,test -2179,1,test +1553,4,test +3989,4,test +1982,1,test +463,1,test +683,4,test +3324,1,test +1933,1,test +2415,4,test +2549,4,test +3756,3,test +3453,2,test +2499,3,test +3537,1,test +4019,4,test +543,2,test +2628,4,test +1058,2,test +359,1,test +1093,1,test +1272,3,test +2479,2,test +2217,2,test +3221,1,test +135,4,test +481,3,test +3172,1,test +3213,2,test +3950,3,test +2431,3,test +1739,4,test +1252,2,test +694,3,test +2727,1,test +1336,1,test +1952,4,test +382,2,test +115,3,test +645,3,test +1811,1,test +3455,1,test +1769,4,test +595,2,test +378,4,test +2115,3,test +3322,2,test +66,3,test +1669,2,test +1932,3,test +1537,4,test +1233,1,test +575,1,test +1191,4,test +3656,4,test +2482,2,test +3394,4,test +1783,1,test +359,4,test +3528,4,test 2828,1,test -705,3,test +922,1,test 3437,2,test -2046,2,test -1488,3,test -3824,2,test -2829,2,test +2745,3,test +1354,3,test +3649,1,test 1996,1,test 2130,1,test -181,2,test +1954,4,test +2779,1,test 697,4,test -2300,3,test -3903,2,test -2646,2,test -2596,1,test -2950,4,test -1905,3,test +2696,3,test +1651,2,test +1692,3,test +2775,3,test +860,3,test +3637,4,test +2463,2,test +2597,2,test +3071,1,test +1206,2,test +3983,3,test 1984,4,test -1418,1,test -2330,3,test -1772,4,test -1376,4,test -3072,2,test +1552,1,test +423,1,test +1335,3,test +3671,2,test 3509,3,test -515,4,test -1023,2,test -1985,4,test -1107,1,test +3113,3,test +1681,2,test +2414,2,test +2197,4,test +3459,2,test +3022,1,test +3934,3,test +69,3,test +3242,4,test +2980,4,test 374,1,test -1327,4,test -594,4,test -1935,3,test -1673,3,test -544,3,test -678,3,test -1186,1,test +3192,3,test +2069,3,test +3235,1,test +3455,4,test +3014,2,test +3193,4,test 3622,1,test -1802,4,test -2189,4,test -4047,1,test -283,4,test -2232,2,test -2015,4,test -841,2,test -183,2,test -3793,4,test -2961,4,test -1174,4,test -2395,1,test -1520,3,test -3653,2,test -1604,2,test -871,2,test -475,2,test -213,2,test -3386,3,test +366,2,test +3143,3,test +2840,2,test +1795,1,test +2960,3,test +362,4,test +446,3,test +1612,1,test +3610,4,test +575,4,test +2911,3,test +2524,2,test +2303,3,test +1783,4,test +2649,2,test +347,2,test 2828,4,test -297,1,test -476,3,test -913,4,test -4078,1,test -1521,3,test -2645,4,test -1209,2,test -510,1,test -992,4,test -164,1,test -1288,2,test -2596,4,test -1422,2,test -589,1,test -2334,4,test -3937,3,test -1768,1,test -1551,3,test -1289,3,test -2496,2,test -3367,2,test -1543,4,test -3105,2,test -1240,3,test -1755,3,test -3492,2,test -498,3,test -711,3,test -1186,4,test -3655,1,test -1353,1,test -3176,3,test +1217,1,test +559,1,test +2995,1,test +1817,2,test +2991,3,test +639,2,test +1076,3,test +122,4,test +1938,4,test +2808,3,test +943,4,test +2101,3,test +2314,3,test +2751,4,test +1140,1,test +103,4,test +3268,1,test +4001,1,test +2052,2,test +2527,3,test 96,1,test -4047,4,test -1869,2,test +2914,3,test +1482,2,test +3918,2,test +528,3,test 1566,1,test -1786,4,test -612,2,test -3534,3,calibrate -3127,3,calibrate -824,1,calibrate -2143,3,calibrate +3389,3,test +1695,2,calibrate +596,3,calibrate 1433,2,calibrate -1831,2,calibrate -1539,1,calibrate -1748,4,calibrate -106,4,calibrate -1395,2,calibrate -3039,2,calibrate -452,3,calibrate -1793,2,calibrate -787,2,calibrate -3530,1,calibrate -854,1,calibrate -88,1,calibrate -2128,1,calibrate -843,1,calibrate -2192,4,calibrate -3438,3,calibrate -1610,2,calibrate -141,3,calibrate -1599,2,calibrate -1359,2,calibrate -2405,4,calibrate -1265,4,calibrate -1276,4,calibrate -1443,1,calibrate -292,1,calibrate -523,4,calibrate -512,4,calibrate -1337,1,calibrate -2249,3,calibrate -2701,2,calibrate -3309,1,calibrate -3362,4,calibrate -3780,4,calibrate -3047,1,calibrate -3981,3,calibrate -3678,2,calibrate -2568,3,calibrate -650,1,calibrate -1405,1,calibrate -2036,2,calibrate -3617,1,calibrate -2914,2,calibrate -1378,2,calibrate -2226,1,calibrate -3335,4,calibrate -3073,4,calibrate -1462,1,calibrate -322,1,calibrate -3127,2,calibrate -174,4,calibrate -3559,4,calibrate -3141,4,calibrate -1831,1,calibrate -2096,3,calibrate -2252,3,calibrate -106,3,calibrate -1291,2,calibrate -3039,1,calibrate -1219,4,calibrate -934,2,calibrate -2997,4,calibrate -2253,4,calibrate -1793,1,calibrate -717,4,calibrate -2757,4,calibrate -694,2,calibrate -918,3,calibrate -215,4,calibrate -2192,3,calibrate -1093,4,calibrate -3092,3,calibrate -2404,2,calibrate -550,3,calibrate -3438,2,calibrate -3756,1,calibrate -2814,4,calibrate -1610,1,calibrate -2343,1,calibrate -1599,1,calibrate -1359,1,calibrate -1412,4,calibrate -3422,3,calibrate -3411,3,calibrate -1086,1,calibrate -824,4,calibrate -2405,3,calibrate -1265,3,calibrate -1997,1,calibrate -1276,3,calibrate +2625,3,calibrate +624,3,calibrate +3150,4,calibrate +1988,4,calibrate +3591,3,calibrate +1737,4,calibrate +201,4,calibrate +3552,2,calibrate +273,1,calibrate +3446,2,calibrate +2336,3,calibrate +748,2,calibrate +2933,2,calibrate +1345,1,calibrate +3408,3,calibrate +2850,4,calibrate +2017,3,calibrate +1011,3,calibrate +603,1,calibrate +1941,4,calibrate +1264,3,calibrate +3397,2,calibrate +710,2,calibrate +3860,1,calibrate +1558,1,calibrate +4058,4,calibrate +907,3,calibrate +3191,1,calibrate +4069,4,calibrate +3119,3,calibrate +774,4,calibrate +75,3,calibrate +2500,3,calibrate +657,4,calibrate +2952,2,calibrate +3666,1,calibrate +209,3,calibrate +3131,4,calibrate +2671,1,calibrate +186,1,calibrate +858,3,calibrate +2869,4,calibrate +1299,2,calibrate +3332,3,calibrate +2233,4,calibrate +3070,3,calibrate +1238,4,calibrate +1667,1,calibrate +725,4,calibrate +2724,3,calibrate +2317,3,calibrate +2328,3,calibrate +1584,3,calibrate +3613,3,calibrate +2477,1,calibrate +2663,2,calibrate +76,3,calibrate +3731,4,calibrate +3346,4,calibrate +980,1,calibrate +49,4,calibrate +2014,1,calibrate +71,1,calibrate +2290,3,calibrate +2279,3,calibrate +3905,4,calibrate +888,3,calibrate +596,2,calibrate +637,3,calibrate +2625,2,calibrate +3810,4,calibrate +2837,1,calibrate +3715,1,calibrate +1644,4,calibrate +201,3,calibrate +3552,1,calibrate +1040,2,calibrate +2336,2,calibrate +748,1,calibrate +2933,1,calibrate +3408,2,calibrate +466,4,calibrate +2017,2,calibrate +3829,4,calibrate +1941,3,calibrate +1264,2,calibrate +3316,4,calibrate +710,1,calibrate +2825,4,calibrate +907,2,calibrate +2708,4,calibrate +3863,2,calibrate +3119,2,calibrate +177,4,calibrate 1758,3,calibrate -512,3,calibrate -523,3,calibrate -2249,2,calibrate -2701,1,calibrate -462,2,calibrate -2088,3,calibrate -3780,3,calibrate -3362,3,calibrate -3122,3,calibrate -3981,2,calibrate -1697,1,calibrate -557,1,calibrate -2568,2,calibrate -2172,2,calibrate -2914,1,calibrate -2518,1,calibrate -1378,1,calibrate -3669,1,calibrate -2267,1,calibrate -854,4,calibrate -1127,1,calibrate -3335,3,calibrate -1096,4,calibrate -3073,3,calibrate -1693,3,calibrate -174,3,calibrate -4091,4,calibrate -1811,4,calibrate -1800,4,calibrate -230,2,calibrate -3559,3,calibrate -3141,3,calibrate -1275,2,calibrate -1443,4,calibrate -292,4,calibrate -359,3,calibrate -325,1,calibrate -1337,4,calibrate -1248,3,calibrate -2096,2,calibrate -2252,2,calibrate -1291,1,calibrate -1929,1,calibrate -1249,4,calibrate -1405,4,calibrate -934,1,calibrate -2997,3,calibrate -717,3,calibrate -694,1,calibrate -2757,3,calibrate -918,2,calibrate -215,3,calibrate -1093,3,calibrate -3092,2,calibrate -2404,1,calibrate -550,2,calibrate -2217,4,calibrate -322,4,calibrate -3438,1,calibrate -1462,4,calibrate -2814,3,calibrate -1412,3,calibrate -3411,2,calibrate -3422,2,calibrate -207,4,calibrate +629,3,calibrate +774,3,calibrate +740,1,calibrate +75,2,calibrate +2500,2,calibrate +657,3,calibrate +2952,1,calibrate +1165,1,calibrate +858,2,calibrate +1613,2,calibrate +1299,1,calibrate +1385,4,calibrate +2536,4,calibrate +2199,1,calibrate +2233,3,calibrate +2210,1,calibrate +3574,2,calibrate +273,4,calibrate +3312,2,calibrate +725,3,calibrate +2317,2,calibrate +2328,2,calibrate +3613,2,calibrate +3658,1,calibrate +2663,1,calibrate +2016,1,calibrate +603,4,calibrate +4068,3,calibrate +3346,3,calibrate +4079,3,calibrate +2677,3,calibrate +2290,2,calibrate +2279,2,calibrate +3905,3,calibrate +3191,4,calibrate +3475,1,calibrate +888,2,calibrate +637,2,calibrate +2625,1,calibrate +375,2,calibrate +3779,3,calibrate +1644,3,calibrate +1142,3,calibrate +2297,1,calibrate +2734,2,calibrate +454,2,calibrate +1040,1,calibrate +2336,1,calibrate +3741,3,calibrate +747,4,calibrate +466,3,calibrate +3976,4,calibrate +496,4,calibrate +1941,2,calibrate +1264,1,calibrate +3316,3,calibrate +355,1,calibrate +71,4,calibrate +907,1,calibrate +960,4,calibrate +3714,3,calibrate +2825,3,calibrate +1400,1,calibrate +249,1,calibrate +2708,3,calibrate +3863,1,calibrate +177,3,calibrate 1758,2,calibrate -2430,4,calibrate -512,2,calibrate -523,2,calibrate -2631,3,calibrate -3520,3,calibrate -462,1,calibrate -1677,4,calibrate -2088,2,calibrate -3362,2,calibrate -2285,3,calibrate -3122,2,calibrate -3783,4,calibrate -2172,1,calibrate -2593,3,calibrate -1096,3,calibrate -3073,2,calibrate -811,1,calibrate -1693,2,calibrate -4018,1,calibrate -3756,4,calibrate +629,2,calibrate +1362,2,calibrate +3425,4,calibrate +2837,4,calibrate +1970,1,calibrate +1959,1,calibrate +553,3,calibrate +2882,3,calibrate +2190,4,calibrate +1005,2,calibrate +3715,4,calibrate +1613,1,calibrate +526,4,calibrate +2536,3,calibrate +1385,3,calibrate +3574,1,calibrate +2464,2,calibrate +2475,2,calibrate +3312,1,calibrate +2810,1,calibrate +2035,4,calibrate +4079,2,calibrate +4068,2,calibrate +2677,2,calibrate +1985,3,calibrate +3600,4,calibrate 2186,2,calibrate -2343,4,calibrate -4091,3,calibrate -1381,1,calibrate -230,1,calibrate -1997,4,calibrate -3141,2,calibrate -1275,1,calibrate -2053,3,calibrate +3109,4,calibrate +637,1,calibrate +241,1,calibrate +375,1,calibrate +1590,4,calibrate +3779,2,calibrate 344,4,calibrate -359,2,calibrate -1248,2,calibrate -545,3,calibrate -3288,2,calibrate -3322,4,calibrate -2096,1,calibrate -3205,4,calibrate -3406,3,calibrate -1249,3,calibrate -1697,4,calibrate -3607,2,calibrate -557,4,calibrate -3379,4,calibrate -2757,2,calibrate -1647,3,calibrate -3262,4,calibrate -3691,1,calibrate -2267,4,calibrate -1093,2,calibrate -3440,1,calibrate -3926,2,calibrate -1765,4,calibrate -1118,4,calibrate -2814,2,calibrate -1412,2,calibrate -1927,2,calibrate -514,2,calibrate -207,3,calibrate -1559,2,calibrate -2878,4,calibrate -2430,3,calibrate -325,4,calibrate -2631,2,calibrate -3520,2,calibrate -1677,3,calibrate -2285,2,calibrate -1867,2,calibrate -2790,4,calibrate -1616,2,calibrate -1638,2,calibrate -3626,1,calibrate -2661,2,calibrate -381,2,calibrate -1962,1,calibrate -1282,4,calibrate -2593,2,calibrate -1483,3,calibrate -791,4,calibrate -1176,4,calibrate -1829,2,calibrate -1096,2,calibrate -3432,1,calibrate -3170,1,calibrate -3797,4,calibrate +1644,2,calibrate +283,3,calibrate +3049,4,calibrate +1165,4,calibrate +757,2,calibrate +1142,2,calibrate +2734,1,calibrate +454,1,calibrate +484,2,calibrate +1780,2,calibrate +3858,2,calibrate +1981,1,calibrate +830,1,calibrate +1312,4,calibrate +150,4,calibrate +161,4,calibrate +3741,2,calibrate +579,1,calibrate +2205,2,calibrate +747,3,calibrate +3976,3,calibrate +496,3,calibrate +731,4,calibrate +2016,4,calibrate +1776,4,calibrate +385,4,calibrate +2825,2,calibrate +960,3,calibrate +3714,2,calibrate +2604,3,calibrate +3475,4,calibrate +525,2,calibrate +2984,4,calibrate +1362,1,calibrate +3425,3,calibrate +553,2,calibrate +4063,3,calibrate +2190,3,calibrate +2220,4,calibrate +1005,1,calibrate +2882,2,calibrate +2923,3,calibrate +526,3,calibrate +2536,2,calibrate +1385,2,calibrate +1426,3,calibrate +913,3,calibrate +2475,1,calibrate +2464,1,calibrate +3679,4,calibrate +3573,4,calibrate +571,1,calibrate +1042,4,calibrate +4079,1,calibrate +4068,1,calibrate +2677,1,calibrate +1985,2,calibrate +3600,3,calibrate +3652,4,calibrate 2186,1,calibrate -2384,4,calibrate -104,4,calibrate -887,4,calibrate -2053,2,calibrate -3154,1,calibrate -2463,4,calibrate -1300,2,calibrate -3288,1,calibrate -1248,1,calibrate -545,2,calibrate -1049,2,calibrate -3322,3,calibrate -3406,2,calibrate -16,3,calibrate -3607,1,calibrate -3211,1,calibrate -3379,3,calibrate -2676,4,calibrate -1647,2,calibrate -1274,4,calibrate -3262,3,calibrate -2626,3,calibrate -3926,1,calibrate +1506,4,calibrate +355,4,calibrate +3109,3,calibrate +795,1,calibrate +1400,4,calibrate +1590,3,calibrate +3779,1,calibrate +837,3,calibrate +2003,1,calibrate +1072,4,calibrate +3049,3,calibrate +283,2,calibrate +757,1,calibrate +484,1,calibrate +1780,1,calibrate +1855,4,calibrate +3858,1,calibrate +3899,2,calibrate +1312,3,calibrate +161,3,calibrate +150,3,calibrate +3827,4,calibrate +2205,1,calibrate +3576,4,calibrate +496,2,calibrate +731,3,calibrate +2364,3,calibrate 906,4,calibrate -811,4,calibrate -1118,3,calibrate -3872,2,calibrate -4018,4,calibrate -867,3,calibrate -878,3,calibrate -1927,1,calibrate -3120,4,calibrate -207,2,calibrate -514,1,calibrate -3014,4,calibrate -1403,1,calibrate -2554,1,calibrate +206,1,calibrate +385,3,calibrate +2604,2,calibrate +3382,4,calibrate +3265,4,calibrate +525,1,calibrate +2984,3,calibrate +1874,4,calibrate 734,4,calibrate -1559,1,calibrate -4085,2,calibrate -1517,4,calibrate -366,4,calibrate -3846,4,calibrate -1969,3,calibrate -3520,1,calibrate -1677,2,calibrate -2633,1,calibrate -1867,1,calibrate -2790,3,calibrate -1616,1,calibrate -1702,4,calibrate -1638,1,calibrate -696,4,calibrate -673,2,calibrate -2661,1,calibrate -381,1,calibrate +3425,2,calibrate +1623,4,calibrate +4063,2,calibrate +2923,2,calibrate +2220,3,calibrate +526,2,calibrate +1426,2,calibrate +913,2,calibrate +3679,3,calibrate 685,4,calibrate -2740,2,calibrate -2037,3,calibrate -1282,3,calibrate -1483,2,calibrate -791,3,calibrate -3534,2,calibrate -2406,4,calibrate -3691,4,calibrate -2155,4,calibrate -2143,2,calibrate -3440,4,calibrate -1829,1,calibrate +1981,4,calibrate +830,4,calibrate +3573,3,calibrate +579,4,calibrate +3640,2,calibrate +1042,3,calibrate +328,4,calibrate +3412,4,calibrate +1695,1,calibrate 1433,1,calibrate -3044,4,calibrate -3200,4,calibrate +3944,4,calibrate +2804,4,calibrate +2060,4,calibrate +3652,3,calibrate 3933,4,calibrate -3797,3,calibrate -2687,4,calibrate -2384,3,calibrate -1296,4,calibrate -1748,3,calibrate -39,4,calibrate -1395,1,calibrate -2744,4,calibrate -452,2,calibrate -2463,3,calibrate -1300,1,calibrate -1049,1,calibrate -787,1,calibrate +624,2,calibrate +1536,4,calibrate +3109,2,calibrate +3150,3,calibrate +1988,3,calibrate +3591,2,calibrate +1737,3,calibrate +3446,1,calibrate +837,2,calibrate +1072,3,calibrate 1258,4,calibrate -1,4,calibrate -16,2,calibrate -3963,4,calibrate -2914,4,calibrate -2455,4,calibrate -141,2,calibrate -1075,4,calibrate -2626,2,calibrate -3432,4,calibrate -1118,2,calibrate -3872,1,calibrate -3170,4,calibrate -878,2,calibrate -867,2,calibrate -1539,4,calibrate -3120,3,calibrate -3014,3,calibrate +2850,3,calibrate +1855,3,calibrate +1011,2,calibrate +3899,1,calibrate +1683,4,calibrate +3827,3,calibrate +3397,1,calibrate +3576,3,calibrate +571,4,calibrate +4069,3,calibrate +2611,4,calibrate +2204,4,calibrate +4058,3,calibrate +2364,2,calibrate +2604,1,calibrate +209,2,calibrate +3382,3,calibrate +3131,3,calibrate +3265,3,calibrate +2869,3,calibrate +3332,2,calibrate +1874,3,calibrate 734,3,calibrate -4085,1,calibrate -3678,1,calibrate -1517,3,calibrate -3846,3,calibrate -366,3,calibrate -3154,4,calibrate -1969,2,calibrate -2036,1,calibrate -3530,4,calibrate -88,4,calibrate -843,4,calibrate -1702,3,calibrate -2128,4,calibrate +3070,2,calibrate +1623,3,calibrate +1238,3,calibrate +4063,1,calibrate +2923,1,calibrate +2220,2,calibrate +2724,2,calibrate +2003,4,calibrate +1584,2,calibrate +1345,4,calibrate +76,2,calibrate +913,1,calibrate +3679,2,calibrate +3731,3,calibrate 685,3,calibrate -696,3,calibrate -673,1,calibrate -2740,1,calibrate -2037,2,calibrate -3211,4,calibrate -791,2,calibrate -3534,1,calibrate -3127,1,calibrate -2143,1,calibrate -2155,3,calibrate -3044,3,calibrate +49,3,calibrate +3640,1,calibrate +3860,4,calibrate +3412,3,calibrate +1558,4,calibrate +596,1,calibrate +3810,3,calibrate 3933,3,calibrate -2687,3,calibrate -1296,3,calibrate -1748,2,calibrate -106,2,calibrate -3309,4,calibrate -1403,4,calibrate -2554,4,calibrate -3047,4,calibrate -2744,3,calibrate -1219,3,calibrate -452,1,calibrate -650,4,calibrate -2253,3,calibrate +3944,3,calibrate +2804,3,calibrate +3652,2,calibrate +624,1,calibrate +1536,3,calibrate +3150,2,calibrate +1988,2,calibrate +3591,1,calibrate +3666,4,calibrate +186,4,calibrate +1737,2,calibrate +201,2,calibrate +2671,4,calibrate +1667,4,calibrate +3408,1,calibrate 1258,3,calibrate -3617,4,calibrate -2633,4,calibrate -2226,4,calibrate -2192,2,calibrate -3963,3,calibrate -2455,3,calibrate -141,1,calibrate -1075,3,calibrate -824,3,calibrate -2405,2,calibrate -1265,2,calibrate -1276,2,calibrate -1831,4,calibrate -1539,3,calibrate -2249,1,calibrate -3120,2,calibrate -3780,2,calibrate -3981,1,calibrate -2568,1,calibrate -3039,4,calibrate -1793,4,calibrate -3530,3,calibrate -854,3,calibrate -843,3,calibrate -2128,3,calibrate -1702,2,calibrate -3335,2,calibrate -1610,4,calibrate -1599,4,calibrate -1359,4,calibrate -174,2,calibrate -1811,3,calibrate -1086,4,calibrate -1800,3,calibrate +2850,2,calibrate +2477,4,calibrate +2017,1,calibrate +1011,1,calibrate +3829,3,calibrate +1683,3,calibrate +980,4,calibrate +2014,4,calibrate +4058,2,calibrate +2611,3,calibrate +4069,2,calibrate +2204,3,calibrate +3119,1,calibrate +2364,1,calibrate +774,2,calibrate +75,1,calibrate +2500,1,calibrate +657,2,calibrate +209,1,calibrate +3382,2,calibrate +3131,2,calibrate +858,1,calibrate +2869,2,calibrate +3332,1,calibrate +2233,2,calibrate +3070,1,calibrate +3552,4,calibrate +1238,2,calibrate +273,3,calibrate +3446,4,calibrate +748,4,calibrate +2724,1,calibrate +2328,1,calibrate +1584,1,calibrate +725,2,calibrate +3613,1,calibrate +1345,3,calibrate +2317,1,calibrate +2933,4,calibrate +76,1,calibrate +3731,2,calibrate +3346,2,calibrate +603,3,calibrate +49,2,calibrate +3397,4,calibrate +710,4,calibrate +3860,3,calibrate +2290,1,calibrate +2279,1,calibrate +3905,2,calibrate +3191,3,calibrate +888,1,calibrate +3810,2,calibrate 3933,2,calibrate -3559,2,calibrate -1443,3,calibrate -292,3,calibrate -1337,3,calibrate -2252,1,calibrate -2701,4,calibrate -106,1,calibrate -3309,3,calibrate -3047,3,calibrate -1219,2,calibrate -650,3,calibrate -1405,3,calibrate -2253,2,calibrate -2997,2,calibrate -717,2,calibrate -2036,4,calibrate -3617,3,calibrate -3669,4,calibrate -2518,4,calibrate -1378,4,calibrate -918,1,calibrate -2192,1,calibrate -215,2,calibrate -2226,3,calibrate -3092,1,calibrate -1127,4,calibrate -3963,2,calibrate -550,1,calibrate -1462,3,calibrate -322,3,calibrate -1075,2,calibrate -3422,1,calibrate -3411,1,calibrate -824,2,calibrate -3127,4,calibrate -2405,1,calibrate -1265,1,calibrate -1276,1,calibrate +2804,2,calibrate +3944,2,calibrate +740,4,calibrate +3666,3,calibrate +2952,4,calibrate +186,3,calibrate +201,1,calibrate +1299,4,calibrate +2199,4,calibrate +2210,4,calibrate +1667,3,calibrate +466,2,calibrate +3658,4,calibrate +2477,3,calibrate +2663,4,calibrate +3829,2,calibrate +1941,1,calibrate +980,3,calibrate +3316,2,calibrate +71,3,calibrate +4058,1,calibrate +4069,1,calibrate +2204,2,calibrate +2708,2,calibrate +596,4,calibrate +177,2,calibrate +2625,4,calibrate 1758,1,calibrate -523,1,calibrate -512,1,calibrate -1831,3,calibrate -2088,1,calibrate -3780,1,calibrate -3362,1,calibrate -3122,1,calibrate -1291,4,calibrate -3039,3,calibrate -3783,3,calibrate -1929,4,calibrate -934,4,calibrate -1793,3,calibrate -694,4,calibrate -854,2,calibrate -843,2,calibrate -3335,1,calibrate -3073,1,calibrate -2404,4,calibrate -1693,1,calibrate -3438,4,calibrate -3756,3,calibrate -1610,3,calibrate -2343,3,calibrate -1599,3,calibrate -1359,3,calibrate -174,1,calibrate -4091,2,calibrate -1811,2,calibrate -1086,3,calibrate -1800,2,calibrate -1997,3,calibrate -3559,1,calibrate -3141,1,calibrate -1443,2,calibrate -292,2,calibrate +629,1,calibrate +774,1,calibrate +2837,3,calibrate +3715,3,calibrate +657,1,calibrate +2233,1,calibrate +2297,4,calibrate +3552,3,calibrate +1238,1,calibrate +1040,4,calibrate +273,2,calibrate +2336,4,calibrate +748,3,calibrate +725,1,calibrate +2933,3,calibrate +603,2,calibrate +3731,1,calibrate +3346,1,calibrate +1264,4,calibrate +3905,1,calibrate +907,4,calibrate +3191,2,calibrate +249,4,calibrate +3810,1,calibrate +3863,4,calibrate +740,3,calibrate 344,3,calibrate -359,1,calibrate -1337,2,calibrate -2249,4,calibrate -2701,3,calibrate -462,4,calibrate -3205,3,calibrate -3047,2,calibrate -3981,4,calibrate -1697,3,calibrate -557,3,calibrate -2568,4,calibrate -2172,4,calibrate -1249,2,calibrate -2997,1,calibrate -1405,2,calibrate -717,1,calibrate -2757,1,calibrate -3669,3,calibrate -2518,3,calibrate -1378,3,calibrate -215,1,calibrate -2267,3,calibrate -1093,1,calibrate -1127,3,calibrate -1765,3,calibrate -2217,2,calibrate -322,2,calibrate -1462,2,calibrate -2814,1,calibrate -1412,1,calibrate -1381,4,calibrate -230,4,calibrate -1275,4,calibrate -2430,2,calibrate -2878,3,calibrate -325,3,calibrate -2631,1,calibrate -2096,4,calibrate -2252,4,calibrate -2285,1,calibrate -1291,3,calibrate -3783,2,calibrate -1929,3,calibrate -934,3,calibrate -694,3,calibrate -2593,1,calibrate -1176,3,calibrate -918,4,calibrate -3092,4,calibrate -1096,1,calibrate -2404,3,calibrate -550,4,calibrate -3756,2,calibrate -2343,2,calibrate -104,3,calibrate -4091,1,calibrate -3411,4,calibrate -1811,1,calibrate -1086,2,calibrate -3422,4,calibrate -1800,1,calibrate -1997,2,calibrate -887,3,calibrate -2053,1,calibrate +1970,4,calibrate +75,4,calibrate +1959,4,calibrate +1644,1,calibrate +186,2,calibrate +2952,3,calibrate +1165,3,calibrate +1142,1,calibrate +858,4,calibrate +1299,3,calibrate +1613,4,calibrate +2199,3,calibrate +2210,3,calibrate +3574,4,calibrate +1667,2,calibrate +3312,4,calibrate +3741,1,calibrate +2317,4,calibrate +2328,4,calibrate +747,2,calibrate +2810,4,calibrate +466,1,calibrate +3976,2,calibrate +3658,3,calibrate +2663,3,calibrate +3829,1,calibrate +2016,3,calibrate +1776,3,calibrate +3316,1,calibrate +71,2,calibrate +2825,1,calibrate +960,2,calibrate +3714,1,calibrate +2290,4,calibrate +2279,4,calibrate +2708,1,calibrate +3475,3,calibrate +888,4,calibrate +637,4,calibrate +241,4,calibrate +177,1,calibrate +375,4,calibrate +2837,2,calibrate +553,1,calibrate +3715,2,calibrate +2190,2,calibrate +2882,1,calibrate +2536,1,calibrate +1385,1,calibrate +2297,3,calibrate +2734,4,calibrate +454,4,calibrate +1040,3,calibrate +2035,2,calibrate +1985,1,calibrate +3600,2,calibrate +1506,3,calibrate +355,3,calibrate +1400,3,calibrate +249,3,calibrate +3863,3,calibrate +1590,2,calibrate 1758,4,calibrate +629,4,calibrate +1362,4,calibrate +740,2,calibrate 344,2,calibrate -545,1,calibrate -3322,2,calibrate -462,3,calibrate -3205,2,calibrate -2088,4,calibrate -3406,1,calibrate -3122,4,calibrate -3626,4,calibrate -1249,1,calibrate -1697,2,calibrate -557,2,calibrate -2172,3,calibrate -3379,2,calibrate -2676,3,calibrate -1962,4,calibrate -1647,1,calibrate -3669,2,calibrate -3262,2,calibrate -2518,2,calibrate -1274,3,calibrate -2267,2,calibrate -1127,2,calibrate +1970,3,calibrate +1959,3,calibrate +1005,4,calibrate +283,1,calibrate +3049,2,calibrate +1613,3,calibrate +1165,2,calibrate +2210,2,calibrate +2199,2,calibrate +3574,3,calibrate +2464,4,calibrate +1312,2,calibrate +150,2,calibrate +3312,3,calibrate +161,2,calibrate +2475,4,calibrate +747,1,calibrate +2810,3,calibrate +3658,2,calibrate +3976,1,calibrate +496,1,calibrate +731,2,calibrate +2016,2,calibrate 906,3,calibrate -1765,2,calibrate -2217,1,calibrate -811,3,calibrate -1693,4,calibrate -4018,3,calibrate +4079,4,calibrate +4068,4,calibrate +1776,2,calibrate +2677,4,calibrate +385,2,calibrate +960,1,calibrate 2186,4,calibrate -1381,3,calibrate -230,3,calibrate -207,1,calibrate -1275,3,calibrate -2430,1,calibrate -2878,2,calibrate -359,4,calibrate -325,2,calibrate -1248,4,calibrate -3288,4,calibrate -1677,1,calibrate -2790,2,calibrate -3783,1,calibrate -1929,2,calibrate -3607,4,calibrate -1282,2,calibrate -1483,1,calibrate -1176,2,calibrate -2406,3,calibrate -3691,3,calibrate -3440,3,calibrate -3926,4,calibrate -3200,3,calibrate -3797,2,calibrate -2384,2,calibrate -104,2,calibrate -1927,4,calibrate -39,3,calibrate -887,2,calibrate -514,4,calibrate -1559,4,calibrate +3475,2,calibrate +795,4,calibrate +241,3,calibrate +2984,2,calibrate +375,3,calibrate +3425,1,calibrate +3779,4,calibrate +2190,1,calibrate +526,1,calibrate +1426,1,calibrate +757,4,calibrate +1142,4,calibrate +2297,2,calibrate +454,3,calibrate +484,4,calibrate +2734,3,calibrate +1780,4,calibrate +3858,4,calibrate +1981,3,calibrate +830,3,calibrate +3573,2,calibrate +3741,4,calibrate +579,3,calibrate +2205,4,calibrate +1042,2,calibrate +328,3,calibrate +2035,1,calibrate +2060,3,calibrate +3600,1,calibrate +206,4,calibrate +1506,2,calibrate +355,2,calibrate +3109,1,calibrate +3714,4,calibrate +1400,2,calibrate +249,2,calibrate +1590,1,calibrate +525,4,calibrate +1362,3,calibrate 344,1,calibrate -2463,2,calibrate -3322,1,calibrate -2631,4,calibrate -3520,4,calibrate -3205,1,calibrate -2285,4,calibrate -1867,4,calibrate -1,3,calibrate -1616,4,calibrate -1638,4,calibrate -3626,3,calibrate -16,1,calibrate -2661,4,calibrate -3379,1,calibrate -381,4,calibrate -1962,3,calibrate -2676,2,calibrate -1274,2,calibrate -3262,1,calibrate -2593,4,calibrate -2626,1,calibrate +1959,2,calibrate +1970,2,calibrate +837,1,calibrate +553,4,calibrate +2882,4,calibrate +1005,3,calibrate +1072,2,calibrate +3049,1,calibrate +1855,2,calibrate +2475,3,calibrate +1312,1,calibrate +150,1,calibrate +2464,3,calibrate +161,1,calibrate +3827,2,calibrate +3576,2,calibrate +2810,2,calibrate +571,3,calibrate +731,1,calibrate +1695,4,calibrate 906,2,calibrate -1765,1,calibrate -1829,4,calibrate +1776,1,calibrate 1433,4,calibrate -3432,3,calibrate -1118,1,calibrate -811,2,calibrate -3170,3,calibrate -4018,2,calibrate -867,1,calibrate +1985,4,calibrate +385,1,calibrate 2186,3,calibrate -878,1,calibrate -1381,2,calibrate -3014,2,calibrate +795,3,calibrate +3265,2,calibrate +241,2,calibrate +2984,1,calibrate +1874,2,calibrate 734,2,calibrate -2053,4,calibrate -2878,1,calibrate -1395,4,calibrate -1517,2,calibrate -3846,2,calibrate -3154,3,calibrate -1969,1,calibrate -1300,4,calibrate -3288,3,calibrate -366,2,calibrate -545,4,calibrate -1049,4,calibrate -787,4,calibrate -2790,1,calibrate -88,3,calibrate -3406,4,calibrate -696,2,calibrate +1623,2,calibrate +2220,1,calibrate +2003,3,calibrate +283,4,calibrate +757,3,calibrate +484,3,calibrate +1780,3,calibrate +3679,1,calibrate 685,2,calibrate -3607,3,calibrate -3211,3,calibrate -2037,1,calibrate -1282,1,calibrate -1647,4,calibrate -791,1,calibrate -1176,1,calibrate -2406,2,calibrate -3691,2,calibrate -2155,2,calibrate -3440,2,calibrate -3044,2,calibrate -3926,3,calibrate -3200,2,calibrate -3797,1,calibrate -3872,4,calibrate -2687,2,calibrate -2384,1,calibrate -104,1,calibrate -1296,2,calibrate -1748,1,calibrate -1927,3,calibrate -39,2,calibrate -887,1,calibrate -514,3,calibrate -2554,3,calibrate -1403,3,calibrate -1559,3,calibrate -2744,2,calibrate -4085,4,calibrate -2463,1,calibrate -3678,4,calibrate +3858,3,calibrate +1981,2,calibrate +830,2,calibrate +3899,4,calibrate +3573,1,calibrate +579,2,calibrate +2205,3,calibrate +1042,1,calibrate +328,2,calibrate +3412,2,calibrate +1558,3,calibrate +2060,2,calibrate +206,3,calibrate +3652,1,calibrate +1506,1,calibrate +1536,2,calibrate +3150,1,calibrate +1988,1,calibrate +2604,4,calibrate +1737,1,calibrate +2671,3,calibrate +525,3,calibrate +4063,4,calibrate +2923,4,calibrate +1072,1,calibrate 1258,2,calibrate -2633,3,calibrate -1867,3,calibrate -1,2,calibrate -1616,3,calibrate -1638,3,calibrate -3626,2,calibrate -673,4,calibrate -2661,3,calibrate -381,3,calibrate -2676,1,calibrate -2740,4,calibrate -1962,2,calibrate -2455,2,calibrate -1274,1,calibrate -1483,4,calibrate -3534,4,calibrate +2850,1,calibrate +1426,4,calibrate +1855,1,calibrate +913,4,calibrate +1683,2,calibrate +3827,1,calibrate +2014,3,calibrate +3576,1,calibrate +3640,4,calibrate +571,2,calibrate +2611,2,calibrate +1695,3,calibrate 906,1,calibrate -2143,4,calibrate -1829,3,calibrate 1433,3,calibrate -3432,2,calibrate -3170,2,calibrate -1539,2,calibrate -3120,1,calibrate -3014,1,calibrate +624,4,calibrate +3382,1,calibrate +795,2,calibrate +3131,1,calibrate +3591,4,calibrate +3265,1,calibrate +2869,1,calibrate +1874,1,calibrate 734,1,calibrate -1395,3,calibrate -1517,1,calibrate -366,1,calibrate -452,4,calibrate -3154,2,calibrate -1300,3,calibrate -3846,1,calibrate -1049,3,calibrate -787,3,calibrate -3530,2,calibrate -88,2,calibrate -1702,1,calibrate -2128,2,calibrate +1623,1,calibrate +3446,3,calibrate +837,4,calibrate +2003,2,calibrate +1345,2,calibrate +3408,4,calibrate +2017,4,calibrate +1011,4,calibrate 685,1,calibrate -696,1,calibrate -16,4,calibrate -3211,2,calibrate -141,4,calibrate -2406,1,calibrate -2155,1,calibrate -2626,4,calibrate -3044,1,calibrate +3899,3,calibrate +49,1,calibrate +3397,3,calibrate +328,1,calibrate +3860,2,calibrate +3412,1,calibrate +1558,2,calibrate +710,3,calibrate +3119,4,calibrate +2364,4,calibrate 3933,1,calibrate -3200,1,calibrate -3872,3,calibrate -2687,1,calibrate -878,4,calibrate -867,4,calibrate -1296,1,calibrate -39,1,calibrate -3309,2,calibrate -1403,2,calibrate -2554,2,calibrate -2744,1,calibrate -4085,3,calibrate -3678,3,calibrate -1219,1,calibrate -650,2,calibrate -2253,1,calibrate -1969,4,calibrate +3944,1,calibrate +2804,1,calibrate +206,2,calibrate +2060,1,calibrate +1536,1,calibrate +2500,4,calibrate +3666,2,calibrate +209,4,calibrate +2671,2,calibrate +3332,4,calibrate +3070,4,calibrate +2724,4,calibrate +1584,4,calibrate +3613,4,calibrate 1258,1,calibrate -2036,3,calibrate -3617,2,calibrate -2914,3,calibrate -2633,2,calibrate -2226,2,calibrate -1,1,calibrate -3963,1,calibrate -673,3,calibrate -2740,3,calibrate -2037,4,calibrate -2455,1,calibrate -1075,1,calibrate +2477,2,calibrate +76,4,calibrate +1683,1,calibrate +980,2,calibrate +2014,2,calibrate +3640,3,calibrate +2611,1,calibrate +2204,1,calibrate diff --git a/src/estimint/v2/conf/sweeps/prev_eir.yaml b/src/estimint/v2/conf/sweeps/prev_eir.yaml new file mode 100644 index 0000000..6190e69 --- /dev/null +++ b/src/estimint/v2/conf/sweeps/prev_eir.yaml @@ -0,0 +1,44 @@ +program: estimint/v2/train_base.py +project: estimint-sweep +name: sweep-prev-eir +method: bayes +metric: + goal: minimize + name: val/loss + +parameters: + lr: + distribution: log_uniform_values + min: 1e-4 + max: 1e-2 + batch_size: + values: [256, 512] + dropout_rate: + values: [0.0, 0.05] + + # model-specific + width: + values: [256, 512] + depth: + values: [2, 4, 6] + n_bins: + values: [24, 32] + rqs_bounds: + values: [6, 8] + mlp_residual: + values: [true, false] + stratify: + values: [true, false] + + +command: + - ${env} + - python + - -m + - estimint.v2.train_base + - "hydra.output_subdir=null" + - "hydra.run.dir=." + - ${args_no_hyphens} + - use_wandb=true + - num_epochs=120 + - min_epochs=120 diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index f040762..a998dd4 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -9,6 +9,8 @@ from hydra.utils import get_method from omegaconf import DictConfig, OmegaConf from tqdm import tqdm + +from estimint.v2.training.checkpoint import save_checkpoint from .models.umnn import MonotoneUMNN, umnn_loss, UMNNArtifact from .data.preprocess import PreparedData, prepare_data from .data.dataset import make_loader @@ -108,17 +110,8 @@ def train_model( break nnx.update(model, best_model) - # --------- checkpointing the best model --------- - ckpt_dir = (epath.Path(cfg.checkpoint_dir) / name).resolve() - preservation_policy = ocp.training.preservation_policies.LatestN(n=1) - with ocp.training.Checkpointer(ckpt_dir, preservation_policy=preservation_policy) as ckptr: # type: ignore[arg-type] - ckptr.save_checkpointables( - 0, - { - "model": nnx.state(model), - }, - overwrite=True - ) + save_checkpoint(cfg.output_dir, name, model) + return model @@ -220,7 +213,7 @@ def main(cfg: DictConfig) -> None: prepared_data = prepare_data(raw_df, cfg, calib_frac=cfg.calib_frac) - umnn_bundle = train_umnn(cfg, prepared_data) + # umnn_bundle = train_umnn(cfg, prepared_data) rqs_artifact = train_rqs(cfg, prepared_data) if cfg.use_wandb: diff --git a/src/estimint/v2/training/checkpoint.py b/src/estimint/v2/training/checkpoint.py index adcb2eb..2a6090e 100644 --- a/src/estimint/v2/training/checkpoint.py +++ b/src/estimint/v2/training/checkpoint.py @@ -14,10 +14,13 @@ logging.getLogger("absl").setLevel(logging.WARNING) +def _resolve_checkpoint_dir(checkpoint_dir: str, model_name: str) -> epath.Path: + return (epath.Path(checkpoint_dir) / model_name).resolve() + def restore_model( - ckptr: ocp.training.Checkpointer, + checkpoint_dir: str, + model_name: str, model: nnx.Module, - step: int | None = None, ) -> nnx.Module: """ Restore model from checkpoint. @@ -30,80 +33,23 @@ def restore_model( Returns: Restored model. """ - loaded = ckptr.load_checkpointables( - step, - abstract_checkpointables={"model": nnx.state(model)}, - ) - nnx.update(model, loaded["model"]) - return model - - -@dataclass -class CheckpointSession: - ckptr: ocp.training.Checkpointer - model: nnx.Module - optimizer: nnx.Optimizer - start_epoch: int - best_val_loss: float - - def save_if_best(self, epoch: int, val_loss: float) -> bool: - """ - Save a checkpoint when validation loss improves. - - Args: - epoch: Current epoch. - val_loss: Current validation loss. + ckpt_dir = _resolve_checkpoint_dir(checkpoint_dir, model_name) + with ocp.training.Checkpointer(ckpt_dir) as ckptr: + loaded = ckptr.load_checkpointables( + abstract_checkpointables={"model": nnx.state(model)}, + ) + nnx.update(model, loaded["model"]) + return model - Returns: - Whether a checkpoint was saved. - """ - if val_loss >= self.best_val_loss: - return False - self.best_val_loss = val_loss - self.ckptr.save_checkpointables_async( - epoch, +def save_checkpoint(checkpoint_dir: str, model_name: str, model: nnx.Module): + ckpt_dir = _resolve_checkpoint_dir(checkpoint_dir, model_name) + preservation_policy = ocp.training.preservation_policies.LatestN(n=1) + with ocp.training.Checkpointer(ckpt_dir, preservation_policy=preservation_policy) as ckptr: # type: ignore[arg-type] + ckptr.save_checkpointables( + 0, { - "model": nnx.state(self.model), - "optimizer": nnx.state(self.optimizer), + "model": nnx.state(model), }, - metrics={"val/loss": self.best_val_loss}, - overwrite=True, - ) - return True - - -@contextmanager -def checkpoint_session( - checkpoint_dir: str | PathLike[str], - max_checkpoints_to_keep: int, - model: nnx.Module, - optimizer: nnx.Optimizer, - restore_checkpoint: bool = False, -) -> Iterator[CheckpointSession]: - """ - Open a checkpointing session. - - Args: - checkpoint_dir: Checkpoint directory. - max_checkpoints_to_keep: Number of checkpoints to keep. - model: Model to checkpoint. - optimizer: Optimizer to checkpoint. - restore_checkpoint: Whether to restore existing state. - - Returns: - Checkpoint session iterator. - """ - ckpt_dir = epath.Path(checkpoint_dir).resolve() - with ocp.training.Checkpointer( - ckpt_dir, - preservation_policy=ocp.training.preservation_policies.LatestN(max_checkpoints_to_keep), # type: ignore[arg-type] - ) as ckptr: - model, optimizer, start_epoch, best_val_loss = init_or_restore_last(ckptr, model, optimizer, restore_checkpoint) - yield CheckpointSession( - ckptr=ckptr, - model=model, - optimizer=optimizer, - start_epoch=start_epoch, - best_val_loss=best_val_loss, + overwrite=True ) From 75588fd30a2729132d7c7e769800615187b9ea17 Mon Sep 17 00:00:00 2001 From: Anmol Date: Thu, 16 Jul 2026 08:42:32 +0000 Subject: [PATCH 14/32] fix checkpointing dir --- src/estimint/v2/conf/train_config.yaml | 3 +-- src/estimint/v2/train_base.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index 257376b..092cc34 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -16,13 +16,12 @@ n_bins: 24 rqs_bounds: 6 # Hyperparameters -num_epochs: 150 +num_epochs: 120 min_epochs: 100 patience: 50 lr: 1e-3 batch_size: 256 weight_decay: 1e-4 -n_ensembles: 1 # Checkpoint checkpoint_dir: "${output_dir}ckpts-${cur_time}" diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index a998dd4..da1dc60 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -110,7 +110,7 @@ def train_model( break nnx.update(model, best_model) - save_checkpoint(cfg.output_dir, name, model) + save_checkpoint(cfg.checkpoint_dir, name, model) return model From 3ac2fddeb4ab5dcea67d17a2525914caaaf8b499 Mon Sep 17 00:00:00 2001 From: Anmol Date: Fri, 17 Jul 2026 08:58:59 +0000 Subject: [PATCH 15/32] refactor + remove umnn --- src/estimint/v2/conf/train_config.yaml | 2 +- src/estimint/v2/eval/metrics.py | 1 - src/estimint/v2/models/umnn.py | 65 ------------- src/estimint/v2/train_base.py | 130 +------------------------ src/estimint/v2/training/train_step.py | 104 +++++++++++++++++++- 5 files changed, 107 insertions(+), 195 deletions(-) delete mode 100644 src/estimint/v2/models/umnn.py diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index 092cc34..69bc152 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -3,7 +3,7 @@ split_file: "datasets/split.csv" num_workers: 0 use_existing_split: false target: "eir" -stratify: true +stratify: false calib_frac: 0.06 # model diff --git a/src/estimint/v2/eval/metrics.py b/src/estimint/v2/eval/metrics.py index 0fed755..99c968c 100644 --- a/src/estimint/v2/eval/metrics.py +++ b/src/estimint/v2/eval/metrics.py @@ -1,6 +1,5 @@ import numpy as np from grain.python import DataLoader -from jax import Array from estimint.utils import mse, r2, rmse, mae, bias from dataclasses import dataclass diff --git a/src/estimint/v2/models/umnn.py b/src/estimint/v2/models/umnn.py deleted file mode 100644 index bbc3a60..0000000 --- a/src/estimint/v2/models/umnn.py +++ /dev/null @@ -1,65 +0,0 @@ -from flax import nnx - -from estimint.v2.data.features import StandardScaler -from .mlp import MLP -import numpy as np -import jax.numpy as jnp - - -class MonotoneUMNN(nnx.Module): - def __init__(self, n_context, *, width=128, depth=4, n_quad=48, mlp_residual=False, dropout_rate=0.0, rngs: nnx.Rngs): - self.bias = MLP(n_context, 1, width=width, depth=depth, residual=mlp_residual, dropout_rate=dropout_rate, rngs=rngs) - self.integrand = MLP(n_context + 1, 1, width=width, depth=depth, residual=mlp_residual, dropout_rate=dropout_rate, rngs=rngs) - # leggauss(n) returns nodes/weights for integrating on [-1, 1]. We'll - # rescale them to [0, m] at call time. - nodes, weights = np.polynomial.legendre.leggauss(n_quad) - self.nodes = jnp.array(nodes) # (Q, ) - self.weights = jnp.array(weights) # (Q, ) - - def _integral(self, m, c): - # m: (B,) monotone feature; c: (B, C) context. Compute ∫₀ᵐ g dt per row. - m = m[:, None] # (B, 1) - half = 0.5 * m - # map [-1, 1] -> [0, m] for each row - t = half * (self.nodes[None, :] + 1.0) # (B, Q) - cE = jnp.broadcast_to(c[:, None, :], (c.shape[0], t.shape[1], c.shape[1])) # (B, Q, C) - inp = jnp.concatenate([t[..., None], cE], axis=-1) # (B, Q, C+1) : [t, context] - # compute g(t, c). g(t, c) >= 0 - g = nnx.softplus(self.integrand(inp))[..., 0] # (B, Q) - return half[:, 0] * (self.weights[None, :] * g).sum(axis=1) # (B,) - - def __call__(self, m, c): - # m: (B,) monotone feature; c: (B, C) context. Compute f(m, c) = b(c) + ∫₀ᵐ g dt - return self.bias(c)[:, 0] + self._integral(m, c) - -@nnx.jit -def _forward(model: nnx.Module, monotone: jnp.ndarray, context: jnp.ndarray): - return model(monotone, context) - -class UMNNArtifact: - def __init__(self, model: nnx.Module, scaler: StandardScaler, features: list[str]): - self.model = model - self.scaler = scaler - self.features = features - - def _transform_inputs(self, X_raw) -> tuple[jnp.ndarray, jnp.ndarray]: - X_scaled = self.scaler.transform(X_raw) - context = X_scaled[:, 1:] # all but first column - monotone_feature = X_scaled[:, 0] # first column - return jnp.array(monotone_feature), jnp.array(context) - - - def predict(self, X_raw: np.ndarray) -> np.ndarray: - m, c = self._transform_inputs(X_raw) - pred = _forward(self.model, m, c) - return np.power(10, pred) # return in original scale - - -def umnn_loss(model, X, y, w): - # X is arranged as [monotone_feature, *context]; split it back out. - m, c = X[:, 0], X[:, 1:] - pred = model(m, c) - # Weighted mean-squared error on log10(EIR). Dividing by sum(w) makes it a - # proper weighted average. - return jnp.sum(w * (pred - y) ** 2) / jnp.sum(w) - diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index da1dc60..3f7fd6c 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -1,146 +1,25 @@ import logging -import time from pathlib import Path import duckdb import hydra import jax -import jax.numpy as jnp -from hydra.utils import get_method from omegaconf import DictConfig, OmegaConf -from tqdm import tqdm -from estimint.v2.training.checkpoint import save_checkpoint -from .models.umnn import MonotoneUMNN, umnn_loss, UMNNArtifact from .data.preprocess import PreparedData, prepare_data from .data.dataset import make_loader import wandb -from grain.python import DataLoader from .data.features import FEATURES_BASE from flax import nnx -from .training.train_step import create_optimizer, make_train_step, make_eval_step +from .training.train_step import train_model import numpy as np -from orbax.checkpoint import v1 as ocp -from etils import epath -from estimint.utils import r2, rmse, mae, mse from estimint.v2.eval.metrics import compute_metrics -from typing import Callable -from jaxtyping import Array from .models.rqs import ConditionalRQS, rqs_loss, RQSArtifact, conformal_offset -logging.getLogger("absl").setLevel(logging.WARNING) log = logging.getLogger(__name__) -def get_total_params(model: nnx.Module) -> int: - """ - Get the total number of parameters in the model. - - Args: - model: Flax module. - - Returns: - Total parameter count. - """ - params = nnx.state(model, nnx.Param) - return sum(np.prod(x.shape) for x in jax.tree_util.tree_leaves(params)) - - -def train_model( - model: nnx.Module, - cfg: DictConfig, - prepared_data: PreparedData, - loss_fn: Callable[[nnx.Module, Array, Array, Array], Array], - name: str, - use_standardized_y: bool = False, - ) -> nnx.Module: - train_step = make_train_step(loss_fn) - eval_step = make_eval_step(loss_fn) - target_key = "y_std" if use_standardized_y else "y" - val_loader = make_loader( - data=prepared_data.val_data, - batch_size=cfg.batch_size, - seed=cfg.seed, - shuffle=False, - num_workers=cfg.num_workers, - drop_remainder=True, - ) - total_steps = cfg.num_epochs * len(prepared_data.train_data) // cfg.batch_size - optimizer = create_optimizer(model, cfg.lr, total_steps, weight_decay=cfg.weight_decay) - - # ---- training loop ---- - patience_n = 0 - best_val_loss = float("inf") - best_model = nnx.state(model) - epoch_pbar = tqdm(range(cfg.num_epochs), desc="Epoch") - for epoch in epoch_pbar: - # remake train loader each epoch to reshuffle with new seed - train_loader = make_loader( - data=prepared_data.train_data, - batch_size=cfg.batch_size, - seed=cfg.seed + epoch, - shuffle=True, - num_workers=cfg.num_workers, - drop_remainder=True, - ) - model.train() - train_losses: list[jax.Array] = [train_step(model, optimizer, batch["x"], batch[target_key], batch["w"]) for batch in train_loader] - - model.eval() - val_losses: list[jax.Array] = [eval_step(model, batch["x"], batch[target_key], batch["w"]) for batch in val_loader] - - avg_train_loss = float(jnp.mean(jnp.stack(train_losses))) - avg_val_loss = float(jnp.mean(jnp.stack(val_losses))) - epoch_pbar.set_postfix( - train=f"{avg_train_loss:.6f}", - val=f"{avg_val_loss:.6f}", - patience=f"{patience_n}/{cfg.patience}", - ) - if cfg.use_wandb: - wandb.log({"train/loss": avg_train_loss, "val/loss": avg_val_loss, "epoch": epoch}) - if epoch < cfg.min_epochs: - continue - if avg_val_loss < best_val_loss: - best_val_loss = avg_val_loss - best_model = nnx.state(model) - patience_n = 0 - else: - patience_n += 1 - if patience_n >= cfg.patience: - log.info(f"Early stopping at epoch {epoch} with best val loss {best_val_loss:.6f}") - break - - nnx.update(model, best_model) - save_checkpoint(cfg.checkpoint_dir, name, model) - - return model - - -def train_umnn(cfg: DictConfig, prepared_data: PreparedData) -> UMNNArtifact: - model = MonotoneUMNN(len(FEATURES_BASE) - 1, rngs=nnx.Rngs(cfg.seed), width=cfg.width, depth=cfg.depth, n_quad=cfg.n_quad, mlp_residual=cfg.mlp_residual, dropout_rate=cfg.dropout_rate) - log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") - model = train_model(model, cfg, prepared_data, umnn_loss, name="UMNN") - - umnn_artifact = UMNNArtifact(model, prepared_data.feature_scaler, FEATURES_BASE) - - # ------------ test evaluation ---------------- - umnn_artifact.model.eval() - test_loader = make_loader( - data=prepared_data.test_data, - batch_size=cfg.batch_size, - seed=cfg.seed, - shuffle=False, - num_workers=cfg.num_workers, - drop_remainder=True, - ) - metrics = compute_metrics(umnn_artifact, test_loader) - log.info(f"test R2={metrics.r2:.4f} RMSE={metrics.rmse:.2f} MAE={metrics.mae:.2f} MSE={metrics.mse:.2f} Bias={metrics.bias:.2f}") - if cfg.use_wandb: - wandb.log({"test/r2": metrics.r2, "test/rmse": metrics.rmse, "test/mae": metrics.mae, "test/mse": metrics.mse, "test/bias": metrics.bias}) - return umnn_artifact - def train_rqs(cfg: DictConfig, prepared_data: PreparedData): model = ConditionalRQS(len(FEATURES_BASE), rngs=nnx.Rngs(cfg.seed), width=cfg.width, depth=cfg.depth, n_bins=cfg.n_bins, bounds=cfg.rqs_bounds, residual=cfg.mlp_residual, dropout_rate=cfg.dropout_rate) - log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") model = train_model(model, cfg, prepared_data, rqs_loss, name="RQS", use_standardized_y=True) rqs_artifact = RQSArtifact(model, prepared_data.feature_scaler, prepared_data.target_scaler, FEATURES_BASE) @@ -206,15 +85,12 @@ def main(cfg: DictConfig) -> None: config=OmegaConf.to_container(cfg, resolve=True, throw_on_missing=True), # type: ignore settings=wandb.Settings(start_method="thread"), ) - # -------- data loading and preprocessing -------- - Path(cfg.output_dir).mkdir(parents=True, exist_ok=True) + Path(cfg.output_dir).mkdir(parents=True, exist_ok=True) raw_df = duckdb.read_parquet(cfg.data_file).df() - prepared_data = prepare_data(raw_df, cfg, calib_frac=cfg.calib_frac) - # umnn_bundle = train_umnn(cfg, prepared_data) - rqs_artifact = train_rqs(cfg, prepared_data) + train_rqs(cfg, prepared_data) if cfg.use_wandb: wandb.finish() diff --git a/src/estimint/v2/training/train_step.py b/src/estimint/v2/training/train_step.py index 0307705..74d3df8 100644 --- a/src/estimint/v2/training/train_step.py +++ b/src/estimint/v2/training/train_step.py @@ -1,7 +1,23 @@ +import logging + from flax import nnx import optax from typing import Callable from jaxtyping import Array +import jax +import numpy as np +from ..data.preprocess import PreparedData +from omegaconf import DictConfig +import tqdm +import jax.numpy as jnp +import wandb +from ..data.dataset import make_loader +from tqdm import tqdm +from .checkpoint import save_checkpoint + + +log = logging.getLogger(__name__) + def create_optimizer( model: nnx.Module, learning_rate: float, total_steps: int, weight_decay: float = 1e-4 @@ -27,6 +43,20 @@ def create_optimizer( tx = optax.chain(optax.clip_by_global_norm(1.0), optax.adamw(learning_rate=scheduler, weight_decay=weight_decay)) return nnx.Optimizer(model, tx, wrt=nnx.Param) +def get_total_params(model: nnx.Module) -> int: + """ + Get the total number of parameters in the model. + + Args: + model: Flax module. + + Returns: + Total parameter count. + """ + params = nnx.state(model, nnx.Param) + return sum(np.prod(x.shape) for x in jax.tree_util.tree_leaves(params)) + + def make_train_step(loss_fn: Callable): @nnx.jit def train_step(model: nnx.Module, optimizer: nnx.Optimizer, x: Array, y: Array, w: Array): @@ -42,4 +72,76 @@ def eval_step(model: nnx.Module, x: Array, y: Array, w: Array): loss = loss_fn(model, x, y, w) return loss - return eval_step \ No newline at end of file + return eval_step + +def train_model( + model: nnx.Module, + cfg: DictConfig, + prepared_data: PreparedData, + loss_fn: Callable[[nnx.Module, Array, Array, Array], Array], + name: str, + use_standardized_y: bool = False, + ) -> nnx.Module: + + log.info(f"Total parameters: {get_total_params(model) / 1e6:.2f}M") + + train_step = make_train_step(loss_fn) + eval_step = make_eval_step(loss_fn) + target_key = "y_std" if use_standardized_y else "y" + val_loader = make_loader( + data=prepared_data.val_data, + batch_size=cfg.batch_size, + seed=cfg.seed, + shuffle=False, + num_workers=cfg.num_workers, + drop_remainder=True, + ) + total_steps = cfg.num_epochs * len(prepared_data.train_data) // cfg.batch_size + optimizer = create_optimizer(model, cfg.lr, total_steps, weight_decay=cfg.weight_decay) + + # ---- training loop ---- + patience_n = 0 + best_val_loss = float("inf") + best_model = nnx.state(model) + epoch_pbar = tqdm(range(cfg.num_epochs), desc="Epoch") + for epoch in epoch_pbar: + # remake train loader each epoch to reshuffle with new seed + train_loader = make_loader( + data=prepared_data.train_data, + batch_size=cfg.batch_size, + seed=cfg.seed + epoch, + shuffle=True, + num_workers=cfg.num_workers, + drop_remainder=True, + ) + model.train() + train_losses: list[jax.Array] = [train_step(model, optimizer, batch["x"], batch[target_key], batch["w"]) for batch in train_loader] + + model.eval() + val_losses: list[jax.Array] = [eval_step(model, batch["x"], batch[target_key], batch["w"]) for batch in val_loader] + + avg_train_loss = float(jnp.mean(jnp.stack(train_losses))) + avg_val_loss = float(jnp.mean(jnp.stack(val_losses))) + epoch_pbar.set_postfix( + train=f"{avg_train_loss:.6f}", + val=f"{avg_val_loss:.6f}", + patience=f"{patience_n}/{cfg.patience}", + ) + if cfg.use_wandb: + wandb.log({"train/loss": avg_train_loss, "val/loss": avg_val_loss, "epoch": epoch}) + if epoch < cfg.min_epochs: + continue + if avg_val_loss < best_val_loss: + best_val_loss = avg_val_loss + best_model = nnx.state(model) + patience_n = 0 + else: + patience_n += 1 + if patience_n >= cfg.patience: + log.info(f"Early stopping at epoch {epoch} with best val loss {best_val_loss:.6f}") + break + + nnx.update(model, best_model) + save_checkpoint(cfg.checkpoint_dir, name, model) + + return model \ No newline at end of file From d1e2b51fca1bbd4c14ab01a0248afb94a4abffc9 Mon Sep 17 00:00:00 2001 From: Anmol Date: Fri, 17 Jul 2026 14:57:19 +0000 Subject: [PATCH 16/32] feat: Introduce model configuration and feature handling for RQS training - Added `types.py` to define `ModelFactory` and `ModelArtifact` protocols. - Created `export_config.yaml` for model export configurations. - Updated `train_config.yaml` to include dynamic naming for output files based on predictor and target. - Refactored feature handling in `features.py` to dynamically include the predictor in the feature list. - Modified `preprocess.py` to fit feature scalers based on the updated feature list. - Enhanced metrics computation in `metrics.py` to utilize the `ModelArtifact` protocol. - Implemented a factory method in `rqs.py` for model instantiation from configuration. - Updated `train_base.py` to use the new model factory method and removed redundant feature list handling. - Created `calibrate.py` for conformal calibration offset calculations. --- .gitignore | 2 + datasets/{split.csv => split_prev_y9-eir.csv} | 0 src/estimint/v2/common/types.py | 16 ++++++ src/estimint/v2/conf/export_config.yaml | 23 +++++++++ src/estimint/v2/conf/train_config.yaml | 12 +++-- src/estimint/v2/data/features.py | 18 +++++-- src/estimint/v2/data/preprocess.py | 40 +++++++-------- src/estimint/v2/eval/metrics.py | 5 +- src/estimint/v2/models/rqs.py | 50 ++++++------------- src/estimint/v2/train_base.py | 9 ++-- src/estimint/v2/training/calibrate.py | 13 +++++ 11 files changed, 120 insertions(+), 68 deletions(-) rename datasets/{split.csv => split_prev_y9-eir.csv} (100%) create mode 100644 src/estimint/v2/common/types.py create mode 100644 src/estimint/v2/conf/export_config.yaml create mode 100644 src/estimint/v2/training/calibrate.py diff --git a/.gitignore b/.gitignore index 2204766..0ff5b13 100644 --- a/.gitignore +++ b/.gitignore @@ -59,5 +59,7 @@ htmlcov/ train_outputs/ outputs/ *.out +test.ipynb + # Miscellaneous slurm.sh diff --git a/datasets/split.csv b/datasets/split_prev_y9-eir.csv similarity index 100% rename from datasets/split.csv rename to datasets/split_prev_y9-eir.csv diff --git a/src/estimint/v2/common/types.py b/src/estimint/v2/common/types.py new file mode 100644 index 0000000..5103a93 --- /dev/null +++ b/src/estimint/v2/common/types.py @@ -0,0 +1,16 @@ + +from typing import Literal, Protocol + +from flax import nnx +from omegaconf import DictConfig +import numpy as np + + +class ModelFactory(Protocol): + @classmethod + def from_cfg(cls, cfg: DictConfig, input_size: int) -> nnx.Module: ... + +class ModelArtifact(Protocol): + def predict(self, X_raw: np.ndarray) -> np.ndarray: ... + +PredictorType = Literal["prev_y9", "eir", "hbr_y9"] \ No newline at end of file diff --git a/src/estimint/v2/conf/export_config.yaml b/src/estimint/v2/conf/export_config.yaml new file mode 100644 index 0000000..e058f71 --- /dev/null +++ b/src/estimint/v2/conf/export_config.yaml @@ -0,0 +1,23 @@ +predictor: "prev_y9" +target: "eir" +name: "{predictor}-{target}" + +# Data +features_scaler_file: train_outputs/features_scaler.pkl +target_scaler_file: train_outputs/target_scaler.pkl + + +# Model - ensure these match the checkpointed model's parameters +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.0 +n_bins: 32 +rqs_bounds: 6 + +# Checkpointing +checkpoint_dir: ??? + +# General +seed: 42 +artifact_dir: "artifacts/${target}" \ No newline at end of file diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index 69bc152..a10d30e 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -1,15 +1,17 @@ +predictor: "prev_y9" +target: "eir" +name: "${predictor}-${target}" +# data data_file: "datasets/estimint_simulations_y9.parquet" -split_file: "datasets/split.csv" +split_file: "datasets/split_${name}.csv" num_workers: 0 use_existing_split: false -target: "eir" stratify: false calib_frac: 0.06 # model width: 256 depth: 4 -n_quad: 96 mlp_residual: false dropout_rate: 0.0 n_bins: 24 @@ -30,7 +32,7 @@ checkpoint_dir: "${output_dir}ckpts-${cur_time}" cur_time: ${now:%Y-%m-%dT%H:%M:%S} seed: 42 use_wandb: false -output_dir: "train_outputs/" +output_dir: "train_outputs/${name}" wandb: - project: "estimint-training" + project: "estimint-training-${name}" name: "train-${cur_time}" \ No newline at end of file diff --git a/src/estimint/v2/data/features.py b/src/estimint/v2/data/features.py index 3c6f6a7..226968b 100644 --- a/src/estimint/v2/data/features.py +++ b/src/estimint/v2/data/features.py @@ -1,8 +1,20 @@ import numpy as np - +from ..common.types import PredictorType # TODO: update to handle eir-> hbr, hbr -> eir (move prev9) -FEATURES_BASE = ["prev_y9", "dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use"] -MONOTONIC_FEATURES = ["prev_y9", "hbr_y9"] +FEATURES_BASE = ["dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use"] + +def get_features(predictor: PredictorType) -> list[str]: + """ + Get the list of features based on the predictor and target. + The predictor is is inserted at the beginning of the list of features. + + Args: + predictor: The predictor type. + Returns: + A list of feature names. + """ + return [predictor] + FEATURES_BASE + class StandardScaler: def __init__(self): diff --git a/src/estimint/v2/data/preprocess.py b/src/estimint/v2/data/preprocess.py index 1958ef3..1cc4ffa 100644 --- a/src/estimint/v2/data/preprocess.py +++ b/src/estimint/v2/data/preprocess.py @@ -6,7 +6,7 @@ import logging from pathlib import Path import numpy as np -from .features import StandardScaler, FEATURES_BASE +from .features import StandardScaler, get_features from estimint.data_processing import make_value_weights import pickle from dataclasses import dataclass, field @@ -243,9 +243,9 @@ def _save_split(path, split_ps: SplitParamSims): pd.DataFrame(rows, columns=["parameter_index", "simulation_index", "split"]).to_csv(path, index=False) log.info(f"Split saved to {path}") -def _fit_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: str, features: list[str] = FEATURES_BASE) -> StandardScaler: +def _fit_features_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: str, features: list[str]) -> StandardScaler: """ - Fit and save the static covariate scaler. + Fit and save the static feature scaler. Args: df: Filtered dataframe. @@ -265,7 +265,7 @@ def _fit_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: st scaler = StandardScaler() scaler.fit(train_static) - save_path = Path(output_dir) / "static_scaler.pkl" + save_path = Path(output_dir) / "features_scaler.pkl" save_path.parent.mkdir(parents=True, exist_ok=True) with open(save_path, "wb") as f: pickle.dump(scaler, f) @@ -304,8 +304,8 @@ def _build_data( param_sims: set[tuple[int, int]], scaler: StandardScaler, target_scaler: StandardScaler, - features: list[str] = FEATURES_BASE, - target: str = "eir" + features: list[str], + target ) -> list[dict[str, np.ndarray]]: """ Build scaled per-parameter-simulation training records. @@ -352,20 +352,16 @@ def _build_data( return data -# TODO: sort out exisitng splits and files with different models etc + + def prepare_data(df: pd.DataFrame, cfg: DictConfig, calib_frac: float = 0.0) -> PreparedData: """ Split and transform raw simulation data. Filters out low-signal parameter-simulation pairs, creates or loads the - train/val/test split, fits static covariate scaling on the train split only, + train/val/test split, fits static feature and target scaling on the train split only, and builds per-sequence records for each split. - Note: each malariasimulation run covers TOTAL_DAYS days: a MODEL_START_DAY's warmup followed by - TOTAL_DAYS - MODEL_START_DAY days of actual simulation. Only the latter are used here; the - warmup has already been discarded in the input `df` parameter. - The intervention is applied at INTERVENTION_DAY. - Args: df: Raw simulation dataframe. cfg: Data preparation config. @@ -397,21 +393,25 @@ def prepare_data(df: pd.DataFrame, cfg: DictConfig, calib_frac: float = 0.0) -> len(split_ps.test), ) - scaler = _fit_scaler(df, split_ps.train, cfg.output_dir) # TODO fix scaling + features = get_features(cfg.predictor) + features_scaler = _fit_features_scaler(df, split_ps.train, cfg.output_dir, features) target_scaler = _fit_target_scaler(df, split_ps.train, cfg.output_dir, target=cfg.target) - train_data = _build_data(df, split_ps.train, scaler, target_scaler, target=cfg.target) - val_data = _build_data(df, split_ps.val, scaler, target_scaler, target=cfg.target) - test_data = _build_data(df, split_ps.test, scaler, target_scaler, target=cfg.target) - calib_data = _build_data(df, split_ps.calib, scaler, target_scaler, target=cfg.target) + def build_data(param_sims): + return _build_data(df, param_sims, features_scaler, target_scaler, features, cfg.target) + + train_data = build_data(split_ps.train) + val_data = build_data(split_ps.val) + test_data = build_data(split_ps.test) + calib_data = build_data(split_ps.calib) return PreparedData( train_data=train_data, val_data=val_data, test_data=test_data, calib_data=calib_data, - input_size=len(FEATURES_BASE), - feature_scaler=scaler, + input_size=len(features), + feature_scaler=features_scaler, target_scaler=target_scaler, train_param_sims=split_ps.train, val_param_sims=split_ps.val, diff --git a/src/estimint/v2/eval/metrics.py b/src/estimint/v2/eval/metrics.py index 99c968c..5f4860d 100644 --- a/src/estimint/v2/eval/metrics.py +++ b/src/estimint/v2/eval/metrics.py @@ -2,6 +2,7 @@ from grain.python import DataLoader from estimint.utils import mse, r2, rmse, mae, bias from dataclasses import dataclass +from estimint.v2.common.types import ModelArtifact @dataclass class Metrics: @@ -12,7 +13,7 @@ class Metrics: bias: float def compute_metrics( - model_artifact, + model_artifact: ModelArtifact, loader: DataLoader, ): preds, targets = get_preds_targets(model_artifact, loader) @@ -26,7 +27,7 @@ def compute_metrics( ) -def get_preds_targets(model_artifact, data_loader: DataLoader) -> tuple[np.ndarray, np.ndarray]: +def get_preds_targets(model_artifact: ModelArtifact, data_loader: DataLoader) -> tuple[np.ndarray, np.ndarray]: all_preds, all_targets = [], [] for batch in data_loader: preds = model_artifact.predict(batch["x_raw"]) diff --git a/src/estimint/v2/models/rqs.py b/src/estimint/v2/models/rqs.py index f081e79..72e9502 100644 --- a/src/estimint/v2/models/rqs.py +++ b/src/estimint/v2/models/rqs.py @@ -3,9 +3,8 @@ import jax.numpy as jnp import jax from estimint.v2.data.features import StandardScaler -from estimint.utils import fit_qmap_w, predict_qmap_w, scale_pos import numpy as np - +from omegaconf import DictConfig class ConditionalRQS(nnx.Module): """Conditional rational-quadratic spline flow. @@ -14,7 +13,6 @@ class ConditionalRQS(nnx.Module): Usually it is as x = T(z) where z ~ N(0, 1). Here, we have defined z = T(x) where z ~ N(0, 1). And x = T^{-1}(z) - """ def __init__(self, n_context, *, width=128, depth=4, n_bins=12, bounds=6, residual=False, dropout_rate=0.0, rngs: nnx.Rngs): self.K = n_bins @@ -60,21 +58,28 @@ def _invert(z_scalar): return jax.vmap(_invert)(zs) # (Q, B) + @classmethod + def from_cfg(cls, cfg: DictConfig, n_context: int) -> "ConditionalRQS": + return cls( + n_context, + rngs=nnx.Rngs(cfg.seed), + width=cfg.width, + depth=cfg.depth, + n_bins=cfg.n_bins, + bounds=cfg.rqs_bounds, + residual=cfg.mlp_residual, + dropout_rate=cfg.dropout_rate) + @nnx.jit def _forward(model: nnx.Module, context: jnp.ndarray, quantile: float): return model.quantile(context, quantile) # type: ignore -@nnx.jit -def _forward_quantiles(model: nnx.Module, context: jnp.ndarray, probs: jnp.ndarray): - return model.quantiles(context, probs) # type: ignore - class RQSArtifact: - def __init__(self, model: nnx.Module, feature_scaler: StandardScaler, target_scaler: StandardScaler, features: list[str]): + def __init__(self, model: nnx.Module, feature_scaler: StandardScaler, target_scaler: StandardScaler): self.model = model self.feature_scaler = feature_scaler self.target_scaler = target_scaler - self.features = features - self.conformal = {} # alpha -> offset Q + self.conformal = dict() # alpha -> offset Q def _quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: context = jnp.array(self.feature_scaler.transform(X_raw)) @@ -94,34 +99,11 @@ def interval(self, X_raw: np.ndarray, alpha: float = 0.10) -> tuple[np.ndarray, Q = self.conformal.get(alpha, 0.0) return np.maximum(0, lower - Q), upper + Q -def conformal_offset(lower: np.ndarray, upper: np.ndarray, y_true: np.ndarray, alpha: float = 0.10) -> float: - """Split-conformal (CQR, Romano 2019) width correction on a HELD-OUT split. - - Returns offset Q so that widening to [lo-Q, hi+Q] gives >= (1-alpha) - marginal coverage. Fit this on the CALIB split (disjoint from the val split - used for early stopping) so the guarantee is honest. - """ - scores = np.maximum(lower - y_true, y_true - upper) - n = len(scores) - k = np.ceil((n + 1) * (1 - alpha)).astype(int) - return float(np.sort(scores)[k - 1]) - +# ------------ RQS loss ---------------- def rqs_loss(model, X, y0, w): - """ - Compute the negative log-likelihood loss for the conditional rational-quadratic spline flow model. - - Args: - model: An instance of the ConditionalRQS model. - X: Input context data (features). - y0: Standardized target data (labels). - w: Sample weights for each data point. - Returns: - The average negative log-likelihood loss, weighted by the sample weights. - """ log_prob = model.log_prob(y0, X) return -jnp.sum(w * log_prob) / jnp.sum(w) - # ------------ RQS utils ---------------- def _spline_knots(raw_widths: jax.Array, raw_heights: jax.Array, raw_derivatives: jax.Array, bounds: int, n_points: int): """Map unconstrained net outputs to positive bin sizes/derivatives and knot coordinates. diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index 3f7fd6c..a8a4814 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -9,20 +9,21 @@ from .data.preprocess import PreparedData, prepare_data from .data.dataset import make_loader import wandb -from .data.features import FEATURES_BASE +from .data.features import get_features from flax import nnx from .training.train_step import train_model import numpy as np from estimint.v2.eval.metrics import compute_metrics -from .models.rqs import ConditionalRQS, rqs_loss, RQSArtifact, conformal_offset +from .models.rqs import ConditionalRQS, rqs_loss, RQSArtifact +from .training.calibrate import conformal_offset log = logging.getLogger(__name__) def train_rqs(cfg: DictConfig, prepared_data: PreparedData): - model = ConditionalRQS(len(FEATURES_BASE), rngs=nnx.Rngs(cfg.seed), width=cfg.width, depth=cfg.depth, n_bins=cfg.n_bins, bounds=cfg.rqs_bounds, residual=cfg.mlp_residual, dropout_rate=cfg.dropout_rate) + model = ConditionalRQS.from_cfg(cfg, n_context=len(get_features(cfg.predictor))) model = train_model(model, cfg, prepared_data, rqs_loss, name="RQS", use_standardized_y=True) - rqs_artifact = RQSArtifact(model, prepared_data.feature_scaler, prepared_data.target_scaler, FEATURES_BASE) + rqs_artifact = RQSArtifact(model, prepared_data.feature_scaler, prepared_data.target_scaler) # ------------ calibration ------------------- calib_loader = make_loader( diff --git a/src/estimint/v2/training/calibrate.py b/src/estimint/v2/training/calibrate.py new file mode 100644 index 0000000..2571297 --- /dev/null +++ b/src/estimint/v2/training/calibrate.py @@ -0,0 +1,13 @@ +import numpy as np + +def conformal_offset(lower: np.ndarray, upper: np.ndarray, y_true: np.ndarray, alpha: float = 0.10) -> float: + """Split-conformal (CQR, Romano 2019) width correction on a HELD-OUT split. + + Returns offset Q so that widening to [lo-Q, hi+Q] gives >= (1-alpha) + marginal coverage. Fit this on the CALIB split (disjoint from the val split + used for early stopping) so the guarantee is honest. + """ + scores = np.maximum(lower - y_true, y_true - upper) + n = len(scores) + k = np.ceil((n + 1) * (1 - alpha)).astype(int) + return float(np.sort(scores)[k - 1]) From d0dd8e312863765500d2723534bae5b2710b2d5a Mon Sep 17 00:00:00 2001 From: Anmol Date: Fri, 17 Jul 2026 15:14:35 +0000 Subject: [PATCH 17/32] changes to config --- src/estimint/v2/conf/export_config.yaml | 6 +++--- src/estimint/v2/conf/sweeps/prev_eir.yaml | 6 ++---- src/estimint/v2/conf/train_config.yaml | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/estimint/v2/conf/export_config.yaml b/src/estimint/v2/conf/export_config.yaml index e058f71..37e989a 100644 --- a/src/estimint/v2/conf/export_config.yaml +++ b/src/estimint/v2/conf/export_config.yaml @@ -3,8 +3,8 @@ target: "eir" name: "{predictor}-{target}" # Data -features_scaler_file: train_outputs/features_scaler.pkl -target_scaler_file: train_outputs/target_scaler.pkl +features_scaler_file: train_outputs/${name}/features_scaler.pkl +target_scaler_file: train_outputs/${name}/target_scaler.pkl # Model - ensure these match the checkpointed model's parameters @@ -20,4 +20,4 @@ checkpoint_dir: ??? # General seed: 42 -artifact_dir: "artifacts/${target}" \ No newline at end of file +artifact_dir: "artifacts/${name}" \ No newline at end of file diff --git a/src/estimint/v2/conf/sweeps/prev_eir.yaml b/src/estimint/v2/conf/sweeps/prev_eir.yaml index 6190e69..7e358f8 100644 --- a/src/estimint/v2/conf/sweeps/prev_eir.yaml +++ b/src/estimint/v2/conf/sweeps/prev_eir.yaml @@ -14,21 +14,19 @@ parameters: batch_size: values: [256, 512] dropout_rate: - values: [0.0, 0.05] + values: [0.0, 0.05, 0.1] # model-specific width: values: [256, 512] depth: - values: [2, 4, 6] + values: [2, 3, 4] n_bins: values: [24, 32] rqs_bounds: values: [6, 8] mlp_residual: values: [true, false] - stratify: - values: [true, false] command: diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index a10d30e..b0df781 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -26,7 +26,7 @@ batch_size: 256 weight_decay: 1e-4 # Checkpoint -checkpoint_dir: "${output_dir}ckpts-${cur_time}" +checkpoint_dir: "${output_dir}/ckpts-${cur_time}" # General cur_time: ${now:%Y-%m-%dT%H:%M:%S} From 923a369117a3901a8f4c755f1fd33aa8aaaaaf5a Mon Sep 17 00:00:00 2001 From: Anmol Date: Wed, 5 Aug 2026 11:23:25 +0000 Subject: [PATCH 18/32] Add model export functionality and sweep configuration for HBR EIR - Introduced a new sweep configuration file `hbr_eir.yaml` for hyperparameter tuning using Bayesian optimization. - Implemented `model_export.py` to export trained models along with their scalers and configuration for sharing. - Created `hub.py` to facilitate loading model artifacts from local or Hugging Face repositories. - Added logging for training processes in `train_base.log` to capture model training details and performance metrics. --- .gitignore | 2 + datasets/split_eir-hbr_y9.csv | 12875 +++++++++++++++++++++ datasets/split_hbr_y9-eir.csv | 12875 +++++++++++++++++++++ pyproject.toml | 1 + src/estimint/v2/conf/export_config.yaml | 7 +- src/estimint/v2/conf/sweeps/hbr_eir.yaml | 42 + src/estimint/v2/conf/train_config.yaml | 5 +- src/estimint/v2/data/features.py | 10 +- src/estimint/v2/model_export.py | 61 + src/estimint/v2/models/hub.py | 89 + src/estimint/v2/models/rqs.py | 85 +- src/estimint/v2/train_base.py | 5 +- src/estimint/v2/training/checkpoint.py | 5 - train_base.log | 118 + uv.lock | 2 + 15 files changed, 26159 insertions(+), 23 deletions(-) create mode 100644 datasets/split_eir-hbr_y9.csv create mode 100644 datasets/split_hbr_y9-eir.csv create mode 100644 src/estimint/v2/conf/sweeps/hbr_eir.yaml create mode 100644 src/estimint/v2/model_export.py create mode 100644 src/estimint/v2/models/hub.py create mode 100644 train_base.log diff --git a/.gitignore b/.gitignore index 0ff5b13..7f31121 100644 --- a/.gitignore +++ b/.gitignore @@ -42,6 +42,7 @@ output/ scripts/output/ *logs/ wandb/ +.log # Model training artifacts (regenerable; shipped copies live in src/estimint/data/) models/**/*.parquet @@ -60,6 +61,7 @@ train_outputs/ outputs/ *.out test.ipynb +artifacts/ # Miscellaneous slurm.sh diff --git a/datasets/split_eir-hbr_y9.csv b/datasets/split_eir-hbr_y9.csv new file mode 100644 index 0000000..49a4fd7 --- /dev/null +++ b/datasets/split_eir-hbr_y9.csv @@ -0,0 +1,12875 @@ +parameter_index,simulation_index,split +1128,4,train +2344,2,train +2478,2,train +1820,2,train +1999,4,train +1603,4,train +2295,2,train +1899,2,train +2033,2,train +1637,2,train +2508,2,train +2112,2,train +2945,3,train +2246,2,train +1850,2,train +2029,4,train +1767,4,train +2845,1,train +2325,2,train +2063,2,train +3058,1,train +64,2,train +3271,1,train +277,2,train +3009,1,train +3484,1,train +3088,1,train +3222,1,train +2826,1,train +3005,3,train +3046,4,train +2347,3,train +2784,4,train +2481,3,train +3301,1,train +307,2,train +348,3,train +744,3,train +2643,1,train +45,2,train +482,3,train +3039,1,train +3259,4,train +3655,4,train +2694,3,train +778,1,train +3514,1,train +3555,2,train +957,3,train +2856,1,train +299,3,train +2990,1,train +3076,4,train +2773,3,train +857,1,train +991,1,train +3768,2,train +3902,2,train +3506,2,train +512,3,train +3289,4,train +3027,4,train +2765,4,train +1070,1,train +3981,2,train +3585,2,train +1028,4,train +3282,1,train +766,4,train +3061,2,train +67,3,train +2844,4,train +3240,4,train +2978,4,train +625,1,train +1241,4,train +1375,4,train +979,4,train +3274,2,train +3670,2,train +676,3,train +1496,1,train +1275,2,train +1454,4,train +576,1,train +3353,2,train +3749,2,train +3790,3,train +796,4,train +3487,2,train +1051,1,train +1488,2,train +1185,1,train +3962,2,train +3566,2,train +4003,3,train +1009,4,train +706,3,train +1567,2,train +1701,2,train +1305,2,train +1484,4,train +606,1,train +1043,2,train +3820,3,train +3954,3,train +564,4,train +1914,2,train +1652,2,train +1256,2,train +4033,3,train +1435,4,train +3771,3,train +777,4,train +1731,2,train +1772,3,train +1032,1,train +1073,2,train +1944,2,train +1723,3,train +4018,1,train +1420,2,train +1203,4,train +2198,3,train +1802,3,train +1936,3,train +1103,2,train +2494,1,train +2015,3,train +2452,4,train +1712,2,train +1316,2,train +2149,3,train +1491,3,train +2311,1,train +2665,4,train +1966,3,train +2262,1,train +2699,2,train +2441,3,train +2878,4,train +2179,3,train +2616,4,train +2737,1,train +2912,2,train +2079,1,train +2609,1,train +2213,1,train +2695,4,train +3091,4,train +2829,4,train +2688,1,train +2292,1,train +131,3,train +2426,1,train +2030,1,train +2512,4,train +2646,4,train +2250,4,train +293,1,train +2639,1,train +2243,1,train +2680,2,train +3121,4,train +2201,4,train +244,1,train +3417,2,train +2759,2,train +202,4,train +2456,1,train +2893,2,train +2676,4,train +2280,4,train +719,1,train +457,1,train +61,1,train +591,1,train +3409,3,train +811,4,train +415,4,train +2710,2,train +2669,1,train +2493,4,train +3705,1,train +670,1,train +711,2,train +3488,3,train +12,1,train +232,4,train +621,1,train +662,2,train +3398,2,train +2740,2,train +142,3,train +183,4,train +741,2,train +3869,1,train +438,1,train +479,2,train +3256,3,train +4089,4,train +176,1,train +658,4,train +2953,2,train +396,4,train +3948,1,train +1350,2,train +3686,1,train +1088,2,train +692,2,train +3469,3,train +3865,3,train +389,1,train +3906,4,train +213,4,train +3765,1,train +1167,2,train +1208,3,train +468,1,train +509,2,train +3682,3,train +643,2,train +3420,3,train +3816,3,train +3554,3,train +560,4,train +1421,3,train +3716,1,train +1118,2,train +722,2,train +1159,3,train +1555,3,train +856,2,train +3633,3,train +4070,4,train +3454,1,train +3237,3,train +3936,4,train +1851,1,train +1768,3,train +935,2,train +539,2,train +3667,1,train +3846,3,train +3450,3,train +1668,1,train +1847,3,train +1451,3,train +3746,1,train +1189,3,train +1626,4,train +3704,4,train +3838,4,train +2143,1,train +1747,1,train +1881,1,train +1798,3,train +1839,4,train +3917,4,train +4051,4,train +2094,1,train +2135,2,train +1832,1,train +1436,1,train +1353,3,train +2045,1,train +2131,4,train +2265,4,train +1432,3,train +1869,4,train +2124,1,train +2561,2,train +1862,1,train +1466,1,train +2344,4,train +1820,4,train +2640,2,train +2378,2,train +2075,1,train +1679,1,train +2116,2,train +1813,1,train +1899,4,train +2295,4,train +2033,4,train +1637,4,train +2853,2,train +2591,2,train +2195,2,train +1892,1,train +2112,4,train +1850,4,train +27,1,train +2408,2,train +2845,3,train +2105,1,train +2146,2,train +2542,2,train +2325,4,train +1884,2,train +2063,4,train +106,1,train +147,2,train +2621,2,train +3058,3,train +64,4,train +2359,2,train +2097,2,train +3092,1,train +57,1,train +98,2,train +3271,3,train +277,4,train +2572,2,train +2176,2,train +2613,3,train +3009,3,train +3567,1,train +3305,1,train +311,2,train +3088,3,train +3222,3,train +2826,3,train +3780,1,train +3384,1,train +786,2,train +3518,1,train +87,1,train +128,2,train +2860,1,train +3301,3,train +307,4,train +2602,2,train +2643,3,train +3039,3,train +45,4,train +3080,4,train +3342,4,train +644,3,train +3335,1,train +341,2,train +778,3,train +3073,1,train +3555,4,train +2856,3,train +2990,3,train +1074,1,train +3851,2,train +857,3,train +3548,1,train +991,3,train +158,2,train +3372,4,train +3768,4,train +292,2,train +3506,4,train +4064,2,train +1070,3,train +3802,2,train +371,2,train +3103,1,train +3499,1,train +3585,4,train +3282,3,train +3981,4,train +3061,4,train +3881,2,train +842,1,train +3619,2,train +4015,2,train +625,3,train +3753,2,train +363,3,train +3140,4,train +3670,4,train +3274,4,train +1055,1,train +3832,2,train +1275,4,train +3570,2,train +576,3,train +3353,4,train +3749,4,train +3487,4,train +1571,2,train +872,1,train +4045,2,train +1051,3,train +1488,4,train +3783,2,train +393,3,train +3566,4,train +1481,1,train +1085,1,train +1567,4,train +3862,2,train +1701,4,train +823,1,train +1305,4,train +4037,3,train +606,3,train +1043,4,train +1560,1,train +1298,1,train +902,1,train +1735,2,train +1122,4,train +3813,2,train +1256,4,train +1814,2,train +1115,1,train +1249,1,train +1731,4,train +4026,2,train +4067,3,train +1032,3,train +1073,4,train +3805,3,train +2027,2,train +1765,2,train +1369,2,train +4018,3,train +1420,4,train +2240,2,train +1978,2,train +2019,3,train +1716,2,train +1103,4,train +2494,3,train +1399,2,train +1533,2,train +1316,4,train +2924,1,train +2528,1,train +2311,3,train +2049,3,train +1787,3,train +2607,1,train +3137,1,train +2741,1,train +2262,3,train +2699,4,train +2820,1,train +222,2,train +2954,1,train +1,3,train +2296,1,train +2737,3,train +2778,4,train +2912,4,train +2079,3,train +2213,3,train +3033,1,train +3208,2,train +2509,1,train +2688,3,train +2292,3,train +2426,3,train +2030,3,train +293,3,train +3025,2,train +3421,2,train +2722,1,train +2546,4,train +2243,3,train +2680,4,train +2801,1,train +3238,2,train +244,3,train +2539,1,train +2976,2,train +3417,4,train +2759,4,train +2456,3,train +2893,4,train +540,1,train +719,3,train +3451,2,train +3055,2,train +457,3,train +61,3,train +498,4,train +3189,2,train +2576,4,train +2710,4,train +753,1,train +491,1,train +3664,2,train +3705,3,train +670,3,train +711,4,train +2965,1,train +3006,2,train +12,3,train +2744,2,train +966,1,train +308,1,train +3481,2,train +662,4,train +2957,2,train +2740,4,train +917,1,train +521,1,train +958,2,train +655,1,train +741,4,train +3432,2,train +3473,3,train +438,3,train +479,4,train +3869,3,train +176,3,train +2953,4,train +338,1,train +3948,3,train +558,4,train +3686,3,train +1088,4,train +692,4,train +3383,2,train +1250,2,train +3982,1,train +947,1,train +551,1,train +988,2,train +3765,3,train +1167,4,train +3503,3,train +468,3,train +509,4,train +3241,3,train +643,4,train +1201,2,train +805,2,train +3716,3,train +722,4,train +3454,3,train +856,4,train +1676,2,train +1414,2,train +1018,2,train +1851,3,train +3750,1,train +1152,2,train +935,4,train +539,4,train +3667,3,train +1231,2,train +1668,3,train +3963,1,train +969,2,train +3746,3,train +3921,4,train +2143,3,train +1747,3,train +4042,1,train +1881,3,train +1182,2,train +1223,3,train +1915,1,train +2094,3,train +2135,4,train +1395,2,train +1436,3,train +1832,3,train +2390,1,train +2128,1,train +1732,1,train +2214,4,train +1253,3,train +2341,1,train +1945,1,train +2124,3,train +2561,4,train +1862,3,train +1466,3,train +1903,4,train +2420,1,train +2158,1,train +1762,1,train +2640,4,train +2378,4,train +1679,3,train +2116,4,train +2371,1,train +2412,2,train +2853,4,train +2591,4,train +2195,4,train +1892,3,train +110,1,train +2887,2,train +2491,2,train +2188,1,train +1792,1,train +2408,4,train +2542,4,train +2146,4,train +1884,4,train +189,1,train +323,1,train +106,3,train +147,4,train +2401,1,train +2442,2,train +2879,3,train +2621,4,train +2180,2,train +2359,4,train +2097,4,train +2917,2,train +2655,2,train +3092,3,train +98,4,train +2572,4,train +2176,4,train +3388,1,train +353,1,train +394,2,train +3567,3,train +3305,3,train +2909,3,train +311,4,train +2606,2,train +473,2,train +3601,1,train +170,1,train +607,2,train +3384,3,train +3780,3,train +3518,3,train +128,4,train +2819,2,train +2860,3,train +3814,1,train +820,2,train +861,3,train +3156,1,train +3335,3,train +341,4,train +3073,3,train +3893,1,train +4027,1,train +3631,1,train +1074,3,train +3851,4,train +771,2,train +3548,3,train +158,4,train +292,4,train +3448,1,train +3885,2,train +891,3,train +3186,1,train +3582,1,train +588,2,train +3802,4,train +4064,4,train +371,4,train +3103,3,train +667,2,train +3399,1,train +3795,1,train +3881,4,train +4015,4,train +842,3,train +3619,4,train +3753,4,train +3357,4,train +1138,1,train +3874,1,train +3915,2,train +921,3,train +3612,1,train +618,2,train +1055,3,train +3832,4,train +3570,4,train +1351,1,train +1571,4,train +3429,1,train +3866,2,train +872,3,train +4045,4,train +3783,4,train +1564,1,train +1085,3,train +689,3,train +3862,4,train +823,3,train +2039,1,train +1777,1,train +1381,1,train +1560,3,train +1119,1,train +3896,2,train +1298,3,train +902,3,train +1735,4,train +4030,2,train +3813,4,train +1856,1,train +2031,2,train +1198,1,train +1814,4,train +1418,4,train +1115,3,train +1249,3,train +4026,4,train +2110,2,train +1807,1,train +1411,1,train +1545,1,train +2027,4,train +3926,2,train +1765,4,train +1369,4,train +1107,4,train +1927,2,train +1624,1,train +1978,4,train +1716,4,train +1878,2,train +2315,3,train +1575,1,train +1616,2,train +1399,4,train +1533,4,train +2924,3,train +2528,3,train +2225,2,train +1829,2,train +2607,3,train +2304,2,train +2345,3,train +2741,3,train +2042,2,train +1646,2,train +3037,1,train +43,2,train +2820,3,train +2954,3,train +2255,2,train +2296,3,train +3250,1,train +2854,1,train +3033,3,train +2592,1,train +3208,4,train +2375,3,train +2509,3,train +73,2,train +2805,1,train +3201,1,train +3421,4,train +3025,4,train +2722,3,train +286,2,train +327,3,train +2622,1,train +24,2,train +2801,3,train +3238,4,train +2539,3,train +2976,4,train +3493,1,train +3097,1,train +3534,2,train +540,3,train +2835,1,train +237,2,train +2969,1,train +2573,1,train +3055,4,train +3451,4,train +3189,4,train +836,1,train +970,1,train +574,1,train +753,3,train +357,3,train +54,2,train +2786,1,train +95,3,train +491,3,train +3006,4,train +2744,4,train +1049,1,train +1183,1,train +787,1,train +3960,2,train +966,3,train +3302,2,train +308,3,train +2999,1,train +3481,4,train +2823,4,train +2957,4,train +866,1,train +604,1,train +3911,2,train +3515,2,train +521,3,train +958,4,train +3253,2,train +655,3,train +3432,4,train +1475,1,train +1213,1,train +1254,2,train +3990,2,train +4031,3,train +951,1,train +555,1,train +3728,2,train +3769,3,train +338,3,train +775,4,train +3466,2,train +1333,2,train +1030,1,train +1250,4,train +3545,2,train +3982,3,train +551,3,train +988,4,train +1546,2,train +1680,2,train +1284,2,train +585,1,train +3758,2,train +1201,4,train +805,4,train +1893,2,train +1497,2,train +798,1,train +1235,2,train +1414,4,train +1018,4,train +3750,3,train +1152,4,train +1972,2,train +1710,2,train +1314,2,train +1231,4,train +3963,3,train +969,4,train +1661,2,train +1265,2,train +4042,3,train +1182,4,train +2260,1,train +4076,1,train +1478,2,train +1915,3,train +2390,3,train +1691,2,train +1295,2,train +1732,3,train +2128,3,train +2686,1,train +2424,1,train +1945,3,train +2503,1,train +2637,1,train +2420,3,train +1721,2,train +1762,3,train +2158,3,train +2716,1,train +2454,1,train +2192,1,train +2412,4,train +1579,3,train +193,1,train +2929,1,train +2667,1,train +2271,1,train +110,3,train +2405,1,train +2491,4,train +2887,4,train +2188,3,train +1792,3,train +2229,4,train +1967,4,train +406,1,train +10,1,train +2787,2,train +189,3,train +2484,1,train +2088,1,train +3317,2,train +2222,1,train +2442,4,train +2180,4,train +223,1,train +3396,2,train +2697,1,train +2738,2,train +181,4,train +2917,4,train +2655,4,train +2259,4,train +40,1,train +174,1,train +2951,2,train +3388,3,train +394,4,train +2689,2,train +3085,2,train +2606,4,train +649,1,train +253,1,train +690,2,train +3467,3,train +473,4,train +2768,2,train +3164,2,train +170,3,train +607,4,train +2902,2,train +3205,3,train +3601,3,train +70,1,train +204,1,train +2981,2,train +3377,2,train +820,4,train +3814,3,train +3156,3,train +679,1,train +720,2,train +3893,3,train +417,1,train +458,2,train +3631,3,train +2932,2,train +1329,2,train +3665,1,train +3448,3,train +3885,4,train +368,1,train +3145,2,train +3186,3,train +3582,3,train +588,4,train +3744,1,train +1146,2,train +750,2,train +1187,3,train +3964,4,train +667,4,train +3399,3,train +3957,1,train +4091,1,train +1138,3,train +3874,3,train +3915,4,train +3612,3,train +3653,4,train +618,4,train +3512,1,train +1351,3,train +3646,1,train +3429,3,train +3866,4,train +1647,1,train +1127,2,train +1564,3,train +865,2,train +1726,1,train +1860,1,train +1464,1,train +1381,3,train +1119,3,train +3896,4,train +4030,4,train +2073,1,train +1677,1,train +1856,3,train +1415,1,train +2031,4,train +1198,3,train +936,3,train +2152,1,train +1890,1,train +1494,1,train +1628,1,train +2110,4,train +1411,3,train +1545,3,train +3926,4,train +2144,2,train +1841,1,train +1445,1,train +1927,4,train +1624,3,train +1665,4,train +2753,2,train +1658,1,train +1878,4,train +1575,3,train +1616,4,train +2012,4,train +2133,1,train +2308,2,train +1912,2,train +1829,4,train +6,1,train +2125,2,train +2304,4,train +2042,4,train +1646,4,train +85,1,train +126,2,train +3037,3,train +2641,3,train +43,4,train +1942,2,train +339,2,train +77,2,train +2854,3,train +3250,3,train +2155,2,train +2592,3,train +2289,2,train +3284,1,train +290,2,train +73,4,train +2805,3,train +3201,3,train +3363,1,train +765,2,train +369,2,train +3497,1,train +503,2,train +3321,4,train +286,4,train +2581,2,train +2622,3,train +3059,4,train +24,4,train +3180,1,train +582,2,train +623,3,train +320,2,train +3097,3,train +3534,4,train +2835,3,train +2969,3,train +2573,3,train +3789,1,train +836,3,train +3527,1,train +533,2,train +137,2,train +574,3,train +970,3,train +54,4,train +2786,3,train +1266,1,train +1049,3,train +653,3,train +2948,1,train +1183,3,train +3478,1,train +350,2,train +787,3,train +3344,1,train +88,2,train +3302,4,train +3960,4,train +2999,3,train +866,3,train +3161,1,train +3994,2,train +563,2,train +604,3,train +1041,4,train +3336,2,train +342,3,train +3515,4,train +3253,4,train +1296,1,train +900,1,train +4073,2,train +3990,4,train +1254,4,train +3549,2,train +951,3,train +555,3,train +3728,4,train +3466,4,train +1333,4,train +3628,2,train +4024,2,train +1030,3,train +3366,2,train +3545,4,train +1326,1,train +930,1,train +1460,1,train +1546,4,train +3841,2,train +1064,1,train +1680,4,train +1284,4,train +3579,2,train +3975,2,train +585,3,train +3758,4,train +1539,1,train +1580,2,train +1497,4,train +1101,4,train +3792,2,train +798,3,train +1235,4,train +2189,2,train +1793,2,train +1490,1,train +1094,1,train +1228,1,train +1314,4,train +1710,4,train +4005,2,train +1610,2,train +1307,1,train +911,1,train +1348,2,train +1744,2,train +1265,4,train +869,4,train +2219,2,train +1823,2,train +2260,3,train +1957,2,train +1561,2,train +4076,3,train +1478,4,train +1774,2,train +1378,2,train +1295,4,train +2507,1,train +2686,3,train +1987,2,train +2424,3,train +2720,1,train +2503,3,train +2107,3,train +2637,3,train +2799,1,train +2716,3,train +2275,1,train +2757,4,train +2454,3,train +2192,3,train +1796,3,train +3012,1,train +193,3,train +2488,1,train +2667,3,train +2271,3,train +2405,3,train +3225,1,train +3400,2,train +2567,1,train +3004,2,train +406,3,train +10,3,train +2305,1,train +2787,4,train +2701,1,train +2484,3,train +2088,3,train +2525,4,train +2222,3,train +89,3,train +2780,1,train +223,3,train +2518,1,train +3396,4,train +2738,4,train +519,1,train +3296,2,train +257,1,train +2993,1,train +3034,2,train +3430,2,train +40,3,train +3168,2,train +2772,2,train +174,3,train +2951,4,train +2689,4,train +732,1,train +3247,2,train +253,3,train +690,4,train +2548,1,train +2985,2,train +3164,4,train +2768,4,train +2902,4,train +549,1,train +287,1,train +3064,2,train +3460,2,train +70,3,train +507,4,train +2761,1,train +204,3,train +2981,4,train +896,1,train +500,1,train +238,1,train +720,4,train +3411,2,train +417,3,train +458,4,train +2932,4,train +975,1,train +1016,2,train +713,1,train +1150,2,train +451,1,train +3665,3,train +3961,1,train +926,1,train +1363,2,train +3744,3,train +664,1,train +750,4,train +1146,4,train +3441,2,train +4040,1,train +1046,2,train +784,2,train +3957,3,train +4091,3,train +1655,2,train +1259,2,train +997,2,train +1434,3,train +3729,1,train +1131,2,train +735,2,train +3512,3,train +3949,4,train +3646,3,train +1210,2,train +814,2,train +1647,3,train +1344,2,train +3942,1,train +865,4,train +1943,1,train +1726,3,train +4021,1,train +1860,3,train +1027,2,train +1464,3,train +3759,1,train +1161,2,train +1202,3,train +2156,1,train +2073,3,train +1677,3,train +1415,3,train +2152,3,train +1711,1,train +1890,3,train +1494,3,train +1931,4,train +1628,3,train +1232,3,train +4009,4,train +2448,1,train +2144,4,train +1841,3,train +1445,3,train +2399,1,train +2440,2,train +1741,1,train +2223,4,train +1961,4,train +1658,3,train +2653,2,train +2391,2,train +2308,4,train +1912,4,train +2866,2,train +2470,2,train +2167,1,train +1771,1,train +1991,4,train +2125,4,train +168,1,train +302,1,train +3079,2,train +126,4,train +2380,1,train +2421,2,train +2159,2,train +1942,4,train +381,1,train +339,4,train +2634,2,train +2238,2,train +77,4,train +2372,2,train +2155,4,train +2289,4,train +198,1,train +332,1,train +373,2,train +2847,2,train +2888,3,train +3284,3,train +290,4,train +452,2,train +3580,1,train +149,1,train +3363,3,train +369,4,train +2664,2,train +3497,3,train +3659,1,train +665,2,train +3793,1,train +799,2,train +3180,3,train +582,4,train +141,2,train +2877,2,train +2918,3,train +320,4,train +2656,3,train +3872,1,train +3476,1,train +878,2,train +4006,1,train +616,2,train +220,2,train +3348,1,train +3527,3,train +137,4,train +4085,1,train +1091,2,train +829,2,train +1266,3,train +3561,1,train +130,1,train +171,2,train +567,2,train +2948,3,train +350,4,train +3344,3,train +3385,4,train +88,4,train +4036,1,train +646,2,train +3378,1,train +3774,1,train +780,2,train +3994,4,train +3161,3,train +3336,4,train +1379,1,train +3894,2,train +859,2,train +900,3,train +1296,3,train +3195,1,train +597,2,train +638,3,train +3415,4,train +3811,4,train +4073,4,train +3549,4,train +1592,1,train +3804,1,train +3845,2,train +4024,4,train +3628,4,train +3366,4,train +1805,1,train +1409,1,train +1543,1,train +1326,3,train +930,3,train +1367,4,train +627,2,train +668,3,train +1064,3,train +3841,4,train +3975,4,train +3579,4,train +1360,1,train +1539,3,train +1580,4,train +3792,4,train +1835,1,train +1876,2,train +1793,4,train +915,1,train +1094,3,train +698,3,train +4005,4,train +2089,2,train +1786,1,train +1390,1,train +1827,2,train +1524,1,train +1128,1,train +1610,4,train +1307,3,train +911,3,train +1348,4,train +1744,4,train +2302,2,train +1906,2,train +1603,1,train +1207,1,train +2040,2,train +1823,4,train +1957,4,train +1561,4,train +2515,2,train +2119,2,train +2253,2,train +2294,3,train +1774,4,train +1378,4,train +2332,2,train +2070,2,train +2507,3,train +2803,1,train +2720,3,train +1887,2,train +2324,3,train +2021,2,train +1625,2,train +22,2,train +2799,3,train +2100,2,train +1838,2,train +2275,3,train +101,2,train +235,2,train +3012,3,train +2313,2,train +2051,2,train +2092,3,train +2488,3,train +314,2,train +3046,1,train +2784,1,train +3400,4,train +2567,3,train +3004,4,train +2264,2,train +2305,3,train +2701,3,train +3259,1,train +306,3,train +3,2,train +2780,3,train +2518,3,train +2122,3,train +3076,1,train +3513,2,train +519,3,train +3296,4,train +257,3,train +2552,1,train +2993,3,train +3034,4,train +3168,4,train +2772,4,train +3430,4,train +3289,1,train +3726,2,train +295,2,train +732,3,train +3027,1,train +74,3,train +2765,1,train +2851,4,train +3247,4,train +2548,3,train +2985,4,train +1028,1,train +766,1,train +3939,2,train +549,3,train +2844,1,train +3240,1,train +3677,2,train +287,3,train +2978,1,train +3064,4,train +3460,4,train +2761,3,train +1241,1,train +845,1,train +979,1,train +803,4,train +3494,2,train +500,3,train +104,3,train +238,3,train +3411,4,train +796,1,train +975,3,train +534,1,train +1016,4,train +3311,2,train +713,3,train +1150,4,train +3445,2,train +3707,2,train +451,3,train +3748,3,train +1009,1,train +1446,2,train +833,4,train +3961,3,train +1363,4,train +3262,2,train +3441,4,train +1659,2,train +4040,3,train +564,1,train +1046,4,train +3778,3,train +784,4,train +522,4,train +1738,2,train +1342,2,train +1476,2,train +777,1,train +1259,4,train +997,4,train +3688,2,train +3729,3,train +1131,4,train +735,4,train +1951,2,train +1689,2,train +1293,2,train +4025,1,train +1427,2,train +1210,4,train +814,4,train +3942,3,train +1943,3,train +1640,2,train +1244,2,train +4021,3,train +1027,4,train +3759,3,train +1161,4,train +1719,2,train +1323,2,train +2156,3,train +4055,1,train +1457,2,train +1061,2,train +2452,1,train +1670,2,train +1274,2,train +1711,3,train +2665,1,train +2269,1,train +2448,3,train +2007,1,train +1790,3,train +1487,2,train +2878,1,train +2616,1,train +2399,3,train +2440,4,train +1700,2,train +1741,3,train +2695,1,train +2299,1,train +2653,4,train +2391,4,train +2512,1,train +2646,1,train +2250,1,train +2687,2,train +2866,4,train +2470,4,train +2167,3,train +1771,3,train +2766,2,train +168,3,train +2900,2,train +2201,1,train +2287,4,train +2421,4,train +2159,4,train +202,1,train +381,3,train +2676,1,train +2280,1,train +2717,2,train +2455,2,train +2634,4,train +2238,4,train +2372,4,train +281,1,train +415,1,train +198,3,train +2493,1,train +2930,2,train +3326,2,train +373,4,train +2668,2,train +2847,4,train +232,1,train +669,2,train +3405,2,train +452,4,train +3580,3,train +149,3,train +2485,2,train +2664,4,train +882,2,train +3659,3,train +183,1,train +269,4,train +665,4,train +799,4,train +3793,3,train +2698,2,train +141,4,train +2877,4,train +4089,1,train +3693,1,train +658,1,train +699,2,train +1095,2,train +3872,3,train +396,1,train +437,2,train +878,4,train +3173,2,train +616,4,train +220,4,train +3348,3,train +3476,3,train +3906,1,train +912,2,train +4085,3,train +213,1,train +650,2,train +829,4,train +3124,2,train +3561,3,train +567,4,train +171,4,train +3723,1,train +729,2,train +3461,1,train +863,2,train +467,2,train +3244,3,train +646,4,train +3378,3,train +3936,1,train +942,2,train +1379,3,train +4070,1,train +3894,4,train +3195,3,train +3632,4,train +597,4,train +1592,3,train +893,2,train +497,2,train +3845,4,train +1626,1,train +1805,3,train +1409,3,train +3704,1,train +1543,3,train +3838,1,train +844,2,train +3662,4,train +627,4,train +1839,1,train +1443,1,train +1226,3,train +3917,1,train +923,2,train +1360,3,train +1835,3,train +1876,4,train +915,3,train +2131,1,train +1869,1,train +1473,1,train +2089,4,train +1390,3,train +1827,4,train +1524,3,train +1128,3,train +2344,1,train +1820,1,train +1424,1,train +1906,4,train +2302,4,train +1603,3,train +1207,3,train +2040,4,train +2202,2,train +1899,1,train +1503,1,train +1637,1,train +2119,4,train +2253,4,train +2112,1,train +2153,2,train +2590,3,train +1850,1,train +2332,4,train +2070,4,train +1412,4,train +2803,3,train +2104,2,train +1887,4,train +2021,4,train +1625,4,train +64,1,train +22,4,train +1921,2,train +2100,4,train +1838,4,train +101,4,train +235,4,train +2134,2,train +2313,4,train +2051,4,train +3129,1,train +2867,1,train +314,4,train +3046,3,train +2347,2,train +2784,3,train +3342,1,train +348,2,train +3080,1,train +482,2,train +86,2,train +3259,3,train +3,4,train +3555,1,train +2897,1,train +299,2,train +3076,3,train +3513,4,train +2552,3,train +3768,1,train +3372,1,train +3506,1,train +512,2,train +3726,4,train +2848,1,train +3289,3,train +295,4,train +3027,3,train +3068,4,train +2765,3,train +849,1,train +3585,1,train +1028,3,train +632,3,train +2927,1,train +766,3,train +3061,1,train +3939,4,train +67,2,train +2844,3,train +3677,4,train +2978,3,train +3839,2,train +1241,3,train +845,3,train +3140,1,train +3577,2,train +979,3,train +3274,1,train +3494,4,train +3098,4,train +2836,4,train +1275,1,train +3353,1,train +3790,2,train +796,3,train +534,3,train +3311,4,train +3707,4,train +3445,4,train +1488,1,train +4003,2,train +3566,1,train +3607,2,train +1009,3,train +1446,4,train +4044,3,train +3128,4,train +3262,4,train +1567,1,train +1305,1,train +909,1,train +1043,1,train +3820,2,train +1659,4,train +3954,2,train +430,3,train +3558,2,train +564,3,train +1122,1,train +1559,2,train +1256,1,train +1342,4,train +1738,4,train +4033,2,train +1476,4,train +3771,2,train +4074,3,train +777,3,train +1638,2,train +1772,2,train +1073,1,train +1689,4,train +1293,4,train +4025,3,train +1427,4,train +1723,2,train +890,1,train +1327,2,train +1110,4,train +1244,4,train +2198,2,train +1802,2,train +1936,2,train +1103,1,train +1719,4,train +1323,4,train +4055,3,train +1457,4,train +1061,4,train +2015,2,train +2056,3,train +2452,3,train +1316,1,train +1357,2,train +1491,2,train +1274,4,train +2665,3,train +2269,3,train +1966,2,train +1570,2,train +2007,3,train +1487,4,train +2565,1,train +2699,1,train +1387,2,train +2778,1,train +2912,1,train +2516,1,train +2695,3,train +2299,3,train +1775,3,train +2595,1,train +2512,3,train +2250,3,train +2687,4,train +2546,1,train +2983,2,train +2680,1,train +2284,1,train +2766,4,train +2900,4,train +2201,3,train +285,1,train +68,3,train +2363,1,train +2759,1,train +202,3,train +2893,1,train +3196,2,train +2280,3,train +2717,4,train +2455,4,train +498,1,train +281,3,train +2576,1,train +3013,2,train +415,3,train +2710,1,train +3409,2,train +2493,3,train +2534,4,train +2930,4,train +2668,4,train +577,1,train +711,1,train +3488,2,train +3226,2,train +232,3,train +669,4,train +2485,4,train +662,1,train +3043,2,train +3480,3,train +882,4,train +2740,1,train +2781,2,train +183,3,train +2698,4,train +741,1,train +479,1,train +3256,2,train +3693,3,train +1095,4,train +699,4,train +4089,3,train +396,3,train +437,4,train +3173,4,train +558,1,train +995,2,train +3772,3,train +692,1,train +296,1,train +3510,3,train +3469,2,train +912,4,train +34,1,train +2811,2,train +3906,3,train +213,3,train +650,4,train +1208,2,train +3940,1,train +509,1,train +946,2,train +3682,2,train +643,1,train +729,4,train +3420,2,train +3461,3,train +863,4,train +467,4,train +3723,3,train +1421,2,train +722,1,train +326,1,train +1159,2,train +3936,3,train +942,4,train +3237,2,train +4070,3,train +284,4,train +3970,1,train +539,1,train +714,2,train +3450,2,train +3928,4,train +893,4,train +497,4,train +1451,2,train +1189,2,train +793,2,train +1626,3,train +3921,1,train +3704,3,train +3838,3,train +844,4,train +1922,1,train +4000,1,train +1839,3,train +1006,2,train +1443,3,train +3738,1,train +3917,3,train +3958,4,train +923,4,train +2135,1,train +1522,3,train +3817,1,train +2214,1,train +2131,3,train +1690,1,train +1432,2,train +1473,3,train +1869,3,train +1910,4,train +1211,3,train +3988,4,train +1903,1,train +1820,3,train +1424,3,train +2640,1,train +2378,1,train +2419,2,train +2116,1,train +2202,4,train +1899,3,train +1503,3,train +1940,4,train +1637,3,train +2195,1,train +2153,4,train +1850,3,train +2711,2,train +2408,1,train +2449,2,train +2845,2,train +2146,1,train +1884,1,train +2104,4,train +147,1,train +3058,2,train +2359,1,train +2400,2,train +2097,1,train +2183,4,train +1921,4,train +98,1,train +2176,1,train +2613,2,train +2134,4,train +311,1,train +3088,2,train +3129,3,train +2826,2,train +2430,2,train +2867,3,train +2347,4,train +431,2,train +128,1,train +169,2,train +3342,3,train +348,4,train +2643,2,train +2247,2,train +3080,3,train +86,4,train +644,2,train +3376,1,train +778,2,train +3555,3,train +2856,2,train +2460,2,train +2897,3,train +299,4,train +2635,3,train +3851,1,train +857,2,train +158,1,train +3372,3,train +3506,3,train +2848,3,train +4064,1,train +1070,2,train +3802,1,train +412,2,train +849,3,train +3585,3,train +3626,4,train +2927,3,train +3364,4,train +3061,3,train +67,4,train +3881,1,train +3619,1,train +625,2,train +3357,1,train +3753,1,train +3839,4,train +363,2,train +3140,3,train +3577,4,train +3274,3,train +3832,1,train +3436,1,train +1275,3,train +442,2,train +3174,1,train +3570,1,train +576,2,train +180,2,train +617,3,train +3353,3,train +3790,4,train +1571,1,train +4086,2,train +1488,3,train +3783,1,train +3824,2,train +393,2,train +3607,4,train +4003,4,train +1567,3,train +1126,1,train +3862,1,train +3903,2,train +1305,3,train +909,3,train +3641,2,train +4037,2,train +606,2,train +1043,3,train +3820,4,train +3558,4,train +1735,1,train +1122,3,train +1559,4,train +3813,1,train +1256,3,train +3854,2,train +4033,4,train +3771,4,train +1814,1,train +1418,1,train +1156,1,train +1638,4,train +1772,4,train +894,1,train +1376,4,train +4067,2,train +1073,3,train +677,3,train +3805,2,train +2068,2,train +1765,1,train +1369,1,train +1806,2,train +1107,1,train +1723,4,train +890,3,train +1327,4,train +4018,2,train +1885,2,train +2019,2,train +1186,1,train +1802,4,train +1406,4,train +1103,3,train +2494,2,train +2098,2,train +1399,1,train +1836,2,train +1533,1,train +2015,4,train +1316,3,train +1357,4,train +1491,4,train +2311,2,train +2049,2,train +1653,2,train +1787,2,train +1570,4,train +1174,4,train +2565,3,train +2262,2,train +1866,2,train +2699,3,train +1604,2,train +1387,4,train +1,2,train +2778,3,train +2912,3,train +2079,2,train +2516,3,train +2213,2,train +80,2,train +2812,1,train +3208,1,train +2595,3,train +2292,2,train +2770,4,train +2030,2,train +2071,3,train +2891,1,train +293,2,train +3025,1,train +3421,1,train +2546,3,train +2983,4,train +2680,3,train +2284,3,train +3238,1,train +3279,2,train +244,2,train +285,3,train +2580,1,train +2976,1,train +2759,3,train +2363,3,train +2800,4,train +3196,4,train +3055,1,train +3492,2,train +61,2,train +498,3,train +3189,1,train +3409,4,train +2576,3,train +3013,4,train +2710,3,train +3705,2,train +577,3,train +2872,1,train +711,3,train +3006,1,train +3309,2,train +3488,4,train +12,2,train +53,3,train +2744,1,train +3226,4,train +3522,2,train +2823,1,train +3260,2,train +662,3,train +2957,1,train +3043,4,train +2740,3,train +2781,4,train +824,1,train +958,1,train +3339,2,train +741,3,train +3473,2,train +479,3,train +3256,4,train +775,1,train +3948,2,train +3686,2,train +558,3,train +995,4,train +3290,2,train +692,3,train +296,3,train +3028,2,train +3469,4,train +34,3,train +2811,4,train +1250,1,train +854,1,train +988,1,train +592,1,train +3765,2,train +1208,4,train +330,1,train +812,4,train +3503,2,train +509,3,train +946,4,train +3241,2,train +3940,3,train +1201,1,train +805,1,train +1421,4,train +3716,2,train +3320,2,train +3757,3,train +722,3,train +326,3,train +1159,4,train +3454,2,train +3237,4,train +1321,2,train +1018,1,train +622,1,train +1059,2,train +3970,3,train +539,3,train +3667,2,train +714,4,train +1534,2,train +1231,1,train +1668,2,train +4004,1,train +969,1,train +1010,2,train +1451,4,train +3746,2,train +1189,4,train +793,4,train +3787,3,train +3921,3,train +531,4,train +1747,2,train +1922,3,train +1089,2,train +1223,2,train +4000,3,train +1006,4,train +3738,3,train +2135,3,train +1302,2,train +1436,2,train +3817,3,train +2214,3,train +1253,2,train +1690,3,train +2248,1,train +1986,1,train +1466,2,train +1507,3,train +1903,3,train +2378,3,train +2419,4,train +2116,3,train +2278,1,train +2412,1,train +2195,3,train +2236,4,train +2491,1,train +2229,1,train +2711,4,train +2408,3,train +1967,1,train +2449,4,train +2845,4,train +2146,3,train +1884,3,train +147,3,train +2442,1,train +2046,1,train +2879,2,train +2180,1,train +2266,4,train +2400,4,train +181,1,train +2958,2,train +2655,1,train +2259,1,train +3092,2,train +98,3,train +2176,3,train +2613,4,train +260,1,train +394,1,train +218,4,train +2909,2,train +2826,4,train +2430,4,train +473,1,train +607,1,train +3384,2,train +431,4,train +2726,2,train +3163,3,train +128,3,train +169,4,train +2860,2,train +2643,4,train +2247,4,train +861,2,train +644,4,train +248,4,train +2543,2,train +778,4,train +3073,2,train +3376,3,train +2460,4,train +3672,1,train +1074,2,train +3851,3,train +857,4,train +2756,2,train +158,3,train +2931,3,train +3751,1,train +3885,1,train +891,2,train +3802,3,train +412,4,train +3103,2,train +3964,1,train +3702,1,train +667,1,train +708,2,train +3922,4,train +1145,3,train +842,2,train +3619,3,train +3223,3,train +3440,1,train +625,4,train +3357,3,train +3881,3,train +363,4,train +3915,1,train +921,2,train +3653,1,train +1055,2,train +3832,3,train +3436,3,train +442,4,train +3174,3,train +3570,3,train +576,4,train +180,4,train +1571,3,train +738,2,train +1175,3,train +3866,1,train +872,2,train +4086,4,train +3824,4,train +393,4,train +1085,2,train +689,2,train +1126,3,train +3862,3,train +823,2,train +4037,4,train +3641,4,train +3903,4,train +606,4,train +1684,1,train +1422,1,train +1205,3,train +3500,1,train +3896,1,train +902,2,train +3854,4,train +2031,1,train +1814,3,train +1418,3,train +1156,3,train +894,3,train +4067,4,train +3805,4,train +2110,1,train +1714,1,train +1452,1,train +2068,4,train +3926,1,train +1369,3,train +1806,4,train +1107,3,train +4018,4,train +1927,1,train +1665,1,train +2102,2,train +1885,4,train +2019,4,train +1186,3,train +2181,2,train +1878,1,train +2315,2,train +1616,1,train +1220,1,train +2098,4,train +1399,3,train +1836,4,train +2528,2,train +1829,1,train +1870,2,train +2311,4,train +2049,4,train +1653,4,train +1787,4,train +1391,4,train +2607,2,train +2345,2,train +1646,1,train +2083,2,train +2262,4,train +1866,4,train +1604,4,train +43,1,train +2820,2,train +1,4,train +2296,2,train +2079,4,train +80,4,train +2375,2,train +2812,3,train +3208,3,train +2509,2,train +2113,2,train +2030,4,train +3108,1,train +73,1,train +114,2,train +2891,3,train +293,4,train +3025,3,train +2629,3,train +2367,3,train +3187,1,train +3321,1,train +327,2,train +3059,1,train +65,2,train +3238,3,train +3279,4,train +2539,2,train +2580,3,train +2976,3,train +3534,1,train +3138,1,train +540,2,train +144,2,train +2876,1,train +3055,3,train +2659,3,train +3492,4,train +61,4,train +2397,3,train +357,2,train +491,2,train +95,2,train +2872,3,train +3309,4,train +3705,4,train +3006,3,train +3047,4,train +12,4,train +2744,3,train +3605,2,train +3302,1,train +308,2,train +349,3,train +3522,4,train +2823,3,train +3260,4,train +2957,3,train +1041,1,train +824,3,train +3515,1,train +521,2,train +958,3,train +3253,1,train +3339,4,train +3473,4,train +3077,4,train +2815,4,train +1120,1,train +1254,1,train +4031,2,train +3635,2,train +3769,2,train +2936,1,train +338,2,train +775,3,train +3686,4,train +3290,4,train +3028,4,train +1333,1,train +1250,3,train +854,3,train +3545,1,train +3586,2,train +551,2,train +592,3,train +988,3,train +3765,4,train +3982,2,train +330,3,train +3503,4,train +3241,4,train +1546,1,train +1284,1,train +1108,4,train +805,3,train +409,3,train +3716,4,train +3320,4,train +3454,4,train +1497,1,train +1101,1,train +1235,1,train +839,1,train +1321,4,train +1018,3,train +622,3,train +1059,4,train +3750,2,train +1617,2,train +1314,1,train +1534,4,train +656,1,train +1668,4,train +3963,2,train +4004,3,train +1010,4,train +3746,4,train +1830,2,train +1568,2,train +1265,1,train +869,1,train +1747,4,train +4042,2,train +1089,4,train +1223,4,train +1915,2,train +1519,2,train +1302,4,train +1436,4,train +1598,2,train +1295,1,train +1732,2,train +1253,4,train +2248,3,train +1945,2,train +1549,2,train +1986,3,train +1466,4,train +2065,3,train +1762,2,train +2757,1,train +2278,3,train +2412,3,train +1579,2,train +2574,1,train +2312,1,train +2491,3,train +1792,2,train +2229,3,train +1967,3,train +2787,1,train +2525,1,train +2263,1,train +2442,3,train +2046,3,train +2879,4,train +2180,3,train +2738,1,train +2342,1,train +181,3,train +2958,4,train +3092,4,train +2259,3,train +1863,3,train +260,3,train +2951,1,train +2992,2,train +394,3,train +2689,1,train +3388,2,train +2909,4,train +2513,4,train +690,1,train +3467,2,train +473,3,train +2768,1,train +3205,2,train +3601,2,train +2726,4,train +2860,4,train +507,1,train +245,1,train +2981,1,train +861,4,train +465,4,train +2760,2,train +3156,2,train +2543,4,train +720,1,train +458,1,train +3631,2,train +3672,3,train +1074,4,train +2756,4,train +3968,1,train +3751,3,train +3448,2,train +3052,2,train +3489,3,train +891,4,train +3186,2,train +2790,2,train +3885,3,train +233,4,train +750,1,train +1187,2,train +3964,3,train +3702,3,train +708,4,train +3003,2,train +3399,2,train +842,4,train +3440,3,train +1004,2,train +3736,1,train +1138,2,train +742,2,train +3915,3,train +921,4,train +3653,3,train +263,4,train +3949,1,train +1351,2,train +955,2,train +738,4,train +3429,2,train +3866,3,train +872,4,train +4028,1,train +1034,2,train +1471,3,train +772,2,train +510,2,train +689,4,train +1684,3,train +1381,2,train +1422,3,train +3717,1,train +1119,2,train +723,2,train +3500,3,train +3896,3,train +902,4,train +3937,4,train +1718,1,train +1501,3,train +3796,1,train +1198,2,train +802,2,train +936,2,train +1931,1,train +2110,3,train +1714,3,train +4009,1,train +1411,2,train +1452,3,train +1190,3,train +3926,3,train +3967,4,train +2144,1,train +1748,1,train +1927,3,train +2102,4,train +1665,3,train +1269,3,train +2223,1,train +1961,1,train +2398,2,train +2181,4,train +1878,3,train +1919,4,train +2315,4,train +1616,3,train +1220,3,train +2308,1,train +1912,1,train +2528,4,train +1829,3,train +1870,4,train +1991,1,train +2428,2,train +2125,1,train +2166,2,train +2607,4,train +2345,4,train +1646,3,train +2083,4,train +126,1,train +3037,2,train +2641,2,train +1942,1,train +2379,2,train +2296,4,train +339,1,train +77,1,train +2854,2,train +2458,2,train +2895,3,train +2155,1,train +2592,2,train +2375,4,train +2113,4,train +1717,4,train +3108,3,train +114,4,train +2805,2,train +2147,2,train +369,1,train +3187,3,train +148,2,train +3321,3,train +327,4,train +2622,2,train +3059,3,train +65,4,train +623,2,train +361,2,train +3138,3,train +3534,3,train +540,4,train +144,4,train +2835,2,train +2876,3,train +2573,2,train +836,2,train +137,1,train +178,2,train +574,2,train +357,4,train +95,4,train +653,2,train +3385,1,train +787,2,train +391,2,train +3605,4,train +88,1,train +129,2,train +3302,3,train +3343,4,train +308,4,train +2644,3,train +866,2,train +3202,1,train +604,2,train +1041,3,train +3336,1,train +342,2,train +3253,3,train +1337,1,train +4073,1,train +1120,3,train +3415,1,train +1254,3,train +3549,1,train +4031,4,train +421,2,train +555,2,train +3635,4,train +2936,3,train +3373,4,train +338,4,train +3769,4,train +1333,3,train +937,3,train +3628,1,train +4065,2,train +3366,1,train +3982,4,train +3586,4,train +1367,1,train +1546,3,train +3841,1,train +3882,2,train +847,2,train +1284,3,train +1325,4,train +3579,1,train +585,2,train +626,3,train +3403,4,train +1580,1,train +1184,1,train +4095,2,train +1101,3,train +3792,1,train +1235,3,train +839,3,train +3750,4,train +1793,1,train +1834,2,train +1135,1,train +1617,4,train +3912,2,train +1314,3,train +1355,4,train +656,3,train +1610,1,train +1214,1,train +2047,2,train +1744,1,train +1348,1,train +1830,4,train +1568,4,train +1265,3,train +869,3,train +4042,4,train +1823,1,train +1864,2,train +2260,2,train +1561,1,train +1602,2,train +4076,2,train +1519,4,train +1123,4,train +1378,1,train +1598,4,train +1295,3,train +1732,4,train +2331,3,train +1632,2,train +1549,4,train +2503,2,train +2107,2,train +1845,2,train +1762,4,train +2757,3,train +1796,2,train +1579,4,train +193,2,train +2574,3,train +2271,2,train +1875,2,train +2312,3,train +1792,4,train +2870,1,train +3004,1,train +10,2,train +2787,3,train +2088,2,train +2525,3,train +2263,3,train +89,2,train +3258,2,train +223,2,train +2738,3,train +2342,3,train +3296,1,train +3034,1,train +3471,2,train +40,2,train +2772,1,train +3168,1,train +3388,4,train +2992,4,train +2689,3,train +3247,1,train +253,2,train +690,3,train +2985,1,train +3467,4,train +32,3,train +2768,3,train +2809,4,train +3205,4,train +3064,1,train +70,2,train +507,3,train +3239,2,train +245,3,train +3156,4,train +2760,4,train +803,1,train +541,1,train +720,3,train +761,4,train +2619,1,train +3056,2,train +458,3,train +2839,4,train +1016,1,train +620,1,train +1150,1,train +3531,2,train +3968,3,train +3665,2,train +3269,2,train +3448,4,train +3052,4,train +3186,4,train +2790,4,train +833,1,train +3744,2,train +750,3,train +791,4,train +1187,4,train +3003,4,train +1046,1,train +784,1,train +3957,2,train +522,1,train +3736,3,train +1004,4,train +3299,2,train +1138,4,train +742,4,train +1259,1,train +1300,2,train +997,1,train +1038,2,train +1434,2,train +735,1,train +821,4,train +3512,2,train +3949,3,train +955,4,train +1647,2,train +814,1,train +1251,2,train +4028,3,train +1034,4,train +772,4,train +3504,3,train +510,4,train +1726,2,train +1027,1,train +1068,2,train +1464,2,train +1202,2,train +589,4,train +3717,3,train +1119,4,train +723,4,train +1677,2,train +1718,3,train +4013,1,train +1415,2,train +3796,3,train +1198,4,train +802,4,train +936,4,train +1494,2,train +1098,2,train +1931,3,train +1232,2,train +4009,3,train +2227,1,train +2144,3,train +1748,3,train +2185,4,train +1445,2,train +1486,3,train +2306,1,train +2440,1,train +2223,3,train +1961,3,train +2398,4,train +2653,1,train +2391,1,train +2215,4,train +1912,3,train +1516,3,train +2470,1,train +1991,3,train +2428,4,train +2125,3,train +2166,4,train +2287,1,train +126,3,train +2421,1,train +2025,1,train +2159,1,train +2641,4,train +1942,3,train +2379,4,train +2937,2,train +2634,1,train +2238,1,train +77,3,train +2372,1,train +2458,4,train +2854,4,train +2155,3,train +2592,4,train +1934,4,train +373,1,train +197,4,train +2055,1,train +2888,2,train +2147,4,train +452,1,train +3363,2,train +2967,2,train +2664,1,train +2705,2,train +148,4,train +2622,4,train +665,1,train +269,1,train +444,2,train +3180,2,train +141,1,train +227,4,train +623,4,train +2522,2,train +361,4,train +2656,2,train +2918,2,train +2573,4,train +3651,1,train +616,1,train +220,1,train +836,4,train +137,3,train +178,4,train +574,4,train +3730,1,train +736,2,train +171,1,train +653,4,train +2948,2,train +3385,3,train +391,4,train +129,4,train +3681,1,train +646,1,train +687,2,train +866,4,train +3161,2,train +3202,3,train +604,4,train +3336,3,train +342,4,train +3894,1,train +900,2,train +504,2,train +1337,3,train +3632,1,train +638,2,train +3415,3,train +421,4,train +25,4,train +3549,3,train +555,4,train +717,2,train +3845,1,train +3931,4,train +3628,3,train +4065,4,train +3366,3,train +930,2,train +1367,3,train +3662,1,train +668,2,train +3882,4,train +3841,3,train +3579,3,train +585,4,train +1401,1,train +1580,3,train +1184,3,train +485,2,train +3699,4,train +4095,4,train +1876,1,train +1793,3,train +1834,4,train +698,2,train +1135,3,train +3912,4,train +2089,1,train +1827,1,train +1610,3,train +1214,3,train +2047,4,train +911,2,train +1348,3,train +1906,1,train +2040,1,train +2260,4,train +1864,4,train +1561,3,train +1602,4,train +4076,4,train +2119,1,train +2294,2,train +1378,3,train +982,3,train +2070,1,train +2507,2,train +1412,1,train +1632,4,train +1370,4,train +1887,1,train +1928,2,train +2324,2,train +1625,1,train +2107,4,train +1845,4,train +22,1,train +2799,2,train +2100,1,train +2141,2,train +1838,1,train +2275,2,train +1796,4,train +101,1,train +2488,2,train +2092,2,train +1875,4,train +3087,1,train +93,2,train +2870,3,train +2567,2,train +2171,2,train +2608,3,train +10,4,train +2305,2,train +1909,2,train +2346,3,train +3004,3,train +2088,4,train +172,2,train +306,2,train +89,4,train +3258,4,train +2518,2,train +2122,2,train +3513,1,train +3117,1,train +519,2,train +3296,3,train +257,2,train +3034,3,train +3471,4,train +40,4,train +2772,3,train +2376,3,train +3726,1,train +3068,1,train +74,2,train +2851,3,train +3247,3,train +2985,3,train +549,2,train +2885,1,train +3367,4,train +287,2,train +3064,3,train +2623,1,train +3105,4,train +70,4,train +3239,4,train +2406,3,train +3797,2,train +803,3,train +3098,1,train +3494,1,train +104,2,train +541,3,train +2836,1,train +238,2,train +2619,3,train +3056,4,train +3614,2,train +1016,3,train +620,3,train +2915,1,train +3311,1,train +3748,2,train +358,3,train +3531,4,train +3665,4,train +3269,4,train +1446,1,train +833,3,train +3128,1,train +3961,2,train +3262,1,train +3303,2,train +3744,4,train +4040,2,train +1046,3,train +605,1,train +1087,4,train +3778,2,train +784,3,train +3516,2,train +522,3,train +3299,4,train +1342,1,train +1476,1,train +1517,2,train +1259,3,train +1300,4,train +997,3,train +1038,4,train +1434,4,train +3729,2,train +735,3,train +3512,4,train +1596,2,train +1293,1,train +897,1,train +635,1,train +1117,4,train +1647,4,train +814,3,train +1251,4,train +3942,2,train +1809,2,train +1943,2,train +1110,1,train +1547,2,train +1244,1,train +1726,4,train +4021,2,train +4062,3,train +1027,3,train +1068,4,train +1464,4,train +3759,2,train +1202,4,train +806,4,train +3800,3,train +1323,1,train +1364,2,train +1061,1,train +4013,3,train +1415,4,train +1274,1,train +1315,2,train +1711,2,train +4092,3,train +1494,4,train +1098,4,train +1232,4,train +1790,2,train +2227,3,train +1445,4,train +2523,1,train +2306,3,train +2440,3,train +2044,3,train +1741,2,train +1782,3,train +2653,3,train +2391,3,train +2553,1,train +2687,1,train +2291,1,train +2470,3,train +1771,2,train +2766,1,train +2900,1,train +2287,3,train +2421,3,train +2025,3,train +2159,3,train +2583,1,train +3020,2,train +26,3,train +2321,1,train +2717,1,train +2937,4,train +2455,1,train +2541,4,train +2238,3,train +1842,3,train +3233,2,train +2930,1,train +2534,1,train +373,3,train +2668,1,train +2888,4,train +2055,3,train +669,1,train +452,3,train +2351,1,train +2485,1,train +2967,4,train +2705,4,train +882,1,train +3659,2,train +665,3,train +269,3,train +3438,3,train +444,4,train +2698,1,train +2739,2,train +141,3,train +2918,4,train +2522,4,train +3180,4,train +2656,4,train +699,1,train +303,1,train +3476,2,train +437,1,train +41,1,train +3651,3,train +220,3,train +3348,2,train +912,1,train +953,2,train +3730,3,train +650,1,train +736,4,train +3031,2,train +2769,2,train +171,3,train +2948,4,train +729,1,train +467,1,train +3244,2,train +3681,3,train +687,4,train +3378,2,train +3977,1,train +942,1,train +983,2,train +1379,2,train +284,1,train +3498,3,train +3894,3,train +900,4,train +504,4,train +3195,2,train +3236,3,train +638,4,train +242,4,train +3632,3,train +3928,1,train +497,1,train +934,2,train +717,4,train +3845,3,train +4007,1,train +1409,2,train +1013,2,train +3745,1,train +751,2,train +930,4,train +489,2,train +3662,3,train +668,4,train +1226,2,train +3958,1,train +1360,2,train +1401,3,train +3696,1,train +702,2,train +485,4,train +1697,1,train +1876,3,train +781,2,train +915,2,train +698,4,train +1910,1,train +2089,3,train +3988,1,train +1390,2,train +1827,3,train +1128,2,train +3946,4,train +911,4,train +1989,1,train +1727,1,train +1906,3,train +1207,2,train +1248,3,train +2202,1,train +1940,1,train +2119,3,train +1678,1,train +2294,4,train +2153,1,train +1757,1,train +2590,2,train +2507,4,train +1412,3,train +2803,2,train +2104,1,train +1708,1,train +1887,3,train +1928,4,train +2324,4,train +1625,3,train +1666,4,train +2486,2,train +1921,1,train +2141,4,train +2275,4,train +101,3,train +2437,2,train +2874,3,train +2134,1,train +2175,2,train +2092,4,train +1696,4,train +3087,3,train +93,4,train +2388,2,train +2784,2,train +2567,4,train +2171,4,train +2305,4,train +1909,4,train +348,1,train +86,1,train +172,4,train +2904,3,train +306,4,train +2122,4,train +3513,3,train +3117,3,train +519,4,train +257,4,train +2552,2,train +419,2,train +3151,1,train +3068,3,train +74,4,train +3626,1,train +632,2,train +3364,1,train +766,2,train +370,2,train +67,1,train +2844,2,train +2885,3,train +287,4,train +2623,3,train +3839,1,train +845,2,train +449,2,train +3577,1,train +187,2,train +3797,4,train +3098,3,train +2702,3,train +104,4,train +2836,3,train +3790,1,train +3831,2,train +796,2,train +3132,1,train +3614,4,train +534,2,train +138,2,train +2915,3,train +3311,3,train +3352,4,train +3748,4,train +916,3,train +3211,1,train +3607,1,train +4044,2,train +3961,4,train +3128,3,train +3262,3,train +3303,4,train +3820,1,train +3861,2,train +4040,4,train +430,2,train +3558,1,train +564,2,train +605,3,train +3778,4,train +3516,4,train +1425,1,train +1559,1,train +1342,3,train +4074,2,train +1517,4,train +3812,2,train +3729,4,train +1638,1,train +1772,1,train +1376,1,train +1114,1,train +1596,4,train +1293,3,train +897,3,train +4025,2,train +635,3,train +1193,1,train +1327,1,train +1809,4,train +1943,4,train +1110,3,train +1547,4,train +1244,3,train +1285,4,train +4021,4,train +3759,4,train +1802,1,train +1406,1,train +1843,2,train +1323,3,train +1364,4,train +4055,2,train +1061,3,train +1102,4,train +2452,2,train +2056,2,train +1357,1,train +961,1,train +1491,1,train +1711,4,train +1315,4,train +2269,2,train +1873,2,train +1570,1,train +1174,1,train +2007,2,train +1790,4,train +2523,3,train +1387,1,train +1824,2,train +1741,4,train +2299,2,train +2340,3,train +1641,2,train +1775,2,train +2770,1,train +2553,3,train +2250,2,train +2291,3,train +2687,3,train +1771,4,train +2983,1,train +2766,3,train +2370,3,train +68,2,train +2800,1,train +3196,1,train +202,2,train +2583,3,train +3020,4,train +2280,2,train +2321,3,train +2717,3,train +2455,3,train +2059,3,train +281,2,train +3013,1,train +2617,1,train +3233,4,train +2534,3,train +2668,3,train +3488,1,train +3226,1,train +232,2,train +669,3,train +2568,1,train +2351,3,train +2788,4,train +2485,3,train +569,1,train +352,3,train +3043,1,train +3480,2,train +90,3,train +2781,1,train +2698,3,train +2739,4,train +3559,2,train +3693,2,train +3256,1,train +3297,2,train +699,3,train +303,3,train +3476,4,train +437,3,train +41,3,train +2818,4,train +995,1,train +599,1,train +3772,2,train +3906,2,train +3510,2,train +953,4,train +2811,1,train +650,3,train +3031,4,train +2769,4,train +1208,1,train +812,1,train +946,1,train +550,1,train +3327,2,train +3723,2,train +729,3,train +770,4,train +3065,2,train +3461,2,train +467,3,train +508,4,train +3244,4,train +3936,2,train +3977,3,train +1379,4,train +983,4,train +3278,2,train +284,3,train +3195,4,train +1279,2,train +1017,2,train +3794,3,train +714,1,train +318,1,train +3095,2,train +3928,3,train +497,3,train +934,4,train +1626,2,train +793,1,train +4007,3,train +1409,4,train +531,1,train +1013,4,train +3308,2,train +3704,2,train +751,4,train +3745,3,train +489,4,train +1006,1,train +1047,2,train +1443,2,train +1226,4,train +3958,3,train +568,4,train +3696,3,train +702,4,train +1522,2,train +1697,3,train +3992,1,train +781,4,train +915,4,train +4071,1,train +1473,2,train +1077,2,train +1910,3,train +1211,2,train +3988,3,train +1989,3,train +1727,3,train +4022,1,train +1424,2,train +1465,3,train +1207,4,train +2285,1,train +2419,1,train +2202,3,train +1503,2,train +1940,3,train +1678,3,train +2236,1,train +1974,1,train +2153,3,train +1757,3,train +2590,4,train +1495,3,train +2711,1,train +2449,1,train +2053,1,train +2803,4,train +2104,3,train +1708,3,train +2266,1,train +2703,2,train +2400,1,train +2004,1,train +2486,4,train +2224,4,train +1921,3,train +5,1,train +2782,2,train +2613,1,train +2437,4,train +2134,3,train +2175,4,train +218,1,train +3129,2,train +2733,2,train +2430,1,train +2034,1,train +2471,2,train +2867,2,train +2254,4,train +2388,4,train +431,1,train +35,1,train +169,1,train +3342,2,train +3080,2,train +2247,1,train +2684,2,train +86,3,train +644,1,train +248,1,train +2763,2,train +3200,3,train +2460,1,train +2501,2,train +2897,2,train +2635,2,train +2552,4,train +636,2,train +3372,2,train +419,4,train +3151,3,train +2848,2,train +3709,1,train +412,1,train +3626,3,train +16,1,train +453,2,train +849,2,train +236,4,train +632,4,train +2927,2,train +370,4,train +3230,3,train +3364,3,train +3922,1,train +666,2,train +3839,3,train +363,1,train +449,4,train +845,4,train +3140,2,train +3618,4,train +187,4,train +2919,3,train +3577,3,train +442,1,train +180,1,train +617,2,train +3831,4,train +4,4,train +3132,3,train +534,4,train +138,4,train +4086,1,train +3824,1,train +3428,1,train +393,1,train +434,2,train +3211,3,train +3607,3,train +3648,4,train +4044,4,train +1212,3,train +3507,1,train +3903,1,train +909,2,train +3641,1,train +4037,1,train +251,2,train +3861,4,train +430,4,train +3558,3,train +1642,1,train +1425,3,train +1122,2,train +1559,3,train +3458,1,train +3854,1,train +3895,2,train +901,3,train +4074,4,train +3812,4,train +1638,3,train +1376,3,train +4067,1,train +677,2,train +1114,3,train +3805,1,train +4025,4,train +2068,1,train +1806,1,train +1193,3,train +890,2,train +1327,3,train +1885,1,train +1489,1,train +2019,1,train +1406,3,train +1843,4,train +3876,2,train +4055,4,train +2098,1,train +2139,2,train +1836,1,train +2056,4,train +1178,1,train +3955,2,train +1357,3,train +961,3,train +2352,2,train +2049,1,train +1653,1,train +2269,4,train +1391,1,train +1873,4,train +1787,1,train +1570,3,train +1174,3,train +2007,4,train +2565,2,train +2169,2,train +1866,1,train +1470,1,train +1907,2,train +1604,1,train +1387,3,train +1824,4,train +1,1,train +2778,2,train +2516,2,train +2299,4,train +1858,2,train +1641,4,train +1775,4,train +80,1,train +2595,2,train +2770,3,train +2071,2,train +1458,4,train +72,2,train +2546,2,train +2983,3,train +2284,2,train +1888,2,train +151,2,train +3279,1,train +285,2,train +68,4,train +2363,2,train +2800,3,train +3196,3,train +3492,1,train +3096,1,train +498,2,train +2834,1,train +281,4,train +2576,2,train +2617,3,train +3013,3,train +3054,4,train +577,2,train +3309,1,train +3047,1,train +53,2,train +3226,3,train +2568,3,train +3522,1,train +132,2,train +569,3,train +2864,1,train +3260,1,train +3043,3,train +3084,4,train +3480,4,train +2781,3,train +3339,1,train +2943,1,train +3776,2,train +3473,1,train +3077,1,train +3559,4,train +3693,4,train +2815,1,train +3297,4,train +3593,2,train +558,2,train +599,3,train +995,3,train +3290,1,train +296,2,train +3510,4,train +3028,1,train +3114,4,train +34,2,train +2811,3,train +3772,4,train +3806,2,train +3940,2,train +812,3,train +3503,1,train +3544,2,train +3723,4,train +946,3,train +550,3,train +3241,1,train +3327,4,train +3461,4,train +3065,4,train +1108,1,train +846,1,train +3757,2,train +3320,1,train +3361,2,train +326,2,train +367,3,train +105,3,train +3278,4,train +1321,1,train +1059,1,train +1279,4,train +4011,3,train +3970,2,train +1017,4,train +714,3,train +318,3,train +3095,4,train +1534,1,train +876,1,train +1313,2,train +1010,1,train +614,1,train +1096,4,train +3391,2,train +793,3,train +397,3,train +3787,2,train +3921,2,train +531,3,train +3308,4,train +1788,2,train +1922,2,train +1089,1,train +1526,2,train +1223,1,train +4000,2,train +3604,2,train +1006,3,train +1047,4,train +1443,4,train +3738,2,train +785,4,train +1302,1,train +1343,2,train +1522,4,train +3817,2,train +3992,3,train +2214,2,train +1253,1,train +1690,2,train +4071,3,train +1473,4,train +1077,4,train +1211,4,train +1903,2,train +1507,2,train +4022,3,train +1424,4,train +2285,3,train +2419,3,train +1586,2,train +1503,4,train +2236,3,train +1974,3,train +2711,3,train +2449,3,train +2053,3,train +2490,4,train +1791,3,train +2879,1,train +2266,3,train +2703,4,train +2400,3,train +2004,3,train +2958,1,train +5,3,train +2300,1,train +2782,4,train +2038,1,train +2520,4,train +218,3,train +2513,1,train +2909,1,train +2950,2,train +3129,4,train +2733,4,train +2867,4,train +2471,4,train +2430,3,train +2034,3,train +252,1,train +3029,2,train +431,3,train +35,3,train +2726,1,train +3163,2,train +169,3,train +2247,3,train +2684,4,train +861,1,train +465,1,train +248,3,train +2543,1,train +3376,2,train +2763,4,train +2460,3,train +2501,4,train +2897,4,train +2635,4,train +2239,4,train +544,1,train +282,1,train +20,1,train +2756,1,train +2797,2,train +636,4,train +2931,2,train +2848,4,train +891,1,train +932,2,train +3709,3,train +233,1,train +3010,2,train +412,3,train +16,3,train +453,4,train +849,4,train +2748,2,train +2927,4,train +708,1,train +312,1,train +1145,2,train +3922,3,train +532,4,train +2827,2,train +3223,2,train +666,4,train +3357,2,train +3956,1,train +921,1,train +962,2,train +263,1,train +700,2,train +3436,2,train +442,3,train +3174,2,train +3215,3,train +3477,3,train +180,3,train +617,4,train +4035,1,train +738,1,train +779,2,train +1175,2,train +4086,3,train +3824,3,train +3428,3,train +434,4,train +3986,1,train +992,2,train +1429,3,train +689,1,train +730,2,train +1126,2,train +3507,3,train +909,4,train +3641,3,train +3245,3,train +3903,3,train +251,4,train +1205,2,train +1642,3,train +3937,1,train +681,2,train +3458,3,train +3854,3,train +3895,4,train +4016,1,train +1418,2,train +3754,1,train +1156,2,train +760,2,train +894,2,train +677,4,train +2068,3,train +3967,1,train +1806,3,train +1107,2,train +890,4,train +3663,4,train +2102,1,train +1706,1,train +1885,3,train +1489,3,train +3784,1,train +1186,2,train +1227,3,train +3876,4,train +2181,1,train +2315,1,train +1919,1,train +2098,3,train +2139,4,train +1836,3,train +1178,3,train +3955,4,train +1870,1,train +2352,4,train +1653,3,train +1257,3,train +1391,3,train +2345,1,train +2386,2,train +2565,4,train +2083,1,train +2169,4,train +1866,3,train +1470,3,train +1907,4,train +1604,3,train +2465,2,train +1504,1,train +2516,4,train +1858,4,train +2678,2,train +80,3,train +2375,1,train +2812,2,train +2113,1,train +1717,1,train +2154,2,train +2595,4,train +2071,4,train +1675,4,train +114,1,train +2891,2,train +2629,2,train +72,4,train +2367,2,train +2284,4,train +1888,4,train +327,1,train +65,1,train +151,4,train +2446,2,train +3279,3,train +285,4,train +2580,2,train +2363,4,train +144,1,train +3492,3,train +2659,2,train +3096,3,train +2397,2,train +2834,3,train +3392,1,train +357,1,train +398,2,train +95,1,train +136,2,train +577,4,train +2872,2,train +2913,3,train +3047,3,train +2651,3,train +3309,3,train +53,4,train +3605,1,train +215,2,train +3343,1,train +349,2,train +3522,3,train +132,4,train +2823,2,train +2864,3,train +3260,3,train +3422,1,train +824,2,train +166,2,train +2943,3,train +3339,3,train +3776,4,train +3077,3,train +2815,3,train +4031,1,train +3635,1,train +3769,1,train +3373,1,train +775,2,train +3111,1,train +3593,4,train +117,2,train +3290,3,train +296,4,train +3028,3,train +34,4,train +3889,2,train +854,2,train +895,3,train +3586,1,train +592,2,train +196,2,train +633,3,train +3410,4,train +330,2,train +3544,4,train +3806,4,train +3940,4,train +1325,1,train +1108,3,train +3403,1,train +3840,2,train +409,2,train +846,3,train +3320,3,train +3361,4,train +3757,4,train +326,4,train +3919,2,train +1321,3,train +622,2,train +1059,3,train +3970,4,train +1617,1,train +1355,1,train +1534,3,train +3870,2,train +876,3,train +1313,4,train +4004,2,train +1010,3,train +614,3,train +3391,4,train +3787,4,train +1830,1,train +1568,1,train +1172,1,train +1788,4,train +910,1,train +1392,4,train +1922,4,train +1089,3,train +1526,4,train +3821,2,train +4000,4,train +3604,4,train +3738,4,train +1519,1,train +1123,1,train +3900,2,train +1302,3,train +1343,4,train +1081,4,train +3817,4,train +1598,1,train +1690,4,train +2248,2,train +1549,1,train +1986,2,train +1507,4,train +2065,2,train +1803,2,train +1586,4,train +2278,2,train +1882,2,train +2319,3,train +1579,1,train +1620,2,train +2057,3,train +2229,2,train +1967,2,train +2349,3,train +2046,2,train +1650,2,train +181,2,train +2958,3,train +2259,2,train +1863,2,train +2300,3,train +2038,3,train +2858,1,train +260,2,train +2992,1,train +2596,1,train +39,3,train +2513,3,train +2950,4,train +3467,1,train +3205,1,train +2809,1,train +252,3,train +3029,4,train +2726,3,train +2767,4,train +3163,4,train +548,1,train +3325,2,train +2626,1,train +465,3,train +2760,1,train +2846,4,train +3376,4,train +2543,3,train +761,1,train +544,3,train +3276,2,train +2839,1,train +3672,2,train +282,3,train +2577,1,train +20,3,train +2756,3,train +2797,4,train +2931,4,train +578,1,train +3751,2,train +3052,1,train +3489,2,train +932,4,train +3227,2,train +99,3,train +2790,1,train +233,3,train +3010,4,train +2748,4,train +1187,1,train +791,1,train +3964,2,train +529,1,train +3306,2,train +3702,2,train +708,3,train +3440,2,train +312,3,train +1145,4,train +3003,1,train +3044,2,train +2827,4,train +3223,4,train +1004,1,train +742,1,train +346,1,train +3956,3,train +962,4,train +3653,2,train +263,3,train +700,4,train +3436,4,train +3174,4,train +821,1,train +4035,3,train +955,1,train +738,3,train +779,4,train +1175,4,train +517,4,train +1034,1,train +1471,2,train +772,1,train +3986,3,train +376,1,train +1209,2,train +510,1,train +992,4,train +3287,2,train +1126,4,train +730,4,train +1684,2,train +1288,2,train +1422,2,train +589,1,train +3803,3,train +723,1,train +1205,4,train +3500,2,train +3937,3,train +547,4,train +681,4,train +1501,2,train +802,1,train +1239,2,train +4016,3,train +936,1,train +977,2,train +3754,3,train +1156,4,train +760,4,train +894,4,train +1714,2,train +1755,3,train +1452,2,train +1056,2,train +1190,2,train +794,2,train +3571,3,train +3967,3,train +2185,1,train +2102,3,train +1706,3,train +1665,2,train +1269,2,train +1007,2,train +3784,3,train +1186,4,train +3959,4,train +2398,1,train +2002,1,train +2181,3,train +1785,3,train +1919,3,train +1220,2,train +2215,1,train +1870,3,train +2428,1,train +2166,1,train +2386,4,train +2083,3,train +2641,1,train +2682,2,train +2379,1,train +1983,1,train +2465,4,train +2203,4,train +1504,3,train +2458,1,train +2062,1,train +2895,2,train +2678,4,train +2812,4,train +1934,1,train +2113,3,train +1717,3,train +2154,4,train +197,1,train +2974,2,train +3108,2,train +2712,2,train +114,3,train +2891,4,train +2013,1,train +2450,2,train +2147,1,train +2629,4,train +2367,4,train +1971,4,train +3187,2,train +148,1,train +3321,2,train +3059,2,train +65,3,train +2446,4,train +2580,4,train +623,1,train +227,1,train +361,1,train +3138,2,train +3179,3,train +144,3,train +2876,2,train +2659,4,train +2218,2,train +2397,4,train +44,1,train +178,1,train +3392,3,train +398,4,train +2693,2,train +136,4,train +2872,4,train +653,1,train +391,1,train +3605,3,train +3209,3,train +129,1,train +215,4,train +2510,2,train +3343,3,train +349,4,train +2644,2,train +1041,2,train +3422,3,train +342,1,train +824,4,train +2723,2,train +166,4,train +3718,1,train +1120,2,train +421,1,train +25,1,train +462,2,train +3635,3,train +2936,2,train +3373,3,train +3111,3,train +117,4,train +3931,1,train +937,2,train +4065,1,train +675,2,train +3407,1,train +3889,4,train +854,4,train +413,2,train +3586,3,train +592,4,train +196,4,train +330,4,train +1408,1,train +3882,1,train +3486,1,train +1325,3,train +492,2,train +626,2,train +3403,3,train +3840,4,train +230,2,train +409,4,train +4095,1,train +3699,1,train +1101,2,train +3919,4,train +839,2,train +3657,4,train +622,4,train +1834,1,train +1438,1,train +1617,3,train +3912,1,train +1355,3,train +959,3,train +656,2,train +3870,4,train +4004,4,train +2047,1,train +1830,3,train +1568,3,train +1172,3,train +1609,4,train +3904,2,train +869,2,train +910,3,train +3821,4,train +1864,1,train +1468,1,train +1602,1,train +989,3,train +1519,3,train +1123,3,train +3900,4,train +2118,2,train +1419,1,train +1598,3,train +1157,1,train +1639,4,train +1377,4,train +2331,2,train +1632,1,train +2248,4,train +1370,1,train +1549,3,train +1986,4,train +2107,1,train +1845,1,train +2065,4,train +1803,4,train +2757,2,train +1796,1,train +2278,4,train +1882,4,train +1620,4,train +2574,2,train +2178,2,train +2615,3,train +1875,1,train +1916,2,train +2312,2,train +51,2,train +2525,2,train +2129,2,train +2263,2,train +1867,2,train +2046,4,train +1650,4,train +89,1,train +3258,1,train +2645,3,train +2342,2,train +1946,2,train +1863,4,train +3471,1,train +2858,3,train +260,4,train +2992,3,train +2596,3,train +2334,3,train +3154,1,train +32,2,train +2809,3,train +3367,1,train +3105,1,train +3542,2,train +507,2,train +111,2,train +548,3,train +2843,1,train +245,2,train +3239,1,train +2626,3,train +3325,4,train +2760,3,train +3755,2,train +2922,1,train +761,3,train +3056,1,train +3672,4,train +2839,3,train +3276,4,train +2577,3,train +3531,1,train +3968,2,train +578,3,train +2873,1,train +3269,1,train +3310,2,train +316,3,train +3052,3,train +3489,4,train +3751,4,train +2790,3,train +2831,4,train +3227,4,train +874,1,train +791,3,train +529,3,train +3306,4,train +3702,4,train +3003,3,train +3440,4,train +3044,4,train +1087,1,train +3602,2,train +4039,3,train +1004,3,train +1045,4,train +2903,1,train +3299,1,train +742,3,train +346,3,train +3340,2,train +3736,2,train +1300,1,train +904,1,train +1434,1,train +1038,1,train +821,3,train +3553,2,train +3949,2,train +955,3,train +3291,2,train +1117,1,train +1251,1,train +855,1,train +1292,2,train +4028,2,train +1034,3,train +1075,4,train +1471,4,train +772,3,train +376,3,train +813,4,train +3504,2,train +510,3,train +3287,4,train +1209,4,train +1068,1,train +1505,2,train +1202,1,train +806,1,train +1288,4,train +1684,4,train +1422,4,train +589,3,train +3717,2,train +3583,2,train +723,3,train +3500,4,train +1718,2,train +885,1,train +1322,2,train +1501,4,train +3796,2,train +802,3,train +1239,4,train +843,4,train +977,4,train +1931,2,train +1098,1,train +1714,4,train +1232,1,train +4009,2,train +1452,4,train +1056,4,train +3788,3,train +1190,4,train +794,4,train +1748,2,train +2185,3,train +1486,2,train +1269,4,train +873,4,train +1007,4,train +2223,2,train +1961,2,train +2002,3,train +2398,3,train +1303,2,train +1220,4,train +2215,3,train +1516,2,train +2511,1,train +2249,1,train +1991,2,train +2428,3,train +2469,4,train +2166,3,train +1770,3,train +2682,4,train +2379,3,train +1983,3,train +2937,1,train +2541,1,train +2458,3,train +2062,3,train +2895,4,train +1800,3,train +1934,3,train +197,3,train +2888,1,train +2974,4,train +3108,4,train +2712,4,train +2013,3,train +2450,4,train +2147,3,train +2967,1,train +3008,2,train +2705,1,train +2309,1,train +2746,2,train +148,3,train +3187,4,train +2529,4,train +310,1,train +444,1,train +227,3,train +2522,1,train +2918,1,train +361,3,train +2656,1,train +2959,2,train +3138,4,train +2876,4,train +2218,4,train +261,1,train +3038,2,train +44,3,train +178,3,train +2693,4,train +736,1,train +3385,2,train +2989,2,train +3426,3,train +391,3,train +129,3,train +2510,4,train +2644,4,train +687,1,train +291,1,train +29,1,train +3202,2,train +2723,4,train +3935,1,train +1337,2,train +504,1,train +941,2,train +3718,3,train +638,1,train +242,1,train +1120,4,train +3019,2,train +421,3,train +25,3,train +462,4,train +3194,3,train +3415,2,train +2936,4,train +4014,1,train +1020,2,train +717,1,train +758,2,train +3931,3,train +937,4,train +59,1,train +4065,3,train +675,4,train +3407,3,train +413,4,train +3965,1,train +1367,2,train +971,2,train +1408,3,train +3703,1,train +668,1,train +709,2,train +3486,3,train +3882,3,train +492,4,train +3224,3,train +626,4,train +230,4,train +1184,2,train +788,2,train +485,1,train +3699,3,train +4095,3,train +839,4,train +1834,3,train +1438,3,train +698,1,train +1135,2,train +1176,3,train +3912,3,train +3953,4,train +656,4,train +2047,3,train +1214,2,train +3946,1,train +556,2,train +3904,4,train +1864,3,train +1468,3,train +1905,4,train +3763,1,train +1602,3,train +2294,1,train +2118,4,train +982,2,train +1419,3,train +1157,3,train +2331,4,train +1453,1,train +1935,4,train +1632,3,train +1236,3,train +1370,3,train +2324,1,train +1928,1,train +2365,2,train +1666,1,train +1845,3,train +2444,2,train +2141,1,train +2182,2,train +1483,1,train +1965,4,train +2657,2,train +2395,2,train +2092,1,train +1696,1,train +2178,4,train +2574,4,train +1875,3,train +1916,4,train +2312,4,train +1654,4,train +93,1,train +2870,2,train +2171,1,train +2212,2,train +2608,2,train +51,4,train +1909,1,train +2346,2,train +2129,4,train +1733,4,train +2263,4,train +1867,4,train +172,1,train +306,1,train +3258,3,train +2425,2,train +2122,1,train +2163,2,train +2342,4,train +1946,4,train +164,2,train +3471,3,train +2242,2,train +2376,2,train +3371,1,train +377,2,train +3154,3,train +74,1,train +2851,2,train +3329,4,train +2193,2,train +32,4,train +194,2,train +3367,3,train +3105,3,train +3542,4,train +111,4,train +2406,2,train +2843,3,train +245,4,train +3239,3,train +3797,1,train +803,2,train +407,2,train +104,1,train +145,2,train +541,2,train +2922,3,train +3755,4,train +2619,2,train +2660,3,train +3056,3,train +3614,1,train +620,2,train +224,2,train +3352,1,train +3748,1,train +358,2,train +3531,3,train +3968,4,train +3269,3,train +2873,3,train +3310,4,train +3431,1,train +833,2,train +874,3,train +175,2,train +612,3,train +2907,1,train +3303,1,train +4081,2,train +1087,3,train +3778,1,train +3819,2,train +3516,1,train +3602,4,train +522,2,train +3299,3,train +2903,3,train +3340,4,train +3736,4,train +1517,1,train +1121,1,train +1300,3,train +904,3,train +1038,3,train +3553,4,train +3291,4,train +1596,1,train +1117,3,train +1251,3,train +855,3,train +1292,4,train +3587,2,train +4028,4,train +3504,4,train +1809,1,train +1547,1,train +1285,1,train +889,1,train +1371,4,train +4062,2,train +1068,3,train +1505,4,train +3800,2,train +806,3,train +3583,4,train +3717,4,train +1364,1,train +1801,2,train +1102,1,train +3879,2,train +1718,4,train +885,3,train +1322,4,train +4013,2,train +3796,4,train +1880,2,train +1181,1,train +1618,2,train +1315,1,train +4092,2,train +1098,3,train +2093,2,train +1790,1,train +1831,2,train +2227,2,train +1569,2,train +1748,4,train +4084,3,train +1486,4,train +1090,4,train +2306,2,train +2044,2,train +1782,2,train +1169,4,train +1303,4,train +1861,2,train +1599,2,train +1516,4,train +2377,3,train +2511,3,train +2249,3,train +2807,1,train +2287,2,train +2025,2,train +1629,2,train +2066,3,train +3020,1,train +26,2,train +2937,3,train +2541,3,train +1842,2,train +3233,1,train +2575,1,train +2055,2,train +2096,3,train +2788,1,train +2967,3,train +3008,4,train +2705,3,train +2309,3,train +2746,4,train +527,1,train +3304,2,train +269,2,train +310,3,train +3438,2,train +444,3,train +48,3,train +2343,1,train +2739,1,train +2522,3,train +2126,3,train +2959,4,train +3651,2,train +2818,1,train +261,3,train +3038,4,train +2514,4,train +953,1,train +3730,2,train +736,3,train +3031,1,train +78,3,train +2769,1,train +2989,4,train +770,1,train +3547,2,train +508,1,train +3722,3,train +3244,1,train +3285,2,train +687,3,train +291,3,train +3023,2,train +3681,2,train +29,3,train +3202,4,train +2940,4,train +983,1,train +587,1,train +3498,2,train +3935,3,train +325,1,train +807,4,train +1337,4,train +504,3,train +941,4,train +3102,2,train +242,3,train +3019,4,train +3236,2,train +3632,2,train +1237,2,train +4014,3,train +934,1,train +1020,4,train +3752,3,train +717,3,train +758,4,train +59,3,train +1013,1,train +751,1,train +3965,3,train +489,1,train +971,4,train +3662,2,train +3703,3,train +709,4,train +1226,1,train +1401,2,train +568,1,train +3782,3,train +702,1,train +788,4,train +1184,4,train +3520,3,train +485,3,train +781,1,train +1135,4,train +1035,2,train +1472,3,train +1214,4,train +773,2,train +3550,3,train +3946,3,train +556,4,train +1248,2,train +3980,1,train +986,2,train +3763,3,train +1502,3,train +982,4,train +2590,1,train +1412,2,train +1453,3,train +2273,1,train +1928,3,train +1532,3,train +2365,4,train +2486,1,train +2224,1,train +2661,2,train +2444,4,train +2141,3,train +2182,4,train +1483,3,train +2437,1,train +2041,1,train +2874,2,train +2175,1,train +1779,1,train +2261,4,train +2657,4,train +2395,4,train +1696,3,train +3087,2,train +2254,1,train +2691,2,train +93,3,train +2388,1,train +2429,2,train +2870,4,train +2171,3,train +2212,4,train +2608,4,train +1909,3,train +2346,4,train +172,3,train +2904,2,train +2642,2,train +2425,4,train +2163,4,train +3117,2,train +2721,2,train +164,4,train +2242,4,train +2376,4,train +419,1,train +23,1,train +3371,3,train +2538,2,train +377,4,train +2672,2,train +3068,2,train +2193,4,train +632,1,train +236,1,train +673,2,train +370,1,train +194,4,train +2489,2,train +2885,2,train +2926,3,train +2623,2,train +2406,4,train +449,1,train +3618,1,train +3797,3,train +187,1,train +407,4,train +2702,2,train +3098,2,train +541,4,train +145,4,train +2836,2,train +2619,4,train +3697,1,train +3831,1,train +3435,1,train +3614,3,train +4,1,train +441,2,train +3218,3,train +138,1,train +224,4,train +620,4,train +2915,2,train +358,4,train +2956,3,train +3352,3,train +916,2,train +520,2,train +3648,1,train +4044,1,train +3431,3,train +3128,2,train +3606,4,train +175,4,train +2907,3,train +3303,3,train +3727,1,train +3861,1,train +430,1,train +471,2,train +908,3,train +4081,4,train +605,2,train +3819,4,train +2986,3,train +3516,3,train +4074,1,train +1517,3,train +1121,3,train +3416,1,train +3812,1,train +3636,4,train +3374,4,train +1417,1,train +1596,3,train +1200,3,train +897,2,train +635,2,train +3587,4,train +1809,3,train +1110,2,train +1547,3,train +1588,4,train +3883,2,train +889,3,train +4062,4,train +3800,4,train +1709,1,train +1843,1,train +1364,3,train +1801,4,train +4096,2,train +1102,3,train +3879,4,train +4013,4,train +2056,1,train +1398,1,train +1880,4,train +1181,3,train +1618,4,train +3913,2,train +1315,3,train +1356,4,train +4092,4,train +1873,1,train +1477,1,train +2093,4,train +1215,1,train +2227,4,train +1831,4,train +1569,4,train +2523,2,train +1824,1,train +2306,4,train +2044,4,train +1782,4,train +2340,2,train +1641,1,train +1775,1,train +1861,4,train +1599,4,train +2553,2,train +2291,2,train +1458,1,train +1895,2,train +1416,4,train +2370,2,train +2807,3,train +2108,2,train +1846,2,train +2025,4,train +1629,4,train +68,1,train +2841,1,train +2583,2,train +2624,3,train +3020,3,train +26,4,train +2321,2,train +2059,2,train +1842,4,train +3054,1,train +3233,3,train +2534,2,train +2575,3,train +2055,4,train +3133,1,train +139,2,train +2871,1,train +2351,2,train +2392,3,train +2788,3,train +352,2,train +3084,1,train +3480,1,train +90,2,train +527,3,train +2822,1,train +3304,4,train +3438,4,train +3042,4,train +2739,3,train +2343,3,train +3559,1,train +3297,1,train +2901,1,train +303,2,train +41,2,train +2818,3,train +2422,3,train +3651,4,train +3772,1,train +3510,1,train +3114,1,train +3551,2,train +953,3,train +3730,4,train +3031,3,train +2769,3,train +853,1,train +3327,1,train +770,3,train +3065,1,train +3547,4,train +508,3,train +3285,4,train +3681,4,train +3023,4,train +804,1,train +3581,2,train +3977,2,train +983,3,train +587,3,train +3278,1,train +284,2,train +325,3,train +3102,4,train +3498,4,train +3236,4,train +1279,1,train +1017,1,train +3794,2,train +1237,4,train +404,3,train +3095,1,train +934,3,train +3928,2,train +1096,1,train +834,1,train +4007,2,train +4048,3,train +1013,3,train +3308,1,train +3745,2,train +751,3,train +792,4,train +489,3,train +1047,1,train +785,1,train +3562,2,train +3958,2,train +1401,4,train +568,3,train +3696,2,train +702,3,train +1522,1,train +1697,2,train +4078,3,train +3379,2,train +781,3,train +822,4,train +1910,2,train +1077,1,train +1211,1,train +3988,2,train +3592,2,train +1035,4,train +3767,3,train +773,4,train +1989,2,train +1727,2,train +1331,2,train +1465,2,train +1248,4,train +3980,3,train +986,4,train +1940,2,train +1678,2,train +1282,2,train +2277,1,train +1757,2,train +1361,2,train +1495,2,train +2490,1,train +2273,3,train +1708,2,train +2569,1,train +2703,1,train +2486,3,train +2224,3,train +2661,4,train +2782,1,train +2520,1,train +2258,1,train +2437,3,train +2041,3,train +2478,4,train +2874,4,train +2175,3,train +1779,3,train +2733,1,train +2337,1,train +2471,1,train +3087,4,train +2254,3,train +2691,4,train +2388,3,train +2429,4,train +2684,1,train +2288,1,train +2725,2,train +2904,4,train +2026,1,train +2508,4,train +2642,4,train +2246,4,train +289,1,train +2763,1,train +3200,2,train +2501,1,train +2635,1,train +2239,1,train +2721,4,train +3117,4,train +636,1,train +3017,2,train +419,3,train +23,3,train +2755,2,train +3151,2,train +2538,4,train +2672,4,train +319,1,train +453,1,train +3230,2,train +3626,2,train +236,3,train +673,4,train +2968,2,train +370,3,train +3364,2,train +2706,2,train +2885,4,train +2489,4,train +2623,4,train +532,1,train +666,1,train +707,2,train +3484,3,train +449,3,train +8,1,train +2785,2,train +3618,3,train +187,3,train +2919,2,train +2702,4,train +920,2,train +3697,3,train +617,1,train +3831,3,train +2998,2,train +3435,3,train +4,3,train +441,4,train +3132,2,train +138,3,train +2915,4,train +3993,1,train +300,1,train +737,2,train +3514,3,train +434,1,train +38,1,train +520,4,train +916,4,train +3211,2,train +3648,3,train +1212,2,train +3727,3,train +251,1,train +3861,3,train +3902,4,train +471,4,train +605,4,train +1425,2,train +767,2,train +3895,1,train +901,2,train +3812,3,train +3416,3,train +1376,2,train +1417,3,train +677,1,train +718,2,train +1114,2,train +897,4,train +635,4,train +1713,1,train +1496,3,train +3791,1,train +1193,2,train +535,2,train +3663,1,train +3883,4,train +1709,3,train +1406,2,train +1843,3,train +1185,3,train +3876,1,train +3962,4,train +4096,4,train +2139,1,train +1743,1,train +3955,1,train +961,2,train +1398,3,train +3913,4,train +2352,1,train +1873,3,train +1477,3,train +1914,4,train +1174,2,train +1215,3,train +1652,4,train +2169,1,train +1907,1,train +2523,4,train +1824,3,train +2161,2,train +1858,1,train +1944,4,train +2340,4,train +1641,3,train +2770,2,train +2374,2,train +2071,1,train +1675,1,train +2553,4,train +2291,4,train +1458,3,train +1895,4,train +72,1,train +2191,2,train +1888,1,train +2370,4,train +2108,4,train +1712,4,train +1846,4,train +151,1,train +2800,2,train +2404,2,train +2841,3,train +2583,4,train +2321,4,train +2059,4,train +2617,2,train +3054,3,train +3133,3,train +53,1,train +139,4,train +2434,2,train +2871,3,train +2568,2,train +2172,2,train +2609,3,train +2351,4,train +435,2,train +132,1,train +173,2,train +569,2,train +352,4,train +3084,3,train +90,4,train +2822,3,train +3776,1,train +386,2,train +3559,3,train +124,2,train +2901,3,train +3297,3,train +303,4,train +2639,3,train +41,4,train +3593,1,train +3197,1,train +599,2,train +203,2,train +3114,3,train +3551,4,train +3806,1,train +3410,1,train +812,2,train +3544,1,train +853,3,train +550,2,train +154,2,train +591,3,train +2886,1,train +3327,3,train +3065,3,train +2669,3,train +4060,2,train +3757,1,train +3361,1,train +367,2,train +804,3,train +3581,4,train +3977,4,train +105,2,train +3278,3,train +1100,1,train +3877,2,train +1279,3,train +4011,2,train +3615,2,train +1017,3,train +184,2,train +621,3,train +3398,4,train +318,2,train +3095,3,train +3794,4,train +1313,1,train +4090,2,train +1096,3,train +3391,1,train +3787,1,train +3828,2,train +397,2,train +834,3,train +4007,4,train +531,2,train +3308,3,train +3745,4,train +1788,1,train +1392,1,train +1526,1,train +3907,2,train +868,1,train +1350,4,train +3604,1,train +1047,3,train +3645,2,train +785,3,train +389,3,train +3562,4,train +3696,4,train +1343,1,train +1081,1,train +1697,4,train +3992,2,train +3596,2,train +3379,4,train +1859,2,train +1160,1,train +898,1,train +3675,2,train +4071,2,train +1077,3,train +1118,4,train +3592,4,train +1507,1,train +1989,4,train +1727,4,train +1331,4,train +4022,2,train +1465,4,train +2285,2,train +1586,1,train +1678,4,train +1282,4,train +2236,2,train +2277,3,train +1974,2,train +1757,4,train +1361,4,train +1495,4,train +2053,2,train +2490,3,train +1791,2,train +1708,4,train +2569,3,train +2266,2,train +2703,3,train +2004,2,train +2045,3,train +5,2,train +2782,3,train +2520,3,train +2258,3,train +218,2,train +2950,1,train +2554,1,train +2733,3,train +2337,3,train +2034,2,train +2075,3,train +2471,3,train +1813,3,train +3029,1,train +35,2,train +2767,1,train +3163,1,train +2684,3,train +2288,3,train +2725,4,train +2026,3,train +2846,1,train +248,2,train +289,3,train +2584,1,train +3021,2,train +27,3,train +2763,3,train +3200,4,train +2501,3,train +2105,3,train +2239,3,train +3496,2,train +2797,1,train +3234,2,train +636,3,train +2931,1,train +3017,4,train +3151,4,train +2755,4,train +932,1,train +536,1,train +3709,2,train +319,3,train +3010,1,train +3051,2,train +16,2,train +57,3,train +453,3,train +2748,1,train +3230,4,train +2968,4,train +2706,4,train +615,1,train +1145,1,train +3922,2,train +532,3,train +2827,1,train +3223,1,train +666,3,train +707,4,train +3264,2,train +8,3,train +2785,4,train +2919,4,train +962,1,train +566,1,train +1003,2,train +700,1,train +304,1,train +786,4,train +3477,2,train +920,4,train +87,3,train +3215,2,train +2998,4,train +2602,4,train +3132,4,train +1175,1,train +779,1,train +3993,3,train +517,1,train +300,3,train +737,4,train +3428,2,train +434,3,train +38,3,train +3211,4,train +992,1,train +1429,2,train +730,1,train +1212,4,train +3507,2,train +3245,2,train +251,3,train +1205,1,train +1246,2,train +1642,2,train +3978,1,train +1425,4,train +547,1,train +681,1,train +767,4,train +3458,2,train +3499,3,train +901,4,train +3895,3,train +760,1,train +1114,4,train +718,4,train +1713,3,train +1014,2,train +3791,3,train +1193,4,train +752,2,train +535,4,train +3663,3,train +1489,2,train +1227,2,train +3959,1,train +965,2,train +3876,3,train +2139,3,train +1743,3,train +4038,1,train +1481,3,train +1178,2,train +3955,3,train +961,4,train +2352,3,train +1257,2,train +1391,2,train +2252,1,train +2386,1,train +1990,1,train +2169,3,train +1470,2,train +1907,3,train +2465,1,train +2203,1,train +2161,4,train +1858,3,train +2678,1,train +2020,1,train +2154,1,train +2240,4,train +2374,4,train +1675,3,train +2629,1,train +2670,2,train +72,3,train +2367,1,train +1971,1,train +2191,4,train +1888,3,train +151,3,train +2446,1,train +2487,2,train +2404,4,train +2962,2,train +2659,1,train +2700,2,train +3096,2,train +3137,3,train +2397,1,train +2438,2,train +2834,2,train +2617,4,train +398,1,train +136,1,train +222,4,train +2517,2,train +2913,2,train +3047,2,train +2651,2,train +2434,4,train +2568,4,train +2172,4,train +215,1,train +349,1,train +435,4,train +2730,2,train +132,3,train +173,4,train +569,4,train +2468,2,train +2864,2,train +469,2,train +166,1,train +2943,2,train +3776,3,train +386,4,train +3077,2,train +124,4,train +2815,2,train +682,2,train +3593,3,train +3197,3,train +117,1,train +203,4,train +599,4,train +3889,1,train +895,2,train +499,2,train +196,1,train +633,2,train +3410,3,train +3806,3,train +3544,3,train +550,4,train +154,4,train +2886,3,train +1108,2,train +712,2,train +3444,1,train +3840,1,train +409,1,train +4060,4,train +846,2,train +3664,4,train +188,2,train +2965,3,train +3361,3,train +367,4,train +105,4,train +3919,1,train +3657,1,train +1100,3,train +3877,4,train +401,2,train +3615,4,train +4011,4,train +184,4,train +318,4,train +1396,1,train +3870,1,train +3474,1,train +876,2,train +480,2,train +917,3,train +1313,3,train +614,2,train +3212,1,train +3391,3,train +3828,4,train +397,4,train +4090,4,train +1609,1,train +1788,3,train +1392,3,train +1526,3,train +3821,1,train +3907,4,train +868,3,train +3604,3,train +3645,4,train +3383,4,train +1164,1,train +3900,1,train +1343,3,train +947,3,train +4075,2,train +1081,3,train +3992,4,train +3596,4,train +1639,1,train +1377,1,train +1859,4,train +1160,3,train +898,3,train +3675,4,train +4071,4,train +1676,4,train +4022,4,train +2065,1,train +1803,1,train +1844,2,train +2285,4,train +1586,3,train +1882,1,train +1923,2,train +2319,2,train +1620,1,train +1224,1,train +2057,2,train +1974,4,train +2136,2,train +2053,4,train +1791,4,train +1395,4,train +2349,2,train +1953,2,train +1650,1,train +1825,2,train +2004,4,train +5,4,train +1863,1,train +1904,2,train +2300,2,train +2341,3,train +2038,2,train +39,2,train +2513,2,train +2554,3,train +2950,3,train +2034,4,train +118,2,train +252,2,train +3029,3,train +35,4,train +2767,3,train +2371,3,train +3325,1,train +465,2,train +2846,3,train +2584,3,train +3021,4,train +3142,1,train +544,2,train +3276,1,train +2880,1,train +282,2,train +323,3,train +3496,4,train +20,2,train +2797,3,train +2401,3,train +3234,4,train +3489,1,train +3530,2,train +932,3,train +99,2,train +536,3,train +2831,1,train +233,2,train +3010,3,train +3051,4,train +3227,1,train +16,4,train +2748,3,train +3709,4,train +615,3,train +2910,1,train +3306,1,train +312,2,train +353,3,train +2648,1,train +3044,1,train +3743,2,train +2827,3,train +3264,4,train +1045,1,train +3822,2,train +3956,2,train +962,3,train +566,3,train +1003,4,train +263,2,train +304,3,train +700,3,train +3477,4,train +3215,4,train +2819,4,train +4035,2,train +779,3,train +3511,2,train +517,3,train +3428,4,train +1471,1,train +1075,1,train +1209,1,train +813,1,train +4027,3,train +3986,2,train +992,3,train +1429,4,train +3287,1,train +3328,2,train +730,3,train +771,4,train +3507,4,train +3245,4,train +1288,1,train +3803,2,train +1642,4,train +1246,4,train +3937,2,train +3978,3,train +547,3,train +681,3,train +3458,4,train +1501,1,train +1542,2,train +1239,1,train +843,1,train +4016,2,train +977,1,train +1459,4,train +3358,2,train +3754,2,train +760,3,train +3795,3,train +1755,2,train +1359,2,train +1056,1,train +660,1,train +1493,2,train +1190,1,train +794,1,train +3571,2,train +3967,2,train +1014,4,train +752,4,train +1572,2,train +1269,1,train +873,1,train +1706,2,train +1007,1,train +1489,4,train +3784,2,train +1227,4,train +3959,3,train +965,4,train +1785,2,train +1919,2,train +4038,3,train +1178,4,train +2256,1,train +2039,3,train +1340,2,train +1777,3,train +1257,4,train +2469,1,train +2252,3,train +2386,3,train +1990,3,train +1470,4,train +2682,1,train +2286,1,train +2465,3,train +2203,3,train +1807,3,train +1504,2,train +2895,1,train +2678,3,train +2237,1,train +2020,3,train +1717,2,train +2154,3,train +2974,1,train +2712,1,train +2316,1,train +2450,1,train +2670,4,train +1971,3,train +2529,1,train +2966,2,train +2267,1,train +2446,3,train +2487,4,train +2225,4,train +268,1,train +3045,2,train +3179,2,train +2962,4,train +2084,1,train +3096,4,train +2218,1,train +2700,4,train +2834,4,train +2438,4,train +219,1,train +2996,2,train +3392,2,train +398,3,train +2693,1,train +136,3,train +2913,4,train +2517,4,train +2651,4,train +2255,4,train +3209,2,train +215,3,train +2510,1,train +2947,2,train +3343,2,train +2644,1,train +2730,4,train +2864,4,train +2468,4,train +3422,2,train +3026,2,train +469,4,train +2723,1,train +166,3,train +2943,4,train +2502,2,train +462,1,train +682,4,train +3373,2,train +3111,2,train +2715,2,train +117,3,train +937,1,train +978,2,train +675,1,train +3889,3,train +3493,3,train +413,1,train +17,1,train +499,4,train +895,4,train +196,3,train +237,4,train +633,4,train +2794,2,train +1325,2,train +492,1,train +626,1,train +230,1,train +712,4,train +3403,2,train +846,4,train +3444,3,train +3840,3,train +188,4,train +4002,1,train +1008,2,train +746,2,train +3919,3,train +3657,3,train +401,4,train +3953,1,train +1355,2,train +959,2,train +1396,3,train +3691,1,train +3870,3,train +3474,3,train +3911,4,train +876,4,train +480,4,train +3212,3,train +614,4,train +1475,3,train +1172,2,train +1213,3,train +1609,3,train +3904,1,train +910,2,train +514,2,train +3821,3,train +1905,1,train +989,2,train +3721,1,train +1123,2,train +1164,3,train +3900,3,train +4075,4,train +2118,1,train +1722,1,train +1639,3,train +1377,3,train +2331,1,train +1935,1,train +1893,4,train +1752,1,train +1972,4,train +1803,3,train +1844,4,train +1965,1,train +1703,1,train +1882,3,train +1441,1,train +1923,4,train +2319,4,train +1620,3,train +1224,3,train +1661,4,train +2057,4,train +2178,1,train +2615,2,train +1916,1,train +1520,1,train +2353,2,train +1654,1,train +2136,4,train +51,1,train +2432,2,train +2129,1,train +1733,1,train +2170,2,train +1867,1,train +1953,4,train +2349,4,train +1650,3,train +1691,4,train +1825,4,train +2645,2,train +1946,1,train +2300,4,train +1904,4,train +2038,4,train +2858,2,train +2596,2,train +39,4,train +2334,2,train +1721,4,train +3329,1,train +335,2,train +32,1,train +118,4,train +2413,2,train +2809,2,train +252,4,train +2151,2,train +3542,1,train +111,1,train +152,2,train +548,2,train +2929,3,train +3325,3,train +2626,2,train +3755,1,train +761,2,train +3142,3,train +544,4,train +2839,2,train +2880,3,train +3276,3,train +282,4,train +2577,2,train +3317,4,train +20,4,train +3176,1,train +578,2,train +182,2,train +3310,1,train +316,2,train +3530,4,train +2697,3,train +99,4,train +2831,3,train +3227,3,train +791,2,train +395,2,train +3127,1,train +529,2,train +133,2,train +2910,3,train +3306,3,train +312,4,train +3044,3,train +2648,3,train +3085,4,train +3743,4,train +1349,3,train +3602,1,train +4039,2,train +1045,3,train +649,3,train +3340,1,train +3822,4,train +346,2,train +3956,4,train +821,2,train +4035,4,train +3553,1,train +3594,2,train +3291,1,train +3377,4,train +3511,4,train +1292,1,train +1075,3,train +679,3,train +1209,3,train +376,2,train +813,3,train +3504,1,train +3986,4,train +3287,3,train +3328,4,train +1371,1,train +1505,1,train +1109,1,train +3886,2,train +1288,3,train +1329,4,train +3583,1,train +589,2,train +3803,4,train +368,3,train +3145,4,train +1188,1,train +1322,1,train +1542,4,train +3837,2,train +1239,3,train +843,3,train +3575,2,train +4016,4,train +977,3,train +3754,4,train +3358,4,train +1576,2,train +1755,4,train +877,1,train +1359,4,train +1056,3,train +660,3,train +1493,4,train +3788,2,train +794,3,train +3571,4,train +2185,2,train +1789,2,train +1486,1,train +1090,1,train +1572,4,train +3867,2,train +1706,4,train +873,3,train +1007,3,train +3784,4,train +1868,2,train +2002,2,train +1169,1,train +1303,1,train +1785,4,train +1127,4,train +2215,2,train +1819,2,train +2256,3,train +1516,1,train +1557,2,train +1340,4,train +2469,3,train +1636,2,train +1770,2,train +1374,2,train +2682,3,train +1849,2,train +2286,3,train +1983,2,train +1587,2,train +1504,4,train +2062,2,train +1800,2,train +2237,3,train +1934,2,train +197,2,train +2974,3,train +2533,1,train +2712,3,train +2316,3,train +2753,4,train +2013,2,train +2450,3,train +3008,1,train +2746,1,train +2529,3,train +2133,3,train +2966,4,train +2267,3,train +227,2,train +268,3,train +2563,1,train +2959,1,train +3045,4,train +6,3,train +2301,1,train +3179,4,train +2084,3,train +2218,3,train +3038,1,train +44,2,train +85,3,train +219,3,train +2514,1,train +2996,4,train +3392,4,train +2693,3,train +515,1,train +3292,2,train +2989,1,train +2593,1,train +3030,2,train +3426,2,train +3209,4,train +2510,3,train +2947,4,train +594,1,train +3243,2,train +3422,4,train +3026,4,train +2723,3,train +2502,4,train +807,1,train +941,1,train +545,1,train +3718,2,train +765,4,train +3019,1,train +3060,2,train +25,2,train +462,3,train +503,4,train +3194,2,train +2581,4,train +3111,4,train +2715,4,train +1020,1,train +758,1,train +1195,2,train +3931,2,train +978,4,train +3273,2,train +675,3,train +3407,2,train +413,3,train +17,3,train +2794,4,train +971,1,train +1408,2,train +3789,3,train +709,1,train +313,1,train +3486,2,train +492,3,train +533,4,train +3224,2,train +230,3,train +788,1,train +4002,3,train +1008,4,train +3699,2,train +746,4,train +3478,3,train +1438,2,train +1176,2,train +3953,3,train +959,4,train +563,4,train +3691,3,train +1255,2,train +3987,1,train +556,1,train +993,2,train +1172,4,train +3904,3,train +910,4,train +514,4,train +1468,2,train +1905,3,train +810,2,train +989,4,train +3721,3,train +2118,3,train +1722,3,train +4017,1,train +982,1,train +1023,2,train +1419,2,train +1460,3,train +1157,2,train +2018,1,train +1935,3,train +1236,2,train +1370,2,train +2365,1,train +1969,1,train +1752,3,train +2189,4,train +4047,1,train +1490,3,train +1228,3,train +2444,1,train +2048,1,train +2182,1,train +1965,3,train +1703,3,train +1441,3,train +2657,1,train +2261,1,train +2395,1,train +1999,1,train +2178,3,train +2219,4,train +2615,4,train +1916,3,train +1520,3,train +2353,4,train +1654,3,train +2608,1,train +2212,1,train +51,3,train +2346,1,train +2432,4,train +2129,3,train +1733,3,train +2170,4,train +1867,3,train +2728,2,train +2425,1,train +2029,1,train +2466,2,train +2163,1,train +1767,1,train +2645,4,train +1946,3,train +1987,4,train +164,1,train +2242,1,train +2679,2,train +2376,1,train +2858,4,train +2596,4,train +2334,4,train +377,1,train +3154,2,train +3329,3,train +2496,2,train +335,4,train +2193,1,train +2413,4,train +2151,4,train +194,1,train +3367,2,train +3542,3,train +3105,2,train +2709,2,train +111,3,train +152,4,train +548,4,train +2406,1,train +2447,2,train +2626,4,train +2843,2,train +407,1,train +3225,3,train +145,1,train +2922,2,train +3755,3,train +2660,2,train +2577,4,train +3655,1,train +224,1,train +661,2,train +358,1,train +3176,3,train +578,4,train +182,4,train +2873,2,train +3310,3,train +316,4,train +874,2,train +478,2,train +3606,1,train +612,2,train +175,1,train +395,4,train +3127,3,train +529,4,train +133,4,train +4081,1,train +1087,2,train +3819,1,train +3602,3,train +4039,4,train +167,2,train +2903,2,train +3340,3,train +346,4,train +904,2,train +3636,1,train +246,2,train +3374,1,train +380,2,train +3553,3,train +3594,4,train +3291,3,train +1375,1,train +1117,2,train +3890,2,train +855,2,train +896,3,train +1292,3,train +3587,1,train +376,4,train +1454,1,train +1588,1,train +1371,3,train +4062,1,train +1505,3,train +1109,3,train +3800,1,train +3886,4,train +806,2,train +3583,3,train +1801,1,train +1188,3,train +3879,1,train +3920,2,train +885,2,train +926,3,train +1322,3,train +664,3,train +3837,4,train +3575,4,train +1880,1,train +1484,1,train +1618,1,train +1356,1,train +4092,1,train +1576,4,train +3871,2,train +877,3,train +3788,4,train +2093,1,train +1831,1,train +1435,1,train +1872,2,train +1569,1,train +1655,4,train +1789,4,train +4084,2,train +1090,3,train +3867,4,train +2044,1,train +2085,2,train +1782,1,train +1868,4,train +2002,4,train +1169,3,train +3901,2,train +1303,3,train +1344,4,train +2164,2,train +1861,1,train +1599,1,train +1203,1,train +1819,4,train +1557,4,train +2377,2,train +2511,2,train +2249,2,train +1416,1,train +1636,4,train +1770,4,train +1374,4,train +1629,1,train +2066,2,train +1849,4,train +1983,4,train +1587,4,train +26,1,train +2541,2,train +2145,2,train +1842,1,train +1883,2,train +2062,4,train +1800,4,train +2096,2,train +2533,3,train +2013,4,train +3091,1,train +2829,1,train +3008,3,train +2309,2,train +2746,3,train +3304,1,train +310,2,train +3042,1,train +3438,1,train +48,2,train +2959,3,train +2126,2,train +2563,3,train +2301,3,train +3121,1,train +127,2,train +261,2,train +302,3,train +3038,3,train +3079,4,train +44,4,train +2380,3,train +2514,3,train +78,2,train +515,3,train +3292,4,train +2989,3,train +2593,3,train +3030,4,train +3426,4,train +811,1,train +3547,1,train +594,3,train +3285,1,train +3722,2,train +291,2,train +332,3,train +3023,1,train +29,2,train +3243,4,train +3801,2,train +807,3,train +3539,2,train +3102,1,train +3498,1,train +3718,4,train +941,3,train +545,3,train +242,2,train +3019,3,train +3060,4,train +3236,1,train +3194,4,train +1237,1,train +4014,2,train +1020,3,train +3752,2,train +758,3,train +1195,4,train +59,2,train +3273,4,train +3407,4,train +792,1,train +4006,3,train +3569,2,train +3965,2,train +971,3,train +1408,4,train +3307,2,train +709,3,train +313,3,train +3486,4,train +3703,2,train +3224,4,train +1091,4,train +3386,2,train +3782,2,train +788,3,train +3520,2,train +130,3,train +1521,2,train +822,1,train +4036,3,train +1438,4,train +560,1,train +3337,2,train +3774,3,train +1176,4,train +780,4,train +1338,2,train +1035,1,train +1472,2,train +773,1,train +859,4,train +1255,4,train +3550,2,train +556,3,train +993,4,train +3946,2,train +3987,3,train +1551,2,train +1248,1,train +1289,2,train +986,1,train +1468,4,train +3763,2,train +3804,3,train +810,4,train +1368,2,train +1502,2,train +4017,3,train +1419,4,train +1023,4,train +1157,4,train +2018,3,train +4051,1,train +1453,2,train +1057,2,train +1236,4,train +2365,3,train +1532,2,train +1969,3,train +1270,2,train +4047,3,train +2661,1,train +2265,1,train +2444,3,train +2048,3,train +2182,3,train +1349,2,train +1786,3,train +1483,2,train +2874,1,train +2478,1,train +2657,3,train +2261,3,train +2395,3,train +1999,3,train +1696,2,train +2691,1,train +2295,1,train +2429,1,train +2033,1,train +2515,4,train +2212,3,train +2904,1,train +2508,1,train +2945,2,train +2642,1,train +2246,1,train +2728,4,train +2425,3,train +2029,3,train +2466,4,train +2163,3,train +1767,3,train +2721,1,train +2325,1,train +164,3,train +2063,1,train +2242,3,train +2679,4,train +3371,2,train +2538,1,train +377,3,train +2672,1,train +3154,4,train +2496,4,train +2193,3,train +673,1,train +277,1,train +194,3,train +2489,1,train +2926,2,train +2709,4,train +2843,4,train +2447,4,train +3005,2,train +407,3,train +2702,1,train +145,3,train +2922,4,train +2481,2,train +2660,4,train +2264,4,train +307,1,train +744,2,train +441,1,train +45,1,train +3218,2,train +3655,3,train +224,3,train +661,4,train +2956,2,train +3352,2,train +2694,2,train +2873,4,train +916,1,train +520,1,train +957,2,train +3431,2,train +874,4,train +478,4,train +2773,2,train +3606,3,train +175,3,train +612,4,train +2907,2,train +3902,1,train +4081,3,train +471,1,train +908,2,train +3819,3,train +2986,2,train +167,4,train +2903,4,train +3981,1,train +1121,2,train +904,4,train +3636,3,train +3240,3,train +246,4,train +3374,3,train +380,4,train +1200,2,train +1375,3,train +3670,1,train +676,2,train +3890,4,train +855,4,train +3587,3,train +1454,3,train +3749,1,train +1588,3,train +3883,1,train +3487,1,train +889,2,train +3962,1,train +1801,3,train +4096,1,train +1102,2,train +706,2,train +3879,3,train +3920,4,train +885,4,train +1701,1,train +1880,3,train +1484,3,train +1181,2,train +1618,3,train +3913,1,train +1356,3,train +3871,4,train +1914,1,train +2093,3,train +1652,1,train +1831,3,train +1435,3,train +1872,4,train +1569,3,train +4084,4,train +3688,4,train +1731,1,train +1951,4,train +2085,4,train +3901,4,train +2340,1,train +1944,1,train +2164,4,train +1861,3,train +1420,1,train +1599,3,train +1203,3,train +1640,4,train +1895,1,train +2377,4,train +2511,4,train +2249,4,train +1416,3,train +2370,1,train +2807,2,train +2108,1,train +1712,1,train +2149,2,train +1846,1,train +1629,3,train +1670,4,train +2066,4,train +2624,2,train +2059,1,train +2145,4,train +1883,4,train +2441,2,train +2878,3,train +2575,2,train +2179,2,train +2616,3,train +2096,4,train +1700,4,train +139,1,train +3091,3,train +2788,2,train +2392,2,train +2829,3,train +2309,4,train +352,1,train +90,1,train +131,2,train +527,2,train +3304,3,train +310,4,train +3042,3,train +2646,3,train +48,4,train +2343,2,train +2126,4,train +3121,3,train +127,4,train +2422,2,train +2818,2,train +261,4,train +3417,1,train +3551,1,train +2676,3,train +78,4,train +770,2,train +811,3,train +3547,3,train +508,2,train +3285,3,train +3326,4,train +3722,4,train +291,4,train +3023,3,train +29,4,train +3581,1,train +587,2,train +3801,4,train +3405,4,train +325,2,train +3102,3,train +3539,4,train +3935,4,train +3794,1,train +3398,1,train +1237,3,train +404,2,train +4014,4,train +142,2,train +3752,4,train +59,4,train +4048,2,train +658,3,train +2953,1,train +792,3,train +3569,4,train +3965,4,train +3703,4,train +3307,4,train +1350,1,train +1088,1,train +3865,2,train +3562,1,train +568,2,train +3782,4,train +3386,4,train +3520,4,train +3124,4,train +1167,1,train +4078,2,train +1521,4,train +3379,1,train +3816,2,train +822,3,train +3554,2,train +560,3,train +3337,4,train +1118,1,train +1555,2,train +856,1,train +1338,4,train +3592,1,train +1035,3,train +1472,4,train +3633,2,train +3767,2,train +773,3,train +3550,4,train +1331,1,train +935,1,train +1768,2,train +1465,1,train +1551,4,train +3846,2,train +1289,4,train +3980,2,train +986,3,train +3763,4,train +1847,2,train +1282,1,train +1368,4,train +1502,4,train +1361,1,train +1798,2,train +1495,1,train +4051,3,train +1453,4,train +1057,4,train +2273,2,train +1353,2,train +1532,4,train +1270,4,train +2224,2,train +2265,3,train +2661,3,train +1349,4,train +1483,4,train +2561,1,train +2344,3,train +2041,2,train +2478,3,train +1779,2,train +2254,2,train +2295,3,train +2691,3,train +2429,3,train +2033,3,train +2853,1,train +2591,1,train +2725,1,train +2508,3,train +2112,3,train +2945,4,train +2642,3,train +2246,3,train +3200,1,train +2542,1,train +2721,3,train +2325,3,train +2063,3,train +3017,1,train +2621,1,train +23,2,train +64,3,train +2755,1,train +3371,4,train +2538,3,train +2672,3,train +3230,1,train +3271,2,train +236,2,train +277,3,train +673,3,train +2572,1,train +2968,1,train +2706,1,train +3009,2,train +2489,3,train +2926,4,train +707,1,train +3484,2,train +3618,2,train +2785,1,train +3222,2,train +2919,1,train +3005,4,train +2481,4,train +786,1,train +920,1,train +3697,2,train +3301,2,train +307,3,train +744,4,train +2602,1,train +4,2,train +45,3,train +441,3,train +482,4,train +2998,1,train +2956,4,train +3039,2,train +3218,4,train +2694,4,train +737,1,train +341,1,train +3514,2,train +520,3,train +957,4,train +3648,2,train +3431,4,train +2990,2,train +2773,4,train +2907,4,train +1212,1,train +991,2,train +3727,2,train +3768,3,train +292,1,train +3902,3,train +471,3,train +512,4,train +908,4,train +2986,4,train +767,1,train +371,1,train +3981,3,train +901,1,train +3282,2,train +1121,4,train +3416,2,train +4015,1,train +1417,2,train +718,1,train +1200,4,train +3670,3,train +676,4,train +1496,2,train +535,1,train +3749,3,train +3883,3,train +3487,3,train +889,4,train +1709,2,train +4045,1,train +1051,2,train +1185,2,train +3962,3,train +3566,3,train +4096,3,train +706,4,train +1701,3,train +1398,2,train +1181,4,train +3913,3,train +3954,4,train +1477,2,train +1914,3,train +1215,2,train +1652,3,train +3743,3,train +1731,3,train +4026,1,train +1032,2,train +2027,1,train +2161,1,train +1944,3,train +1420,3,train +2240,1,train +2374,1,train +1978,1,train +1716,1,train +2198,4,train +1458,2,train +1895,3,train +1936,4,train +2191,1,train +2807,4,train +2108,3,train +1712,3,train +2149,4,train +1846,3,train +2404,1,train +2841,2,train +2624,4,train +1966,4,train +3054,2,train +2441,4,train +2575,4,train +2179,4,train +222,1,train +3133,2,train +2737,2,train +139,3,train +2434,1,train +2871,2,train +2172,1,train +2609,2,train +2392,4,train +435,1,train +173,1,train +3084,2,train +2688,2,train +527,4,train +131,4,train +2426,2,train +2822,2,train +2343,4,train +386,1,train +124,1,train +2901,2,train +2639,2,train +2243,2,train +2422,4,train +203,1,train +3417,3,train +3114,2,train +3551,3,train +2456,2,train +2893,3,train +719,2,train +3451,1,train +853,2,train +457,2,train +154,1,train +591,2,train +2669,2,train +4060,1,train +3664,1,train +670,2,train +367,1,train +804,2,train +3581,3,train +105,1,train +587,4,train +325,4,train +3877,1,train +3481,1,train +4011,1,train +3615,1,train +184,1,train +621,2,train +3398,3,train +404,4,train +142,4,train +4090,1,train +1096,2,train +3828,1,train +3432,1,train +3869,2,train +397,1,train +4048,4,train +438,2,train +834,2,train +176,2,train +2953,3,train +3907,1,train +1350,3,train +3645,1,train +1088,3,train +3383,1,train +3865,4,train +785,2,train +389,2,train +3562,3,train +1167,3,train +468,2,train +3596,1,train +3682,4,train +4078,4,train +643,3,train +3379,3,train +3420,4,train +3816,4,train +3554,4,train +1859,1,train +3675,1,train +1118,3,train +1555,4,train +856,3,train +3592,3,train +3633,4,train +3767,4,train +1676,1,train +1414,1,train +1851,2,train +1152,1,train +1331,3,train +935,3,train +1768,4,train +3846,4,train +3450,4,train +3980,4,train +1847,4,train +1282,3,train +2143,2,train +2277,2,train +1881,2,train +1182,1,train +1361,3,train +1798,4,train +2490,2,train +2094,2,train +1791,1,train +1395,1,train +1832,2,train +2273,4,train +1353,4,train +2569,2,train +2045,2,train +1432,4,train +2520,2,train +2124,2,train +2561,3,train +2258,2,train +1862,2,train +2041,4,train +1779,4,train +2640,3,train +2337,2,train +2075,2,train +1679,2,train +1813,2,train +2853,3,train +2591,3,train +2288,2,train +1892,2,train +2725,3,train +2026,2,train +2887,1,train +289,2,train +3021,1,train +27,2,train +2105,2,train +2542,3,train +2239,2,train +3496,1,train +106,2,train +3234,1,train +3017,3,train +2621,3,train +3058,4,train +23,4,train +2755,3,train +2359,3,train +2097,3,train +2917,1,train +319,2,train +3051,1,train +57,2,train +3271,4,train +2968,3,train +2572,3,train +3009,4,train +2706,3,train +3567,2,train +532,2,train +3264,1,train +3305,2,train +707,3,train +311,3,train +2606,1,train +3088,4,train +8,2,train +2785,3,train +3222,4,train +3484,4,train +1003,1,train +3780,2,train +786,3,train +3518,2,train +3477,1,train +920,3,train +87,2,train +2819,1,train +3215,1,train +3301,4,train +2998,3,train +2602,3,train +3039,4,train +3435,4,train +3697,4,train +820,1,train +3993,2,train +3335,2,train +300,2,train +341,3,train +737,3,train +3514,4,train +38,2,train +2856,4,train +2990,4,train +1429,1,train +771,1,train +3548,2,train +991,4,train +3245,1,train +3727,4,train +292,3,train +1246,1,train +4064,3,train +588,1,train +1070,4,train +767,3,train +371,3,train +3499,2,train +3282,4,train +3416,4,train +4015,3,train +1417,4,train +3753,3,train +718,3,train +1713,2,train +1014,1,train +618,1,train +1496,4,train +3791,2,train +752,1,train +535,3,train +3663,2,train +1227,1,train +1709,4,train +4045,3,train +965,1,train +1051,4,train +3783,3,train +1185,4,train +1743,2,train +1481,2,train +1398,4,train +1560,2,train +1257,1,train +1298,2,train +1735,3,train +4030,1,train +1477,4,train +3813,3,train +1215,4,train +1115,2,train +1249,2,train +4026,3,train +1032,4,train +2027,3,train +2161,3,train +1765,3,train +2240,3,train +2374,3,train +1978,3,train +1675,2,train +1716,3,train +2670,1,train +2494,4,train +2191,3,train +1533,3,train +2487,1,train +2924,2,train +2225,1,train +2404,3,train +2841,4,train +2962,1,train +2700,1,train +2304,1,train +2741,2,train +3137,2,train +2438,1,train +2042,1,train +222,3,train +2517,1,train +2913,1,train +2954,2,train +2651,1,train +2255,1,train +2737,4,train +3133,4,train +2434,3,train +2871,4,train +2172,3,train +2213,4,train +2609,4,train +3033,2,train +435,3,train +2730,1,train +173,3,train +2468,1,train +2688,4,train +2292,4,train +2822,4,train +2426,4,train +469,1,train +3421,3,train +386,3,train +2722,2,train +124,3,train +2901,4,train +2639,4,train +2243,4,train +682,1,train +286,1,train +24,1,train +2801,2,train +3197,2,train +203,3,train +244,4,train +2456,4,train +895,1,train +499,1,train +633,1,train +237,1,train +3451,3,train +719,4,train +3410,2,train +457,4,train +853,4,train +3189,3,train +154,3,train +591,4,train +2886,2,train +2669,4,train +712,1,train +753,2,train +4060,3,train +54,1,train +3664,3,train +188,1,train +670,4,train +2965,2,train +804,4,train +3960,1,train +966,2,train +1100,2,train +3877,3,train +3481,3,train +401,1,train +3615,3,train +184,3,train +621,4,train +3911,1,train +480,1,train +917,2,train +4090,3,train +655,2,train +3432,3,train +3828,3,train +834,4,train +438,4,train +3869,4,train +176,4,train +3990,1,train +1392,2,train +3728,1,train +3907,3,train +3466,1,train +3948,4,train +868,2,train +3645,3,train +3383,3,train +389,4,train +947,2,train +4075,1,train +1081,2,train +468,4,train +3596,3,train +1680,1,train +1859,3,train +3758,1,train +1160,2,train +1201,3,train +898,2,train +3675,3,train +1893,1,train +1676,3,train +1414,3,train +1851,4,train +1152,3,train +3667,4,train +1972,1,train +1710,1,train +1844,1,train +1231,3,train +969,3,train +2319,1,train +1923,1,train +2057,1,train +1661,1,train +2143,4,train +2277,4,train +1881,4,train +1182,3,train +2136,1,train +1478,1,train +2094,4,train +1395,3,train +1832,4,train +2349,1,train +1953,1,train +2390,2,train +2569,4,train +1691,1,train +2128,2,train +1825,1,train +2045,4,train +1904,1,train +2341,2,train +2124,4,train +2258,4,train +1862,4,train +39,1,train +2420,2,train +2554,2,train +1721,1,train +2158,2,train +2337,4,train +2075,4,train +1679,4,train +1813,4,train +118,1,train +2767,2,train +2371,2,train +2288,4,train +1892,4,train +2026,4,train +110,2,train +2846,2,train +2887,3,train +289,4,train +2584,2,train +2188,2,train +3021,3,train +27,4,train +2105,4,train +3435,2,train +189,2,train +3317,1,train +323,2,train +3496,3,train +106,4,train +2401,2,train +3234,3,train +3396,1,train +3530,1,train +99,1,train +536,2,train +2917,3,train +319,4,train +3051,3,train +2655,3,train +57,4,train +615,2,train +3743,1,train +353,2,train +3085,1,train +3567,4,train +3264,3,train +3305,4,train +2606,3,train +8,4,train +3822,1,train +3164,1,train +566,2,train +170,2,train +607,3,train +1003,3,train +304,2,train +2902,1,train +3384,4,train +3518,4,train +87,4,train +2819,3,train +3780,4,train +3377,1,train +3814,2,train +3993,4,train +820,3,train +3511,1,train +517,2,train +3335,4,train +300,4,train +3073,4,train +38,4,train +3893,2,train +4027,2,train +3328,1,train +2932,1,train +771,3,train +3548,4,train +1329,1,train +3803,1,train +1246,3,train +3978,2,train +3145,1,train +3582,2,train +547,2,train +588,3,train +3499,4,train +3103,4,train +1542,1,train +1146,1,train +667,3,train +3358,1,train +3795,2,train +1755,1,train +1359,1,train +1493,1,train +3874,2,train +1713,4,train +3571,1,train +3612,2,train +1014,3,train +618,3,train +1055,4,train +3791,4,train +752,3,train +1572,1,train +3959,2,train +965,3,train +1785,1,train +1127,1,train +1564,2,train +1743,4,train +865,1,train +4038,2,train +1481,4,train +1085,4,train +823,4,train +2039,2,train +1340,1,train +1777,2,train +1560,4,train +1298,4,train +4030,3,train +2252,2,train +1856,2,train +1990,2,train +2031,3,train +1115,4,train +1249,4,train +2203,2,train +1807,2,train +1545,2,train +2020,2,train +1624,2,train +2753,1,train +2670,3,train +1837,2,train +1971,2,train +1575,2,train +2966,1,train +2487,3,train +2924,4,train +2225,3,train +3045,1,train +3179,1,train +2962,3,train +2700,3,train +2304,3,train +2741,4,train +3137,4,train +2438,3,train +2042,3,train +2996,1,train +43,3,train +2820,4,train +2517,3,train +2954,4,train +2255,3,train +3209,1,train +3250,2,train +2947,1,train +3033,4,train +2730,3,train +2289,1,train +2468,3,train +2509,4,train +290,1,train +3026,1,train +469,3,train +73,3,train +3201,2,train +2502,1,train +2722,4,train +765,1,train +503,1,train +682,3,train +286,3,train +2581,1,train +24,3,train +2715,1,train +2801,4,train +3197,4,train +2539,4,train +978,1,train +582,1,train +320,1,train +3097,2,train +3493,2,train +499,3,train +2794,1,train +237,3,train +2969,2,train +2886,4,train +533,1,train +970,2,train +712,3,train +753,4,train +3444,2,train +54,3,train +491,4,train +2786,2,train +188,3,train +2965,4,train +1008,1,train +1049,2,train +746,1,train +350,1,train +1183,2,train +3960,3,train +966,4,train +3657,2,train +1100,4,train +2999,2,train +401,3,train +3994,1,train +959,1,train +563,1,train +1396,2,train +3911,3,train +3474,2,train +3515,3,train +480,3,train +521,4,train +917,4,train +3212,2,train +655,4,train +1475,2,train +1609,2,train +1213,2,train +3990,3,train +514,1,train +951,2,train +3728,3,train +3466,3,train +868,4,train +4024,1,train +989,1,train +1030,2,train +1164,2,train +3545,3,train +947,4,train +551,4,train +4075,3,train +1639,2,train +1680,3,train +3975,1,train +1377,2,train +3758,3,train +1160,4,train +898,4,train +1893,3,train +1497,3,train +798,2,train +2189,1,train +1972,3,train +1710,3,train +4005,1,train +1844,3,train +3963,4,train +1923,3,train +1224,2,train +1661,3,train +2615,1,train +2219,1,train +2353,1,train +1957,1,train +2136,3,train +1478,3,train +1915,4,train +2432,1,train +2170,1,train +1774,1,train +1953,3,train +2390,4,train +1691,3,train +2128,4,train +1825,3,train +2645,1,train +2686,2,train +1987,1,train +2424,2,train +1904,3,train +1945,4,train +2341,4,train +2637,2,train +2334,1,train +2420,4,train +2554,4,train +1721,3,train +2158,4,train +335,1,train +2716,2,train +118,3,train +2413,1,train +2454,2,train +2151,1,train +2192,2,train +2371,4,train +152,1,train +2929,2,train +2667,2,train +110,4,train +2405,2,train +2584,4,train +2188,4,train +3400,1,train +406,2,train +3142,2,train +189,4,train +2484,2,train +2880,2,train +323,4,train +3317,3,train +2222,2,train +2401,4,train +182,1,train +3396,3,train +316,1,train +3530,3,train +2697,2,train +536,4,train +2831,2,train +3430,1,train +395,1,train +133,1,train +174,2,train +615,4,train +2910,2,train +353,4,train +2648,2,train +2951,3,train +3085,3,train +4039,1,train +1045,2,train +649,2,train +3822,3,train +3164,3,train +3601,4,train +566,4,train +170,4,train +2902,3,train +304,4,train +3460,1,train +3594,1,train +204,2,train +2981,3,train +3377,3,train +3511,3,train +3814,4,train +1075,2,train +679,2,train +3893,4,train +3411,1,train +813,2,train +417,2,train +3631,4,train +4027,4,train +3328,3,train +2932,3,train +3886,1,train +1329,3,train +368,2,train +3145,3,train +3582,4,train +3978,4,train +1363,1,train +1542,3,train +1146,3,train +3441,1,train +3837,1,train +843,2,train +3575,1,train +3358,3,train +3399,4,train +3795,4,train +1576,1,train +1359,3,train +4091,2,train +1493,3,train +660,2,train +3788,1,train +3874,4,train +3612,4,train +1655,1,train +1789,1,train +1572,3,train +1131,1,train +3867,1,train +873,2,train +1351,4,train +3646,2,train +3429,4,train +1868,1,train +1210,1,train +1344,1,train +1127,3,train +1564,4,train +865,3,train +4038,4,train +1819,1,train +1860,2,train +2256,2,train +1557,1,train +1161,1,train +2039,4,train +1340,3,train +1381,4,train +1777,4,train +2469,2,train +1636,1,train +2073,2,train +1770,1,train +1374,1,train +1856,4,train +2252,4,train +1990,4,train +2152,2,train +1849,1,train +1890,2,train +2286,2,train +1587,1,train +1628,2,train +1807,4,train +1411,4,train +1545,4,train +1800,1,train +1841,2,train +2237,2,train +2020,4,train +1624,4,train +2316,2,train +2753,3,train +1658,2,train +1575,4,train +2529,2,train +2133,2,train +2966,3,train +2267,2,train +2308,3,train +2866,1,train +268,2,train +3045,3,train +6,2,train +2084,2,train +3079,1,train +85,2,train +219,2,train +2996,3,train +3037,4,train +3292,1,train +339,3,train +3030,1,train +3250,4,train +2947,3,train +2289,3,train +3243,1,train +3284,2,train +2847,1,train +290,3,train +3026,3,train +3201,4,train +2805,4,train +2502,3,train +765,3,train +369,3,train +3060,1,train +3497,2,train +503,3,train +3194,1,train +2581,3,train +2715,3,train +1195,1,train +799,1,train +978,3,train +582,3,train +2877,1,train +3273,1,train +320,3,train +3097,4,train +3493,4,train +17,2,train +2794,3,train +2835,4,train +2969,4,train +878,1,train +3789,2,train +3527,2,train +533,3,train +970,4,train +3224,1,train +3444,4,train +2786,4,train +1091,1,train +829,1,train +1266,2,train +4002,2,train +1008,3,train +567,1,train +1049,4,train +3344,2,train +746,3,train +350,3,train +787,4,train +1183,4,train +3478,2,train +88,3,train +2999,4,train +1176,1,train +780,1,train +3953,2,train +3994,3,train +1396,4,train +563,3,train +3691,2,train +3474,4,train +3212,4,train +1255,1,train +859,1,train +1296,2,train +4073,3,train +993,1,train +597,1,train +1475,4,train +1213,4,train +514,3,train +951,4,train +1905,2,train +810,1,train +4024,3,train +1030,4,train +3721,2,train +1164,4,train +1722,2,train +1326,2,train +1023,1,train +627,1,train +1064,2,train +1460,2,train +847,4,train +3975,3,train +1935,2,train +1539,2,train +1236,1,train +3792,3,train +798,4,train +1752,2,train +2189,3,train +1490,2,train +1094,2,train +1228,2,train +4005,3,train +1965,2,train +1703,2,train +1307,2,train +1744,3,train +1441,2,train +1224,4,train +2302,1,train +2219,3,train +1823,3,train +2353,3,train +1520,2,train +1957,3,train +1654,2,train +2515,1,train +2253,1,train +2432,3,train +1733,2,train +1774,3,train +2170,3,train +2728,1,train +2332,1,train +2466,1,train +2686,4,train +1987,3,train +2424,4,train +2679,1,train +2720,2,train +2021,1,train +2503,4,train +2637,4,train +3329,2,train +2496,1,train +335,3,train +2716,4,train +2413,3,train +2454,4,train +2151,3,train +2192,4,train +235,1,train +3012,2,train +2709,1,train +2313,1,train +152,3,train +193,4,train +2051,1,train +2447,1,train +2929,4,train +2667,4,train +2271,4,train +2405,4,train +314,1,train +3225,2,train +3400,3,train +406,4,train +2264,1,train +2660,1,train +2701,2,train +2880,4,train +2484,4,train +3142,4,train +2222,4,train +661,1,train +3,1,train +2780,2,train +3176,2,train +182,3,train +223,4,train +2697,4,train +478,1,train +612,1,train +3430,3,train +2993,2,train +395,3,train +3127,2,train +3168,3,train +133,3,train +174,4,train +2910,4,train +2648,4,train +295,1,train +732,2,train +167,1,train +253,4,train +649,4,train +2548,2,train +3939,1,train +3677,1,train +246,1,train +3460,3,train +380,1,train +3594,3,train +2761,2,train +204,4,train +3890,1,train +896,2,train +500,2,train +679,4,train +3411,3,train +417,4,train +1371,2,train +975,2,train +3707,1,train +1109,2,train +713,2,train +1150,3,train +3445,1,train +3886,3,train +451,2,train +368,4,train +1188,2,train +3920,1,train +926,2,train +1363,3,train +664,2,train +3441,3,train +3837,3,train +3575,3,train +1659,1,train +3935,2,train +1576,3,train +3871,1,train +3957,4,train +877,2,train +4091,4,train +3695,4,train +660,4,train +1738,1,train +1872,1,train +1655,3,train +1789,3,train +4084,1,train +3688,1,train +1090,2,train +1131,3,train +3867,3,train +3646,4,train +1951,1,train +2085,1,train +1689,1,train +1868,3,train +1427,1,train +1169,2,train +1210,3,train +3901,1,train +1344,3,train +2164,1,train +1640,1,train +1819,3,train +1860,4,train +2256,4,train +1557,3,train +1161,3,train +2377,1,train +1719,1,train +2156,2,train +1457,1,train +1636,3,train +1677,4,train +2073,4,train +1374,3,train +2066,1,train +1670,1,train +2152,4,train +1849,3,train +1890,4,train +2286,4,train +1587,3,train +1628,4,train +2448,2,train +2145,1,train +1883,1,train +1487,1,train +2237,4,train +1841,4,train +2399,2,train +2096,1,train +1700,1,train +2533,2,train +2316,4,train +1658,4,train +2133,4,train +2267,4,train +48,1,train +2866,3,train +268,4,train +2126,1,train +2167,2,train +2563,2,train +6,4,train +2301,2,train +2084,4,train +127,1,train +168,2,train +302,2,train +3079,3,train +85,4,train +2380,2,train +219,4,train +2514,2,train +381,2,train +78,1,train +515,2,train +3292,3,train +2593,2,train +2634,3,train +3030,3,train +2372,3,train +594,2,train +198,2,train +3326,1,train +3722,1,train +332,2,train +3243,3,train +2847,3,train +3284,4,train +3801,1,train +3405,1,train +807,2,train +3539,1,train +3580,2,train +545,2,train +149,2,train +3363,4,train +3060,3,train +2664,3,train +3497,4,train +3752,1,train +3793,2,train +1195,3,train +799,3,train +3273,3,train +2877,3,train +17,4,train +1095,1,train +3872,2,train +4006,2,train +878,3,train +3173,1,train +616,3,train +3307,1,train +3789,4,train +313,2,train +3527,4,train +4085,2,train +1091,3,train +3386,1,train +3782,1,train +4002,4,train +829,3,train +1266,4,train +3124,1,train +130,2,train +567,3,train +3344,4,train +3520,1,train +3478,4,train +3561,2,train +1521,1,train +863,1,train +4036,2,train +646,3,train +3337,1,train +3774,2,train +780,3,train +3161,4,train +3691,4,train +1338,1,train +1472,1,train +1255,3,train +859,3,train +1296,4,train +3550,1,train +993,3,train +597,3,train +3987,2,train +1551,1,train +1592,2,train +1289,1,train +893,1,train +3804,2,train +810,3,train +3721,4,train +1368,1,train +1805,2,train +1502,1,train +1543,2,train +1722,4,train +844,1,train +1326,4,train +4017,2,train +1023,3,train +627,3,train +1064,4,train +1460,4,train +2018,2,train +923,1,train +1057,1,train +1539,4,train +1835,2,train +1532,1,train +1969,2,train +1270,1,train +1752,4,train +4047,2,train +1490,4,train +1094,4,train +1228,4,train +2048,2,train +1349,1,train +1786,2,train +1524,2,train +1703,4,train +1307,4,train +1441,4,train +2261,2,train +2302,3,train +1999,2,train +1603,2,train +2040,3,train +1520,4,train +2515,3,train +2253,3,train +2945,1,train +2728,3,train +2332,3,train +2029,2,train +2070,3,train +2466,3,train +1767,2,train +2679,3,train +2720,4,train +2021,3,train +22,3,train +2799,4,train +2496,3,train +2100,3,train +1838,3,train +235,3,train +2926,1,train +3012,4,train +2709,3,train +2313,3,train +2447,3,train +2051,3,train +2488,4,train +314,3,train +3005,1,train +3046,2,train +3225,4,train +2347,1,train +2481,1,train +2264,3,train +2701,4,train +744,1,train +3655,2,train +482,1,train +3218,1,train +3259,2,train +661,3,train +2956,1,train +3,3,train +2694,1,train +2780,4,train +3176,4,train +2518,4,train +957,1,train +299,1,train +3076,2,train +478,3,train +2773,1,train +3606,2,train +2993,4,train +3127,4,train +908,1,train +512,1,train +3289,2,train +3726,3,train +295,3,train +732,4,train +2986,1,train +3027,2,train +2765,2,train +167,3,train +2548,4,train +1028,2,train +3939,3,train +3636,2,train +3677,3,train +549,4,train +3240,2,train +246,3,train +2978,2,train +3374,2,train +380,3,train +2761,4,train +1200,1,train +1241,2,train +1375,2,train +979,2,train +676,1,train +3890,3,train +3494,3,train +896,4,train +500,4,train +238,4,train +1454,2,train +1588,2,train +975,4,train +3707,3,train +1109,4,train +713,4,train +3445,3,train +451,4,train +4003,1,train +1009,2,train +1446,3,train +706,1,train +1188,4,train +3920,3,train +926,4,train +664,4,train +1484,2,train +1659,3,train +3954,1,train +1356,2,train +3871,3,train +877,4,train +1738,3,train +4033,1,train +1435,2,train +1476,3,train +1872,3,train +3771,1,train +777,2,train +3688,3,train +1951,3,train +2085,3,train +1689,3,train +1427,3,train +3901,3,train +3942,4,train +2164,3,train +1723,1,train +1203,2,train +1640,3,train +2198,1,train +1936,1,train +1719,3,train +2156,4,train +1416,2,train +1457,3,train +2015,1,train +2149,1,train +1670,3,train +1274,3,train +2624,1,train +2665,2,train +1966,1,train +2448,4,train +2145,3,train +1883,3,train +1487,3,train +2441,1,train +2878,2,train +2179,1,train +2616,2,train +2399,4,train +2533,4,train +1700,3,train +3091,2,train +2695,2,train +2392,1,train +2829,2,train +131,1,train +2512,2,train +3042,2,train +2646,2,train +2563,4,train +2167,4,train +2301,4,train +3121,2,train +127,3,train +168,4,train +2422,1,train +2900,3,train +302,4,train +2201,2,train +2380,4,train +381,4,train +2676,2,train +515,4,train +2593,4,train +3409,1,train +811,2,train +415,2,train +594,4,train +198,4,train +2493,2,train +2930,3,train +332,4,train +3326,3,train +3801,3,train +3405,3,train +3539,3,train +3580,4,train +545,4,train +149,4,train +404,1,train +882,3,train +3659,4,train +142,1,train +183,2,train +3793,4,train +4048,1,train +4089,2,train +658,2,train +3872,4,train +1095,3,train +792,2,train +396,2,train +3173,3,train +4006,4,train +3307,3,train +3348,4,train +313,4,train +3865,1,train +3469,1,train +912,3,train +4085,4,train +213,2,train +3386,3,train +3124,3,train +3561,4,train +130,4,train +4078,1,train +3682,1,train +1521,3,train +3816,1,train +3420,1,train +822,2,train +863,3,train +3554,1,train +4036,4,train +560,2,train +3337,3,train +3378,4,train +3774,4,train +1421,1,train +1555,1,train +1159,1,train +1338,3,train +942,3,train +3237,1,train +3633,1,train +3767,1,train +4070,2,train +3987,4,train +1768,1,train +1551,3,train +1592,4,train +3450,1,train +3846,1,train +1289,3,train +893,3,train +3804,4,train +1847,1,train +1451,1,train +1189,1,train +1368,3,train +1805,4,train +1543,4,train +3838,2,train +844,3,train +4017,4,train +1798,1,train +1839,2,train +2018,4,train +3917,2,train +923,3,train +1360,4,train +4051,2,train +1057,3,train +1353,1,train +1835,4,train +1969,4,train +1270,3,train +4047,4,train +2131,2,train +2265,2,train +1432,1,train +1869,2,train +2048,4,train +1786,4,train +1390,4,train +1524,4,train +2132,3,validate +345,3,validate +83,3,validate +2082,2,validate +3685,1,validate +388,1,validate +3206,3,validate +2032,1,validate +2944,3,validate +3898,1,validate +3207,4,validate +3502,1,validate +205,1,validate +3856,4,validate +3157,3,validate +1766,3,validate +297,4,validate +247,3,validate +3673,4,validate +1242,2,validate +763,4,validate +2366,3,validate +4020,4,validate +1455,2,validate +756,1,validate +3533,2,validate +2796,1,validate +1405,1,validate +2713,3,validate +3617,1,validate +1060,3,validate +2226,1,validate +2842,4,validate +2742,2,validate +94,2,validate +2564,1,validate +11,4,validate +3130,3,validate +1219,4,validate +2560,3,validate +4080,4,validate +1515,2,validate +3689,2,validate +1902,2,validate +428,4,validate +3556,3,validate +1728,2,validate +3685,4,validate +1812,1,validate +724,2,validate +2032,4,validate +2461,1,validate +379,4,validate +808,1,validate +546,1,validate +3323,2,validate +3502,4,validate +3669,1,validate +4023,4,validate +3627,4,validate +1283,1,validate +3536,2,validate +3973,3,validate +1671,3,validate +2320,3,validate +3620,1,validate +3141,3,validate +4052,3,validate +972,1,validate +2358,2,validate +2795,3,validate +493,3,validate +1538,3,validate +705,2,validate +2704,1,validate +3833,1,validate +3616,3,validate +2796,4,validate +1963,3,validate +1405,4,validate +3700,2,validate +3687,4,validate +819,1,validate +2564,4,validate +211,1,validate +390,3,validate +3122,2,validate +3468,1,validate +3072,1,validate +3984,3,validate +2381,3,validate +2627,1,validate +2806,3,validate +1852,4,validate +678,2,validate +3152,2,validate +108,2,validate +2544,2,validate +1449,1,validate +1886,2,validate +495,2,validate +674,4,validate +3406,3,validate +2232,1,validate +3843,4,validate +2411,3,validate +3144,3,validate +546,4,validate +841,1,validate +100,3,validate +3011,4,validate +405,1,validate +9,1,validate +2445,1,validate +2228,3,validate +2961,3,validate +1833,4,validate +3873,4,validate +2000,1,validate +871,1,validate +3916,2,validate +3470,1,validate +476,2,validate +1480,1,validate +1304,4,validate +264,2,validate +47,4,validate +3125,2,validate +1734,2,validate +2384,4,validate +477,2,validate +2293,2,validate +427,1,validate +31,1,validate +210,3,validate +1947,2,validate +3288,1,validate +4066,3,validate +294,2,validate +2547,3,validate +2718,1,validate +3888,2,validate +1764,2,validate +1065,1,validate +1240,2,validate +973,3,validate +3106,2,validate +2627,4,validate +3538,4,validate +62,2,validate +840,4,validate +1403,1,validate +3572,2,validate +1449,4,validate +275,2,validate +487,1,validate +3701,3,validate +1702,4,validate +2232,4,validate +841,4,validate +3177,3,validate +2091,1,validate +2132,2,validate +875,2,validate +262,4,validate +3390,3,validate +1221,1,validate +3257,4,validate +4082,1,validate +255,1,validate +2000,4,validate +871,4,validate +475,4,validate +3207,3,validate +1950,3,validate +996,4,validate +297,3,validate +3470,4,validate +3857,4,validate +2459,1,validate +1980,3,validate +2417,4,validate +4020,3,validate +1026,4,validate +31,4,validate +2713,2,validate +1281,1,validate +2842,3,validate +1148,2,validate +1585,3,validate +411,1,validate +1664,3,validate +11,3,validate +3485,1,validate +1403,4,validate +1219,3,validate +399,4,validate +3564,1,validate +4080,3,validate +745,3,validate +3689,1,validate +3868,3,validate +1778,2,validate +3556,2,validate +1728,1,validate +259,2,validate +2082,4,validate +1686,4,validate +3685,3,validate +3120,2,validate +2032,3,validate +1729,2,validate +379,3,validate +684,1,validate +3898,3,validate +3502,3,validate +2462,1,validate +205,3,validate +4023,3,validate +938,2,validate +2675,1,validate +1022,1,validate +1242,4,validate +1413,2,validate +2358,1,validate +493,2,validate +1538,2,validate +3616,2,validate +1455,4,validate +756,3,validate +3533,4,validate +2796,3,validate +1963,2,validate +968,2,validate +1405,3,validate +3700,1,validate +3617,3,validate +2443,1,validate +2226,3,validate +3355,2,validate +1527,1,validate +2742,4,validate +94,4,validate +2564,3,validate +1082,1,validate +390,2,validate +3122,1,validate +1994,2,validate +1515,4,validate +2381,2,validate +3689,4,validate +2078,1,validate +1902,4,validate +425,1,validate +511,4,validate +2806,2,validate +3152,1,validate +3110,4,validate +1633,1,validate +2544,1,validate +724,4,validate +3153,2,validate +2461,3,validate +674,3,validate +808,3,validate +2411,2,validate +546,3,validate +3323,4,validate +3669,3,validate +1283,3,validate +1062,4,validate +2228,2,validate +322,2,validate +3536,4,validate +3923,4,validate +3620,3,validate +1833,3,validate +972,3,validate +2358,4,validate +3916,1,validate +2921,1,validate +705,4,validate +2704,3,validate +3833,3,validate +1092,4,validate +264,1,validate +47,3,validate +3175,2,validate +3125,1,validate +3734,2,validate +477,1,validate +952,2,validate +1997,2,validate +2293,1,validate +210,2,validate +1947,1,validate +819,3,validate +294,1,validate +211,3,validate +2506,1,validate +3122,4,validate +120,1,validate +557,2,validate +1764,1,validate +3072,3,validate +903,1,validate +2719,1,validate +3106,1,validate +2627,3,validate +678,4,validate +3152,4,validate +1541,1,validate +3319,1,validate +108,4,validate +2544,4,validate +1449,3,validate +275,1,validate +1886,4,validate +495,4,validate +2232,3,validate +800,2,validate +841,3,validate +276,2,validate +3094,4,validate +488,1,validate +9,3,validate +2445,3,validate +3216,2,validate +2000,3,validate +871,3,validate +3999,2,validate +3470,3,validate +476,4,validate +3083,2,validate +264,4,validate +1168,2,validate +3125,4,validate +1734,4,validate +4029,2,validate +2293,4,validate +427,3,validate +31,3,validate +1947,4,validate +3288,3,validate +294,4,validate +2718,3,validate +3888,4,validate +1148,1,validate +1585,2,validate +1764,4,validate +153,1,validate +1065,3,validate +2327,1,validate +1240,4,validate +1889,4,validate +2194,2,validate +3106,4,validate +62,4,validate +1403,3,validate +3572,4,validate +275,4,validate +487,3,validate +3219,2,validate +1828,2,validate +3868,2,validate +134,1,validate +1778,1,validate +783,1,validate +2132,4,validate +259,1,validate +875,4,validate +2082,3,validate +1221,3,validate +388,2,validate +3120,1,validate +1729,1,validate +4082,3,validate +255,3,validate +3898,2,validate +1992,2,validate +205,2,validate +2076,1,validate +247,4,validate +764,1,validate +2938,1,validate +1413,1,validate +2459,3,validate +3067,2,validate +1455,3,validate +756,2,validate +3533,3,validate +2713,4,validate +1281,3,validate +2884,2,validate +3617,2,validate +1060,4,validate +2226,2,validate +1365,2,validate +411,3,validate +1577,1,validate +3355,1,validate +94,3,validate +4043,2,validate +2177,1,validate +2560,4,validate +3781,1,validate +3564,3,validate +1994,1,validate +1515,3,validate +3689,3,validate +1995,2,validate +1778,4,validate +3556,4,validate +1728,3,validate +1812,2,validate +3153,1,validate +2461,2,validate +1729,4,validate +1896,1,validate +3678,2,validate +2462,3,validate +1283,2,validate +2109,1,validate +322,1,validate +1671,4,validate +938,4,validate +2675,3,validate +3620,2,validate +1022,3,validate +3141,4,validate +931,1,validate +972,2,validate +1413,4,validate +2358,3,validate +2795,4,validate +493,4,validate +1538,4,validate +3833,2,validate +2704,2,validate +3616,4,validate +1963,4,validate +968,4,validate +3700,3,validate +2443,3,validate +3734,1,validate +3355,4,validate +790,2,validate +1997,1,validate +91,1,validate +819,2,validate +1082,3,validate +390,4,validate +3122,3,validate +557,1,validate +3468,2,validate +3984,4,validate +1994,4,validate +2423,1,validate +1166,1,validate +2381,4,validate +2078,3,validate +425,3,validate +2806,4,validate +899,2,validate +2636,1,validate +3152,3,validate +1633,3,validate +108,3,validate +2544,3,validate +3153,4,validate +1979,2,validate +2453,1,validate +2411,4,validate +800,1,validate +276,1,validate +4057,1,validate +405,2,validate +2445,2,validate +2142,1,validate +2228,4,validate +322,4,validate +2791,1,validate +3216,1,validate +2355,1,validate +3999,1,validate +3916,3,validate +2921,3,validate +3825,1,validate +356,1,validate +831,2,validate +1480,2,validate +3083,1,validate +3217,1,validate +264,3,validate +3175,4,validate +1168,1,validate +3125,3,validate +2385,1,validate +1734,3,validate +3734,4,validate +4029,1,validate +477,3,validate +952,4,validate +1997,4,validate +2293,3,validate +427,2,validate +210,4,validate +1947,3,validate +3288,2,validate +294,3,validate +2506,3,validate +337,1,validate +2718,2,validate +557,4,validate +2852,2,validate +1764,3,validate +1065,2,validate +1199,2,validate +2802,1,validate +2244,2,validate +2719,3,validate +2194,1,validate +3106,3,validate +3015,1,validate +2323,2,validate +62,3,validate +1066,2,validate +3319,3,validate +754,1,validate +3228,1,validate +275,3,validate +487,2,validate +276,4,validate +488,3,validate +2091,2,validate +875,3,validate +572,2,validate +3390,4,validate +1221,2,validate +3216,4,validate +4041,1,validate +4082,2,validate +2650,1,validate +255,2,validate +3999,4,validate +1992,1,validate +1950,4,validate +1168,4,validate +1597,1,validate +4029,4,validate +2459,2,validate +3463,1,validate +3067,1,validate +1980,4,validate +1281,2,validate +3280,1,validate +2884,1,validate +1627,1,validate +1365,1,validate +1148,3,validate +411,2,validate +1585,4,validate +153,3,validate +2327,3,validate +3231,1,validate +1840,1,validate +1578,1,validate +1664,4,validate +321,1,validate +4043,1,validate +3485,2,validate +1099,2,validate +3564,2,validate +745,4,validate +3219,4,validate +1050,2,validate +1828,4,validate +3868,4,validate +1262,1,validate +1995,1,validate +1778,3,validate +783,3,validate +259,3,validate +1079,1,validate +388,4,validate +3120,3,validate +1729,3,validate +3678,1,validate +684,2,validate +3898,4,validate +818,2,validate +2462,2,validate +205,4,validate +938,3,validate +2675,2,validate +981,1,validate +1022,2,validate +764,3,validate +2938,3,validate +1413,3,validate +756,4,validate +1581,1,validate +968,3,validate +2884,4,validate +2443,2,validate +3617,4,validate +2226,4,validate +1577,3,validate +3355,3,validate +1527,2,validate +790,1,validate +270,2,validate +3002,1,validate +4043,4,validate +2177,3,validate +1082,2,validate +3914,2,validate +2086,1,validate +3781,3,validate +1994,3,validate +3294,1,validate +3032,1,validate +2078,2,validate +1995,4,validate +425,2,validate +899,1,validate +1033,1,validate +1854,1,validate +1162,2,validate +1633,2,validate +1812,4,validate +3153,3,validate +1979,1,validate +2461,4,validate +1896,3,validate +808,4,validate +3669,4,validate +1283,4,validate +2109,3,validate +3712,2,validate +322,3,validate +3620,4,validate +972,4,validate +1143,2,validate +2921,2,validate +3833,4,validate +2704,4,validate +831,1,validate +3175,3,validate +3734,3,validate +3347,2,validate +952,3,validate +790,4,validate +1997,3,validate +91,3,validate +3035,1,validate +819,4,validate +211,4,validate +2506,2,validate +120,2,validate +557,3,validate +2852,1,validate +3468,4,validate +3072,4,validate +903,2,validate +1199,1,validate +2244,1,validate +3115,2,validate +2719,2,validate +2423,3,validate +1462,2,validate +1674,1,validate +1808,1,validate +1116,2,validate +2323,1,validate +899,4,validate +1066,1,validate +1541,2,validate +3319,2,validate +1979,4,validate +2453,3,validate +800,3,validate +276,3,validate +3878,1,validate +2749,1,validate +488,2,validate +405,4,validate +9,4,validate +1230,1,validate +2445,4,validate +2142,3,validate +572,1,validate +3216,3,validate +3999,3,validate +356,3,validate +3300,1,validate +998,1,validate +1480,4,validate +3083,3,validate +3217,3,validate +1168,3,validate +4029,3,validate +2335,2,validate +944,2,validate +427,4,validate +3464,1,validate +3288,4,validate +2718,4,validate +2852,4,validate +153,2,validate +1065,4,validate +2327,2,validate +1199,4,validate +2802,3,validate +2244,4,validate +3148,2,validate +2194,3,validate +3015,3,validate +2323,4,validate +450,1,validate +1099,1,validate +3099,2,validate +317,2,validate +754,3,validate +487,4,validate +3219,3,validate +1050,1,validate +1828,3,validate +134,2,validate +1871,1,validate +1179,2,validate +783,2,validate +2091,4,validate +1263,1,validate +572,4,validate +1221,4,validate +388,3,validate +2521,2,validate +1130,2,validate +4082,4,validate +255,4,validate +1992,3,validate +818,1,validate +2076,2,validate +1597,3,validate +764,2,validate +2938,2,validate +2459,4,validate +3067,3,validate +2368,2,validate +2022,2,validate +1281,4,validate +3280,3,validate +2884,3,validate +3972,2,validate +2106,1,validate +715,1,validate +1627,3,validate +1365,3,validate +411,4,validate +1577,2,validate +3231,3,validate +1840,3,validate +270,1,validate +1578,3,validate +4043,3,validate +2177,2,validate +3485,4,validate +3914,1,validate +1099,4,validate +3781,2,validate +3082,1,validate +3564,4,validate +1133,2,validate +1262,3,validate +1995,3,validate +513,1,validate +2949,1,validate +1728,4,validate +647,1,validate +1162,1,validate +1079,3,validate +1812,3,validate +1896,2,validate +3678,3,validate +684,4,validate +1247,1,validate +2462,4,validate +2109,2,validate +3712,1,validate +2675,4,validate +331,1,validate +981,3,validate +1022,4,validate +2322,2,validate +3925,1,validate +931,2,validate +1143,1,validate +1581,3,validate +3700,4,validate +2443,4,validate +3347,1,validate +1527,4,validate +790,3,validate +91,2,validate +270,4,validate +3002,3,validate +1082,4,validate +3914,4,validate +3468,3,validate +3115,1,validate +2423,2,validate +3294,3,validate +3032,3,validate +1166,2,validate +1462,1,validate +2078,4,validate +1116,1,validate +425,4,validate +899,3,validate +3590,1,validate +1033,3,validate +2636,2,validate +1937,1,validate +1854,3,validate +1162,4,validate +1633,4,validate +1979,3,validate +3541,1,validate +2453,2,validate +1330,2,validate +4057,2,validate +405,3,validate +3712,4,validate +2142,2,validate +2750,1,validate +2355,2,validate +3916,4,validate +2921,4,validate +356,2,validate +3825,2,validate +831,3,validate +2830,2,validate +1480,3,validate +3217,2,validate +2385,2,validate +477,4,validate +2335,1,validate +944,1,validate +83,1,validate +2598,2,validate +3035,3,validate +2944,1,validate +3381,2,validate +2506,4,validate +1291,1,validate +337,2,validate +120,4,validate +2852,3,validate +903,4,validate +1199,3,validate +2802,2,validate +2244,3,validate +2719,4,validate +3148,1,validate +1462,4,validate +1891,1,validate +1674,3,validate +3673,2,validate +1808,3,validate +1116,4,validate +3015,2,validate +2323,3,validate +3149,2,validate +1066,3,validate +1541,4,validate +2366,1,validate +3099,1,validate +3319,4,validate +317,1,validate +754,2,validate +3228,2,validate +530,1,validate +3878,3,validate +2749,3,validate +1179,1,validate +488,4,validate +2091,3,validate +1230,3,validate +572,3,validate +2521,1,validate +1130,1,validate +4041,2,validate +2650,2,validate +1605,1,validate +3300,3,validate +998,3,validate +1818,1,validate +1597,2,validate +3463,2,validate +2335,4,validate +2368,1,validate +944,4,validate +2206,2,validate +2022,1,validate +2631,2,validate +3972,1,validate +3280,2,validate +3676,2,validate +1627,2,validate +1324,1,validate +1148,4,validate +153,4,validate +2327,4,validate +3627,2,validate +3231,2,validate +1840,2,validate +3148,4,validate +1578,2,validate +146,1,validate +321,2,validate +2320,1,validate +3485,3,validate +450,3,validate +4052,1,validate +1099,3,validate +317,4,validate +1133,1,validate +613,2,validate +1050,3,validate +1262,2,validate +134,4,validate +1871,3,validate +1179,4,validate +783,4,validate +259,4,validate +1263,3,validate +1079,2,validate +3120,4,validate +3687,2,validate +1130,4,validate +684,3,validate +818,3,validate +1688,2,validate +2076,4,validate +981,2,validate +764,4,validate +2322,1,validate +2938,4,validate +2368,4,validate +1194,2,validate +2022,4,validate +1581,2,validate +2106,3,validate +715,3,validate +1577,4,validate +100,1,validate +1527,3,validate +3660,2,validate +270,3,validate +2961,1,validate +3002,2,validate +179,1,validate +2177,4,validate +3914,3,validate +2086,2,validate +3781,4,validate +3082,3,validate +3294,2,validate +1133,4,validate +3032,2,validate +2037,2,validate +1033,2,validate +513,3,validate +2949,3,validate +1854,2,validate +1162,3,validate +3853,1,validate +1896,4,validate +1330,1,validate +1247,3,validate +2109,4,validate +3712,3,validate +973,1,validate +2322,4,validate +3925,3,validate +1622,1,validate +931,4,validate +1143,3,validate +2830,1,validate +2964,1,validate +1702,2,validate +1440,2,validate +3826,1,validate +832,2,validate +3347,3,validate +91,4,validate +262,2,validate +2598,1,validate +3035,2,validate +3381,1,validate +120,3,validate +3856,1,validate +862,2,validate +903,3,validate +3115,3,validate +2423,4,validate +1166,4,validate +1462,3,validate +1674,2,validate +3673,1,validate +1808,2,validate +1116,3,validate +3590,3,validate +3149,1,validate +2636,4,validate +1937,3,validate +763,1,validate +1541,3,validate +2283,2,validate +3541,3,validate +2453,4,validate +800,4,validate +3878,2,validate +2749,2,validate +4057,4,validate +581,2,validate +1230,2,validate +2142,4,validate +2750,3,validate +2355,4,validate +356,4,validate +3825,4,validate +3300,2,validate +998,2,validate +3083,4,validate +3217,4,validate +2385,4,validate +2335,3,validate +428,1,validate +944,3,validate +2206,1,validate +1686,2,validate +2598,4,validate +3464,2,validate +2631,1,validate +33,2,validate +3381,4,validate +3676,1,validate +379,1,validate +1291,3,validate +337,4,validate +2802,4,validate +3627,1,validate +3148,3,validate +2194,4,validate +1891,3,validate +3015,4,validate +3149,4,validate +450,2,validate +3099,3,validate +317,3,validate +754,4,validate +3228,4,validate +613,1,validate +530,3,validate +134,3,validate +1871,2,validate +1179,3,validate +1263,2,validate +2521,3,validate +3687,1,validate +1130,3,validate +4041,4,validate +2650,4,validate +1992,4,validate +1688,1,validate +1605,3,validate +2076,3,validate +36,2,validate +1818,3,validate +1597,4,validate +511,2,validate +3463,4,validate +1852,1,validate +3067,4,validate +2368,3,validate +1194,1,validate +2206,4,validate +3110,2,validate +2022,3,validate +2631,4,validate +3972,3,validate +3280,4,validate +2106,2,validate +3676,4,validate +674,1,validate +715,2,validate +3843,1,validate +1627,4,validate +1324,3,validate +1365,4,validate +3011,1,validate +3231,4,validate +3660,1,validate +1062,2,validate +1840,4,validate +1578,4,validate +146,3,validate +321,4,validate +3923,2,validate +2532,2,validate +1833,1,validate +3873,1,validate +3082,2,validate +1092,2,validate +1133,3,validate +2037,1,validate +613,4,validate +1304,1,validate +47,1,validate +1262,4,validate +2562,2,validate +513,2,validate +2949,2,validate +647,2,validate +2384,1,validate +1079,4,validate +3770,2,validate +3678,4,validate +1688,4,validate +1247,2,validate +2330,2,validate +3375,2,validate +331,2,validate +981,4,validate +2322,3,validate +3925,2,validate +931,3,validate +3538,1,validate +1673,2,validate +840,1,validate +1194,4,validate +1581,4,validate +1702,1,validate +1440,1,validate +3094,2,validate +832,1,validate +3660,4,validate +3002,4,validate +262,1,validate +179,3,validate +3257,1,validate +2086,4,validate +475,1,validate +862,1,validate +996,1,validate +3294,4,validate +3032,4,validate +1166,3,validate +3857,1,validate +2037,4,validate +3590,2,validate +1033,4,validate +3724,2,validate +2636,3,validate +1937,2,validate +1854,4,validate +3853,3,validate +2283,1,validate +2417,1,validate +1026,1,validate +3541,2,validate +1155,2,validate +1330,3,validate +4057,3,validate +581,1,validate +3146,2,validate +2750,2,validate +1889,2,validate +1622,3,validate +2355,3,validate +3825,3,validate +831,4,validate +2830,3,validate +2964,3,validate +399,1,validate +1440,4,validate +2385,3,validate +3826,3,validate +832,4,validate +345,2,validate +83,2,validate +2082,1,validate +1686,1,validate +2598,3,validate +3035,4,validate +33,1,validate +3206,2,validate +2944,2,validate +3381,3,validate +1291,2,validate +337,3,validate +3856,3,validate +862,4,validate +3157,2,validate +1766,2,validate +247,2,validate +1891,2,validate +1674,4,validate +3673,3,validate +1808,4,validate +3149,3,validate +1242,1,validate +1066,4,validate +763,3,validate +2366,2,validate +2283,4,validate +3228,3,validate +1455,1,validate +3533,1,validate +530,2,validate +1060,2,validate +3878,4,validate +2749,4,validate +581,4,validate +1230,4,validate +2742,1,validate +94,1,validate +4041,3,validate +2650,3,validate +3130,2,validate +1605,2,validate +3300,4,validate +998,4,validate +2560,2,validate +36,1,validate +1818,2,validate +1515,1,validate +1902,1,validate +511,1,validate +3463,3,validate +428,3,validate +2206,3,validate +3110,1,validate +3464,4,validate +2631,3,validate +724,1,validate +33,4,validate +3676,3,validate +1324,2,validate +3323,1,validate +3627,3,validate +1062,1,validate +3536,1,validate +3973,2,validate +1671,2,validate +146,2,validate +321,3,validate +2320,2,validate +3923,1,validate +2532,1,validate +450,4,validate +3141,2,validate +4052,2,validate +2795,2,validate +705,1,validate +1092,1,validate +613,3,validate +1050,4,validate +2562,1,validate +1871,4,validate +1263,4,validate +3770,1,validate +3687,3,validate +818,4,validate +1688,3,validate +2330,1,validate +3375,1,validate +3984,2,validate +36,4,validate +1673,1,validate +1852,3,validate +678,1,validate +1194,3,validate +108,1,validate +1886,1,validate +2106,4,validate +495,1,validate +715,4,validate +3406,2,validate +3843,3,validate +3144,2,validate +3094,1,validate +100,2,validate +3011,3,validate +3660,3,validate +2961,2,validate +179,2,validate +2532,4,validate +3873,3,validate +2086,3,validate +3082,4,validate +476,1,validate +2037,3,validate +1304,3,validate +2562,4,validate +3724,1,validate +513,4,validate +2949,4,validate +1734,1,validate +647,4,validate +3853,2,validate +2384,3,validate +3770,4,validate +1155,1,validate +4066,2,validate +1247,4,validate +2547,2,validate +2330,4,validate +3888,1,validate +3375,4,validate +3146,1,validate +1240,1,validate +331,4,validate +1889,1,validate +973,2,validate +3925,4,validate +1622,2,validate +3538,3,validate +1143,4,validate +1673,4,validate +62,1,validate +840,3,validate +2964,2,validate +3572,1,validate +1702,3,validate +3701,2,validate +1440,3,validate +3177,2,validate +3826,2,validate +832,3,validate +2132,1,validate +3347,4,validate +345,1,validate +875,1,validate +262,3,validate +3390,2,validate +3206,1,validate +3257,3,validate +475,3,validate +3207,2,validate +3856,2,validate +1950,2,validate +862,3,validate +3157,1,validate +996,3,validate +1766,1,validate +297,2,validate +3115,4,validate +247,1,validate +3857,3,validate +3590,4,validate +3724,4,validate +1937,4,validate +763,2,validate +2283,3,validate +1980,2,validate +2417,3,validate +4020,2,validate +1026,3,validate +3541,4,validate +1155,4,validate +2713,1,validate +1060,1,validate +2842,2,validate +581,3,validate +3146,4,validate +2750,4,validate +1664,2,validate +11,2,validate +3130,1,validate +1219,2,validate +2560,1,validate +399,3,validate +4080,2,validate +745,2,validate +428,2,validate +3556,1,validate +345,4,validate +83,4,validate +1686,3,validate +3685,2,validate +3464,3,validate +33,3,validate +2032,2,validate +3206,4,validate +2944,4,validate +379,2,validate +1291,4,validate +3502,2,validate +3157,4,validate +1766,4,validate +3973,1,validate +1671,1,validate +938,1,validate +1891,4,validate +1242,3,validate +3141,1,validate +2366,4,validate +3099,4,validate +2795,1,validate +493,1,validate +1538,1,validate +3616,1,validate +2796,2,validate +1963,1,validate +968,1,validate +1405,2,validate +530,4,validate +2742,3,validate +2521,4,validate +2564,2,validate +3130,4,validate +390,1,validate +1605,4,validate +3984,1,validate +36,3,validate +1818,4,validate +2381,1,validate +1902,3,validate +511,3,validate +2806,1,validate +1852,2,validate +3110,3,validate +724,3,validate +3972,4,validate +674,2,validate +3843,2,validate +3406,1,validate +808,2,validate +3144,1,validate +2411,1,validate +546,2,validate +3323,3,validate +1324,4,validate +3669,2,validate +3011,2,validate +1062,3,validate +2228,1,validate +3536,3,validate +3973,4,validate +146,4,validate +2320,4,validate +3923,3,validate +2532,3,validate +1833,2,validate +3873,2,validate +4052,4,validate +705,3,validate +1092,3,validate +1304,2,validate +47,2,validate +3175,1,validate +2562,3,validate +647,3,validate +2384,2,validate +952,1,validate +3770,3,validate +210,1,validate +4066,1,validate +211,2,validate +2547,1,validate +2330,3,validate +3375,3,validate +3072,2,validate +331,3,validate +2627,2,validate +3538,2,validate +1673,3,validate +840,2,validate +678,3,validate +1449,2,validate +1886,3,validate +495,3,validate +3406,4,validate +2232,2,validate +3701,1,validate +3144,4,validate +841,2,validate +3177,1,validate +3094,3,validate +100,4,validate +9,2,validate +2961,4,validate +3390,1,validate +179,4,validate +3257,2,validate +2000,2,validate +871,2,validate +475,2,validate +3207,1,validate +1950,1,validate +996,2,validate +297,1,validate +3470,2,validate +476,3,validate +3857,2,validate +3724,3,validate +3853,4,validate +1980,1,validate +2417,2,validate +4020,1,validate +1026,2,validate +31,2,validate +1155,3,validate +1330,4,validate +4066,4,validate +2842,1,validate +2547,4,validate +3888,3,validate +1585,1,validate +3146,3,validate +1240,3,validate +1889,3,validate +1664,1,validate +973,4,validate +1622,4,validate +11,1,validate +1403,2,validate +2830,4,validate +1219,1,validate +2964,4,validate +399,2,validate +3572,3,validate +4080,1,validate +745,1,validate +3219,1,validate +3701,4,validate +1828,1,validate +3868,1,validate +3177,4,validate +3826,4,validate +782,4,test +3036,1,test +2519,3,test +825,2,test +1341,4,test +1553,3,test +3989,3,test +84,4,test +733,4,test +2732,3,test +2549,3,test +3849,1,test +3453,1,test +593,2,test +3807,4,test +4019,3,test +939,1,test +543,1,test +2628,3,test +2409,1,test +3624,4,test +3362,4,test +976,4,test +1272,2,test +1485,2,test +3442,4,test +1140,4,test +3950,2,test +1352,3,test +4001,4,test +2431,2,test +1739,3,test +1648,1,test +2997,4,test +694,2,test +2906,2,test +1952,3,test +1649,2,test +2298,2,test +2814,4,test +2081,4,test +645,2,test +2427,3,test +2857,2,test +1769,3,test +595,1,test +378,3,test +2115,2,test +3852,1,test +641,4,test +1982,3,test +1932,2,test +463,3,test +3324,3,test +1933,3,test +1537,3,test +3453,4,test +1191,3,test +3537,3,test +1234,1,test +1058,4,test +359,3,test +3437,1,test +2745,2,test +3395,4,test +918,2,test +3650,1,test +1093,3,test +2696,2,test +2393,1,test +2479,4,test +2217,4,test +1955,4,test +826,4,test +3221,3,test +1651,1,test +2775,2,test +1518,2,test +523,2,test +2597,1,test +3213,4,test +1335,2,test +3509,2,test +1252,4,test +2077,1,test +1681,1,test +686,1,test +2727,3,test +3934,2,test +1336,3,test +2939,2,test +382,4,test +2069,2,test +3455,3,test +3193,3,test +595,4,test +2840,1,test +3322,4,test +1669,4,test +192,1,test +362,3,test +3053,1,test +2495,2,test +1104,2,test +446,2,test +1054,1,test +575,3,test +4049,1,test +2524,1,test +1437,4,test +2482,4,test +1783,3,test +2828,3,test +3437,4,test +3952,4,test +3649,3,test +1996,3,test +2130,3,test +2779,3,test +2991,2,test +1297,1,test +639,1,test +943,3,test +3720,4,test +2463,4,test +2597,4,test +3071,3,test +1206,4,test +1552,3,test +423,3,test +3155,2,test +3671,4,test +2414,4,test +3022,3,test +1848,1,test +3459,4,test +3368,2,test +1977,2,test +324,2,test +3014,4,test +408,1,test +3622,3,test +2527,2,test +366,4,test +537,2,test +3093,4,test +1482,1,test +3918,1,test +1745,2,test +1612,3,test +825,1,test +84,3,test +2649,4,test +347,4,test +3815,2,test +559,3,test +2995,3,test +905,2,test +1817,4,test +3766,2,test +593,1,test +3674,4,test +639,4,test +3929,1,test +1797,2,test +3401,2,test +3442,3,test +1140,3,test +3139,2,test +3747,1,test +1352,2,test +3268,3,test +4001,3,test +2052,4,test +1656,4,test +96,3,test +2906,1,test +1482,4,test +1649,1,test +1566,3,test +392,1,test +2081,3,test +216,4,test +3777,1,test +2427,2,test +125,2,test +2857,1,test +3036,3,test +1170,2,test +1600,1,test +825,4,test +641,3,test +1383,2,test +463,2,test +1467,1,test +3324,2,test +1933,2,test +3849,3,test +3453,3,test +2499,4,test +593,4,test +3537,2,test +939,3,test +543,3,test +1151,2,test +1759,1,test +2409,3,test +4012,2,test +918,1,test +1272,4,test +3221,2,test +573,2,test +1485,4,test +523,1,test +481,4,test +2043,2,test +3172,2,test +3950,4,test +2431,4,test +2127,1,test +1648,3,test +1252,3,test +694,4,test +3123,2,test +2727,2,test +2906,4,test +1336,2,test +2298,4,test +645,4,test +1811,2,test +2857,4,test +595,3,test +2115,4,test +3852,3,test +3365,1,test +1932,4,test +3232,2,test +2495,1,test +1500,1,test +1104,1,test +3578,1,test +1233,2,test +2970,1,test +1105,2,test +1317,1,test +1234,3,test +3966,2,test +2138,1,test +3183,1,test +922,2,test +3437,3,test +2745,4,test +1354,4,test +3649,2,test +1397,2,test +2130,2,test +3000,1,test +918,4,test +3650,3,test +2476,1,test +1347,1,test +2696,4,test +2393,3,test +1651,3,test +1086,2,test +2775,4,test +1518,4,test +2597,3,test +3071,2,test +1206,3,test +3983,4,test +1511,1,test +1552,2,test +423,2,test +3155,1,test +1335,4,test +2160,1,test +3509,4,test +1681,3,test +3680,2,test +686,3,test +3022,2,test +3459,3,test +3934,4,test +2939,4,test +3764,1,test +3368,1,test +374,2,test +1977,1,test +2111,1,test +324,1,test +2069,4,test +3235,2,test +2840,3,test +537,1,test +671,1,test +192,3,test +1795,2,test +1929,2,test +1745,1,test +3053,3,test +1104,4,test +446,4,test +2008,2,test +1612,2,test +1054,3,test +3349,1,test +2354,1,test +1958,1,test +2524,3,test +347,3,test +1217,2,test +2995,2,test +905,1,test +1817,3,test +2559,2,test +3766,1,test +3167,1,test +2991,4,test +1297,3,test +639,3,test +1076,4,test +2808,4,test +1069,1,test +3634,2,test +2935,1,test +3155,4,test +3584,1,test +1848,3,test +3401,1,test +3139,1,test +324,4,test +887,1,test +3268,2,test +408,3,test +2011,2,test +2527,4,test +96,2,test +570,1,test +1482,3,test +3918,3,test +528,4,test +1962,2,test +1566,2,test +1745,4,test +3389,4,test +3036,2,test +3170,2,test +825,3,test +2387,1,test +2824,2,test +1383,1,test +2732,4,test +3815,4,test +3462,2,test +905,4,test +3849,2,test +593,3,test +3766,4,test +939,2,test +1151,1,test +2409,2,test +4012,1,test +3929,3,test +1797,4,test +573,1,test +1485,3,test +3401,4,test +3139,4,test +1528,1,test +2043,1,test +1352,4,test +2652,2,test +1648,2,test +3123,1,test +2865,2,test +2906,3,test +999,1,test +1649,3,test +2257,2,test +2298,3,test +392,3,test +3598,1,test +2207,1,test +2427,4,test +125,4,test +2857,3,test +1170,4,test +1600,3,test +3852,2,test +817,2,test +1982,4,test +1383,4,test +463,4,test +3232,1,test +634,2,test +3324,4,test +1933,4,test +1763,1,test +1105,1,test +3537,4,test +1234,2,test +3966,1,test +239,2,test +1151,4,test +4012,4,test +2838,2,test +56,2,test +1397,1,test +918,3,test +3650,2,test +4046,2,test +1093,4,test +2393,2,test +3001,1,test +7,2,test +3221,4,test +1086,1,test +573,4,test +1518,3,test +523,3,test +3172,4,test +2043,4,test +2127,3,test +2077,2,test +3680,1,test +2211,2,test +686,2,test +3123,4,test +1512,1,test +2727,4,test +1336,4,test +2939,3,test +1811,4,test +721,1,test +3844,1,test +192,2,test +3365,3,test +1196,1,test +1929,1,test +3053,2,test +3232,4,test +2495,3,test +1500,3,test +1104,3,test +2666,1,test +3578,3,test +2008,1,test +1054,2,test +1233,4,test +2970,3,test +1105,4,test +1317,3,test +4049,2,test +2221,1,test +3966,4,test +964,1,test +922,4,test +3649,4,test +1996,4,test +2130,4,test +3000,3,test +1826,1,test +2559,1,test +2779,4,test +2476,3,test +1347,3,test +1693,2,test +1297,2,test +1431,2,test +3684,2,test +3071,4,test +1594,1,test +3634,1,test +1332,1,test +1552,4,test +423,4,test +3155,3,test +2160,3,test +3680,4,test +3022,4,test +1848,2,test +3847,1,test +416,1,test +3368,3,test +374,4,test +1977,3,test +2111,3,test +324,3,test +3235,4,test +408,2,test +3622,4,test +2011,1,test +3927,2,test +537,3,test +671,3,test +1795,4,test +1962,1,test +967,1,test +1745,3,test +2008,4,test +1612,4,test +3170,1,test +3349,3,test +1180,1,test +1958,3,test +2824,1,test +651,2,test +3815,3,test +1217,4,test +559,4,test +2995,4,test +3462,1,test +905,3,test +2559,4,test +3725,2,test +3766,3,test +1993,1,test +2855,2,test +2072,1,test +207,2,test +1810,1,test +3929,2,test +1069,3,test +3584,3,test +1797,3,test +3401,3,test +3139,3,test +3048,1,test +2652,1,test +3268,4,test +1657,1,test +2011,4,test +96,4,test +570,3,test +2865,1,test +3261,1,test +3910,1,test +2257,1,test +1566,4,test +392,2,test +3777,2,test +125,3,test +3036,4,test +1170,3,test +3170,4,test +867,2,test +3599,1,test +1600,2,test +2824,4,test +817,1,test +1383,3,test +1080,2,test +2683,1,test +1467,2,test +634,1,test +3462,4,test +3849,4,test +939,4,test +543,4,test +239,1,test +1151,3,test +1759,2,test +2409,4,test +4012,3,test +2838,1,test +56,1,test +586,1,test +2268,1,test +4046,1,test +1794,1,test +7,1,test +573,3,test +354,1,test +3172,3,test +2043,3,test +2652,4,test +3081,1,test +2127,2,test +1648,4,test +2211,1,test +3123,3,test +1216,1,test +999,3,test +2474,2,test +2257,4,test +3598,3,test +2207,3,test +1811,3,test +3852,4,test +3365,2,test +1113,2,test +851,2,test +3232,3,test +634,4,test +1500,2,test +3578,2,test +1233,3,test +1763,3,test +2970,2,test +1105,3,test +1276,1,test +1317,2,test +1234,4,test +3966,3,test +2138,2,test +3183,2,test +922,3,test +2838,4,test +3267,1,test +56,4,test +1397,3,test +4088,1,test +3000,2,test +4046,4,test +3650,4,test +2476,2,test +1347,2,test +1044,1,test +2393,4,test +1693,1,test +3001,3,test +1431,1,test +7,4,test +436,1,test +1651,4,test +1086,3,test +1956,2,test +565,2,test +3684,1,test +1511,2,test +516,2,test +2160,2,test +2077,4,test +1681,4,test +3680,3,test +686,4,test +3764,2,test +374,3,test +2111,2,test +3235,3,test +3540,1,test +721,3,test +3927,1,test +2840,4,test +1067,2,test +671,2,test +3844,3,test +192,4,test +1795,3,test +1929,3,test +2537,2,test +3053,4,test +884,2,test +2883,1,test +2008,3,test +1054,4,test +3349,2,test +2354,2,test +1958,2,test +4049,4,test +2524,4,test +2221,3,test +651,1,test +1217,3,test +1260,1,test +1826,3,test +2559,3,test +3725,1,test +3167,2,test +1693,4,test +82,1,test +1297,4,test +2855,1,test +1431,4,test +3938,1,test +207,1,test +3118,2,test +1290,1,test +3330,1,test +1069,2,test +470,2,test +3684,4,test +1594,3,test +420,1,test +3634,3,test +1332,3,test +2935,2,test +3543,1,test +3584,2,test +1848,4,test +3847,3,test +416,3,test +887,2,test +408,4,test +2011,3,test +1920,1,test +3918,4,test +1962,3,test +55,1,test +967,3,test +2916,1,test +2654,1,test +3170,3,test +867,1,test +2387,2,test +2824,3,test +651,4,test +1080,1,test +3462,3,test +2855,4,test +115,1,test +3971,1,test +1810,3,test +3929,4,test +3314,1,test +1528,2,test +3747,4,test +3048,3,test +2652,3,test +1657,3,test +3394,2,test +2865,3,test +999,2,test +696,1,test +3910,3,test +2736,1,test +1649,4,test +2474,1,test +2257,3,test +392,4,test +1954,2,test +3598,2,test +3295,1,test +3777,4,test +2207,2,test +301,2,test +867,4,test +3599,3,test +1600,4,test +817,3,test +2683,3,test +1113,1,test +851,1,test +1467,4,test +634,3,test +2633,2,test +1763,2,test +69,1,test +239,3,test +1976,2,test +1759,4,test +4054,2,test +2838,3,test +56,3,test +2268,3,test +4046,3,test +1794,3,test +2960,1,test +3001,2,test +7,3,test +1956,1,test +565,1,test +523,4,test +2303,1,test +3081,3,test +2127,4,test +516,1,test +2036,2,test +2077,3,test +2211,3,test +1512,2,test +1216,3,test +721,2,test +1804,2,test +1067,1,test +3844,2,test +3365,4,test +1196,2,test +2537,1,test +851,4,test +2495,4,test +884,1,test +1500,4,test +2666,2,test +3578,4,test +2101,1,test +2970,4,test +1276,3,test +1317,4,test +4049,3,test +2221,2,test +2138,4,test +964,2,test +3183,4,test +1310,1,test +3267,3,test +3909,1,test +2914,1,test +3000,4,test +1826,2,test +1960,2,test +3563,1,test +2476,4,test +1261,1,test +1347,4,test +1044,3,test +2647,2,test +1693,3,test +1431,3,test +436,3,test +2731,1,test +782,2,test +1078,1,test +3118,1,test +565,4,test +470,1,test +3684,3,test +1553,1,test +1594,2,test +1332,2,test +1511,4,test +2160,4,test +683,1,test +3847,2,test +416,2,test +2415,1,test +3764,4,test +3368,4,test +1977,4,test +2111,4,test +2628,1,test +3927,3,test +537,4,test +671,4,test +3362,2,test +2537,4,test +967,2,test +884,4,test +3349,4,test +1442,2,test +2354,4,test +1180,2,test +1958,4,test +135,1,test +651,3,test +1739,1,test +1260,3,test +2863,2,test +2601,2,test +3725,3,test +3167,4,test +1993,2,test +2814,2,test +2855,3,test +3938,3,test +2072,2,test +207,3,test +1810,2,test +3118,4,test +378,1,test +1290,3,test +3330,3,test +1069,4,test +3414,2,test +420,3,test +2935,4,test +3543,3,test +3584,4,test +1537,1,test +1191,1,test +3747,3,test +3048,2,test +887,4,test +1657,2,test +3656,1,test +3394,1,test +3528,1,test +1920,3,test +3261,2,test +3395,2,test +3910,2,test +1742,2,test +55,3,test +1954,1,test +3777,3,test +697,1,test +301,1,test +2916,3,test +2654,3,test +1955,2,test +826,2,test +867,3,test +3599,2,test +2387,4,test +3637,1,test +1080,3,test +2683,2,test +1984,1,test +1467,3,test +2633,1,test +2197,1,test +3242,1,test +2980,1,test +1976,1,test +1759,3,test +4054,1,test +2585,2,test +1456,2,test +3193,1,test +3971,3,test +586,2,test +2268,2,test +1794,2,test +362,1,test +3314,3,test +3610,1,test +1528,4,test +354,2,test +3739,2,test +1437,2,test +3081,2,test +2036,1,test +1216,2,test +3952,2,test +3690,2,test +999,4,test +696,3,test +2736,3,test +2474,3,test +3598,4,test +3295,3,test +2207,4,test +301,4,test +122,1,test +1804,1,test +1938,1,test +943,1,test +3720,2,test +2067,2,test +1113,3,test +851,3,test +2633,4,test +1763,4,test +1276,2,test +1410,2,test +19,2,test +2751,1,test +2138,3,test +1976,4,test +3183,3,test +4054,4,test +103,1,test +3267,2,test +1397,4,test +4088,2,test +3093,2,test +1960,1,test +1044,2,test +2647,1,test +3001,4,test +436,2,test +1086,4,test +1956,3,test +782,1,test +565,3,test +1341,1,test +84,1,test +733,1,test +1511,3,test +516,3,test +2036,4,test +1512,4,test +3764,3,test +3807,1,test +3540,2,test +3674,2,test +721,4,test +3624,1,test +1804,4,test +1067,3,test +3066,2,test +3362,1,test +3844,4,test +976,1,test +1196,4,test +3491,2,test +1929,4,test +2537,3,test +884,3,test +2883,2,test +2666,4,test +1442,1,test +2354,3,test +1705,2,test +2221,4,test +3442,1,test +964,4,test +1310,3,test +1656,2,test +1260,2,test +2863,1,test +2997,1,test +2601,1,test +3909,3,test +1826,4,test +1960,4,test +3563,3,test +3167,3,test +1261,3,test +2647,4,test +82,2,test +2814,1,test +2081,1,test +216,2,test +2731,3,test +3938,2,test +1078,3,test +3118,3,test +1290,2,test +3330,2,test +470,3,test +641,1,test +3414,1,test +1594,4,test +420,2,test +3634,4,test +1332,4,test +2935,3,test +3543,2,test +683,3,test +3847,4,test +416,4,test +2415,3,test +3756,2,test +2499,2,test +887,3,test +1058,1,test +1920,2,test +3395,1,test +1742,1,test +1962,4,test +55,2,test +967,4,test +2479,1,test +2916,2,test +2217,1,test +2654,2,test +1955,1,test +826,1,test +1442,4,test +1180,4,test +2387,3,test +135,3,test +481,2,test +3213,1,test +2863,4,test +1252,1,test +2601,4,test +1993,4,test +382,1,test +115,2,test +2585,1,test +1456,1,test +2072,4,test +3971,2,test +1810,4,test +3322,1,test +66,2,test +1669,1,test +3414,4,test +3314,2,test +1528,3,test +3739,1,test +3048,4,test +1437,1,test +1657,4,test +3656,3,test +2482,1,test +3394,3,test +3528,3,test +3952,1,test +3261,4,test +1354,2,test +2865,4,test +3690,1,test +696,2,test +3910,4,test +2736,2,test +1742,4,test +1954,3,test +3295,2,test +697,3,test +301,3,test +3599,4,test +1692,2,test +817,4,test +3720,1,test +860,2,test +3637,3,test +2463,1,test +2067,1,test +2683,4,test +1984,3,test +1206,1,test +3983,2,test +2633,3,test +3671,1,test +3113,2,test +2414,1,test +2197,3,test +3459,1,test +69,2,test +3242,3,test +2980,3,test +1410,1,test +19,1,test +3192,2,test +239,4,test +1976,3,test +4054,3,test +2585,4,test +1456,4,test +3014,1,test +366,1,test +3143,2,test +586,4,test +2268,4,test +3093,1,test +1794,4,test +2960,2,test +3610,3,test +2911,2,test +354,4,test +3739,4,test +2303,2,test +3081,4,test +2649,1,test +347,1,test +2036,3,test +2211,4,test +1216,4,test +1512,3,test +3690,4,test +1817,1,test +3674,1,test +1076,2,test +122,3,test +1804,3,test +3066,1,test +1938,3,test +2808,2,test +1196,3,test +3491,1,test +2067,4,test +2666,3,test +2101,2,test +1276,4,test +1705,1,test +1410,4,test +19,4,test +2314,2,test +2751,3,test +964,3,test +103,3,test +1310,2,test +2052,1,test +1656,1,test +3267,4,test +3909,2,test +4088,4,test +2914,2,test +1960,3,test +3563,2,test +528,2,test +1261,2,test +1044,4,test +2647,3,test +216,1,test +3389,2,test +436,4,test +2731,2,test +782,3,test +1078,2,test +2519,2,test +1341,3,test +1553,2,test +3989,2,test +733,3,test +2732,2,test +683,2,test +2415,2,test +2549,2,test +3756,1,test +2499,1,test +3807,3,test +4019,2,test +2628,2,test +3540,4,test +3927,4,test +3624,3,test +3066,4,test +3362,3,test +976,3,test +3491,4,test +2883,4,test +1272,1,test +1442,3,test +1180,3,test +1485,1,test +1705,4,test +135,2,test +481,1,test +3950,1,test +2431,1,test +1739,2,test +1260,4,test +2863,3,test +2997,3,test +2601,3,test +694,1,test +3725,4,test +1993,3,test +2298,1,test +82,4,test +2814,3,test +645,1,test +3938,4,test +2072,3,test +207,4,test +1769,2,test +378,2,test +1290,4,test +3330,4,test +2115,1,test +66,1,test +3414,3,test +420,4,test +1982,2,test +3543,4,test +1932,1,test +1537,2,test +3756,4,test +1191,2,test +3656,2,test +1058,3,test +359,2,test +3528,2,test +1920,4,test +2745,1,test +3261,3,test +1354,1,test +3395,3,test +1742,3,test +55,4,test +1093,2,test +697,2,test +2696,1,test +2479,3,test +2916,4,test +2654,4,test +1955,3,test +826,3,test +1692,1,test +2775,1,test +1518,1,test +860,1,test +3637,2,test +1080,4,test +3213,3,test +1984,2,test +3983,1,test +1335,1,test +3509,1,test +3113,1,test +2197,2,test +3934,1,test +3242,2,test +2939,1,test +2980,2,test +382,3,test +3192,1,test +115,4,test +2069,1,test +2585,3,test +1456,3,test +3455,2,test +3193,2,test +3971,4,test +3143,1,test +586,3,test +3322,3,test +66,4,test +1669,3,test +362,2,test +3314,4,test +446,1,test +3610,2,test +575,2,test +2911,1,test +354,3,test +3739,3,test +1437,3,test +2482,3,test +1783,2,test +2828,2,test +3952,3,test +3690,3,test +696,4,test +2736,4,test +1996,2,test +2474,4,test +2779,2,test +3295,4,test +2991,1,test +1076,1,test +1692,4,test +122,2,test +1938,2,test +2808,1,test +943,2,test +3720,3,test +860,4,test +2463,3,test +2067,3,test +1113,4,test +3671,3,test +3113,4,test +2414,3,test +69,4,test +1410,3,test +19,3,test +2314,1,test +2751,2,test +3192,4,test +103,2,test +3014,3,test +3622,2,test +2527,1,test +366,3,test +3143,4,test +4088,3,test +3093,3,test +528,1,test +2960,4,test +3389,1,test +1956,4,test +2519,1,test +2911,4,test +1341,2,test +3989,1,test +84,2,test +2303,4,test +733,2,test +2732,1,test +516,4,test +2649,3,test +3815,1,test +559,2,test +2549,1,test +3807,2,test +4019,1,test +3540,3,test +3674,3,test +3624,2,test +1067,4,test +3066,3,test +976,2,test +3491,3,test +2883,3,test +2101,4,test +1797,1,test +1705,3,test +3442,2,test +2314,4,test +1140,2,test +1352,1,test +1310,4,test +4001,2,test +2052,3,test +1656,3,test +2997,2,test +3909,4,test +2914,4,test +3563,4,test +1952,1,test +1261,4,test +82,3,test +2081,2,test +216,3,test +2731,4,test +2427,1,test +125,1,test +1769,1,test +1078,4,test +1170,1,test +2519,4,test +470,4,test +641,2,test +1553,4,test +3989,4,test +1982,1,test +463,1,test +683,4,test +3324,1,test +1933,1,test +2415,4,test +2549,4,test +3756,3,test +3453,2,test +2499,3,test +3537,1,test +4019,4,test +543,2,test +2628,4,test +1058,2,test +359,1,test +1093,1,test +1272,3,test +2479,2,test +2217,2,test +3221,1,test +135,4,test +481,3,test +3172,1,test +3213,2,test +3950,3,test +2431,3,test +1739,4,test +1252,2,test +694,3,test +2727,1,test +1336,1,test +1952,4,test +382,2,test +115,3,test +645,3,test +1811,1,test +3455,1,test +1769,4,test +595,2,test +378,4,test +2115,3,test +3322,2,test +66,3,test +1669,2,test +1932,3,test +1537,4,test +1233,1,test +575,1,test +1191,4,test +3656,4,test +2482,2,test +3394,4,test +1783,1,test +359,4,test +3528,4,test +2828,1,test +922,1,test +3437,2,test +2745,3,test +1354,3,test +3649,1,test +1996,1,test +2130,1,test +1954,4,test +2779,1,test +697,4,test +2696,3,test +1651,2,test +1692,3,test +2775,3,test +860,3,test +3637,4,test +2463,2,test +2597,2,test +3071,1,test +1206,2,test +3983,3,test +1984,4,test +1552,1,test +423,1,test +1335,3,test +3671,2,test +3509,3,test +3113,3,test +1681,2,test +2414,2,test +2197,4,test +3459,2,test +3022,1,test +3934,3,test +69,3,test +3242,4,test +2980,4,test +374,1,test +3192,3,test +2069,3,test +3235,1,test +3455,4,test +3014,2,test +3193,4,test +3622,1,test +366,2,test +3143,3,test +2840,2,test +1795,1,test +2960,3,test +362,4,test +446,3,test +1612,1,test +3610,4,test +575,4,test +2911,3,test +2524,2,test +2303,3,test +1783,4,test +2649,2,test +347,2,test +2828,4,test +1217,1,test +559,1,test +2995,1,test +1817,2,test +2991,3,test +639,2,test +1076,3,test +122,4,test +1938,4,test +2808,3,test +943,4,test +2101,3,test +2314,3,test +2751,4,test +1140,1,test +103,4,test +3268,1,test +4001,1,test +2052,2,test +2527,3,test +96,1,test +2914,3,test +1482,2,test +3918,2,test +528,3,test +1566,1,test +3389,3,test +1695,2,calibrate +596,3,calibrate +1433,2,calibrate +2625,3,calibrate +624,3,calibrate +3150,4,calibrate +1988,4,calibrate +3591,3,calibrate +1737,4,calibrate +201,4,calibrate +3552,2,calibrate +273,1,calibrate +3446,2,calibrate +2336,3,calibrate +748,2,calibrate +2933,2,calibrate +1345,1,calibrate +3408,3,calibrate +2850,4,calibrate +2017,3,calibrate +1011,3,calibrate +603,1,calibrate +1941,4,calibrate +1264,3,calibrate +3397,2,calibrate +710,2,calibrate +3860,1,calibrate +1558,1,calibrate +4058,4,calibrate +907,3,calibrate +3191,1,calibrate +4069,4,calibrate +3119,3,calibrate +774,4,calibrate +75,3,calibrate +2500,3,calibrate +657,4,calibrate +2952,2,calibrate +3666,1,calibrate +209,3,calibrate +3131,4,calibrate +2671,1,calibrate +186,1,calibrate +858,3,calibrate +2869,4,calibrate +1299,2,calibrate +3332,3,calibrate +2233,4,calibrate +3070,3,calibrate +1238,4,calibrate +1667,1,calibrate +725,4,calibrate +2724,3,calibrate +2317,3,calibrate +2328,3,calibrate +1584,3,calibrate +3613,3,calibrate +2477,1,calibrate +2663,2,calibrate +76,3,calibrate +3731,4,calibrate +3346,4,calibrate +980,1,calibrate +49,4,calibrate +2014,1,calibrate +71,1,calibrate +2290,3,calibrate +2279,3,calibrate +3905,4,calibrate +888,3,calibrate +596,2,calibrate +637,3,calibrate +2625,2,calibrate +3810,4,calibrate +2837,1,calibrate +3715,1,calibrate +1644,4,calibrate +201,3,calibrate +3552,1,calibrate +1040,2,calibrate +2336,2,calibrate +748,1,calibrate +2933,1,calibrate +3408,2,calibrate +466,4,calibrate +2017,2,calibrate +3829,4,calibrate +1941,3,calibrate +1264,2,calibrate +3316,4,calibrate +710,1,calibrate +2825,4,calibrate +907,2,calibrate +2708,4,calibrate +3863,2,calibrate +3119,2,calibrate +177,4,calibrate +1758,3,calibrate +629,3,calibrate +774,3,calibrate +740,1,calibrate +75,2,calibrate +2500,2,calibrate +657,3,calibrate +2952,1,calibrate +1165,1,calibrate +858,2,calibrate +1613,2,calibrate +1299,1,calibrate +1385,4,calibrate +2536,4,calibrate +2199,1,calibrate +2233,3,calibrate +2210,1,calibrate +3574,2,calibrate +273,4,calibrate +3312,2,calibrate +725,3,calibrate +2317,2,calibrate +2328,2,calibrate +3613,2,calibrate +3658,1,calibrate +2663,1,calibrate +2016,1,calibrate +603,4,calibrate +4068,3,calibrate +3346,3,calibrate +4079,3,calibrate +2677,3,calibrate +2290,2,calibrate +2279,2,calibrate +3905,3,calibrate +3191,4,calibrate +3475,1,calibrate +888,2,calibrate +637,2,calibrate +2625,1,calibrate +375,2,calibrate +3779,3,calibrate +1644,3,calibrate +1142,3,calibrate +2297,1,calibrate +2734,2,calibrate +454,2,calibrate +1040,1,calibrate +2336,1,calibrate +3741,3,calibrate +747,4,calibrate +466,3,calibrate +3976,4,calibrate +496,4,calibrate +1941,2,calibrate +1264,1,calibrate +3316,3,calibrate +355,1,calibrate +71,4,calibrate +907,1,calibrate +960,4,calibrate +3714,3,calibrate +2825,3,calibrate +1400,1,calibrate +249,1,calibrate +2708,3,calibrate +3863,1,calibrate +177,3,calibrate +1758,2,calibrate +629,2,calibrate +1362,2,calibrate +3425,4,calibrate +2837,4,calibrate +1970,1,calibrate +1959,1,calibrate +553,3,calibrate +2882,3,calibrate +2190,4,calibrate +1005,2,calibrate +3715,4,calibrate +1613,1,calibrate +526,4,calibrate +2536,3,calibrate +1385,3,calibrate +3574,1,calibrate +2464,2,calibrate +2475,2,calibrate +3312,1,calibrate +2810,1,calibrate +2035,4,calibrate +4079,2,calibrate +4068,2,calibrate +2677,2,calibrate +1985,3,calibrate +3600,4,calibrate +2186,2,calibrate +3109,4,calibrate +637,1,calibrate +241,1,calibrate +375,1,calibrate +1590,4,calibrate +3779,2,calibrate +344,4,calibrate +1644,2,calibrate +283,3,calibrate +3049,4,calibrate +1165,4,calibrate +757,2,calibrate +1142,2,calibrate +2734,1,calibrate +454,1,calibrate +484,2,calibrate +1780,2,calibrate +3858,2,calibrate +1981,1,calibrate +830,1,calibrate +1312,4,calibrate +150,4,calibrate +161,4,calibrate +3741,2,calibrate +579,1,calibrate +2205,2,calibrate +747,3,calibrate +3976,3,calibrate +496,3,calibrate +731,4,calibrate +2016,4,calibrate +1776,4,calibrate +385,4,calibrate +2825,2,calibrate +960,3,calibrate +3714,2,calibrate +2604,3,calibrate +3475,4,calibrate +525,2,calibrate +2984,4,calibrate +1362,1,calibrate +3425,3,calibrate +553,2,calibrate +4063,3,calibrate +2190,3,calibrate +2220,4,calibrate +1005,1,calibrate +2882,2,calibrate +2923,3,calibrate +526,3,calibrate +2536,2,calibrate +1385,2,calibrate +1426,3,calibrate +913,3,calibrate +2475,1,calibrate +2464,1,calibrate +3679,4,calibrate +3573,4,calibrate +571,1,calibrate +1042,4,calibrate +4079,1,calibrate +4068,1,calibrate +2677,1,calibrate +1985,2,calibrate +3600,3,calibrate +3652,4,calibrate +2186,1,calibrate +1506,4,calibrate +355,4,calibrate +3109,3,calibrate +795,1,calibrate +1400,4,calibrate +1590,3,calibrate +3779,1,calibrate +837,3,calibrate +2003,1,calibrate +1072,4,calibrate +3049,3,calibrate +283,2,calibrate +757,1,calibrate +484,1,calibrate +1780,1,calibrate +1855,4,calibrate +3858,1,calibrate +3899,2,calibrate +1312,3,calibrate +161,3,calibrate +150,3,calibrate +3827,4,calibrate +2205,1,calibrate +3576,4,calibrate +496,2,calibrate +731,3,calibrate +2364,3,calibrate +906,4,calibrate +206,1,calibrate +385,3,calibrate +2604,2,calibrate +3382,4,calibrate +3265,4,calibrate +525,1,calibrate +2984,3,calibrate +1874,4,calibrate +734,4,calibrate +3425,2,calibrate +1623,4,calibrate +4063,2,calibrate +2923,2,calibrate +2220,3,calibrate +526,2,calibrate +1426,2,calibrate +913,2,calibrate +3679,3,calibrate +685,4,calibrate +1981,4,calibrate +830,4,calibrate +3573,3,calibrate +579,4,calibrate +3640,2,calibrate +1042,3,calibrate +328,4,calibrate +3412,4,calibrate +1695,1,calibrate +1433,1,calibrate +3944,4,calibrate +2804,4,calibrate +2060,4,calibrate +3652,3,calibrate +3933,4,calibrate +624,2,calibrate +1536,4,calibrate +3109,2,calibrate +3150,3,calibrate +1988,3,calibrate +3591,2,calibrate +1737,3,calibrate +3446,1,calibrate +837,2,calibrate +1072,3,calibrate +1258,4,calibrate +2850,3,calibrate +1855,3,calibrate +1011,2,calibrate +3899,1,calibrate +1683,4,calibrate +3827,3,calibrate +3397,1,calibrate +3576,3,calibrate +571,4,calibrate +4069,3,calibrate +2611,4,calibrate +2204,4,calibrate +4058,3,calibrate +2364,2,calibrate +2604,1,calibrate +209,2,calibrate +3382,3,calibrate +3131,3,calibrate +3265,3,calibrate +2869,3,calibrate +3332,2,calibrate +1874,3,calibrate +734,3,calibrate +3070,2,calibrate +1623,3,calibrate +1238,3,calibrate +4063,1,calibrate +2923,1,calibrate +2220,2,calibrate +2724,2,calibrate +2003,4,calibrate +1584,2,calibrate +1345,4,calibrate +76,2,calibrate +913,1,calibrate +3679,2,calibrate +3731,3,calibrate +685,3,calibrate +49,3,calibrate +3640,1,calibrate +3860,4,calibrate +3412,3,calibrate +1558,4,calibrate +596,1,calibrate +3810,3,calibrate +3933,3,calibrate +3944,3,calibrate +2804,3,calibrate +3652,2,calibrate +624,1,calibrate +1536,3,calibrate +3150,2,calibrate +1988,2,calibrate +3591,1,calibrate +3666,4,calibrate +186,4,calibrate +1737,2,calibrate +201,2,calibrate +2671,4,calibrate +1667,4,calibrate +3408,1,calibrate +1258,3,calibrate +2850,2,calibrate +2477,4,calibrate +2017,1,calibrate +1011,1,calibrate +3829,3,calibrate +1683,3,calibrate +980,4,calibrate +2014,4,calibrate +4058,2,calibrate +2611,3,calibrate +4069,2,calibrate +2204,3,calibrate +3119,1,calibrate +2364,1,calibrate +774,2,calibrate +75,1,calibrate +2500,1,calibrate +657,2,calibrate +209,1,calibrate +3382,2,calibrate +3131,2,calibrate +858,1,calibrate +2869,2,calibrate +3332,1,calibrate +2233,2,calibrate +3070,1,calibrate +3552,4,calibrate +1238,2,calibrate +273,3,calibrate +3446,4,calibrate +748,4,calibrate +2724,1,calibrate +2328,1,calibrate +1584,1,calibrate +725,2,calibrate +3613,1,calibrate +1345,3,calibrate +2317,1,calibrate +2933,4,calibrate +76,1,calibrate +3731,2,calibrate +3346,2,calibrate +603,3,calibrate +49,2,calibrate +3397,4,calibrate +710,4,calibrate +3860,3,calibrate +2290,1,calibrate +2279,1,calibrate +3905,2,calibrate +3191,3,calibrate +888,1,calibrate +3810,2,calibrate +3933,2,calibrate +2804,2,calibrate +3944,2,calibrate +740,4,calibrate +3666,3,calibrate +2952,4,calibrate +186,3,calibrate +201,1,calibrate +1299,4,calibrate +2199,4,calibrate +2210,4,calibrate +1667,3,calibrate +466,2,calibrate +3658,4,calibrate +2477,3,calibrate +2663,4,calibrate +3829,2,calibrate +1941,1,calibrate +980,3,calibrate +3316,2,calibrate +71,3,calibrate +4058,1,calibrate +4069,1,calibrate +2204,2,calibrate +2708,2,calibrate +596,4,calibrate +177,2,calibrate +2625,4,calibrate +1758,1,calibrate +629,1,calibrate +774,1,calibrate +2837,3,calibrate +3715,3,calibrate +657,1,calibrate +2233,1,calibrate +2297,4,calibrate +3552,3,calibrate +1238,1,calibrate +1040,4,calibrate +273,2,calibrate +2336,4,calibrate +748,3,calibrate +725,1,calibrate +2933,3,calibrate +603,2,calibrate +3731,1,calibrate +3346,1,calibrate +1264,4,calibrate +3905,1,calibrate +907,4,calibrate +3191,2,calibrate +249,4,calibrate +3810,1,calibrate +3863,4,calibrate +740,3,calibrate +344,3,calibrate +1970,4,calibrate +75,4,calibrate +1959,4,calibrate +1644,1,calibrate +186,2,calibrate +2952,3,calibrate +1165,3,calibrate +1142,1,calibrate +858,4,calibrate +1299,3,calibrate +1613,4,calibrate +2199,3,calibrate +2210,3,calibrate +3574,4,calibrate +1667,2,calibrate +3312,4,calibrate +3741,1,calibrate +2317,4,calibrate +2328,4,calibrate +747,2,calibrate +2810,4,calibrate +466,1,calibrate +3976,2,calibrate +3658,3,calibrate +2663,3,calibrate +3829,1,calibrate +2016,3,calibrate +1776,3,calibrate +3316,1,calibrate +71,2,calibrate +2825,1,calibrate +960,2,calibrate +3714,1,calibrate +2290,4,calibrate +2279,4,calibrate +2708,1,calibrate +3475,3,calibrate +888,4,calibrate +637,4,calibrate +241,4,calibrate +177,1,calibrate +375,4,calibrate +2837,2,calibrate +553,1,calibrate +3715,2,calibrate +2190,2,calibrate +2882,1,calibrate +2536,1,calibrate +1385,1,calibrate +2297,3,calibrate +2734,4,calibrate +454,4,calibrate +1040,3,calibrate +2035,2,calibrate +1985,1,calibrate +3600,2,calibrate +1506,3,calibrate +355,3,calibrate +1400,3,calibrate +249,3,calibrate +3863,3,calibrate +1590,2,calibrate +1758,4,calibrate +629,4,calibrate +1362,4,calibrate +740,2,calibrate +344,2,calibrate +1970,3,calibrate +1959,3,calibrate +1005,4,calibrate +283,1,calibrate +3049,2,calibrate +1613,3,calibrate +1165,2,calibrate +2210,2,calibrate +2199,2,calibrate +3574,3,calibrate +2464,4,calibrate +1312,2,calibrate +150,2,calibrate +3312,3,calibrate +161,2,calibrate +2475,4,calibrate +747,1,calibrate +2810,3,calibrate +3658,2,calibrate +3976,1,calibrate +496,1,calibrate +731,2,calibrate +2016,2,calibrate +906,3,calibrate +4079,4,calibrate +4068,4,calibrate +1776,2,calibrate +2677,4,calibrate +385,2,calibrate +960,1,calibrate +2186,4,calibrate +3475,2,calibrate +795,4,calibrate +241,3,calibrate +2984,2,calibrate +375,3,calibrate +3425,1,calibrate +3779,4,calibrate +2190,1,calibrate +526,1,calibrate +1426,1,calibrate +757,4,calibrate +1142,4,calibrate +2297,2,calibrate +454,3,calibrate +484,4,calibrate +2734,3,calibrate +1780,4,calibrate +3858,4,calibrate +1981,3,calibrate +830,3,calibrate +3573,2,calibrate +3741,4,calibrate +579,3,calibrate +2205,4,calibrate +1042,2,calibrate +328,3,calibrate +2035,1,calibrate +2060,3,calibrate +3600,1,calibrate +206,4,calibrate +1506,2,calibrate +355,2,calibrate +3109,1,calibrate +3714,4,calibrate +1400,2,calibrate +249,2,calibrate +1590,1,calibrate +525,4,calibrate +1362,3,calibrate +344,1,calibrate +1959,2,calibrate +1970,2,calibrate +837,1,calibrate +553,4,calibrate +2882,4,calibrate +1005,3,calibrate +1072,2,calibrate +3049,1,calibrate +1855,2,calibrate +2475,3,calibrate +1312,1,calibrate +150,1,calibrate +2464,3,calibrate +161,1,calibrate +3827,2,calibrate +3576,2,calibrate +2810,2,calibrate +571,3,calibrate +731,1,calibrate +1695,4,calibrate +906,2,calibrate +1776,1,calibrate +1433,4,calibrate +1985,4,calibrate +385,1,calibrate +2186,3,calibrate +795,3,calibrate +3265,2,calibrate +241,2,calibrate +2984,1,calibrate +1874,2,calibrate +734,2,calibrate +1623,2,calibrate +2220,1,calibrate +2003,3,calibrate +283,4,calibrate +757,3,calibrate +484,3,calibrate +1780,3,calibrate +3679,1,calibrate +685,2,calibrate +3858,3,calibrate +1981,2,calibrate +830,2,calibrate +3899,4,calibrate +3573,1,calibrate +579,2,calibrate +2205,3,calibrate +1042,1,calibrate +328,2,calibrate +3412,2,calibrate +1558,3,calibrate +2060,2,calibrate +206,3,calibrate +3652,1,calibrate +1506,1,calibrate +1536,2,calibrate +3150,1,calibrate +1988,1,calibrate +2604,4,calibrate +1737,1,calibrate +2671,3,calibrate +525,3,calibrate +4063,4,calibrate +2923,4,calibrate +1072,1,calibrate +1258,2,calibrate +2850,1,calibrate +1426,4,calibrate +1855,1,calibrate +913,4,calibrate +1683,2,calibrate +3827,1,calibrate +2014,3,calibrate +3576,1,calibrate +3640,4,calibrate +571,2,calibrate +2611,2,calibrate +1695,3,calibrate +906,1,calibrate +1433,3,calibrate +624,4,calibrate +3382,1,calibrate +795,2,calibrate +3131,1,calibrate +3591,4,calibrate +3265,1,calibrate +2869,1,calibrate +1874,1,calibrate +734,1,calibrate +1623,1,calibrate +3446,3,calibrate +837,4,calibrate +2003,2,calibrate +1345,2,calibrate +3408,4,calibrate +2017,4,calibrate +1011,4,calibrate +685,1,calibrate +3899,3,calibrate +49,1,calibrate +3397,3,calibrate +328,1,calibrate +3860,2,calibrate +3412,1,calibrate +1558,2,calibrate +710,3,calibrate +3119,4,calibrate +2364,4,calibrate +3933,1,calibrate +3944,1,calibrate +2804,1,calibrate +206,2,calibrate +2060,1,calibrate +1536,1,calibrate +2500,4,calibrate +3666,2,calibrate +209,4,calibrate +2671,2,calibrate +3332,4,calibrate +3070,4,calibrate +2724,4,calibrate +1584,4,calibrate +3613,4,calibrate +1258,1,calibrate +2477,2,calibrate +76,4,calibrate +1683,1,calibrate +980,2,calibrate +2014,2,calibrate +3640,3,calibrate +2611,1,calibrate +2204,1,calibrate diff --git a/datasets/split_hbr_y9-eir.csv b/datasets/split_hbr_y9-eir.csv new file mode 100644 index 0000000..49a4fd7 --- /dev/null +++ b/datasets/split_hbr_y9-eir.csv @@ -0,0 +1,12875 @@ +parameter_index,simulation_index,split +1128,4,train +2344,2,train +2478,2,train +1820,2,train +1999,4,train +1603,4,train +2295,2,train +1899,2,train +2033,2,train +1637,2,train +2508,2,train +2112,2,train +2945,3,train +2246,2,train +1850,2,train +2029,4,train +1767,4,train +2845,1,train +2325,2,train +2063,2,train +3058,1,train +64,2,train +3271,1,train +277,2,train +3009,1,train +3484,1,train +3088,1,train +3222,1,train +2826,1,train +3005,3,train +3046,4,train +2347,3,train +2784,4,train +2481,3,train +3301,1,train +307,2,train +348,3,train +744,3,train +2643,1,train +45,2,train +482,3,train +3039,1,train +3259,4,train +3655,4,train +2694,3,train +778,1,train +3514,1,train +3555,2,train +957,3,train +2856,1,train +299,3,train +2990,1,train +3076,4,train +2773,3,train +857,1,train +991,1,train +3768,2,train +3902,2,train +3506,2,train +512,3,train +3289,4,train +3027,4,train +2765,4,train +1070,1,train +3981,2,train +3585,2,train +1028,4,train +3282,1,train +766,4,train +3061,2,train +67,3,train +2844,4,train +3240,4,train +2978,4,train +625,1,train +1241,4,train +1375,4,train +979,4,train +3274,2,train +3670,2,train +676,3,train +1496,1,train +1275,2,train +1454,4,train +576,1,train +3353,2,train +3749,2,train +3790,3,train +796,4,train +3487,2,train +1051,1,train +1488,2,train +1185,1,train +3962,2,train +3566,2,train +4003,3,train +1009,4,train +706,3,train +1567,2,train +1701,2,train +1305,2,train +1484,4,train +606,1,train +1043,2,train +3820,3,train +3954,3,train +564,4,train +1914,2,train +1652,2,train +1256,2,train +4033,3,train +1435,4,train +3771,3,train +777,4,train +1731,2,train +1772,3,train +1032,1,train +1073,2,train +1944,2,train +1723,3,train +4018,1,train +1420,2,train +1203,4,train +2198,3,train +1802,3,train +1936,3,train +1103,2,train +2494,1,train +2015,3,train +2452,4,train +1712,2,train +1316,2,train +2149,3,train +1491,3,train +2311,1,train +2665,4,train +1966,3,train +2262,1,train +2699,2,train +2441,3,train +2878,4,train +2179,3,train +2616,4,train +2737,1,train +2912,2,train +2079,1,train +2609,1,train +2213,1,train +2695,4,train +3091,4,train +2829,4,train +2688,1,train +2292,1,train +131,3,train +2426,1,train +2030,1,train +2512,4,train +2646,4,train +2250,4,train +293,1,train +2639,1,train +2243,1,train +2680,2,train +3121,4,train +2201,4,train +244,1,train +3417,2,train +2759,2,train +202,4,train +2456,1,train +2893,2,train +2676,4,train +2280,4,train +719,1,train +457,1,train +61,1,train +591,1,train +3409,3,train +811,4,train +415,4,train +2710,2,train +2669,1,train +2493,4,train +3705,1,train +670,1,train +711,2,train +3488,3,train +12,1,train +232,4,train +621,1,train +662,2,train +3398,2,train +2740,2,train +142,3,train +183,4,train +741,2,train +3869,1,train +438,1,train +479,2,train +3256,3,train +4089,4,train +176,1,train +658,4,train +2953,2,train +396,4,train +3948,1,train +1350,2,train +3686,1,train +1088,2,train +692,2,train +3469,3,train +3865,3,train +389,1,train +3906,4,train +213,4,train +3765,1,train +1167,2,train +1208,3,train +468,1,train +509,2,train +3682,3,train +643,2,train +3420,3,train +3816,3,train +3554,3,train +560,4,train +1421,3,train +3716,1,train +1118,2,train +722,2,train +1159,3,train +1555,3,train +856,2,train +3633,3,train +4070,4,train +3454,1,train +3237,3,train +3936,4,train +1851,1,train +1768,3,train +935,2,train +539,2,train +3667,1,train +3846,3,train +3450,3,train +1668,1,train +1847,3,train +1451,3,train +3746,1,train +1189,3,train +1626,4,train +3704,4,train +3838,4,train +2143,1,train +1747,1,train +1881,1,train +1798,3,train +1839,4,train +3917,4,train +4051,4,train +2094,1,train +2135,2,train +1832,1,train +1436,1,train +1353,3,train +2045,1,train +2131,4,train +2265,4,train +1432,3,train +1869,4,train +2124,1,train +2561,2,train +1862,1,train +1466,1,train +2344,4,train +1820,4,train +2640,2,train +2378,2,train +2075,1,train +1679,1,train +2116,2,train +1813,1,train +1899,4,train +2295,4,train +2033,4,train +1637,4,train +2853,2,train +2591,2,train +2195,2,train +1892,1,train +2112,4,train +1850,4,train +27,1,train +2408,2,train +2845,3,train +2105,1,train +2146,2,train +2542,2,train +2325,4,train +1884,2,train +2063,4,train +106,1,train +147,2,train +2621,2,train +3058,3,train +64,4,train +2359,2,train +2097,2,train +3092,1,train +57,1,train +98,2,train +3271,3,train +277,4,train +2572,2,train +2176,2,train +2613,3,train +3009,3,train +3567,1,train +3305,1,train +311,2,train +3088,3,train +3222,3,train +2826,3,train +3780,1,train +3384,1,train +786,2,train +3518,1,train +87,1,train +128,2,train +2860,1,train +3301,3,train +307,4,train +2602,2,train +2643,3,train +3039,3,train +45,4,train +3080,4,train +3342,4,train +644,3,train +3335,1,train +341,2,train +778,3,train +3073,1,train +3555,4,train +2856,3,train +2990,3,train +1074,1,train +3851,2,train +857,3,train +3548,1,train +991,3,train +158,2,train +3372,4,train +3768,4,train +292,2,train +3506,4,train +4064,2,train +1070,3,train +3802,2,train +371,2,train +3103,1,train +3499,1,train +3585,4,train +3282,3,train +3981,4,train +3061,4,train +3881,2,train +842,1,train +3619,2,train +4015,2,train +625,3,train +3753,2,train +363,3,train +3140,4,train +3670,4,train +3274,4,train +1055,1,train +3832,2,train +1275,4,train +3570,2,train +576,3,train +3353,4,train +3749,4,train +3487,4,train +1571,2,train +872,1,train +4045,2,train +1051,3,train +1488,4,train +3783,2,train +393,3,train +3566,4,train +1481,1,train +1085,1,train +1567,4,train +3862,2,train +1701,4,train +823,1,train +1305,4,train +4037,3,train +606,3,train +1043,4,train +1560,1,train +1298,1,train +902,1,train +1735,2,train +1122,4,train +3813,2,train +1256,4,train +1814,2,train +1115,1,train +1249,1,train +1731,4,train +4026,2,train +4067,3,train +1032,3,train +1073,4,train +3805,3,train +2027,2,train +1765,2,train +1369,2,train +4018,3,train +1420,4,train +2240,2,train +1978,2,train +2019,3,train +1716,2,train +1103,4,train +2494,3,train +1399,2,train +1533,2,train +1316,4,train +2924,1,train +2528,1,train +2311,3,train +2049,3,train +1787,3,train +2607,1,train +3137,1,train +2741,1,train +2262,3,train +2699,4,train +2820,1,train +222,2,train +2954,1,train +1,3,train +2296,1,train +2737,3,train +2778,4,train +2912,4,train +2079,3,train +2213,3,train +3033,1,train +3208,2,train +2509,1,train +2688,3,train +2292,3,train +2426,3,train +2030,3,train +293,3,train +3025,2,train +3421,2,train +2722,1,train +2546,4,train +2243,3,train +2680,4,train +2801,1,train +3238,2,train +244,3,train +2539,1,train +2976,2,train +3417,4,train +2759,4,train +2456,3,train +2893,4,train +540,1,train +719,3,train +3451,2,train +3055,2,train +457,3,train +61,3,train +498,4,train +3189,2,train +2576,4,train +2710,4,train +753,1,train +491,1,train +3664,2,train +3705,3,train +670,3,train +711,4,train +2965,1,train +3006,2,train +12,3,train +2744,2,train +966,1,train +308,1,train +3481,2,train +662,4,train +2957,2,train +2740,4,train +917,1,train +521,1,train +958,2,train +655,1,train +741,4,train +3432,2,train +3473,3,train +438,3,train +479,4,train +3869,3,train +176,3,train +2953,4,train +338,1,train +3948,3,train +558,4,train +3686,3,train +1088,4,train +692,4,train +3383,2,train +1250,2,train +3982,1,train +947,1,train +551,1,train +988,2,train +3765,3,train +1167,4,train +3503,3,train +468,3,train +509,4,train +3241,3,train +643,4,train +1201,2,train +805,2,train +3716,3,train +722,4,train +3454,3,train +856,4,train +1676,2,train +1414,2,train +1018,2,train +1851,3,train +3750,1,train +1152,2,train +935,4,train +539,4,train +3667,3,train +1231,2,train +1668,3,train +3963,1,train +969,2,train +3746,3,train +3921,4,train +2143,3,train +1747,3,train +4042,1,train +1881,3,train +1182,2,train +1223,3,train +1915,1,train +2094,3,train +2135,4,train +1395,2,train +1436,3,train +1832,3,train +2390,1,train +2128,1,train +1732,1,train +2214,4,train +1253,3,train +2341,1,train +1945,1,train +2124,3,train +2561,4,train +1862,3,train +1466,3,train +1903,4,train +2420,1,train +2158,1,train +1762,1,train +2640,4,train +2378,4,train +1679,3,train +2116,4,train +2371,1,train +2412,2,train +2853,4,train +2591,4,train +2195,4,train +1892,3,train +110,1,train +2887,2,train +2491,2,train +2188,1,train +1792,1,train +2408,4,train +2542,4,train +2146,4,train +1884,4,train +189,1,train +323,1,train +106,3,train +147,4,train +2401,1,train +2442,2,train +2879,3,train +2621,4,train +2180,2,train +2359,4,train +2097,4,train +2917,2,train +2655,2,train +3092,3,train +98,4,train +2572,4,train +2176,4,train +3388,1,train +353,1,train +394,2,train +3567,3,train +3305,3,train +2909,3,train +311,4,train +2606,2,train +473,2,train +3601,1,train +170,1,train +607,2,train +3384,3,train +3780,3,train +3518,3,train +128,4,train +2819,2,train +2860,3,train +3814,1,train +820,2,train +861,3,train +3156,1,train +3335,3,train +341,4,train +3073,3,train +3893,1,train +4027,1,train +3631,1,train +1074,3,train +3851,4,train +771,2,train +3548,3,train +158,4,train +292,4,train +3448,1,train +3885,2,train +891,3,train +3186,1,train +3582,1,train +588,2,train +3802,4,train +4064,4,train +371,4,train +3103,3,train +667,2,train +3399,1,train +3795,1,train +3881,4,train +4015,4,train +842,3,train +3619,4,train +3753,4,train +3357,4,train +1138,1,train +3874,1,train +3915,2,train +921,3,train +3612,1,train +618,2,train +1055,3,train +3832,4,train +3570,4,train +1351,1,train +1571,4,train +3429,1,train +3866,2,train +872,3,train +4045,4,train +3783,4,train +1564,1,train +1085,3,train +689,3,train +3862,4,train +823,3,train +2039,1,train +1777,1,train +1381,1,train +1560,3,train +1119,1,train +3896,2,train +1298,3,train +902,3,train +1735,4,train +4030,2,train +3813,4,train +1856,1,train +2031,2,train +1198,1,train +1814,4,train +1418,4,train +1115,3,train +1249,3,train +4026,4,train +2110,2,train +1807,1,train +1411,1,train +1545,1,train +2027,4,train +3926,2,train +1765,4,train +1369,4,train +1107,4,train +1927,2,train +1624,1,train +1978,4,train +1716,4,train +1878,2,train +2315,3,train +1575,1,train +1616,2,train +1399,4,train +1533,4,train +2924,3,train +2528,3,train +2225,2,train +1829,2,train +2607,3,train +2304,2,train +2345,3,train +2741,3,train +2042,2,train +1646,2,train +3037,1,train +43,2,train +2820,3,train +2954,3,train +2255,2,train +2296,3,train +3250,1,train +2854,1,train +3033,3,train +2592,1,train +3208,4,train +2375,3,train +2509,3,train +73,2,train +2805,1,train +3201,1,train +3421,4,train +3025,4,train +2722,3,train +286,2,train +327,3,train +2622,1,train +24,2,train +2801,3,train +3238,4,train +2539,3,train +2976,4,train +3493,1,train +3097,1,train +3534,2,train +540,3,train +2835,1,train +237,2,train +2969,1,train +2573,1,train +3055,4,train +3451,4,train +3189,4,train +836,1,train +970,1,train +574,1,train +753,3,train +357,3,train +54,2,train +2786,1,train +95,3,train +491,3,train +3006,4,train +2744,4,train +1049,1,train +1183,1,train +787,1,train +3960,2,train +966,3,train +3302,2,train +308,3,train +2999,1,train +3481,4,train +2823,4,train +2957,4,train +866,1,train +604,1,train +3911,2,train +3515,2,train +521,3,train +958,4,train +3253,2,train +655,3,train +3432,4,train +1475,1,train +1213,1,train +1254,2,train +3990,2,train +4031,3,train +951,1,train +555,1,train +3728,2,train +3769,3,train +338,3,train +775,4,train +3466,2,train +1333,2,train +1030,1,train +1250,4,train +3545,2,train +3982,3,train +551,3,train +988,4,train +1546,2,train +1680,2,train +1284,2,train +585,1,train +3758,2,train +1201,4,train +805,4,train +1893,2,train +1497,2,train +798,1,train +1235,2,train +1414,4,train +1018,4,train +3750,3,train +1152,4,train +1972,2,train +1710,2,train +1314,2,train +1231,4,train +3963,3,train +969,4,train +1661,2,train +1265,2,train +4042,3,train +1182,4,train +2260,1,train +4076,1,train +1478,2,train +1915,3,train +2390,3,train +1691,2,train +1295,2,train +1732,3,train +2128,3,train +2686,1,train +2424,1,train +1945,3,train +2503,1,train +2637,1,train +2420,3,train +1721,2,train +1762,3,train +2158,3,train +2716,1,train +2454,1,train +2192,1,train +2412,4,train +1579,3,train +193,1,train +2929,1,train +2667,1,train +2271,1,train +110,3,train +2405,1,train +2491,4,train +2887,4,train +2188,3,train +1792,3,train +2229,4,train +1967,4,train +406,1,train +10,1,train +2787,2,train +189,3,train +2484,1,train +2088,1,train +3317,2,train +2222,1,train +2442,4,train +2180,4,train +223,1,train +3396,2,train +2697,1,train +2738,2,train +181,4,train +2917,4,train +2655,4,train +2259,4,train +40,1,train +174,1,train +2951,2,train +3388,3,train +394,4,train +2689,2,train +3085,2,train +2606,4,train +649,1,train +253,1,train +690,2,train +3467,3,train +473,4,train +2768,2,train +3164,2,train +170,3,train +607,4,train +2902,2,train +3205,3,train +3601,3,train +70,1,train +204,1,train +2981,2,train +3377,2,train +820,4,train +3814,3,train +3156,3,train +679,1,train +720,2,train +3893,3,train +417,1,train +458,2,train +3631,3,train +2932,2,train +1329,2,train +3665,1,train +3448,3,train +3885,4,train +368,1,train +3145,2,train +3186,3,train +3582,3,train +588,4,train +3744,1,train +1146,2,train +750,2,train +1187,3,train +3964,4,train +667,4,train +3399,3,train +3957,1,train +4091,1,train +1138,3,train +3874,3,train +3915,4,train +3612,3,train +3653,4,train +618,4,train +3512,1,train +1351,3,train +3646,1,train +3429,3,train +3866,4,train +1647,1,train +1127,2,train +1564,3,train +865,2,train +1726,1,train +1860,1,train +1464,1,train +1381,3,train +1119,3,train +3896,4,train +4030,4,train +2073,1,train +1677,1,train +1856,3,train +1415,1,train +2031,4,train +1198,3,train +936,3,train +2152,1,train +1890,1,train +1494,1,train +1628,1,train +2110,4,train +1411,3,train +1545,3,train +3926,4,train +2144,2,train +1841,1,train +1445,1,train +1927,4,train +1624,3,train +1665,4,train +2753,2,train +1658,1,train +1878,4,train +1575,3,train +1616,4,train +2012,4,train +2133,1,train +2308,2,train +1912,2,train +1829,4,train +6,1,train +2125,2,train +2304,4,train +2042,4,train +1646,4,train +85,1,train +126,2,train +3037,3,train +2641,3,train +43,4,train +1942,2,train +339,2,train +77,2,train +2854,3,train +3250,3,train +2155,2,train +2592,3,train +2289,2,train +3284,1,train +290,2,train +73,4,train +2805,3,train +3201,3,train +3363,1,train +765,2,train +369,2,train +3497,1,train +503,2,train +3321,4,train +286,4,train +2581,2,train +2622,3,train +3059,4,train +24,4,train +3180,1,train +582,2,train +623,3,train +320,2,train +3097,3,train +3534,4,train +2835,3,train +2969,3,train +2573,3,train +3789,1,train +836,3,train +3527,1,train +533,2,train +137,2,train +574,3,train +970,3,train +54,4,train +2786,3,train +1266,1,train +1049,3,train +653,3,train +2948,1,train +1183,3,train +3478,1,train +350,2,train +787,3,train +3344,1,train +88,2,train +3302,4,train +3960,4,train +2999,3,train +866,3,train +3161,1,train +3994,2,train +563,2,train +604,3,train +1041,4,train +3336,2,train +342,3,train +3515,4,train +3253,4,train +1296,1,train +900,1,train +4073,2,train +3990,4,train +1254,4,train +3549,2,train +951,3,train +555,3,train +3728,4,train +3466,4,train +1333,4,train +3628,2,train +4024,2,train +1030,3,train +3366,2,train +3545,4,train +1326,1,train +930,1,train +1460,1,train +1546,4,train +3841,2,train +1064,1,train +1680,4,train +1284,4,train +3579,2,train +3975,2,train +585,3,train +3758,4,train +1539,1,train +1580,2,train +1497,4,train +1101,4,train +3792,2,train +798,3,train +1235,4,train +2189,2,train +1793,2,train +1490,1,train +1094,1,train +1228,1,train +1314,4,train +1710,4,train +4005,2,train +1610,2,train +1307,1,train +911,1,train +1348,2,train +1744,2,train +1265,4,train +869,4,train +2219,2,train +1823,2,train +2260,3,train +1957,2,train +1561,2,train +4076,3,train +1478,4,train +1774,2,train +1378,2,train +1295,4,train +2507,1,train +2686,3,train +1987,2,train +2424,3,train +2720,1,train +2503,3,train +2107,3,train +2637,3,train +2799,1,train +2716,3,train +2275,1,train +2757,4,train +2454,3,train +2192,3,train +1796,3,train +3012,1,train +193,3,train +2488,1,train +2667,3,train +2271,3,train +2405,3,train +3225,1,train +3400,2,train +2567,1,train +3004,2,train +406,3,train +10,3,train +2305,1,train +2787,4,train +2701,1,train +2484,3,train +2088,3,train +2525,4,train +2222,3,train +89,3,train +2780,1,train +223,3,train +2518,1,train +3396,4,train +2738,4,train +519,1,train +3296,2,train +257,1,train +2993,1,train +3034,2,train +3430,2,train +40,3,train +3168,2,train +2772,2,train +174,3,train +2951,4,train +2689,4,train +732,1,train +3247,2,train +253,3,train +690,4,train +2548,1,train +2985,2,train +3164,4,train +2768,4,train +2902,4,train +549,1,train +287,1,train +3064,2,train +3460,2,train +70,3,train +507,4,train +2761,1,train +204,3,train +2981,4,train +896,1,train +500,1,train +238,1,train +720,4,train +3411,2,train +417,3,train +458,4,train +2932,4,train +975,1,train +1016,2,train +713,1,train +1150,2,train +451,1,train +3665,3,train +3961,1,train +926,1,train +1363,2,train +3744,3,train +664,1,train +750,4,train +1146,4,train +3441,2,train +4040,1,train +1046,2,train +784,2,train +3957,3,train +4091,3,train +1655,2,train +1259,2,train +997,2,train +1434,3,train +3729,1,train +1131,2,train +735,2,train +3512,3,train +3949,4,train +3646,3,train +1210,2,train +814,2,train +1647,3,train +1344,2,train +3942,1,train +865,4,train +1943,1,train +1726,3,train +4021,1,train +1860,3,train +1027,2,train +1464,3,train +3759,1,train +1161,2,train +1202,3,train +2156,1,train +2073,3,train +1677,3,train +1415,3,train +2152,3,train +1711,1,train +1890,3,train +1494,3,train +1931,4,train +1628,3,train +1232,3,train +4009,4,train +2448,1,train +2144,4,train +1841,3,train +1445,3,train +2399,1,train +2440,2,train +1741,1,train +2223,4,train +1961,4,train +1658,3,train +2653,2,train +2391,2,train +2308,4,train +1912,4,train +2866,2,train +2470,2,train +2167,1,train +1771,1,train +1991,4,train +2125,4,train +168,1,train +302,1,train +3079,2,train +126,4,train +2380,1,train +2421,2,train +2159,2,train +1942,4,train +381,1,train +339,4,train +2634,2,train +2238,2,train +77,4,train +2372,2,train +2155,4,train +2289,4,train +198,1,train +332,1,train +373,2,train +2847,2,train +2888,3,train +3284,3,train +290,4,train +452,2,train +3580,1,train +149,1,train +3363,3,train +369,4,train +2664,2,train +3497,3,train +3659,1,train +665,2,train +3793,1,train +799,2,train +3180,3,train +582,4,train +141,2,train +2877,2,train +2918,3,train +320,4,train +2656,3,train +3872,1,train +3476,1,train +878,2,train +4006,1,train +616,2,train +220,2,train +3348,1,train +3527,3,train +137,4,train +4085,1,train +1091,2,train +829,2,train +1266,3,train +3561,1,train +130,1,train +171,2,train +567,2,train +2948,3,train +350,4,train +3344,3,train +3385,4,train +88,4,train +4036,1,train +646,2,train +3378,1,train +3774,1,train +780,2,train +3994,4,train +3161,3,train +3336,4,train +1379,1,train +3894,2,train +859,2,train +900,3,train +1296,3,train +3195,1,train +597,2,train +638,3,train +3415,4,train +3811,4,train +4073,4,train +3549,4,train +1592,1,train +3804,1,train +3845,2,train +4024,4,train +3628,4,train +3366,4,train +1805,1,train +1409,1,train +1543,1,train +1326,3,train +930,3,train +1367,4,train +627,2,train +668,3,train +1064,3,train +3841,4,train +3975,4,train +3579,4,train +1360,1,train +1539,3,train +1580,4,train +3792,4,train +1835,1,train +1876,2,train +1793,4,train +915,1,train +1094,3,train +698,3,train +4005,4,train +2089,2,train +1786,1,train +1390,1,train +1827,2,train +1524,1,train +1128,1,train +1610,4,train +1307,3,train +911,3,train +1348,4,train +1744,4,train +2302,2,train +1906,2,train +1603,1,train +1207,1,train +2040,2,train +1823,4,train +1957,4,train +1561,4,train +2515,2,train +2119,2,train +2253,2,train +2294,3,train +1774,4,train +1378,4,train +2332,2,train +2070,2,train +2507,3,train +2803,1,train +2720,3,train +1887,2,train +2324,3,train +2021,2,train +1625,2,train +22,2,train +2799,3,train +2100,2,train +1838,2,train +2275,3,train +101,2,train +235,2,train +3012,3,train +2313,2,train +2051,2,train +2092,3,train +2488,3,train +314,2,train +3046,1,train +2784,1,train +3400,4,train +2567,3,train +3004,4,train +2264,2,train +2305,3,train +2701,3,train +3259,1,train +306,3,train +3,2,train +2780,3,train +2518,3,train +2122,3,train +3076,1,train +3513,2,train +519,3,train +3296,4,train +257,3,train +2552,1,train +2993,3,train +3034,4,train +3168,4,train +2772,4,train +3430,4,train +3289,1,train +3726,2,train +295,2,train +732,3,train +3027,1,train +74,3,train +2765,1,train +2851,4,train +3247,4,train +2548,3,train +2985,4,train +1028,1,train +766,1,train +3939,2,train +549,3,train +2844,1,train +3240,1,train +3677,2,train +287,3,train +2978,1,train +3064,4,train +3460,4,train +2761,3,train +1241,1,train +845,1,train +979,1,train +803,4,train +3494,2,train +500,3,train +104,3,train +238,3,train +3411,4,train +796,1,train +975,3,train +534,1,train +1016,4,train +3311,2,train +713,3,train +1150,4,train +3445,2,train +3707,2,train +451,3,train +3748,3,train +1009,1,train +1446,2,train +833,4,train +3961,3,train +1363,4,train +3262,2,train +3441,4,train +1659,2,train +4040,3,train +564,1,train +1046,4,train +3778,3,train +784,4,train +522,4,train +1738,2,train +1342,2,train +1476,2,train +777,1,train +1259,4,train +997,4,train +3688,2,train +3729,3,train +1131,4,train +735,4,train +1951,2,train +1689,2,train +1293,2,train +4025,1,train +1427,2,train +1210,4,train +814,4,train +3942,3,train +1943,3,train +1640,2,train +1244,2,train +4021,3,train +1027,4,train +3759,3,train +1161,4,train +1719,2,train +1323,2,train +2156,3,train +4055,1,train +1457,2,train +1061,2,train +2452,1,train +1670,2,train +1274,2,train +1711,3,train +2665,1,train +2269,1,train +2448,3,train +2007,1,train +1790,3,train +1487,2,train +2878,1,train +2616,1,train +2399,3,train +2440,4,train +1700,2,train +1741,3,train +2695,1,train +2299,1,train +2653,4,train +2391,4,train +2512,1,train +2646,1,train +2250,1,train +2687,2,train +2866,4,train +2470,4,train +2167,3,train +1771,3,train +2766,2,train +168,3,train +2900,2,train +2201,1,train +2287,4,train +2421,4,train +2159,4,train +202,1,train +381,3,train +2676,1,train +2280,1,train +2717,2,train +2455,2,train +2634,4,train +2238,4,train +2372,4,train +281,1,train +415,1,train +198,3,train +2493,1,train +2930,2,train +3326,2,train +373,4,train +2668,2,train +2847,4,train +232,1,train +669,2,train +3405,2,train +452,4,train +3580,3,train +149,3,train +2485,2,train +2664,4,train +882,2,train +3659,3,train +183,1,train +269,4,train +665,4,train +799,4,train +3793,3,train +2698,2,train +141,4,train +2877,4,train +4089,1,train +3693,1,train +658,1,train +699,2,train +1095,2,train +3872,3,train +396,1,train +437,2,train +878,4,train +3173,2,train +616,4,train +220,4,train +3348,3,train +3476,3,train +3906,1,train +912,2,train +4085,3,train +213,1,train +650,2,train +829,4,train +3124,2,train +3561,3,train +567,4,train +171,4,train +3723,1,train +729,2,train +3461,1,train +863,2,train +467,2,train +3244,3,train +646,4,train +3378,3,train +3936,1,train +942,2,train +1379,3,train +4070,1,train +3894,4,train +3195,3,train +3632,4,train +597,4,train +1592,3,train +893,2,train +497,2,train +3845,4,train +1626,1,train +1805,3,train +1409,3,train +3704,1,train +1543,3,train +3838,1,train +844,2,train +3662,4,train +627,4,train +1839,1,train +1443,1,train +1226,3,train +3917,1,train +923,2,train +1360,3,train +1835,3,train +1876,4,train +915,3,train +2131,1,train +1869,1,train +1473,1,train +2089,4,train +1390,3,train +1827,4,train +1524,3,train +1128,3,train +2344,1,train +1820,1,train +1424,1,train +1906,4,train +2302,4,train +1603,3,train +1207,3,train +2040,4,train +2202,2,train +1899,1,train +1503,1,train +1637,1,train +2119,4,train +2253,4,train +2112,1,train +2153,2,train +2590,3,train +1850,1,train +2332,4,train +2070,4,train +1412,4,train +2803,3,train +2104,2,train +1887,4,train +2021,4,train +1625,4,train +64,1,train +22,4,train +1921,2,train +2100,4,train +1838,4,train +101,4,train +235,4,train +2134,2,train +2313,4,train +2051,4,train +3129,1,train +2867,1,train +314,4,train +3046,3,train +2347,2,train +2784,3,train +3342,1,train +348,2,train +3080,1,train +482,2,train +86,2,train +3259,3,train +3,4,train +3555,1,train +2897,1,train +299,2,train +3076,3,train +3513,4,train +2552,3,train +3768,1,train +3372,1,train +3506,1,train +512,2,train +3726,4,train +2848,1,train +3289,3,train +295,4,train +3027,3,train +3068,4,train +2765,3,train +849,1,train +3585,1,train +1028,3,train +632,3,train +2927,1,train +766,3,train +3061,1,train +3939,4,train +67,2,train +2844,3,train +3677,4,train +2978,3,train +3839,2,train +1241,3,train +845,3,train +3140,1,train +3577,2,train +979,3,train +3274,1,train +3494,4,train +3098,4,train +2836,4,train +1275,1,train +3353,1,train +3790,2,train +796,3,train +534,3,train +3311,4,train +3707,4,train +3445,4,train +1488,1,train +4003,2,train +3566,1,train +3607,2,train +1009,3,train +1446,4,train +4044,3,train +3128,4,train +3262,4,train +1567,1,train +1305,1,train +909,1,train +1043,1,train +3820,2,train +1659,4,train +3954,2,train +430,3,train +3558,2,train +564,3,train +1122,1,train +1559,2,train +1256,1,train +1342,4,train +1738,4,train +4033,2,train +1476,4,train +3771,2,train +4074,3,train +777,3,train +1638,2,train +1772,2,train +1073,1,train +1689,4,train +1293,4,train +4025,3,train +1427,4,train +1723,2,train +890,1,train +1327,2,train +1110,4,train +1244,4,train +2198,2,train +1802,2,train +1936,2,train +1103,1,train +1719,4,train +1323,4,train +4055,3,train +1457,4,train +1061,4,train +2015,2,train +2056,3,train +2452,3,train +1316,1,train +1357,2,train +1491,2,train +1274,4,train +2665,3,train +2269,3,train +1966,2,train +1570,2,train +2007,3,train +1487,4,train +2565,1,train +2699,1,train +1387,2,train +2778,1,train +2912,1,train +2516,1,train +2695,3,train +2299,3,train +1775,3,train +2595,1,train +2512,3,train +2250,3,train +2687,4,train +2546,1,train +2983,2,train +2680,1,train +2284,1,train +2766,4,train +2900,4,train +2201,3,train +285,1,train +68,3,train +2363,1,train +2759,1,train +202,3,train +2893,1,train +3196,2,train +2280,3,train +2717,4,train +2455,4,train +498,1,train +281,3,train +2576,1,train +3013,2,train +415,3,train +2710,1,train +3409,2,train +2493,3,train +2534,4,train +2930,4,train +2668,4,train +577,1,train +711,1,train +3488,2,train +3226,2,train +232,3,train +669,4,train +2485,4,train +662,1,train +3043,2,train +3480,3,train +882,4,train +2740,1,train +2781,2,train +183,3,train +2698,4,train +741,1,train +479,1,train +3256,2,train +3693,3,train +1095,4,train +699,4,train +4089,3,train +396,3,train +437,4,train +3173,4,train +558,1,train +995,2,train +3772,3,train +692,1,train +296,1,train +3510,3,train +3469,2,train +912,4,train +34,1,train +2811,2,train +3906,3,train +213,3,train +650,4,train +1208,2,train +3940,1,train +509,1,train +946,2,train +3682,2,train +643,1,train +729,4,train +3420,2,train +3461,3,train +863,4,train +467,4,train +3723,3,train +1421,2,train +722,1,train +326,1,train +1159,2,train +3936,3,train +942,4,train +3237,2,train +4070,3,train +284,4,train +3970,1,train +539,1,train +714,2,train +3450,2,train +3928,4,train +893,4,train +497,4,train +1451,2,train +1189,2,train +793,2,train +1626,3,train +3921,1,train +3704,3,train +3838,3,train +844,4,train +1922,1,train +4000,1,train +1839,3,train +1006,2,train +1443,3,train +3738,1,train +3917,3,train +3958,4,train +923,4,train +2135,1,train +1522,3,train +3817,1,train +2214,1,train +2131,3,train +1690,1,train +1432,2,train +1473,3,train +1869,3,train +1910,4,train +1211,3,train +3988,4,train +1903,1,train +1820,3,train +1424,3,train +2640,1,train +2378,1,train +2419,2,train +2116,1,train +2202,4,train +1899,3,train +1503,3,train +1940,4,train +1637,3,train +2195,1,train +2153,4,train +1850,3,train +2711,2,train +2408,1,train +2449,2,train +2845,2,train +2146,1,train +1884,1,train +2104,4,train +147,1,train +3058,2,train +2359,1,train +2400,2,train +2097,1,train +2183,4,train +1921,4,train +98,1,train +2176,1,train +2613,2,train +2134,4,train +311,1,train +3088,2,train +3129,3,train +2826,2,train +2430,2,train +2867,3,train +2347,4,train +431,2,train +128,1,train +169,2,train +3342,3,train +348,4,train +2643,2,train +2247,2,train +3080,3,train +86,4,train +644,2,train +3376,1,train +778,2,train +3555,3,train +2856,2,train +2460,2,train +2897,3,train +299,4,train +2635,3,train +3851,1,train +857,2,train +158,1,train +3372,3,train +3506,3,train +2848,3,train +4064,1,train +1070,2,train +3802,1,train +412,2,train +849,3,train +3585,3,train +3626,4,train +2927,3,train +3364,4,train +3061,3,train +67,4,train +3881,1,train +3619,1,train +625,2,train +3357,1,train +3753,1,train +3839,4,train +363,2,train +3140,3,train +3577,4,train +3274,3,train +3832,1,train +3436,1,train +1275,3,train +442,2,train +3174,1,train +3570,1,train +576,2,train +180,2,train +617,3,train +3353,3,train +3790,4,train +1571,1,train +4086,2,train +1488,3,train +3783,1,train +3824,2,train +393,2,train +3607,4,train +4003,4,train +1567,3,train +1126,1,train +3862,1,train +3903,2,train +1305,3,train +909,3,train +3641,2,train +4037,2,train +606,2,train +1043,3,train +3820,4,train +3558,4,train +1735,1,train +1122,3,train +1559,4,train +3813,1,train +1256,3,train +3854,2,train +4033,4,train +3771,4,train +1814,1,train +1418,1,train +1156,1,train +1638,4,train +1772,4,train +894,1,train +1376,4,train +4067,2,train +1073,3,train +677,3,train +3805,2,train +2068,2,train +1765,1,train +1369,1,train +1806,2,train +1107,1,train +1723,4,train +890,3,train +1327,4,train +4018,2,train +1885,2,train +2019,2,train +1186,1,train +1802,4,train +1406,4,train +1103,3,train +2494,2,train +2098,2,train +1399,1,train +1836,2,train +1533,1,train +2015,4,train +1316,3,train +1357,4,train +1491,4,train +2311,2,train +2049,2,train +1653,2,train +1787,2,train +1570,4,train +1174,4,train +2565,3,train +2262,2,train +1866,2,train +2699,3,train +1604,2,train +1387,4,train +1,2,train +2778,3,train +2912,3,train +2079,2,train +2516,3,train +2213,2,train +80,2,train +2812,1,train +3208,1,train +2595,3,train +2292,2,train +2770,4,train +2030,2,train +2071,3,train +2891,1,train +293,2,train +3025,1,train +3421,1,train +2546,3,train +2983,4,train +2680,3,train +2284,3,train +3238,1,train +3279,2,train +244,2,train +285,3,train +2580,1,train +2976,1,train +2759,3,train +2363,3,train +2800,4,train +3196,4,train +3055,1,train +3492,2,train +61,2,train +498,3,train +3189,1,train +3409,4,train +2576,3,train +3013,4,train +2710,3,train +3705,2,train +577,3,train +2872,1,train +711,3,train +3006,1,train +3309,2,train +3488,4,train +12,2,train +53,3,train +2744,1,train +3226,4,train +3522,2,train +2823,1,train +3260,2,train +662,3,train +2957,1,train +3043,4,train +2740,3,train +2781,4,train +824,1,train +958,1,train +3339,2,train +741,3,train +3473,2,train +479,3,train +3256,4,train +775,1,train +3948,2,train +3686,2,train +558,3,train +995,4,train +3290,2,train +692,3,train +296,3,train +3028,2,train +3469,4,train +34,3,train +2811,4,train +1250,1,train +854,1,train +988,1,train +592,1,train +3765,2,train +1208,4,train +330,1,train +812,4,train +3503,2,train +509,3,train +946,4,train +3241,2,train +3940,3,train +1201,1,train +805,1,train +1421,4,train +3716,2,train +3320,2,train +3757,3,train +722,3,train +326,3,train +1159,4,train +3454,2,train +3237,4,train +1321,2,train +1018,1,train +622,1,train +1059,2,train +3970,3,train +539,3,train +3667,2,train +714,4,train +1534,2,train +1231,1,train +1668,2,train +4004,1,train +969,1,train +1010,2,train +1451,4,train +3746,2,train +1189,4,train +793,4,train +3787,3,train +3921,3,train +531,4,train +1747,2,train +1922,3,train +1089,2,train +1223,2,train +4000,3,train +1006,4,train +3738,3,train +2135,3,train +1302,2,train +1436,2,train +3817,3,train +2214,3,train +1253,2,train +1690,3,train +2248,1,train +1986,1,train +1466,2,train +1507,3,train +1903,3,train +2378,3,train +2419,4,train +2116,3,train +2278,1,train +2412,1,train +2195,3,train +2236,4,train +2491,1,train +2229,1,train +2711,4,train +2408,3,train +1967,1,train +2449,4,train +2845,4,train +2146,3,train +1884,3,train +147,3,train +2442,1,train +2046,1,train +2879,2,train +2180,1,train +2266,4,train +2400,4,train +181,1,train +2958,2,train +2655,1,train +2259,1,train +3092,2,train +98,3,train +2176,3,train +2613,4,train +260,1,train +394,1,train +218,4,train +2909,2,train +2826,4,train +2430,4,train +473,1,train +607,1,train +3384,2,train +431,4,train +2726,2,train +3163,3,train +128,3,train +169,4,train +2860,2,train +2643,4,train +2247,4,train +861,2,train +644,4,train +248,4,train +2543,2,train +778,4,train +3073,2,train +3376,3,train +2460,4,train +3672,1,train +1074,2,train +3851,3,train +857,4,train +2756,2,train +158,3,train +2931,3,train +3751,1,train +3885,1,train +891,2,train +3802,3,train +412,4,train +3103,2,train +3964,1,train +3702,1,train +667,1,train +708,2,train +3922,4,train +1145,3,train +842,2,train +3619,3,train +3223,3,train +3440,1,train +625,4,train +3357,3,train +3881,3,train +363,4,train +3915,1,train +921,2,train +3653,1,train +1055,2,train +3832,3,train +3436,3,train +442,4,train +3174,3,train +3570,3,train +576,4,train +180,4,train +1571,3,train +738,2,train +1175,3,train +3866,1,train +872,2,train +4086,4,train +3824,4,train +393,4,train +1085,2,train +689,2,train +1126,3,train +3862,3,train +823,2,train +4037,4,train +3641,4,train +3903,4,train +606,4,train +1684,1,train +1422,1,train +1205,3,train +3500,1,train +3896,1,train +902,2,train +3854,4,train +2031,1,train +1814,3,train +1418,3,train +1156,3,train +894,3,train +4067,4,train +3805,4,train +2110,1,train +1714,1,train +1452,1,train +2068,4,train +3926,1,train +1369,3,train +1806,4,train +1107,3,train +4018,4,train +1927,1,train +1665,1,train +2102,2,train +1885,4,train +2019,4,train +1186,3,train +2181,2,train +1878,1,train +2315,2,train +1616,1,train +1220,1,train +2098,4,train +1399,3,train +1836,4,train +2528,2,train +1829,1,train +1870,2,train +2311,4,train +2049,4,train +1653,4,train +1787,4,train +1391,4,train +2607,2,train +2345,2,train +1646,1,train +2083,2,train +2262,4,train +1866,4,train +1604,4,train +43,1,train +2820,2,train +1,4,train +2296,2,train +2079,4,train +80,4,train +2375,2,train +2812,3,train +3208,3,train +2509,2,train +2113,2,train +2030,4,train +3108,1,train +73,1,train +114,2,train +2891,3,train +293,4,train +3025,3,train +2629,3,train +2367,3,train +3187,1,train +3321,1,train +327,2,train +3059,1,train +65,2,train +3238,3,train +3279,4,train +2539,2,train +2580,3,train +2976,3,train +3534,1,train +3138,1,train +540,2,train +144,2,train +2876,1,train +3055,3,train +2659,3,train +3492,4,train +61,4,train +2397,3,train +357,2,train +491,2,train +95,2,train +2872,3,train +3309,4,train +3705,4,train +3006,3,train +3047,4,train +12,4,train +2744,3,train +3605,2,train +3302,1,train +308,2,train +349,3,train +3522,4,train +2823,3,train +3260,4,train +2957,3,train +1041,1,train +824,3,train +3515,1,train +521,2,train +958,3,train +3253,1,train +3339,4,train +3473,4,train +3077,4,train +2815,4,train +1120,1,train +1254,1,train +4031,2,train +3635,2,train +3769,2,train +2936,1,train +338,2,train +775,3,train +3686,4,train +3290,4,train +3028,4,train +1333,1,train +1250,3,train +854,3,train +3545,1,train +3586,2,train +551,2,train +592,3,train +988,3,train +3765,4,train +3982,2,train +330,3,train +3503,4,train +3241,4,train +1546,1,train +1284,1,train +1108,4,train +805,3,train +409,3,train +3716,4,train +3320,4,train +3454,4,train +1497,1,train +1101,1,train +1235,1,train +839,1,train +1321,4,train +1018,3,train +622,3,train +1059,4,train +3750,2,train +1617,2,train +1314,1,train +1534,4,train +656,1,train +1668,4,train +3963,2,train +4004,3,train +1010,4,train +3746,4,train +1830,2,train +1568,2,train +1265,1,train +869,1,train +1747,4,train +4042,2,train +1089,4,train +1223,4,train +1915,2,train +1519,2,train +1302,4,train +1436,4,train +1598,2,train +1295,1,train +1732,2,train +1253,4,train +2248,3,train +1945,2,train +1549,2,train +1986,3,train +1466,4,train +2065,3,train +1762,2,train +2757,1,train +2278,3,train +2412,3,train +1579,2,train +2574,1,train +2312,1,train +2491,3,train +1792,2,train +2229,3,train +1967,3,train +2787,1,train +2525,1,train +2263,1,train +2442,3,train +2046,3,train +2879,4,train +2180,3,train +2738,1,train +2342,1,train +181,3,train +2958,4,train +3092,4,train +2259,3,train +1863,3,train +260,3,train +2951,1,train +2992,2,train +394,3,train +2689,1,train +3388,2,train +2909,4,train +2513,4,train +690,1,train +3467,2,train +473,3,train +2768,1,train +3205,2,train +3601,2,train +2726,4,train +2860,4,train +507,1,train +245,1,train +2981,1,train +861,4,train +465,4,train +2760,2,train +3156,2,train +2543,4,train +720,1,train +458,1,train +3631,2,train +3672,3,train +1074,4,train +2756,4,train +3968,1,train +3751,3,train +3448,2,train +3052,2,train +3489,3,train +891,4,train +3186,2,train +2790,2,train +3885,3,train +233,4,train +750,1,train +1187,2,train +3964,3,train +3702,3,train +708,4,train +3003,2,train +3399,2,train +842,4,train +3440,3,train +1004,2,train +3736,1,train +1138,2,train +742,2,train +3915,3,train +921,4,train +3653,3,train +263,4,train +3949,1,train +1351,2,train +955,2,train +738,4,train +3429,2,train +3866,3,train +872,4,train +4028,1,train +1034,2,train +1471,3,train +772,2,train +510,2,train +689,4,train +1684,3,train +1381,2,train +1422,3,train +3717,1,train +1119,2,train +723,2,train +3500,3,train +3896,3,train +902,4,train +3937,4,train +1718,1,train +1501,3,train +3796,1,train +1198,2,train +802,2,train +936,2,train +1931,1,train +2110,3,train +1714,3,train +4009,1,train +1411,2,train +1452,3,train +1190,3,train +3926,3,train +3967,4,train +2144,1,train +1748,1,train +1927,3,train +2102,4,train +1665,3,train +1269,3,train +2223,1,train +1961,1,train +2398,2,train +2181,4,train +1878,3,train +1919,4,train +2315,4,train +1616,3,train +1220,3,train +2308,1,train +1912,1,train +2528,4,train +1829,3,train +1870,4,train +1991,1,train +2428,2,train +2125,1,train +2166,2,train +2607,4,train +2345,4,train +1646,3,train +2083,4,train +126,1,train +3037,2,train +2641,2,train +1942,1,train +2379,2,train +2296,4,train +339,1,train +77,1,train +2854,2,train +2458,2,train +2895,3,train +2155,1,train +2592,2,train +2375,4,train +2113,4,train +1717,4,train +3108,3,train +114,4,train +2805,2,train +2147,2,train +369,1,train +3187,3,train +148,2,train +3321,3,train +327,4,train +2622,2,train +3059,3,train +65,4,train +623,2,train +361,2,train +3138,3,train +3534,3,train +540,4,train +144,4,train +2835,2,train +2876,3,train +2573,2,train +836,2,train +137,1,train +178,2,train +574,2,train +357,4,train +95,4,train +653,2,train +3385,1,train +787,2,train +391,2,train +3605,4,train +88,1,train +129,2,train +3302,3,train +3343,4,train +308,4,train +2644,3,train +866,2,train +3202,1,train +604,2,train +1041,3,train +3336,1,train +342,2,train +3253,3,train +1337,1,train +4073,1,train +1120,3,train +3415,1,train +1254,3,train +3549,1,train +4031,4,train +421,2,train +555,2,train +3635,4,train +2936,3,train +3373,4,train +338,4,train +3769,4,train +1333,3,train +937,3,train +3628,1,train +4065,2,train +3366,1,train +3982,4,train +3586,4,train +1367,1,train +1546,3,train +3841,1,train +3882,2,train +847,2,train +1284,3,train +1325,4,train +3579,1,train +585,2,train +626,3,train +3403,4,train +1580,1,train +1184,1,train +4095,2,train +1101,3,train +3792,1,train +1235,3,train +839,3,train +3750,4,train +1793,1,train +1834,2,train +1135,1,train +1617,4,train +3912,2,train +1314,3,train +1355,4,train +656,3,train +1610,1,train +1214,1,train +2047,2,train +1744,1,train +1348,1,train +1830,4,train +1568,4,train +1265,3,train +869,3,train +4042,4,train +1823,1,train +1864,2,train +2260,2,train +1561,1,train +1602,2,train +4076,2,train +1519,4,train +1123,4,train +1378,1,train +1598,4,train +1295,3,train +1732,4,train +2331,3,train +1632,2,train +1549,4,train +2503,2,train +2107,2,train +1845,2,train +1762,4,train +2757,3,train +1796,2,train +1579,4,train +193,2,train +2574,3,train +2271,2,train +1875,2,train +2312,3,train +1792,4,train +2870,1,train +3004,1,train +10,2,train +2787,3,train +2088,2,train +2525,3,train +2263,3,train +89,2,train +3258,2,train +223,2,train +2738,3,train +2342,3,train +3296,1,train +3034,1,train +3471,2,train +40,2,train +2772,1,train +3168,1,train +3388,4,train +2992,4,train +2689,3,train +3247,1,train +253,2,train +690,3,train +2985,1,train +3467,4,train +32,3,train +2768,3,train +2809,4,train +3205,4,train +3064,1,train +70,2,train +507,3,train +3239,2,train +245,3,train +3156,4,train +2760,4,train +803,1,train +541,1,train +720,3,train +761,4,train +2619,1,train +3056,2,train +458,3,train +2839,4,train +1016,1,train +620,1,train +1150,1,train +3531,2,train +3968,3,train +3665,2,train +3269,2,train +3448,4,train +3052,4,train +3186,4,train +2790,4,train +833,1,train +3744,2,train +750,3,train +791,4,train +1187,4,train +3003,4,train +1046,1,train +784,1,train +3957,2,train +522,1,train +3736,3,train +1004,4,train +3299,2,train +1138,4,train +742,4,train +1259,1,train +1300,2,train +997,1,train +1038,2,train +1434,2,train +735,1,train +821,4,train +3512,2,train +3949,3,train +955,4,train +1647,2,train +814,1,train +1251,2,train +4028,3,train +1034,4,train +772,4,train +3504,3,train +510,4,train +1726,2,train +1027,1,train +1068,2,train +1464,2,train +1202,2,train +589,4,train +3717,3,train +1119,4,train +723,4,train +1677,2,train +1718,3,train +4013,1,train +1415,2,train +3796,3,train +1198,4,train +802,4,train +936,4,train +1494,2,train +1098,2,train +1931,3,train +1232,2,train +4009,3,train +2227,1,train +2144,3,train +1748,3,train +2185,4,train +1445,2,train +1486,3,train +2306,1,train +2440,1,train +2223,3,train +1961,3,train +2398,4,train +2653,1,train +2391,1,train +2215,4,train +1912,3,train +1516,3,train +2470,1,train +1991,3,train +2428,4,train +2125,3,train +2166,4,train +2287,1,train +126,3,train +2421,1,train +2025,1,train +2159,1,train +2641,4,train +1942,3,train +2379,4,train +2937,2,train +2634,1,train +2238,1,train +77,3,train +2372,1,train +2458,4,train +2854,4,train +2155,3,train +2592,4,train +1934,4,train +373,1,train +197,4,train +2055,1,train +2888,2,train +2147,4,train +452,1,train +3363,2,train +2967,2,train +2664,1,train +2705,2,train +148,4,train +2622,4,train +665,1,train +269,1,train +444,2,train +3180,2,train +141,1,train +227,4,train +623,4,train +2522,2,train +361,4,train +2656,2,train +2918,2,train +2573,4,train +3651,1,train +616,1,train +220,1,train +836,4,train +137,3,train +178,4,train +574,4,train +3730,1,train +736,2,train +171,1,train +653,4,train +2948,2,train +3385,3,train +391,4,train +129,4,train +3681,1,train +646,1,train +687,2,train +866,4,train +3161,2,train +3202,3,train +604,4,train +3336,3,train +342,4,train +3894,1,train +900,2,train +504,2,train +1337,3,train +3632,1,train +638,2,train +3415,3,train +421,4,train +25,4,train +3549,3,train +555,4,train +717,2,train +3845,1,train +3931,4,train +3628,3,train +4065,4,train +3366,3,train +930,2,train +1367,3,train +3662,1,train +668,2,train +3882,4,train +3841,3,train +3579,3,train +585,4,train +1401,1,train +1580,3,train +1184,3,train +485,2,train +3699,4,train +4095,4,train +1876,1,train +1793,3,train +1834,4,train +698,2,train +1135,3,train +3912,4,train +2089,1,train +1827,1,train +1610,3,train +1214,3,train +2047,4,train +911,2,train +1348,3,train +1906,1,train +2040,1,train +2260,4,train +1864,4,train +1561,3,train +1602,4,train +4076,4,train +2119,1,train +2294,2,train +1378,3,train +982,3,train +2070,1,train +2507,2,train +1412,1,train +1632,4,train +1370,4,train +1887,1,train +1928,2,train +2324,2,train +1625,1,train +2107,4,train +1845,4,train +22,1,train +2799,2,train +2100,1,train +2141,2,train +1838,1,train +2275,2,train +1796,4,train +101,1,train +2488,2,train +2092,2,train +1875,4,train +3087,1,train +93,2,train +2870,3,train +2567,2,train +2171,2,train +2608,3,train +10,4,train +2305,2,train +1909,2,train +2346,3,train +3004,3,train +2088,4,train +172,2,train +306,2,train +89,4,train +3258,4,train +2518,2,train +2122,2,train +3513,1,train +3117,1,train +519,2,train +3296,3,train +257,2,train +3034,3,train +3471,4,train +40,4,train +2772,3,train +2376,3,train +3726,1,train +3068,1,train +74,2,train +2851,3,train +3247,3,train +2985,3,train +549,2,train +2885,1,train +3367,4,train +287,2,train +3064,3,train +2623,1,train +3105,4,train +70,4,train +3239,4,train +2406,3,train +3797,2,train +803,3,train +3098,1,train +3494,1,train +104,2,train +541,3,train +2836,1,train +238,2,train +2619,3,train +3056,4,train +3614,2,train +1016,3,train +620,3,train +2915,1,train +3311,1,train +3748,2,train +358,3,train +3531,4,train +3665,4,train +3269,4,train +1446,1,train +833,3,train +3128,1,train +3961,2,train +3262,1,train +3303,2,train +3744,4,train +4040,2,train +1046,3,train +605,1,train +1087,4,train +3778,2,train +784,3,train +3516,2,train +522,3,train +3299,4,train +1342,1,train +1476,1,train +1517,2,train +1259,3,train +1300,4,train +997,3,train +1038,4,train +1434,4,train +3729,2,train +735,3,train +3512,4,train +1596,2,train +1293,1,train +897,1,train +635,1,train +1117,4,train +1647,4,train +814,3,train +1251,4,train +3942,2,train +1809,2,train +1943,2,train +1110,1,train +1547,2,train +1244,1,train +1726,4,train +4021,2,train +4062,3,train +1027,3,train +1068,4,train +1464,4,train +3759,2,train +1202,4,train +806,4,train +3800,3,train +1323,1,train +1364,2,train +1061,1,train +4013,3,train +1415,4,train +1274,1,train +1315,2,train +1711,2,train +4092,3,train +1494,4,train +1098,4,train +1232,4,train +1790,2,train +2227,3,train +1445,4,train +2523,1,train +2306,3,train +2440,3,train +2044,3,train +1741,2,train +1782,3,train +2653,3,train +2391,3,train +2553,1,train +2687,1,train +2291,1,train +2470,3,train +1771,2,train +2766,1,train +2900,1,train +2287,3,train +2421,3,train +2025,3,train +2159,3,train +2583,1,train +3020,2,train +26,3,train +2321,1,train +2717,1,train +2937,4,train +2455,1,train +2541,4,train +2238,3,train +1842,3,train +3233,2,train +2930,1,train +2534,1,train +373,3,train +2668,1,train +2888,4,train +2055,3,train +669,1,train +452,3,train +2351,1,train +2485,1,train +2967,4,train +2705,4,train +882,1,train +3659,2,train +665,3,train +269,3,train +3438,3,train +444,4,train +2698,1,train +2739,2,train +141,3,train +2918,4,train +2522,4,train +3180,4,train +2656,4,train +699,1,train +303,1,train +3476,2,train +437,1,train +41,1,train +3651,3,train +220,3,train +3348,2,train +912,1,train +953,2,train +3730,3,train +650,1,train +736,4,train +3031,2,train +2769,2,train +171,3,train +2948,4,train +729,1,train +467,1,train +3244,2,train +3681,3,train +687,4,train +3378,2,train +3977,1,train +942,1,train +983,2,train +1379,2,train +284,1,train +3498,3,train +3894,3,train +900,4,train +504,4,train +3195,2,train +3236,3,train +638,4,train +242,4,train +3632,3,train +3928,1,train +497,1,train +934,2,train +717,4,train +3845,3,train +4007,1,train +1409,2,train +1013,2,train +3745,1,train +751,2,train +930,4,train +489,2,train +3662,3,train +668,4,train +1226,2,train +3958,1,train +1360,2,train +1401,3,train +3696,1,train +702,2,train +485,4,train +1697,1,train +1876,3,train +781,2,train +915,2,train +698,4,train +1910,1,train +2089,3,train +3988,1,train +1390,2,train +1827,3,train +1128,2,train +3946,4,train +911,4,train +1989,1,train +1727,1,train +1906,3,train +1207,2,train +1248,3,train +2202,1,train +1940,1,train +2119,3,train +1678,1,train +2294,4,train +2153,1,train +1757,1,train +2590,2,train +2507,4,train +1412,3,train +2803,2,train +2104,1,train +1708,1,train +1887,3,train +1928,4,train +2324,4,train +1625,3,train +1666,4,train +2486,2,train +1921,1,train +2141,4,train +2275,4,train +101,3,train +2437,2,train +2874,3,train +2134,1,train +2175,2,train +2092,4,train +1696,4,train +3087,3,train +93,4,train +2388,2,train +2784,2,train +2567,4,train +2171,4,train +2305,4,train +1909,4,train +348,1,train +86,1,train +172,4,train +2904,3,train +306,4,train +2122,4,train +3513,3,train +3117,3,train +519,4,train +257,4,train +2552,2,train +419,2,train +3151,1,train +3068,3,train +74,4,train +3626,1,train +632,2,train +3364,1,train +766,2,train +370,2,train +67,1,train +2844,2,train +2885,3,train +287,4,train +2623,3,train +3839,1,train +845,2,train +449,2,train +3577,1,train +187,2,train +3797,4,train +3098,3,train +2702,3,train +104,4,train +2836,3,train +3790,1,train +3831,2,train +796,2,train +3132,1,train +3614,4,train +534,2,train +138,2,train +2915,3,train +3311,3,train +3352,4,train +3748,4,train +916,3,train +3211,1,train +3607,1,train +4044,2,train +3961,4,train +3128,3,train +3262,3,train +3303,4,train +3820,1,train +3861,2,train +4040,4,train +430,2,train +3558,1,train +564,2,train +605,3,train +3778,4,train +3516,4,train +1425,1,train +1559,1,train +1342,3,train +4074,2,train +1517,4,train +3812,2,train +3729,4,train +1638,1,train +1772,1,train +1376,1,train +1114,1,train +1596,4,train +1293,3,train +897,3,train +4025,2,train +635,3,train +1193,1,train +1327,1,train +1809,4,train +1943,4,train +1110,3,train +1547,4,train +1244,3,train +1285,4,train +4021,4,train +3759,4,train +1802,1,train +1406,1,train +1843,2,train +1323,3,train +1364,4,train +4055,2,train +1061,3,train +1102,4,train +2452,2,train +2056,2,train +1357,1,train +961,1,train +1491,1,train +1711,4,train +1315,4,train +2269,2,train +1873,2,train +1570,1,train +1174,1,train +2007,2,train +1790,4,train +2523,3,train +1387,1,train +1824,2,train +1741,4,train +2299,2,train +2340,3,train +1641,2,train +1775,2,train +2770,1,train +2553,3,train +2250,2,train +2291,3,train +2687,3,train +1771,4,train +2983,1,train +2766,3,train +2370,3,train +68,2,train +2800,1,train +3196,1,train +202,2,train +2583,3,train +3020,4,train +2280,2,train +2321,3,train +2717,3,train +2455,3,train +2059,3,train +281,2,train +3013,1,train +2617,1,train +3233,4,train +2534,3,train +2668,3,train +3488,1,train +3226,1,train +232,2,train +669,3,train +2568,1,train +2351,3,train +2788,4,train +2485,3,train +569,1,train +352,3,train +3043,1,train +3480,2,train +90,3,train +2781,1,train +2698,3,train +2739,4,train +3559,2,train +3693,2,train +3256,1,train +3297,2,train +699,3,train +303,3,train +3476,4,train +437,3,train +41,3,train +2818,4,train +995,1,train +599,1,train +3772,2,train +3906,2,train +3510,2,train +953,4,train +2811,1,train +650,3,train +3031,4,train +2769,4,train +1208,1,train +812,1,train +946,1,train +550,1,train +3327,2,train +3723,2,train +729,3,train +770,4,train +3065,2,train +3461,2,train +467,3,train +508,4,train +3244,4,train +3936,2,train +3977,3,train +1379,4,train +983,4,train +3278,2,train +284,3,train +3195,4,train +1279,2,train +1017,2,train +3794,3,train +714,1,train +318,1,train +3095,2,train +3928,3,train +497,3,train +934,4,train +1626,2,train +793,1,train +4007,3,train +1409,4,train +531,1,train +1013,4,train +3308,2,train +3704,2,train +751,4,train +3745,3,train +489,4,train +1006,1,train +1047,2,train +1443,2,train +1226,4,train +3958,3,train +568,4,train +3696,3,train +702,4,train +1522,2,train +1697,3,train +3992,1,train +781,4,train +915,4,train +4071,1,train +1473,2,train +1077,2,train +1910,3,train +1211,2,train +3988,3,train +1989,3,train +1727,3,train +4022,1,train +1424,2,train +1465,3,train +1207,4,train +2285,1,train +2419,1,train +2202,3,train +1503,2,train +1940,3,train +1678,3,train +2236,1,train +1974,1,train +2153,3,train +1757,3,train +2590,4,train +1495,3,train +2711,1,train +2449,1,train +2053,1,train +2803,4,train +2104,3,train +1708,3,train +2266,1,train +2703,2,train +2400,1,train +2004,1,train +2486,4,train +2224,4,train +1921,3,train +5,1,train +2782,2,train +2613,1,train +2437,4,train +2134,3,train +2175,4,train +218,1,train +3129,2,train +2733,2,train +2430,1,train +2034,1,train +2471,2,train +2867,2,train +2254,4,train +2388,4,train +431,1,train +35,1,train +169,1,train +3342,2,train +3080,2,train +2247,1,train +2684,2,train +86,3,train +644,1,train +248,1,train +2763,2,train +3200,3,train +2460,1,train +2501,2,train +2897,2,train +2635,2,train +2552,4,train +636,2,train +3372,2,train +419,4,train +3151,3,train +2848,2,train +3709,1,train +412,1,train +3626,3,train +16,1,train +453,2,train +849,2,train +236,4,train +632,4,train +2927,2,train +370,4,train +3230,3,train +3364,3,train +3922,1,train +666,2,train +3839,3,train +363,1,train +449,4,train +845,4,train +3140,2,train +3618,4,train +187,4,train +2919,3,train +3577,3,train +442,1,train +180,1,train +617,2,train +3831,4,train +4,4,train +3132,3,train +534,4,train +138,4,train +4086,1,train +3824,1,train +3428,1,train +393,1,train +434,2,train +3211,3,train +3607,3,train +3648,4,train +4044,4,train +1212,3,train +3507,1,train +3903,1,train +909,2,train +3641,1,train +4037,1,train +251,2,train +3861,4,train +430,4,train +3558,3,train +1642,1,train +1425,3,train +1122,2,train +1559,3,train +3458,1,train +3854,1,train +3895,2,train +901,3,train +4074,4,train +3812,4,train +1638,3,train +1376,3,train +4067,1,train +677,2,train +1114,3,train +3805,1,train +4025,4,train +2068,1,train +1806,1,train +1193,3,train +890,2,train +1327,3,train +1885,1,train +1489,1,train +2019,1,train +1406,3,train +1843,4,train +3876,2,train +4055,4,train +2098,1,train +2139,2,train +1836,1,train +2056,4,train +1178,1,train +3955,2,train +1357,3,train +961,3,train +2352,2,train +2049,1,train +1653,1,train +2269,4,train +1391,1,train +1873,4,train +1787,1,train +1570,3,train +1174,3,train +2007,4,train +2565,2,train +2169,2,train +1866,1,train +1470,1,train +1907,2,train +1604,1,train +1387,3,train +1824,4,train +1,1,train +2778,2,train +2516,2,train +2299,4,train +1858,2,train +1641,4,train +1775,4,train +80,1,train +2595,2,train +2770,3,train +2071,2,train +1458,4,train +72,2,train +2546,2,train +2983,3,train +2284,2,train +1888,2,train +151,2,train +3279,1,train +285,2,train +68,4,train +2363,2,train +2800,3,train +3196,3,train +3492,1,train +3096,1,train +498,2,train +2834,1,train +281,4,train +2576,2,train +2617,3,train +3013,3,train +3054,4,train +577,2,train +3309,1,train +3047,1,train +53,2,train +3226,3,train +2568,3,train +3522,1,train +132,2,train +569,3,train +2864,1,train +3260,1,train +3043,3,train +3084,4,train +3480,4,train +2781,3,train +3339,1,train +2943,1,train +3776,2,train +3473,1,train +3077,1,train +3559,4,train +3693,4,train +2815,1,train +3297,4,train +3593,2,train +558,2,train +599,3,train +995,3,train +3290,1,train +296,2,train +3510,4,train +3028,1,train +3114,4,train +34,2,train +2811,3,train +3772,4,train +3806,2,train +3940,2,train +812,3,train +3503,1,train +3544,2,train +3723,4,train +946,3,train +550,3,train +3241,1,train +3327,4,train +3461,4,train +3065,4,train +1108,1,train +846,1,train +3757,2,train +3320,1,train +3361,2,train +326,2,train +367,3,train +105,3,train +3278,4,train +1321,1,train +1059,1,train +1279,4,train +4011,3,train +3970,2,train +1017,4,train +714,3,train +318,3,train +3095,4,train +1534,1,train +876,1,train +1313,2,train +1010,1,train +614,1,train +1096,4,train +3391,2,train +793,3,train +397,3,train +3787,2,train +3921,2,train +531,3,train +3308,4,train +1788,2,train +1922,2,train +1089,1,train +1526,2,train +1223,1,train +4000,2,train +3604,2,train +1006,3,train +1047,4,train +1443,4,train +3738,2,train +785,4,train +1302,1,train +1343,2,train +1522,4,train +3817,2,train +3992,3,train +2214,2,train +1253,1,train +1690,2,train +4071,3,train +1473,4,train +1077,4,train +1211,4,train +1903,2,train +1507,2,train +4022,3,train +1424,4,train +2285,3,train +2419,3,train +1586,2,train +1503,4,train +2236,3,train +1974,3,train +2711,3,train +2449,3,train +2053,3,train +2490,4,train +1791,3,train +2879,1,train +2266,3,train +2703,4,train +2400,3,train +2004,3,train +2958,1,train +5,3,train +2300,1,train +2782,4,train +2038,1,train +2520,4,train +218,3,train +2513,1,train +2909,1,train +2950,2,train +3129,4,train +2733,4,train +2867,4,train +2471,4,train +2430,3,train +2034,3,train +252,1,train +3029,2,train +431,3,train +35,3,train +2726,1,train +3163,2,train +169,3,train +2247,3,train +2684,4,train +861,1,train +465,1,train +248,3,train +2543,1,train +3376,2,train +2763,4,train +2460,3,train +2501,4,train +2897,4,train +2635,4,train +2239,4,train +544,1,train +282,1,train +20,1,train +2756,1,train +2797,2,train +636,4,train +2931,2,train +2848,4,train +891,1,train +932,2,train +3709,3,train +233,1,train +3010,2,train +412,3,train +16,3,train +453,4,train +849,4,train +2748,2,train +2927,4,train +708,1,train +312,1,train +1145,2,train +3922,3,train +532,4,train +2827,2,train +3223,2,train +666,4,train +3357,2,train +3956,1,train +921,1,train +962,2,train +263,1,train +700,2,train +3436,2,train +442,3,train +3174,2,train +3215,3,train +3477,3,train +180,3,train +617,4,train +4035,1,train +738,1,train +779,2,train +1175,2,train +4086,3,train +3824,3,train +3428,3,train +434,4,train +3986,1,train +992,2,train +1429,3,train +689,1,train +730,2,train +1126,2,train +3507,3,train +909,4,train +3641,3,train +3245,3,train +3903,3,train +251,4,train +1205,2,train +1642,3,train +3937,1,train +681,2,train +3458,3,train +3854,3,train +3895,4,train +4016,1,train +1418,2,train +3754,1,train +1156,2,train +760,2,train +894,2,train +677,4,train +2068,3,train +3967,1,train +1806,3,train +1107,2,train +890,4,train +3663,4,train +2102,1,train +1706,1,train +1885,3,train +1489,3,train +3784,1,train +1186,2,train +1227,3,train +3876,4,train +2181,1,train +2315,1,train +1919,1,train +2098,3,train +2139,4,train +1836,3,train +1178,3,train +3955,4,train +1870,1,train +2352,4,train +1653,3,train +1257,3,train +1391,3,train +2345,1,train +2386,2,train +2565,4,train +2083,1,train +2169,4,train +1866,3,train +1470,3,train +1907,4,train +1604,3,train +2465,2,train +1504,1,train +2516,4,train +1858,4,train +2678,2,train +80,3,train +2375,1,train +2812,2,train +2113,1,train +1717,1,train +2154,2,train +2595,4,train +2071,4,train +1675,4,train +114,1,train +2891,2,train +2629,2,train +72,4,train +2367,2,train +2284,4,train +1888,4,train +327,1,train +65,1,train +151,4,train +2446,2,train +3279,3,train +285,4,train +2580,2,train +2363,4,train +144,1,train +3492,3,train +2659,2,train +3096,3,train +2397,2,train +2834,3,train +3392,1,train +357,1,train +398,2,train +95,1,train +136,2,train +577,4,train +2872,2,train +2913,3,train +3047,3,train +2651,3,train +3309,3,train +53,4,train +3605,1,train +215,2,train +3343,1,train +349,2,train +3522,3,train +132,4,train +2823,2,train +2864,3,train +3260,3,train +3422,1,train +824,2,train +166,2,train +2943,3,train +3339,3,train +3776,4,train +3077,3,train +2815,3,train +4031,1,train +3635,1,train +3769,1,train +3373,1,train +775,2,train +3111,1,train +3593,4,train +117,2,train +3290,3,train +296,4,train +3028,3,train +34,4,train +3889,2,train +854,2,train +895,3,train +3586,1,train +592,2,train +196,2,train +633,3,train +3410,4,train +330,2,train +3544,4,train +3806,4,train +3940,4,train +1325,1,train +1108,3,train +3403,1,train +3840,2,train +409,2,train +846,3,train +3320,3,train +3361,4,train +3757,4,train +326,4,train +3919,2,train +1321,3,train +622,2,train +1059,3,train +3970,4,train +1617,1,train +1355,1,train +1534,3,train +3870,2,train +876,3,train +1313,4,train +4004,2,train +1010,3,train +614,3,train +3391,4,train +3787,4,train +1830,1,train +1568,1,train +1172,1,train +1788,4,train +910,1,train +1392,4,train +1922,4,train +1089,3,train +1526,4,train +3821,2,train +4000,4,train +3604,4,train +3738,4,train +1519,1,train +1123,1,train +3900,2,train +1302,3,train +1343,4,train +1081,4,train +3817,4,train +1598,1,train +1690,4,train +2248,2,train +1549,1,train +1986,2,train +1507,4,train +2065,2,train +1803,2,train +1586,4,train +2278,2,train +1882,2,train +2319,3,train +1579,1,train +1620,2,train +2057,3,train +2229,2,train +1967,2,train +2349,3,train +2046,2,train +1650,2,train +181,2,train +2958,3,train +2259,2,train +1863,2,train +2300,3,train +2038,3,train +2858,1,train +260,2,train +2992,1,train +2596,1,train +39,3,train +2513,3,train +2950,4,train +3467,1,train +3205,1,train +2809,1,train +252,3,train +3029,4,train +2726,3,train +2767,4,train +3163,4,train +548,1,train +3325,2,train +2626,1,train +465,3,train +2760,1,train +2846,4,train +3376,4,train +2543,3,train +761,1,train +544,3,train +3276,2,train +2839,1,train +3672,2,train +282,3,train +2577,1,train +20,3,train +2756,3,train +2797,4,train +2931,4,train +578,1,train +3751,2,train +3052,1,train +3489,2,train +932,4,train +3227,2,train +99,3,train +2790,1,train +233,3,train +3010,4,train +2748,4,train +1187,1,train +791,1,train +3964,2,train +529,1,train +3306,2,train +3702,2,train +708,3,train +3440,2,train +312,3,train +1145,4,train +3003,1,train +3044,2,train +2827,4,train +3223,4,train +1004,1,train +742,1,train +346,1,train +3956,3,train +962,4,train +3653,2,train +263,3,train +700,4,train +3436,4,train +3174,4,train +821,1,train +4035,3,train +955,1,train +738,3,train +779,4,train +1175,4,train +517,4,train +1034,1,train +1471,2,train +772,1,train +3986,3,train +376,1,train +1209,2,train +510,1,train +992,4,train +3287,2,train +1126,4,train +730,4,train +1684,2,train +1288,2,train +1422,2,train +589,1,train +3803,3,train +723,1,train +1205,4,train +3500,2,train +3937,3,train +547,4,train +681,4,train +1501,2,train +802,1,train +1239,2,train +4016,3,train +936,1,train +977,2,train +3754,3,train +1156,4,train +760,4,train +894,4,train +1714,2,train +1755,3,train +1452,2,train +1056,2,train +1190,2,train +794,2,train +3571,3,train +3967,3,train +2185,1,train +2102,3,train +1706,3,train +1665,2,train +1269,2,train +1007,2,train +3784,3,train +1186,4,train +3959,4,train +2398,1,train +2002,1,train +2181,3,train +1785,3,train +1919,3,train +1220,2,train +2215,1,train +1870,3,train +2428,1,train +2166,1,train +2386,4,train +2083,3,train +2641,1,train +2682,2,train +2379,1,train +1983,1,train +2465,4,train +2203,4,train +1504,3,train +2458,1,train +2062,1,train +2895,2,train +2678,4,train +2812,4,train +1934,1,train +2113,3,train +1717,3,train +2154,4,train +197,1,train +2974,2,train +3108,2,train +2712,2,train +114,3,train +2891,4,train +2013,1,train +2450,2,train +2147,1,train +2629,4,train +2367,4,train +1971,4,train +3187,2,train +148,1,train +3321,2,train +3059,2,train +65,3,train +2446,4,train +2580,4,train +623,1,train +227,1,train +361,1,train +3138,2,train +3179,3,train +144,3,train +2876,2,train +2659,4,train +2218,2,train +2397,4,train +44,1,train +178,1,train +3392,3,train +398,4,train +2693,2,train +136,4,train +2872,4,train +653,1,train +391,1,train +3605,3,train +3209,3,train +129,1,train +215,4,train +2510,2,train +3343,3,train +349,4,train +2644,2,train +1041,2,train +3422,3,train +342,1,train +824,4,train +2723,2,train +166,4,train +3718,1,train +1120,2,train +421,1,train +25,1,train +462,2,train +3635,3,train +2936,2,train +3373,3,train +3111,3,train +117,4,train +3931,1,train +937,2,train +4065,1,train +675,2,train +3407,1,train +3889,4,train +854,4,train +413,2,train +3586,3,train +592,4,train +196,4,train +330,4,train +1408,1,train +3882,1,train +3486,1,train +1325,3,train +492,2,train +626,2,train +3403,3,train +3840,4,train +230,2,train +409,4,train +4095,1,train +3699,1,train +1101,2,train +3919,4,train +839,2,train +3657,4,train +622,4,train +1834,1,train +1438,1,train +1617,3,train +3912,1,train +1355,3,train +959,3,train +656,2,train +3870,4,train +4004,4,train +2047,1,train +1830,3,train +1568,3,train +1172,3,train +1609,4,train +3904,2,train +869,2,train +910,3,train +3821,4,train +1864,1,train +1468,1,train +1602,1,train +989,3,train +1519,3,train +1123,3,train +3900,4,train +2118,2,train +1419,1,train +1598,3,train +1157,1,train +1639,4,train +1377,4,train +2331,2,train +1632,1,train +2248,4,train +1370,1,train +1549,3,train +1986,4,train +2107,1,train +1845,1,train +2065,4,train +1803,4,train +2757,2,train +1796,1,train +2278,4,train +1882,4,train +1620,4,train +2574,2,train +2178,2,train +2615,3,train +1875,1,train +1916,2,train +2312,2,train +51,2,train +2525,2,train +2129,2,train +2263,2,train +1867,2,train +2046,4,train +1650,4,train +89,1,train +3258,1,train +2645,3,train +2342,2,train +1946,2,train +1863,4,train +3471,1,train +2858,3,train +260,4,train +2992,3,train +2596,3,train +2334,3,train +3154,1,train +32,2,train +2809,3,train +3367,1,train +3105,1,train +3542,2,train +507,2,train +111,2,train +548,3,train +2843,1,train +245,2,train +3239,1,train +2626,3,train +3325,4,train +2760,3,train +3755,2,train +2922,1,train +761,3,train +3056,1,train +3672,4,train +2839,3,train +3276,4,train +2577,3,train +3531,1,train +3968,2,train +578,3,train +2873,1,train +3269,1,train +3310,2,train +316,3,train +3052,3,train +3489,4,train +3751,4,train +2790,3,train +2831,4,train +3227,4,train +874,1,train +791,3,train +529,3,train +3306,4,train +3702,4,train +3003,3,train +3440,4,train +3044,4,train +1087,1,train +3602,2,train +4039,3,train +1004,3,train +1045,4,train +2903,1,train +3299,1,train +742,3,train +346,3,train +3340,2,train +3736,2,train +1300,1,train +904,1,train +1434,1,train +1038,1,train +821,3,train +3553,2,train +3949,2,train +955,3,train +3291,2,train +1117,1,train +1251,1,train +855,1,train +1292,2,train +4028,2,train +1034,3,train +1075,4,train +1471,4,train +772,3,train +376,3,train +813,4,train +3504,2,train +510,3,train +3287,4,train +1209,4,train +1068,1,train +1505,2,train +1202,1,train +806,1,train +1288,4,train +1684,4,train +1422,4,train +589,3,train +3717,2,train +3583,2,train +723,3,train +3500,4,train +1718,2,train +885,1,train +1322,2,train +1501,4,train +3796,2,train +802,3,train +1239,4,train +843,4,train +977,4,train +1931,2,train +1098,1,train +1714,4,train +1232,1,train +4009,2,train +1452,4,train +1056,4,train +3788,3,train +1190,4,train +794,4,train +1748,2,train +2185,3,train +1486,2,train +1269,4,train +873,4,train +1007,4,train +2223,2,train +1961,2,train +2002,3,train +2398,3,train +1303,2,train +1220,4,train +2215,3,train +1516,2,train +2511,1,train +2249,1,train +1991,2,train +2428,3,train +2469,4,train +2166,3,train +1770,3,train +2682,4,train +2379,3,train +1983,3,train +2937,1,train +2541,1,train +2458,3,train +2062,3,train +2895,4,train +1800,3,train +1934,3,train +197,3,train +2888,1,train +2974,4,train +3108,4,train +2712,4,train +2013,3,train +2450,4,train +2147,3,train +2967,1,train +3008,2,train +2705,1,train +2309,1,train +2746,2,train +148,3,train +3187,4,train +2529,4,train +310,1,train +444,1,train +227,3,train +2522,1,train +2918,1,train +361,3,train +2656,1,train +2959,2,train +3138,4,train +2876,4,train +2218,4,train +261,1,train +3038,2,train +44,3,train +178,3,train +2693,4,train +736,1,train +3385,2,train +2989,2,train +3426,3,train +391,3,train +129,3,train +2510,4,train +2644,4,train +687,1,train +291,1,train +29,1,train +3202,2,train +2723,4,train +3935,1,train +1337,2,train +504,1,train +941,2,train +3718,3,train +638,1,train +242,1,train +1120,4,train +3019,2,train +421,3,train +25,3,train +462,4,train +3194,3,train +3415,2,train +2936,4,train +4014,1,train +1020,2,train +717,1,train +758,2,train +3931,3,train +937,4,train +59,1,train +4065,3,train +675,4,train +3407,3,train +413,4,train +3965,1,train +1367,2,train +971,2,train +1408,3,train +3703,1,train +668,1,train +709,2,train +3486,3,train +3882,3,train +492,4,train +3224,3,train +626,4,train +230,4,train +1184,2,train +788,2,train +485,1,train +3699,3,train +4095,3,train +839,4,train +1834,3,train +1438,3,train +698,1,train +1135,2,train +1176,3,train +3912,3,train +3953,4,train +656,4,train +2047,3,train +1214,2,train +3946,1,train +556,2,train +3904,4,train +1864,3,train +1468,3,train +1905,4,train +3763,1,train +1602,3,train +2294,1,train +2118,4,train +982,2,train +1419,3,train +1157,3,train +2331,4,train +1453,1,train +1935,4,train +1632,3,train +1236,3,train +1370,3,train +2324,1,train +1928,1,train +2365,2,train +1666,1,train +1845,3,train +2444,2,train +2141,1,train +2182,2,train +1483,1,train +1965,4,train +2657,2,train +2395,2,train +2092,1,train +1696,1,train +2178,4,train +2574,4,train +1875,3,train +1916,4,train +2312,4,train +1654,4,train +93,1,train +2870,2,train +2171,1,train +2212,2,train +2608,2,train +51,4,train +1909,1,train +2346,2,train +2129,4,train +1733,4,train +2263,4,train +1867,4,train +172,1,train +306,1,train +3258,3,train +2425,2,train +2122,1,train +2163,2,train +2342,4,train +1946,4,train +164,2,train +3471,3,train +2242,2,train +2376,2,train +3371,1,train +377,2,train +3154,3,train +74,1,train +2851,2,train +3329,4,train +2193,2,train +32,4,train +194,2,train +3367,3,train +3105,3,train +3542,4,train +111,4,train +2406,2,train +2843,3,train +245,4,train +3239,3,train +3797,1,train +803,2,train +407,2,train +104,1,train +145,2,train +541,2,train +2922,3,train +3755,4,train +2619,2,train +2660,3,train +3056,3,train +3614,1,train +620,2,train +224,2,train +3352,1,train +3748,1,train +358,2,train +3531,3,train +3968,4,train +3269,3,train +2873,3,train +3310,4,train +3431,1,train +833,2,train +874,3,train +175,2,train +612,3,train +2907,1,train +3303,1,train +4081,2,train +1087,3,train +3778,1,train +3819,2,train +3516,1,train +3602,4,train +522,2,train +3299,3,train +2903,3,train +3340,4,train +3736,4,train +1517,1,train +1121,1,train +1300,3,train +904,3,train +1038,3,train +3553,4,train +3291,4,train +1596,1,train +1117,3,train +1251,3,train +855,3,train +1292,4,train +3587,2,train +4028,4,train +3504,4,train +1809,1,train +1547,1,train +1285,1,train +889,1,train +1371,4,train +4062,2,train +1068,3,train +1505,4,train +3800,2,train +806,3,train +3583,4,train +3717,4,train +1364,1,train +1801,2,train +1102,1,train +3879,2,train +1718,4,train +885,3,train +1322,4,train +4013,2,train +3796,4,train +1880,2,train +1181,1,train +1618,2,train +1315,1,train +4092,2,train +1098,3,train +2093,2,train +1790,1,train +1831,2,train +2227,2,train +1569,2,train +1748,4,train +4084,3,train +1486,4,train +1090,4,train +2306,2,train +2044,2,train +1782,2,train +1169,4,train +1303,4,train +1861,2,train +1599,2,train +1516,4,train +2377,3,train +2511,3,train +2249,3,train +2807,1,train +2287,2,train +2025,2,train +1629,2,train +2066,3,train +3020,1,train +26,2,train +2937,3,train +2541,3,train +1842,2,train +3233,1,train +2575,1,train +2055,2,train +2096,3,train +2788,1,train +2967,3,train +3008,4,train +2705,3,train +2309,3,train +2746,4,train +527,1,train +3304,2,train +269,2,train +310,3,train +3438,2,train +444,3,train +48,3,train +2343,1,train +2739,1,train +2522,3,train +2126,3,train +2959,4,train +3651,2,train +2818,1,train +261,3,train +3038,4,train +2514,4,train +953,1,train +3730,2,train +736,3,train +3031,1,train +78,3,train +2769,1,train +2989,4,train +770,1,train +3547,2,train +508,1,train +3722,3,train +3244,1,train +3285,2,train +687,3,train +291,3,train +3023,2,train +3681,2,train +29,3,train +3202,4,train +2940,4,train +983,1,train +587,1,train +3498,2,train +3935,3,train +325,1,train +807,4,train +1337,4,train +504,3,train +941,4,train +3102,2,train +242,3,train +3019,4,train +3236,2,train +3632,2,train +1237,2,train +4014,3,train +934,1,train +1020,4,train +3752,3,train +717,3,train +758,4,train +59,3,train +1013,1,train +751,1,train +3965,3,train +489,1,train +971,4,train +3662,2,train +3703,3,train +709,4,train +1226,1,train +1401,2,train +568,1,train +3782,3,train +702,1,train +788,4,train +1184,4,train +3520,3,train +485,3,train +781,1,train +1135,4,train +1035,2,train +1472,3,train +1214,4,train +773,2,train +3550,3,train +3946,3,train +556,4,train +1248,2,train +3980,1,train +986,2,train +3763,3,train +1502,3,train +982,4,train +2590,1,train +1412,2,train +1453,3,train +2273,1,train +1928,3,train +1532,3,train +2365,4,train +2486,1,train +2224,1,train +2661,2,train +2444,4,train +2141,3,train +2182,4,train +1483,3,train +2437,1,train +2041,1,train +2874,2,train +2175,1,train +1779,1,train +2261,4,train +2657,4,train +2395,4,train +1696,3,train +3087,2,train +2254,1,train +2691,2,train +93,3,train +2388,1,train +2429,2,train +2870,4,train +2171,3,train +2212,4,train +2608,4,train +1909,3,train +2346,4,train +172,3,train +2904,2,train +2642,2,train +2425,4,train +2163,4,train +3117,2,train +2721,2,train +164,4,train +2242,4,train +2376,4,train +419,1,train +23,1,train +3371,3,train +2538,2,train +377,4,train +2672,2,train +3068,2,train +2193,4,train +632,1,train +236,1,train +673,2,train +370,1,train +194,4,train +2489,2,train +2885,2,train +2926,3,train +2623,2,train +2406,4,train +449,1,train +3618,1,train +3797,3,train +187,1,train +407,4,train +2702,2,train +3098,2,train +541,4,train +145,4,train +2836,2,train +2619,4,train +3697,1,train +3831,1,train +3435,1,train +3614,3,train +4,1,train +441,2,train +3218,3,train +138,1,train +224,4,train +620,4,train +2915,2,train +358,4,train +2956,3,train +3352,3,train +916,2,train +520,2,train +3648,1,train +4044,1,train +3431,3,train +3128,2,train +3606,4,train +175,4,train +2907,3,train +3303,3,train +3727,1,train +3861,1,train +430,1,train +471,2,train +908,3,train +4081,4,train +605,2,train +3819,4,train +2986,3,train +3516,3,train +4074,1,train +1517,3,train +1121,3,train +3416,1,train +3812,1,train +3636,4,train +3374,4,train +1417,1,train +1596,3,train +1200,3,train +897,2,train +635,2,train +3587,4,train +1809,3,train +1110,2,train +1547,3,train +1588,4,train +3883,2,train +889,3,train +4062,4,train +3800,4,train +1709,1,train +1843,1,train +1364,3,train +1801,4,train +4096,2,train +1102,3,train +3879,4,train +4013,4,train +2056,1,train +1398,1,train +1880,4,train +1181,3,train +1618,4,train +3913,2,train +1315,3,train +1356,4,train +4092,4,train +1873,1,train +1477,1,train +2093,4,train +1215,1,train +2227,4,train +1831,4,train +1569,4,train +2523,2,train +1824,1,train +2306,4,train +2044,4,train +1782,4,train +2340,2,train +1641,1,train +1775,1,train +1861,4,train +1599,4,train +2553,2,train +2291,2,train +1458,1,train +1895,2,train +1416,4,train +2370,2,train +2807,3,train +2108,2,train +1846,2,train +2025,4,train +1629,4,train +68,1,train +2841,1,train +2583,2,train +2624,3,train +3020,3,train +26,4,train +2321,2,train +2059,2,train +1842,4,train +3054,1,train +3233,3,train +2534,2,train +2575,3,train +2055,4,train +3133,1,train +139,2,train +2871,1,train +2351,2,train +2392,3,train +2788,3,train +352,2,train +3084,1,train +3480,1,train +90,2,train +527,3,train +2822,1,train +3304,4,train +3438,4,train +3042,4,train +2739,3,train +2343,3,train +3559,1,train +3297,1,train +2901,1,train +303,2,train +41,2,train +2818,3,train +2422,3,train +3651,4,train +3772,1,train +3510,1,train +3114,1,train +3551,2,train +953,3,train +3730,4,train +3031,3,train +2769,3,train +853,1,train +3327,1,train +770,3,train +3065,1,train +3547,4,train +508,3,train +3285,4,train +3681,4,train +3023,4,train +804,1,train +3581,2,train +3977,2,train +983,3,train +587,3,train +3278,1,train +284,2,train +325,3,train +3102,4,train +3498,4,train +3236,4,train +1279,1,train +1017,1,train +3794,2,train +1237,4,train +404,3,train +3095,1,train +934,3,train +3928,2,train +1096,1,train +834,1,train +4007,2,train +4048,3,train +1013,3,train +3308,1,train +3745,2,train +751,3,train +792,4,train +489,3,train +1047,1,train +785,1,train +3562,2,train +3958,2,train +1401,4,train +568,3,train +3696,2,train +702,3,train +1522,1,train +1697,2,train +4078,3,train +3379,2,train +781,3,train +822,4,train +1910,2,train +1077,1,train +1211,1,train +3988,2,train +3592,2,train +1035,4,train +3767,3,train +773,4,train +1989,2,train +1727,2,train +1331,2,train +1465,2,train +1248,4,train +3980,3,train +986,4,train +1940,2,train +1678,2,train +1282,2,train +2277,1,train +1757,2,train +1361,2,train +1495,2,train +2490,1,train +2273,3,train +1708,2,train +2569,1,train +2703,1,train +2486,3,train +2224,3,train +2661,4,train +2782,1,train +2520,1,train +2258,1,train +2437,3,train +2041,3,train +2478,4,train +2874,4,train +2175,3,train +1779,3,train +2733,1,train +2337,1,train +2471,1,train +3087,4,train +2254,3,train +2691,4,train +2388,3,train +2429,4,train +2684,1,train +2288,1,train +2725,2,train +2904,4,train +2026,1,train +2508,4,train +2642,4,train +2246,4,train +289,1,train +2763,1,train +3200,2,train +2501,1,train +2635,1,train +2239,1,train +2721,4,train +3117,4,train +636,1,train +3017,2,train +419,3,train +23,3,train +2755,2,train +3151,2,train +2538,4,train +2672,4,train +319,1,train +453,1,train +3230,2,train +3626,2,train +236,3,train +673,4,train +2968,2,train +370,3,train +3364,2,train +2706,2,train +2885,4,train +2489,4,train +2623,4,train +532,1,train +666,1,train +707,2,train +3484,3,train +449,3,train +8,1,train +2785,2,train +3618,3,train +187,3,train +2919,2,train +2702,4,train +920,2,train +3697,3,train +617,1,train +3831,3,train +2998,2,train +3435,3,train +4,3,train +441,4,train +3132,2,train +138,3,train +2915,4,train +3993,1,train +300,1,train +737,2,train +3514,3,train +434,1,train +38,1,train +520,4,train +916,4,train +3211,2,train +3648,3,train +1212,2,train +3727,3,train +251,1,train +3861,3,train +3902,4,train +471,4,train +605,4,train +1425,2,train +767,2,train +3895,1,train +901,2,train +3812,3,train +3416,3,train +1376,2,train +1417,3,train +677,1,train +718,2,train +1114,2,train +897,4,train +635,4,train +1713,1,train +1496,3,train +3791,1,train +1193,2,train +535,2,train +3663,1,train +3883,4,train +1709,3,train +1406,2,train +1843,3,train +1185,3,train +3876,1,train +3962,4,train +4096,4,train +2139,1,train +1743,1,train +3955,1,train +961,2,train +1398,3,train +3913,4,train +2352,1,train +1873,3,train +1477,3,train +1914,4,train +1174,2,train +1215,3,train +1652,4,train +2169,1,train +1907,1,train +2523,4,train +1824,3,train +2161,2,train +1858,1,train +1944,4,train +2340,4,train +1641,3,train +2770,2,train +2374,2,train +2071,1,train +1675,1,train +2553,4,train +2291,4,train +1458,3,train +1895,4,train +72,1,train +2191,2,train +1888,1,train +2370,4,train +2108,4,train +1712,4,train +1846,4,train +151,1,train +2800,2,train +2404,2,train +2841,3,train +2583,4,train +2321,4,train +2059,4,train +2617,2,train +3054,3,train +3133,3,train +53,1,train +139,4,train +2434,2,train +2871,3,train +2568,2,train +2172,2,train +2609,3,train +2351,4,train +435,2,train +132,1,train +173,2,train +569,2,train +352,4,train +3084,3,train +90,4,train +2822,3,train +3776,1,train +386,2,train +3559,3,train +124,2,train +2901,3,train +3297,3,train +303,4,train +2639,3,train +41,4,train +3593,1,train +3197,1,train +599,2,train +203,2,train +3114,3,train +3551,4,train +3806,1,train +3410,1,train +812,2,train +3544,1,train +853,3,train +550,2,train +154,2,train +591,3,train +2886,1,train +3327,3,train +3065,3,train +2669,3,train +4060,2,train +3757,1,train +3361,1,train +367,2,train +804,3,train +3581,4,train +3977,4,train +105,2,train +3278,3,train +1100,1,train +3877,2,train +1279,3,train +4011,2,train +3615,2,train +1017,3,train +184,2,train +621,3,train +3398,4,train +318,2,train +3095,3,train +3794,4,train +1313,1,train +4090,2,train +1096,3,train +3391,1,train +3787,1,train +3828,2,train +397,2,train +834,3,train +4007,4,train +531,2,train +3308,3,train +3745,4,train +1788,1,train +1392,1,train +1526,1,train +3907,2,train +868,1,train +1350,4,train +3604,1,train +1047,3,train +3645,2,train +785,3,train +389,3,train +3562,4,train +3696,4,train +1343,1,train +1081,1,train +1697,4,train +3992,2,train +3596,2,train +3379,4,train +1859,2,train +1160,1,train +898,1,train +3675,2,train +4071,2,train +1077,3,train +1118,4,train +3592,4,train +1507,1,train +1989,4,train +1727,4,train +1331,4,train +4022,2,train +1465,4,train +2285,2,train +1586,1,train +1678,4,train +1282,4,train +2236,2,train +2277,3,train +1974,2,train +1757,4,train +1361,4,train +1495,4,train +2053,2,train +2490,3,train +1791,2,train +1708,4,train +2569,3,train +2266,2,train +2703,3,train +2004,2,train +2045,3,train +5,2,train +2782,3,train +2520,3,train +2258,3,train +218,2,train +2950,1,train +2554,1,train +2733,3,train +2337,3,train +2034,2,train +2075,3,train +2471,3,train +1813,3,train +3029,1,train +35,2,train +2767,1,train +3163,1,train +2684,3,train +2288,3,train +2725,4,train +2026,3,train +2846,1,train +248,2,train +289,3,train +2584,1,train +3021,2,train +27,3,train +2763,3,train +3200,4,train +2501,3,train +2105,3,train +2239,3,train +3496,2,train +2797,1,train +3234,2,train +636,3,train +2931,1,train +3017,4,train +3151,4,train +2755,4,train +932,1,train +536,1,train +3709,2,train +319,3,train +3010,1,train +3051,2,train +16,2,train +57,3,train +453,3,train +2748,1,train +3230,4,train +2968,4,train +2706,4,train +615,1,train +1145,1,train +3922,2,train +532,3,train +2827,1,train +3223,1,train +666,3,train +707,4,train +3264,2,train +8,3,train +2785,4,train +2919,4,train +962,1,train +566,1,train +1003,2,train +700,1,train +304,1,train +786,4,train +3477,2,train +920,4,train +87,3,train +3215,2,train +2998,4,train +2602,4,train +3132,4,train +1175,1,train +779,1,train +3993,3,train +517,1,train +300,3,train +737,4,train +3428,2,train +434,3,train +38,3,train +3211,4,train +992,1,train +1429,2,train +730,1,train +1212,4,train +3507,2,train +3245,2,train +251,3,train +1205,1,train +1246,2,train +1642,2,train +3978,1,train +1425,4,train +547,1,train +681,1,train +767,4,train +3458,2,train +3499,3,train +901,4,train +3895,3,train +760,1,train +1114,4,train +718,4,train +1713,3,train +1014,2,train +3791,3,train +1193,4,train +752,2,train +535,4,train +3663,3,train +1489,2,train +1227,2,train +3959,1,train +965,2,train +3876,3,train +2139,3,train +1743,3,train +4038,1,train +1481,3,train +1178,2,train +3955,3,train +961,4,train +2352,3,train +1257,2,train +1391,2,train +2252,1,train +2386,1,train +1990,1,train +2169,3,train +1470,2,train +1907,3,train +2465,1,train +2203,1,train +2161,4,train +1858,3,train +2678,1,train +2020,1,train +2154,1,train +2240,4,train +2374,4,train +1675,3,train +2629,1,train +2670,2,train +72,3,train +2367,1,train +1971,1,train +2191,4,train +1888,3,train +151,3,train +2446,1,train +2487,2,train +2404,4,train +2962,2,train +2659,1,train +2700,2,train +3096,2,train +3137,3,train +2397,1,train +2438,2,train +2834,2,train +2617,4,train +398,1,train +136,1,train +222,4,train +2517,2,train +2913,2,train +3047,2,train +2651,2,train +2434,4,train +2568,4,train +2172,4,train +215,1,train +349,1,train +435,4,train +2730,2,train +132,3,train +173,4,train +569,4,train +2468,2,train +2864,2,train +469,2,train +166,1,train +2943,2,train +3776,3,train +386,4,train +3077,2,train +124,4,train +2815,2,train +682,2,train +3593,3,train +3197,3,train +117,1,train +203,4,train +599,4,train +3889,1,train +895,2,train +499,2,train +196,1,train +633,2,train +3410,3,train +3806,3,train +3544,3,train +550,4,train +154,4,train +2886,3,train +1108,2,train +712,2,train +3444,1,train +3840,1,train +409,1,train +4060,4,train +846,2,train +3664,4,train +188,2,train +2965,3,train +3361,3,train +367,4,train +105,4,train +3919,1,train +3657,1,train +1100,3,train +3877,4,train +401,2,train +3615,4,train +4011,4,train +184,4,train +318,4,train +1396,1,train +3870,1,train +3474,1,train +876,2,train +480,2,train +917,3,train +1313,3,train +614,2,train +3212,1,train +3391,3,train +3828,4,train +397,4,train +4090,4,train +1609,1,train +1788,3,train +1392,3,train +1526,3,train +3821,1,train +3907,4,train +868,3,train +3604,3,train +3645,4,train +3383,4,train +1164,1,train +3900,1,train +1343,3,train +947,3,train +4075,2,train +1081,3,train +3992,4,train +3596,4,train +1639,1,train +1377,1,train +1859,4,train +1160,3,train +898,3,train +3675,4,train +4071,4,train +1676,4,train +4022,4,train +2065,1,train +1803,1,train +1844,2,train +2285,4,train +1586,3,train +1882,1,train +1923,2,train +2319,2,train +1620,1,train +1224,1,train +2057,2,train +1974,4,train +2136,2,train +2053,4,train +1791,4,train +1395,4,train +2349,2,train +1953,2,train +1650,1,train +1825,2,train +2004,4,train +5,4,train +1863,1,train +1904,2,train +2300,2,train +2341,3,train +2038,2,train +39,2,train +2513,2,train +2554,3,train +2950,3,train +2034,4,train +118,2,train +252,2,train +3029,3,train +35,4,train +2767,3,train +2371,3,train +3325,1,train +465,2,train +2846,3,train +2584,3,train +3021,4,train +3142,1,train +544,2,train +3276,1,train +2880,1,train +282,2,train +323,3,train +3496,4,train +20,2,train +2797,3,train +2401,3,train +3234,4,train +3489,1,train +3530,2,train +932,3,train +99,2,train +536,3,train +2831,1,train +233,2,train +3010,3,train +3051,4,train +3227,1,train +16,4,train +2748,3,train +3709,4,train +615,3,train +2910,1,train +3306,1,train +312,2,train +353,3,train +2648,1,train +3044,1,train +3743,2,train +2827,3,train +3264,4,train +1045,1,train +3822,2,train +3956,2,train +962,3,train +566,3,train +1003,4,train +263,2,train +304,3,train +700,3,train +3477,4,train +3215,4,train +2819,4,train +4035,2,train +779,3,train +3511,2,train +517,3,train +3428,4,train +1471,1,train +1075,1,train +1209,1,train +813,1,train +4027,3,train +3986,2,train +992,3,train +1429,4,train +3287,1,train +3328,2,train +730,3,train +771,4,train +3507,4,train +3245,4,train +1288,1,train +3803,2,train +1642,4,train +1246,4,train +3937,2,train +3978,3,train +547,3,train +681,3,train +3458,4,train +1501,1,train +1542,2,train +1239,1,train +843,1,train +4016,2,train +977,1,train +1459,4,train +3358,2,train +3754,2,train +760,3,train +3795,3,train +1755,2,train +1359,2,train +1056,1,train +660,1,train +1493,2,train +1190,1,train +794,1,train +3571,2,train +3967,2,train +1014,4,train +752,4,train +1572,2,train +1269,1,train +873,1,train +1706,2,train +1007,1,train +1489,4,train +3784,2,train +1227,4,train +3959,3,train +965,4,train +1785,2,train +1919,2,train +4038,3,train +1178,4,train +2256,1,train +2039,3,train +1340,2,train +1777,3,train +1257,4,train +2469,1,train +2252,3,train +2386,3,train +1990,3,train +1470,4,train +2682,1,train +2286,1,train +2465,3,train +2203,3,train +1807,3,train +1504,2,train +2895,1,train +2678,3,train +2237,1,train +2020,3,train +1717,2,train +2154,3,train +2974,1,train +2712,1,train +2316,1,train +2450,1,train +2670,4,train +1971,3,train +2529,1,train +2966,2,train +2267,1,train +2446,3,train +2487,4,train +2225,4,train +268,1,train +3045,2,train +3179,2,train +2962,4,train +2084,1,train +3096,4,train +2218,1,train +2700,4,train +2834,4,train +2438,4,train +219,1,train +2996,2,train +3392,2,train +398,3,train +2693,1,train +136,3,train +2913,4,train +2517,4,train +2651,4,train +2255,4,train +3209,2,train +215,3,train +2510,1,train +2947,2,train +3343,2,train +2644,1,train +2730,4,train +2864,4,train +2468,4,train +3422,2,train +3026,2,train +469,4,train +2723,1,train +166,3,train +2943,4,train +2502,2,train +462,1,train +682,4,train +3373,2,train +3111,2,train +2715,2,train +117,3,train +937,1,train +978,2,train +675,1,train +3889,3,train +3493,3,train +413,1,train +17,1,train +499,4,train +895,4,train +196,3,train +237,4,train +633,4,train +2794,2,train +1325,2,train +492,1,train +626,1,train +230,1,train +712,4,train +3403,2,train +846,4,train +3444,3,train +3840,3,train +188,4,train +4002,1,train +1008,2,train +746,2,train +3919,3,train +3657,3,train +401,4,train +3953,1,train +1355,2,train +959,2,train +1396,3,train +3691,1,train +3870,3,train +3474,3,train +3911,4,train +876,4,train +480,4,train +3212,3,train +614,4,train +1475,3,train +1172,2,train +1213,3,train +1609,3,train +3904,1,train +910,2,train +514,2,train +3821,3,train +1905,1,train +989,2,train +3721,1,train +1123,2,train +1164,3,train +3900,3,train +4075,4,train +2118,1,train +1722,1,train +1639,3,train +1377,3,train +2331,1,train +1935,1,train +1893,4,train +1752,1,train +1972,4,train +1803,3,train +1844,4,train +1965,1,train +1703,1,train +1882,3,train +1441,1,train +1923,4,train +2319,4,train +1620,3,train +1224,3,train +1661,4,train +2057,4,train +2178,1,train +2615,2,train +1916,1,train +1520,1,train +2353,2,train +1654,1,train +2136,4,train +51,1,train +2432,2,train +2129,1,train +1733,1,train +2170,2,train +1867,1,train +1953,4,train +2349,4,train +1650,3,train +1691,4,train +1825,4,train +2645,2,train +1946,1,train +2300,4,train +1904,4,train +2038,4,train +2858,2,train +2596,2,train +39,4,train +2334,2,train +1721,4,train +3329,1,train +335,2,train +32,1,train +118,4,train +2413,2,train +2809,2,train +252,4,train +2151,2,train +3542,1,train +111,1,train +152,2,train +548,2,train +2929,3,train +3325,3,train +2626,2,train +3755,1,train +761,2,train +3142,3,train +544,4,train +2839,2,train +2880,3,train +3276,3,train +282,4,train +2577,2,train +3317,4,train +20,4,train +3176,1,train +578,2,train +182,2,train +3310,1,train +316,2,train +3530,4,train +2697,3,train +99,4,train +2831,3,train +3227,3,train +791,2,train +395,2,train +3127,1,train +529,2,train +133,2,train +2910,3,train +3306,3,train +312,4,train +3044,3,train +2648,3,train +3085,4,train +3743,4,train +1349,3,train +3602,1,train +4039,2,train +1045,3,train +649,3,train +3340,1,train +3822,4,train +346,2,train +3956,4,train +821,2,train +4035,4,train +3553,1,train +3594,2,train +3291,1,train +3377,4,train +3511,4,train +1292,1,train +1075,3,train +679,3,train +1209,3,train +376,2,train +813,3,train +3504,1,train +3986,4,train +3287,3,train +3328,4,train +1371,1,train +1505,1,train +1109,1,train +3886,2,train +1288,3,train +1329,4,train +3583,1,train +589,2,train +3803,4,train +368,3,train +3145,4,train +1188,1,train +1322,1,train +1542,4,train +3837,2,train +1239,3,train +843,3,train +3575,2,train +4016,4,train +977,3,train +3754,4,train +3358,4,train +1576,2,train +1755,4,train +877,1,train +1359,4,train +1056,3,train +660,3,train +1493,4,train +3788,2,train +794,3,train +3571,4,train +2185,2,train +1789,2,train +1486,1,train +1090,1,train +1572,4,train +3867,2,train +1706,4,train +873,3,train +1007,3,train +3784,4,train +1868,2,train +2002,2,train +1169,1,train +1303,1,train +1785,4,train +1127,4,train +2215,2,train +1819,2,train +2256,3,train +1516,1,train +1557,2,train +1340,4,train +2469,3,train +1636,2,train +1770,2,train +1374,2,train +2682,3,train +1849,2,train +2286,3,train +1983,2,train +1587,2,train +1504,4,train +2062,2,train +1800,2,train +2237,3,train +1934,2,train +197,2,train +2974,3,train +2533,1,train +2712,3,train +2316,3,train +2753,4,train +2013,2,train +2450,3,train +3008,1,train +2746,1,train +2529,3,train +2133,3,train +2966,4,train +2267,3,train +227,2,train +268,3,train +2563,1,train +2959,1,train +3045,4,train +6,3,train +2301,1,train +3179,4,train +2084,3,train +2218,3,train +3038,1,train +44,2,train +85,3,train +219,3,train +2514,1,train +2996,4,train +3392,4,train +2693,3,train +515,1,train +3292,2,train +2989,1,train +2593,1,train +3030,2,train +3426,2,train +3209,4,train +2510,3,train +2947,4,train +594,1,train +3243,2,train +3422,4,train +3026,4,train +2723,3,train +2502,4,train +807,1,train +941,1,train +545,1,train +3718,2,train +765,4,train +3019,1,train +3060,2,train +25,2,train +462,3,train +503,4,train +3194,2,train +2581,4,train +3111,4,train +2715,4,train +1020,1,train +758,1,train +1195,2,train +3931,2,train +978,4,train +3273,2,train +675,3,train +3407,2,train +413,3,train +17,3,train +2794,4,train +971,1,train +1408,2,train +3789,3,train +709,1,train +313,1,train +3486,2,train +492,3,train +533,4,train +3224,2,train +230,3,train +788,1,train +4002,3,train +1008,4,train +3699,2,train +746,4,train +3478,3,train +1438,2,train +1176,2,train +3953,3,train +959,4,train +563,4,train +3691,3,train +1255,2,train +3987,1,train +556,1,train +993,2,train +1172,4,train +3904,3,train +910,4,train +514,4,train +1468,2,train +1905,3,train +810,2,train +989,4,train +3721,3,train +2118,3,train +1722,3,train +4017,1,train +982,1,train +1023,2,train +1419,2,train +1460,3,train +1157,2,train +2018,1,train +1935,3,train +1236,2,train +1370,2,train +2365,1,train +1969,1,train +1752,3,train +2189,4,train +4047,1,train +1490,3,train +1228,3,train +2444,1,train +2048,1,train +2182,1,train +1965,3,train +1703,3,train +1441,3,train +2657,1,train +2261,1,train +2395,1,train +1999,1,train +2178,3,train +2219,4,train +2615,4,train +1916,3,train +1520,3,train +2353,4,train +1654,3,train +2608,1,train +2212,1,train +51,3,train +2346,1,train +2432,4,train +2129,3,train +1733,3,train +2170,4,train +1867,3,train +2728,2,train +2425,1,train +2029,1,train +2466,2,train +2163,1,train +1767,1,train +2645,4,train +1946,3,train +1987,4,train +164,1,train +2242,1,train +2679,2,train +2376,1,train +2858,4,train +2596,4,train +2334,4,train +377,1,train +3154,2,train +3329,3,train +2496,2,train +335,4,train +2193,1,train +2413,4,train +2151,4,train +194,1,train +3367,2,train +3542,3,train +3105,2,train +2709,2,train +111,3,train +152,4,train +548,4,train +2406,1,train +2447,2,train +2626,4,train +2843,2,train +407,1,train +3225,3,train +145,1,train +2922,2,train +3755,3,train +2660,2,train +2577,4,train +3655,1,train +224,1,train +661,2,train +358,1,train +3176,3,train +578,4,train +182,4,train +2873,2,train +3310,3,train +316,4,train +874,2,train +478,2,train +3606,1,train +612,2,train +175,1,train +395,4,train +3127,3,train +529,4,train +133,4,train +4081,1,train +1087,2,train +3819,1,train +3602,3,train +4039,4,train +167,2,train +2903,2,train +3340,3,train +346,4,train +904,2,train +3636,1,train +246,2,train +3374,1,train +380,2,train +3553,3,train +3594,4,train +3291,3,train +1375,1,train +1117,2,train +3890,2,train +855,2,train +896,3,train +1292,3,train +3587,1,train +376,4,train +1454,1,train +1588,1,train +1371,3,train +4062,1,train +1505,3,train +1109,3,train +3800,1,train +3886,4,train +806,2,train +3583,3,train +1801,1,train +1188,3,train +3879,1,train +3920,2,train +885,2,train +926,3,train +1322,3,train +664,3,train +3837,4,train +3575,4,train +1880,1,train +1484,1,train +1618,1,train +1356,1,train +4092,1,train +1576,4,train +3871,2,train +877,3,train +3788,4,train +2093,1,train +1831,1,train +1435,1,train +1872,2,train +1569,1,train +1655,4,train +1789,4,train +4084,2,train +1090,3,train +3867,4,train +2044,1,train +2085,2,train +1782,1,train +1868,4,train +2002,4,train +1169,3,train +3901,2,train +1303,3,train +1344,4,train +2164,2,train +1861,1,train +1599,1,train +1203,1,train +1819,4,train +1557,4,train +2377,2,train +2511,2,train +2249,2,train +1416,1,train +1636,4,train +1770,4,train +1374,4,train +1629,1,train +2066,2,train +1849,4,train +1983,4,train +1587,4,train +26,1,train +2541,2,train +2145,2,train +1842,1,train +1883,2,train +2062,4,train +1800,4,train +2096,2,train +2533,3,train +2013,4,train +3091,1,train +2829,1,train +3008,3,train +2309,2,train +2746,3,train +3304,1,train +310,2,train +3042,1,train +3438,1,train +48,2,train +2959,3,train +2126,2,train +2563,3,train +2301,3,train +3121,1,train +127,2,train +261,2,train +302,3,train +3038,3,train +3079,4,train +44,4,train +2380,3,train +2514,3,train +78,2,train +515,3,train +3292,4,train +2989,3,train +2593,3,train +3030,4,train +3426,4,train +811,1,train +3547,1,train +594,3,train +3285,1,train +3722,2,train +291,2,train +332,3,train +3023,1,train +29,2,train +3243,4,train +3801,2,train +807,3,train +3539,2,train +3102,1,train +3498,1,train +3718,4,train +941,3,train +545,3,train +242,2,train +3019,3,train +3060,4,train +3236,1,train +3194,4,train +1237,1,train +4014,2,train +1020,3,train +3752,2,train +758,3,train +1195,4,train +59,2,train +3273,4,train +3407,4,train +792,1,train +4006,3,train +3569,2,train +3965,2,train +971,3,train +1408,4,train +3307,2,train +709,3,train +313,3,train +3486,4,train +3703,2,train +3224,4,train +1091,4,train +3386,2,train +3782,2,train +788,3,train +3520,2,train +130,3,train +1521,2,train +822,1,train +4036,3,train +1438,4,train +560,1,train +3337,2,train +3774,3,train +1176,4,train +780,4,train +1338,2,train +1035,1,train +1472,2,train +773,1,train +859,4,train +1255,4,train +3550,2,train +556,3,train +993,4,train +3946,2,train +3987,3,train +1551,2,train +1248,1,train +1289,2,train +986,1,train +1468,4,train +3763,2,train +3804,3,train +810,4,train +1368,2,train +1502,2,train +4017,3,train +1419,4,train +1023,4,train +1157,4,train +2018,3,train +4051,1,train +1453,2,train +1057,2,train +1236,4,train +2365,3,train +1532,2,train +1969,3,train +1270,2,train +4047,3,train +2661,1,train +2265,1,train +2444,3,train +2048,3,train +2182,3,train +1349,2,train +1786,3,train +1483,2,train +2874,1,train +2478,1,train +2657,3,train +2261,3,train +2395,3,train +1999,3,train +1696,2,train +2691,1,train +2295,1,train +2429,1,train +2033,1,train +2515,4,train +2212,3,train +2904,1,train +2508,1,train +2945,2,train +2642,1,train +2246,1,train +2728,4,train +2425,3,train +2029,3,train +2466,4,train +2163,3,train +1767,3,train +2721,1,train +2325,1,train +164,3,train +2063,1,train +2242,3,train +2679,4,train +3371,2,train +2538,1,train +377,3,train +2672,1,train +3154,4,train +2496,4,train +2193,3,train +673,1,train +277,1,train +194,3,train +2489,1,train +2926,2,train +2709,4,train +2843,4,train +2447,4,train +3005,2,train +407,3,train +2702,1,train +145,3,train +2922,4,train +2481,2,train +2660,4,train +2264,4,train +307,1,train +744,2,train +441,1,train +45,1,train +3218,2,train +3655,3,train +224,3,train +661,4,train +2956,2,train +3352,2,train +2694,2,train +2873,4,train +916,1,train +520,1,train +957,2,train +3431,2,train +874,4,train +478,4,train +2773,2,train +3606,3,train +175,3,train +612,4,train +2907,2,train +3902,1,train +4081,3,train +471,1,train +908,2,train +3819,3,train +2986,2,train +167,4,train +2903,4,train +3981,1,train +1121,2,train +904,4,train +3636,3,train +3240,3,train +246,4,train +3374,3,train +380,4,train +1200,2,train +1375,3,train +3670,1,train +676,2,train +3890,4,train +855,4,train +3587,3,train +1454,3,train +3749,1,train +1588,3,train +3883,1,train +3487,1,train +889,2,train +3962,1,train +1801,3,train +4096,1,train +1102,2,train +706,2,train +3879,3,train +3920,4,train +885,4,train +1701,1,train +1880,3,train +1484,3,train +1181,2,train +1618,3,train +3913,1,train +1356,3,train +3871,4,train +1914,1,train +2093,3,train +1652,1,train +1831,3,train +1435,3,train +1872,4,train +1569,3,train +4084,4,train +3688,4,train +1731,1,train +1951,4,train +2085,4,train +3901,4,train +2340,1,train +1944,1,train +2164,4,train +1861,3,train +1420,1,train +1599,3,train +1203,3,train +1640,4,train +1895,1,train +2377,4,train +2511,4,train +2249,4,train +1416,3,train +2370,1,train +2807,2,train +2108,1,train +1712,1,train +2149,2,train +1846,1,train +1629,3,train +1670,4,train +2066,4,train +2624,2,train +2059,1,train +2145,4,train +1883,4,train +2441,2,train +2878,3,train +2575,2,train +2179,2,train +2616,3,train +2096,4,train +1700,4,train +139,1,train +3091,3,train +2788,2,train +2392,2,train +2829,3,train +2309,4,train +352,1,train +90,1,train +131,2,train +527,2,train +3304,3,train +310,4,train +3042,3,train +2646,3,train +48,4,train +2343,2,train +2126,4,train +3121,3,train +127,4,train +2422,2,train +2818,2,train +261,4,train +3417,1,train +3551,1,train +2676,3,train +78,4,train +770,2,train +811,3,train +3547,3,train +508,2,train +3285,3,train +3326,4,train +3722,4,train +291,4,train +3023,3,train +29,4,train +3581,1,train +587,2,train +3801,4,train +3405,4,train +325,2,train +3102,3,train +3539,4,train +3935,4,train +3794,1,train +3398,1,train +1237,3,train +404,2,train +4014,4,train +142,2,train +3752,4,train +59,4,train +4048,2,train +658,3,train +2953,1,train +792,3,train +3569,4,train +3965,4,train +3703,4,train +3307,4,train +1350,1,train +1088,1,train +3865,2,train +3562,1,train +568,2,train +3782,4,train +3386,4,train +3520,4,train +3124,4,train +1167,1,train +4078,2,train +1521,4,train +3379,1,train +3816,2,train +822,3,train +3554,2,train +560,3,train +3337,4,train +1118,1,train +1555,2,train +856,1,train +1338,4,train +3592,1,train +1035,3,train +1472,4,train +3633,2,train +3767,2,train +773,3,train +3550,4,train +1331,1,train +935,1,train +1768,2,train +1465,1,train +1551,4,train +3846,2,train +1289,4,train +3980,2,train +986,3,train +3763,4,train +1847,2,train +1282,1,train +1368,4,train +1502,4,train +1361,1,train +1798,2,train +1495,1,train +4051,3,train +1453,4,train +1057,4,train +2273,2,train +1353,2,train +1532,4,train +1270,4,train +2224,2,train +2265,3,train +2661,3,train +1349,4,train +1483,4,train +2561,1,train +2344,3,train +2041,2,train +2478,3,train +1779,2,train +2254,2,train +2295,3,train +2691,3,train +2429,3,train +2033,3,train +2853,1,train +2591,1,train +2725,1,train +2508,3,train +2112,3,train +2945,4,train +2642,3,train +2246,3,train +3200,1,train +2542,1,train +2721,3,train +2325,3,train +2063,3,train +3017,1,train +2621,1,train +23,2,train +64,3,train +2755,1,train +3371,4,train +2538,3,train +2672,3,train +3230,1,train +3271,2,train +236,2,train +277,3,train +673,3,train +2572,1,train +2968,1,train +2706,1,train +3009,2,train +2489,3,train +2926,4,train +707,1,train +3484,2,train +3618,2,train +2785,1,train +3222,2,train +2919,1,train +3005,4,train +2481,4,train +786,1,train +920,1,train +3697,2,train +3301,2,train +307,3,train +744,4,train +2602,1,train +4,2,train +45,3,train +441,3,train +482,4,train +2998,1,train +2956,4,train +3039,2,train +3218,4,train +2694,4,train +737,1,train +341,1,train +3514,2,train +520,3,train +957,4,train +3648,2,train +3431,4,train +2990,2,train +2773,4,train +2907,4,train +1212,1,train +991,2,train +3727,2,train +3768,3,train +292,1,train +3902,3,train +471,3,train +512,4,train +908,4,train +2986,4,train +767,1,train +371,1,train +3981,3,train +901,1,train +3282,2,train +1121,4,train +3416,2,train +4015,1,train +1417,2,train +718,1,train +1200,4,train +3670,3,train +676,4,train +1496,2,train +535,1,train +3749,3,train +3883,3,train +3487,3,train +889,4,train +1709,2,train +4045,1,train +1051,2,train +1185,2,train +3962,3,train +3566,3,train +4096,3,train +706,4,train +1701,3,train +1398,2,train +1181,4,train +3913,3,train +3954,4,train +1477,2,train +1914,3,train +1215,2,train +1652,3,train +3743,3,train +1731,3,train +4026,1,train +1032,2,train +2027,1,train +2161,1,train +1944,3,train +1420,3,train +2240,1,train +2374,1,train +1978,1,train +1716,1,train +2198,4,train +1458,2,train +1895,3,train +1936,4,train +2191,1,train +2807,4,train +2108,3,train +1712,3,train +2149,4,train +1846,3,train +2404,1,train +2841,2,train +2624,4,train +1966,4,train +3054,2,train +2441,4,train +2575,4,train +2179,4,train +222,1,train +3133,2,train +2737,2,train +139,3,train +2434,1,train +2871,2,train +2172,1,train +2609,2,train +2392,4,train +435,1,train +173,1,train +3084,2,train +2688,2,train +527,4,train +131,4,train +2426,2,train +2822,2,train +2343,4,train +386,1,train +124,1,train +2901,2,train +2639,2,train +2243,2,train +2422,4,train +203,1,train +3417,3,train +3114,2,train +3551,3,train +2456,2,train +2893,3,train +719,2,train +3451,1,train +853,2,train +457,2,train +154,1,train +591,2,train +2669,2,train +4060,1,train +3664,1,train +670,2,train +367,1,train +804,2,train +3581,3,train +105,1,train +587,4,train +325,4,train +3877,1,train +3481,1,train +4011,1,train +3615,1,train +184,1,train +621,2,train +3398,3,train +404,4,train +142,4,train +4090,1,train +1096,2,train +3828,1,train +3432,1,train +3869,2,train +397,1,train +4048,4,train +438,2,train +834,2,train +176,2,train +2953,3,train +3907,1,train +1350,3,train +3645,1,train +1088,3,train +3383,1,train +3865,4,train +785,2,train +389,2,train +3562,3,train +1167,3,train +468,2,train +3596,1,train +3682,4,train +4078,4,train +643,3,train +3379,3,train +3420,4,train +3816,4,train +3554,4,train +1859,1,train +3675,1,train +1118,3,train +1555,4,train +856,3,train +3592,3,train +3633,4,train +3767,4,train +1676,1,train +1414,1,train +1851,2,train +1152,1,train +1331,3,train +935,3,train +1768,4,train +3846,4,train +3450,4,train +3980,4,train +1847,4,train +1282,3,train +2143,2,train +2277,2,train +1881,2,train +1182,1,train +1361,3,train +1798,4,train +2490,2,train +2094,2,train +1791,1,train +1395,1,train +1832,2,train +2273,4,train +1353,4,train +2569,2,train +2045,2,train +1432,4,train +2520,2,train +2124,2,train +2561,3,train +2258,2,train +1862,2,train +2041,4,train +1779,4,train +2640,3,train +2337,2,train +2075,2,train +1679,2,train +1813,2,train +2853,3,train +2591,3,train +2288,2,train +1892,2,train +2725,3,train +2026,2,train +2887,1,train +289,2,train +3021,1,train +27,2,train +2105,2,train +2542,3,train +2239,2,train +3496,1,train +106,2,train +3234,1,train +3017,3,train +2621,3,train +3058,4,train +23,4,train +2755,3,train +2359,3,train +2097,3,train +2917,1,train +319,2,train +3051,1,train +57,2,train +3271,4,train +2968,3,train +2572,3,train +3009,4,train +2706,3,train +3567,2,train +532,2,train +3264,1,train +3305,2,train +707,3,train +311,3,train +2606,1,train +3088,4,train +8,2,train +2785,3,train +3222,4,train +3484,4,train +1003,1,train +3780,2,train +786,3,train +3518,2,train +3477,1,train +920,3,train +87,2,train +2819,1,train +3215,1,train +3301,4,train +2998,3,train +2602,3,train +3039,4,train +3435,4,train +3697,4,train +820,1,train +3993,2,train +3335,2,train +300,2,train +341,3,train +737,3,train +3514,4,train +38,2,train +2856,4,train +2990,4,train +1429,1,train +771,1,train +3548,2,train +991,4,train +3245,1,train +3727,4,train +292,3,train +1246,1,train +4064,3,train +588,1,train +1070,4,train +767,3,train +371,3,train +3499,2,train +3282,4,train +3416,4,train +4015,3,train +1417,4,train +3753,3,train +718,3,train +1713,2,train +1014,1,train +618,1,train +1496,4,train +3791,2,train +752,1,train +535,3,train +3663,2,train +1227,1,train +1709,4,train +4045,3,train +965,1,train +1051,4,train +3783,3,train +1185,4,train +1743,2,train +1481,2,train +1398,4,train +1560,2,train +1257,1,train +1298,2,train +1735,3,train +4030,1,train +1477,4,train +3813,3,train +1215,4,train +1115,2,train +1249,2,train +4026,3,train +1032,4,train +2027,3,train +2161,3,train +1765,3,train +2240,3,train +2374,3,train +1978,3,train +1675,2,train +1716,3,train +2670,1,train +2494,4,train +2191,3,train +1533,3,train +2487,1,train +2924,2,train +2225,1,train +2404,3,train +2841,4,train +2962,1,train +2700,1,train +2304,1,train +2741,2,train +3137,2,train +2438,1,train +2042,1,train +222,3,train +2517,1,train +2913,1,train +2954,2,train +2651,1,train +2255,1,train +2737,4,train +3133,4,train +2434,3,train +2871,4,train +2172,3,train +2213,4,train +2609,4,train +3033,2,train +435,3,train +2730,1,train +173,3,train +2468,1,train +2688,4,train +2292,4,train +2822,4,train +2426,4,train +469,1,train +3421,3,train +386,3,train +2722,2,train +124,3,train +2901,4,train +2639,4,train +2243,4,train +682,1,train +286,1,train +24,1,train +2801,2,train +3197,2,train +203,3,train +244,4,train +2456,4,train +895,1,train +499,1,train +633,1,train +237,1,train +3451,3,train +719,4,train +3410,2,train +457,4,train +853,4,train +3189,3,train +154,3,train +591,4,train +2886,2,train +2669,4,train +712,1,train +753,2,train +4060,3,train +54,1,train +3664,3,train +188,1,train +670,4,train +2965,2,train +804,4,train +3960,1,train +966,2,train +1100,2,train +3877,3,train +3481,3,train +401,1,train +3615,3,train +184,3,train +621,4,train +3911,1,train +480,1,train +917,2,train +4090,3,train +655,2,train +3432,3,train +3828,3,train +834,4,train +438,4,train +3869,4,train +176,4,train +3990,1,train +1392,2,train +3728,1,train +3907,3,train +3466,1,train +3948,4,train +868,2,train +3645,3,train +3383,3,train +389,4,train +947,2,train +4075,1,train +1081,2,train +468,4,train +3596,3,train +1680,1,train +1859,3,train +3758,1,train +1160,2,train +1201,3,train +898,2,train +3675,3,train +1893,1,train +1676,3,train +1414,3,train +1851,4,train +1152,3,train +3667,4,train +1972,1,train +1710,1,train +1844,1,train +1231,3,train +969,3,train +2319,1,train +1923,1,train +2057,1,train +1661,1,train +2143,4,train +2277,4,train +1881,4,train +1182,3,train +2136,1,train +1478,1,train +2094,4,train +1395,3,train +1832,4,train +2349,1,train +1953,1,train +2390,2,train +2569,4,train +1691,1,train +2128,2,train +1825,1,train +2045,4,train +1904,1,train +2341,2,train +2124,4,train +2258,4,train +1862,4,train +39,1,train +2420,2,train +2554,2,train +1721,1,train +2158,2,train +2337,4,train +2075,4,train +1679,4,train +1813,4,train +118,1,train +2767,2,train +2371,2,train +2288,4,train +1892,4,train +2026,4,train +110,2,train +2846,2,train +2887,3,train +289,4,train +2584,2,train +2188,2,train +3021,3,train +27,4,train +2105,4,train +3435,2,train +189,2,train +3317,1,train +323,2,train +3496,3,train +106,4,train +2401,2,train +3234,3,train +3396,1,train +3530,1,train +99,1,train +536,2,train +2917,3,train +319,4,train +3051,3,train +2655,3,train +57,4,train +615,2,train +3743,1,train +353,2,train +3085,1,train +3567,4,train +3264,3,train +3305,4,train +2606,3,train +8,4,train +3822,1,train +3164,1,train +566,2,train +170,2,train +607,3,train +1003,3,train +304,2,train +2902,1,train +3384,4,train +3518,4,train +87,4,train +2819,3,train +3780,4,train +3377,1,train +3814,2,train +3993,4,train +820,3,train +3511,1,train +517,2,train +3335,4,train +300,4,train +3073,4,train +38,4,train +3893,2,train +4027,2,train +3328,1,train +2932,1,train +771,3,train +3548,4,train +1329,1,train +3803,1,train +1246,3,train +3978,2,train +3145,1,train +3582,2,train +547,2,train +588,3,train +3499,4,train +3103,4,train +1542,1,train +1146,1,train +667,3,train +3358,1,train +3795,2,train +1755,1,train +1359,1,train +1493,1,train +3874,2,train +1713,4,train +3571,1,train +3612,2,train +1014,3,train +618,3,train +1055,4,train +3791,4,train +752,3,train +1572,1,train +3959,2,train +965,3,train +1785,1,train +1127,1,train +1564,2,train +1743,4,train +865,1,train +4038,2,train +1481,4,train +1085,4,train +823,4,train +2039,2,train +1340,1,train +1777,2,train +1560,4,train +1298,4,train +4030,3,train +2252,2,train +1856,2,train +1990,2,train +2031,3,train +1115,4,train +1249,4,train +2203,2,train +1807,2,train +1545,2,train +2020,2,train +1624,2,train +2753,1,train +2670,3,train +1837,2,train +1971,2,train +1575,2,train +2966,1,train +2487,3,train +2924,4,train +2225,3,train +3045,1,train +3179,1,train +2962,3,train +2700,3,train +2304,3,train +2741,4,train +3137,4,train +2438,3,train +2042,3,train +2996,1,train +43,3,train +2820,4,train +2517,3,train +2954,4,train +2255,3,train +3209,1,train +3250,2,train +2947,1,train +3033,4,train +2730,3,train +2289,1,train +2468,3,train +2509,4,train +290,1,train +3026,1,train +469,3,train +73,3,train +3201,2,train +2502,1,train +2722,4,train +765,1,train +503,1,train +682,3,train +286,3,train +2581,1,train +24,3,train +2715,1,train +2801,4,train +3197,4,train +2539,4,train +978,1,train +582,1,train +320,1,train +3097,2,train +3493,2,train +499,3,train +2794,1,train +237,3,train +2969,2,train +2886,4,train +533,1,train +970,2,train +712,3,train +753,4,train +3444,2,train +54,3,train +491,4,train +2786,2,train +188,3,train +2965,4,train +1008,1,train +1049,2,train +746,1,train +350,1,train +1183,2,train +3960,3,train +966,4,train +3657,2,train +1100,4,train +2999,2,train +401,3,train +3994,1,train +959,1,train +563,1,train +1396,2,train +3911,3,train +3474,2,train +3515,3,train +480,3,train +521,4,train +917,4,train +3212,2,train +655,4,train +1475,2,train +1609,2,train +1213,2,train +3990,3,train +514,1,train +951,2,train +3728,3,train +3466,3,train +868,4,train +4024,1,train +989,1,train +1030,2,train +1164,2,train +3545,3,train +947,4,train +551,4,train +4075,3,train +1639,2,train +1680,3,train +3975,1,train +1377,2,train +3758,3,train +1160,4,train +898,4,train +1893,3,train +1497,3,train +798,2,train +2189,1,train +1972,3,train +1710,3,train +4005,1,train +1844,3,train +3963,4,train +1923,3,train +1224,2,train +1661,3,train +2615,1,train +2219,1,train +2353,1,train +1957,1,train +2136,3,train +1478,3,train +1915,4,train +2432,1,train +2170,1,train +1774,1,train +1953,3,train +2390,4,train +1691,3,train +2128,4,train +1825,3,train +2645,1,train +2686,2,train +1987,1,train +2424,2,train +1904,3,train +1945,4,train +2341,4,train +2637,2,train +2334,1,train +2420,4,train +2554,4,train +1721,3,train +2158,4,train +335,1,train +2716,2,train +118,3,train +2413,1,train +2454,2,train +2151,1,train +2192,2,train +2371,4,train +152,1,train +2929,2,train +2667,2,train +110,4,train +2405,2,train +2584,4,train +2188,4,train +3400,1,train +406,2,train +3142,2,train +189,4,train +2484,2,train +2880,2,train +323,4,train +3317,3,train +2222,2,train +2401,4,train +182,1,train +3396,3,train +316,1,train +3530,3,train +2697,2,train +536,4,train +2831,2,train +3430,1,train +395,1,train +133,1,train +174,2,train +615,4,train +2910,2,train +353,4,train +2648,2,train +2951,3,train +3085,3,train +4039,1,train +1045,2,train +649,2,train +3822,3,train +3164,3,train +3601,4,train +566,4,train +170,4,train +2902,3,train +304,4,train +3460,1,train +3594,1,train +204,2,train +2981,3,train +3377,3,train +3511,3,train +3814,4,train +1075,2,train +679,2,train +3893,4,train +3411,1,train +813,2,train +417,2,train +3631,4,train +4027,4,train +3328,3,train +2932,3,train +3886,1,train +1329,3,train +368,2,train +3145,3,train +3582,4,train +3978,4,train +1363,1,train +1542,3,train +1146,3,train +3441,1,train +3837,1,train +843,2,train +3575,1,train +3358,3,train +3399,4,train +3795,4,train +1576,1,train +1359,3,train +4091,2,train +1493,3,train +660,2,train +3788,1,train +3874,4,train +3612,4,train +1655,1,train +1789,1,train +1572,3,train +1131,1,train +3867,1,train +873,2,train +1351,4,train +3646,2,train +3429,4,train +1868,1,train +1210,1,train +1344,1,train +1127,3,train +1564,4,train +865,3,train +4038,4,train +1819,1,train +1860,2,train +2256,2,train +1557,1,train +1161,1,train +2039,4,train +1340,3,train +1381,4,train +1777,4,train +2469,2,train +1636,1,train +2073,2,train +1770,1,train +1374,1,train +1856,4,train +2252,4,train +1990,4,train +2152,2,train +1849,1,train +1890,2,train +2286,2,train +1587,1,train +1628,2,train +1807,4,train +1411,4,train +1545,4,train +1800,1,train +1841,2,train +2237,2,train +2020,4,train +1624,4,train +2316,2,train +2753,3,train +1658,2,train +1575,4,train +2529,2,train +2133,2,train +2966,3,train +2267,2,train +2308,3,train +2866,1,train +268,2,train +3045,3,train +6,2,train +2084,2,train +3079,1,train +85,2,train +219,2,train +2996,3,train +3037,4,train +3292,1,train +339,3,train +3030,1,train +3250,4,train +2947,3,train +2289,3,train +3243,1,train +3284,2,train +2847,1,train +290,3,train +3026,3,train +3201,4,train +2805,4,train +2502,3,train +765,3,train +369,3,train +3060,1,train +3497,2,train +503,3,train +3194,1,train +2581,3,train +2715,3,train +1195,1,train +799,1,train +978,3,train +582,3,train +2877,1,train +3273,1,train +320,3,train +3097,4,train +3493,4,train +17,2,train +2794,3,train +2835,4,train +2969,4,train +878,1,train +3789,2,train +3527,2,train +533,3,train +970,4,train +3224,1,train +3444,4,train +2786,4,train +1091,1,train +829,1,train +1266,2,train +4002,2,train +1008,3,train +567,1,train +1049,4,train +3344,2,train +746,3,train +350,3,train +787,4,train +1183,4,train +3478,2,train +88,3,train +2999,4,train +1176,1,train +780,1,train +3953,2,train +3994,3,train +1396,4,train +563,3,train +3691,2,train +3474,4,train +3212,4,train +1255,1,train +859,1,train +1296,2,train +4073,3,train +993,1,train +597,1,train +1475,4,train +1213,4,train +514,3,train +951,4,train +1905,2,train +810,1,train +4024,3,train +1030,4,train +3721,2,train +1164,4,train +1722,2,train +1326,2,train +1023,1,train +627,1,train +1064,2,train +1460,2,train +847,4,train +3975,3,train +1935,2,train +1539,2,train +1236,1,train +3792,3,train +798,4,train +1752,2,train +2189,3,train +1490,2,train +1094,2,train +1228,2,train +4005,3,train +1965,2,train +1703,2,train +1307,2,train +1744,3,train +1441,2,train +1224,4,train +2302,1,train +2219,3,train +1823,3,train +2353,3,train +1520,2,train +1957,3,train +1654,2,train +2515,1,train +2253,1,train +2432,3,train +1733,2,train +1774,3,train +2170,3,train +2728,1,train +2332,1,train +2466,1,train +2686,4,train +1987,3,train +2424,4,train +2679,1,train +2720,2,train +2021,1,train +2503,4,train +2637,4,train +3329,2,train +2496,1,train +335,3,train +2716,4,train +2413,3,train +2454,4,train +2151,3,train +2192,4,train +235,1,train +3012,2,train +2709,1,train +2313,1,train +152,3,train +193,4,train +2051,1,train +2447,1,train +2929,4,train +2667,4,train +2271,4,train +2405,4,train +314,1,train +3225,2,train +3400,3,train +406,4,train +2264,1,train +2660,1,train +2701,2,train +2880,4,train +2484,4,train +3142,4,train +2222,4,train +661,1,train +3,1,train +2780,2,train +3176,2,train +182,3,train +223,4,train +2697,4,train +478,1,train +612,1,train +3430,3,train +2993,2,train +395,3,train +3127,2,train +3168,3,train +133,3,train +174,4,train +2910,4,train +2648,4,train +295,1,train +732,2,train +167,1,train +253,4,train +649,4,train +2548,2,train +3939,1,train +3677,1,train +246,1,train +3460,3,train +380,1,train +3594,3,train +2761,2,train +204,4,train +3890,1,train +896,2,train +500,2,train +679,4,train +3411,3,train +417,4,train +1371,2,train +975,2,train +3707,1,train +1109,2,train +713,2,train +1150,3,train +3445,1,train +3886,3,train +451,2,train +368,4,train +1188,2,train +3920,1,train +926,2,train +1363,3,train +664,2,train +3441,3,train +3837,3,train +3575,3,train +1659,1,train +3935,2,train +1576,3,train +3871,1,train +3957,4,train +877,2,train +4091,4,train +3695,4,train +660,4,train +1738,1,train +1872,1,train +1655,3,train +1789,3,train +4084,1,train +3688,1,train +1090,2,train +1131,3,train +3867,3,train +3646,4,train +1951,1,train +2085,1,train +1689,1,train +1868,3,train +1427,1,train +1169,2,train +1210,3,train +3901,1,train +1344,3,train +2164,1,train +1640,1,train +1819,3,train +1860,4,train +2256,4,train +1557,3,train +1161,3,train +2377,1,train +1719,1,train +2156,2,train +1457,1,train +1636,3,train +1677,4,train +2073,4,train +1374,3,train +2066,1,train +1670,1,train +2152,4,train +1849,3,train +1890,4,train +2286,4,train +1587,3,train +1628,4,train +2448,2,train +2145,1,train +1883,1,train +1487,1,train +2237,4,train +1841,4,train +2399,2,train +2096,1,train +1700,1,train +2533,2,train +2316,4,train +1658,4,train +2133,4,train +2267,4,train +48,1,train +2866,3,train +268,4,train +2126,1,train +2167,2,train +2563,2,train +6,4,train +2301,2,train +2084,4,train +127,1,train +168,2,train +302,2,train +3079,3,train +85,4,train +2380,2,train +219,4,train +2514,2,train +381,2,train +78,1,train +515,2,train +3292,3,train +2593,2,train +2634,3,train +3030,3,train +2372,3,train +594,2,train +198,2,train +3326,1,train +3722,1,train +332,2,train +3243,3,train +2847,3,train +3284,4,train +3801,1,train +3405,1,train +807,2,train +3539,1,train +3580,2,train +545,2,train +149,2,train +3363,4,train +3060,3,train +2664,3,train +3497,4,train +3752,1,train +3793,2,train +1195,3,train +799,3,train +3273,3,train +2877,3,train +17,4,train +1095,1,train +3872,2,train +4006,2,train +878,3,train +3173,1,train +616,3,train +3307,1,train +3789,4,train +313,2,train +3527,4,train +4085,2,train +1091,3,train +3386,1,train +3782,1,train +4002,4,train +829,3,train +1266,4,train +3124,1,train +130,2,train +567,3,train +3344,4,train +3520,1,train +3478,4,train +3561,2,train +1521,1,train +863,1,train +4036,2,train +646,3,train +3337,1,train +3774,2,train +780,3,train +3161,4,train +3691,4,train +1338,1,train +1472,1,train +1255,3,train +859,3,train +1296,4,train +3550,1,train +993,3,train +597,3,train +3987,2,train +1551,1,train +1592,2,train +1289,1,train +893,1,train +3804,2,train +810,3,train +3721,4,train +1368,1,train +1805,2,train +1502,1,train +1543,2,train +1722,4,train +844,1,train +1326,4,train +4017,2,train +1023,3,train +627,3,train +1064,4,train +1460,4,train +2018,2,train +923,1,train +1057,1,train +1539,4,train +1835,2,train +1532,1,train +1969,2,train +1270,1,train +1752,4,train +4047,2,train +1490,4,train +1094,4,train +1228,4,train +2048,2,train +1349,1,train +1786,2,train +1524,2,train +1703,4,train +1307,4,train +1441,4,train +2261,2,train +2302,3,train +1999,2,train +1603,2,train +2040,3,train +1520,4,train +2515,3,train +2253,3,train +2945,1,train +2728,3,train +2332,3,train +2029,2,train +2070,3,train +2466,3,train +1767,2,train +2679,3,train +2720,4,train +2021,3,train +22,3,train +2799,4,train +2496,3,train +2100,3,train +1838,3,train +235,3,train +2926,1,train +3012,4,train +2709,3,train +2313,3,train +2447,3,train +2051,3,train +2488,4,train +314,3,train +3005,1,train +3046,2,train +3225,4,train +2347,1,train +2481,1,train +2264,3,train +2701,4,train +744,1,train +3655,2,train +482,1,train +3218,1,train +3259,2,train +661,3,train +2956,1,train +3,3,train +2694,1,train +2780,4,train +3176,4,train +2518,4,train +957,1,train +299,1,train +3076,2,train +478,3,train +2773,1,train +3606,2,train +2993,4,train +3127,4,train +908,1,train +512,1,train +3289,2,train +3726,3,train +295,3,train +732,4,train +2986,1,train +3027,2,train +2765,2,train +167,3,train +2548,4,train +1028,2,train +3939,3,train +3636,2,train +3677,3,train +549,4,train +3240,2,train +246,3,train +2978,2,train +3374,2,train +380,3,train +2761,4,train +1200,1,train +1241,2,train +1375,2,train +979,2,train +676,1,train +3890,3,train +3494,3,train +896,4,train +500,4,train +238,4,train +1454,2,train +1588,2,train +975,4,train +3707,3,train +1109,4,train +713,4,train +3445,3,train +451,4,train +4003,1,train +1009,2,train +1446,3,train +706,1,train +1188,4,train +3920,3,train +926,4,train +664,4,train +1484,2,train +1659,3,train +3954,1,train +1356,2,train +3871,3,train +877,4,train +1738,3,train +4033,1,train +1435,2,train +1476,3,train +1872,3,train +3771,1,train +777,2,train +3688,3,train +1951,3,train +2085,3,train +1689,3,train +1427,3,train +3901,3,train +3942,4,train +2164,3,train +1723,1,train +1203,2,train +1640,3,train +2198,1,train +1936,1,train +1719,3,train +2156,4,train +1416,2,train +1457,3,train +2015,1,train +2149,1,train +1670,3,train +1274,3,train +2624,1,train +2665,2,train +1966,1,train +2448,4,train +2145,3,train +1883,3,train +1487,3,train +2441,1,train +2878,2,train +2179,1,train +2616,2,train +2399,4,train +2533,4,train +1700,3,train +3091,2,train +2695,2,train +2392,1,train +2829,2,train +131,1,train +2512,2,train +3042,2,train +2646,2,train +2563,4,train +2167,4,train +2301,4,train +3121,2,train +127,3,train +168,4,train +2422,1,train +2900,3,train +302,4,train +2201,2,train +2380,4,train +381,4,train +2676,2,train +515,4,train +2593,4,train +3409,1,train +811,2,train +415,2,train +594,4,train +198,4,train +2493,2,train +2930,3,train +332,4,train +3326,3,train +3801,3,train +3405,3,train +3539,3,train +3580,4,train +545,4,train +149,4,train +404,1,train +882,3,train +3659,4,train +142,1,train +183,2,train +3793,4,train +4048,1,train +4089,2,train +658,2,train +3872,4,train +1095,3,train +792,2,train +396,2,train +3173,3,train +4006,4,train +3307,3,train +3348,4,train +313,4,train +3865,1,train +3469,1,train +912,3,train +4085,4,train +213,2,train +3386,3,train +3124,3,train +3561,4,train +130,4,train +4078,1,train +3682,1,train +1521,3,train +3816,1,train +3420,1,train +822,2,train +863,3,train +3554,1,train +4036,4,train +560,2,train +3337,3,train +3378,4,train +3774,4,train +1421,1,train +1555,1,train +1159,1,train +1338,3,train +942,3,train +3237,1,train +3633,1,train +3767,1,train +4070,2,train +3987,4,train +1768,1,train +1551,3,train +1592,4,train +3450,1,train +3846,1,train +1289,3,train +893,3,train +3804,4,train +1847,1,train +1451,1,train +1189,1,train +1368,3,train +1805,4,train +1543,4,train +3838,2,train +844,3,train +4017,4,train +1798,1,train +1839,2,train +2018,4,train +3917,2,train +923,3,train +1360,4,train +4051,2,train +1057,3,train +1353,1,train +1835,4,train +1969,4,train +1270,3,train +4047,4,train +2131,2,train +2265,2,train +1432,1,train +1869,2,train +2048,4,train +1786,4,train +1390,4,train +1524,4,train +2132,3,validate +345,3,validate +83,3,validate +2082,2,validate +3685,1,validate +388,1,validate +3206,3,validate +2032,1,validate +2944,3,validate +3898,1,validate +3207,4,validate +3502,1,validate +205,1,validate +3856,4,validate +3157,3,validate +1766,3,validate +297,4,validate +247,3,validate +3673,4,validate +1242,2,validate +763,4,validate +2366,3,validate +4020,4,validate +1455,2,validate +756,1,validate +3533,2,validate +2796,1,validate +1405,1,validate +2713,3,validate +3617,1,validate +1060,3,validate +2226,1,validate +2842,4,validate +2742,2,validate +94,2,validate +2564,1,validate +11,4,validate +3130,3,validate +1219,4,validate +2560,3,validate +4080,4,validate +1515,2,validate +3689,2,validate +1902,2,validate +428,4,validate +3556,3,validate +1728,2,validate +3685,4,validate +1812,1,validate +724,2,validate +2032,4,validate +2461,1,validate +379,4,validate +808,1,validate +546,1,validate +3323,2,validate +3502,4,validate +3669,1,validate +4023,4,validate +3627,4,validate +1283,1,validate +3536,2,validate +3973,3,validate +1671,3,validate +2320,3,validate +3620,1,validate +3141,3,validate +4052,3,validate +972,1,validate +2358,2,validate +2795,3,validate +493,3,validate +1538,3,validate +705,2,validate +2704,1,validate +3833,1,validate +3616,3,validate +2796,4,validate +1963,3,validate +1405,4,validate +3700,2,validate +3687,4,validate +819,1,validate +2564,4,validate +211,1,validate +390,3,validate +3122,2,validate +3468,1,validate +3072,1,validate +3984,3,validate +2381,3,validate +2627,1,validate +2806,3,validate +1852,4,validate +678,2,validate +3152,2,validate +108,2,validate +2544,2,validate +1449,1,validate +1886,2,validate +495,2,validate +674,4,validate +3406,3,validate +2232,1,validate +3843,4,validate +2411,3,validate +3144,3,validate +546,4,validate +841,1,validate +100,3,validate +3011,4,validate +405,1,validate +9,1,validate +2445,1,validate +2228,3,validate +2961,3,validate +1833,4,validate +3873,4,validate +2000,1,validate +871,1,validate +3916,2,validate +3470,1,validate +476,2,validate +1480,1,validate +1304,4,validate +264,2,validate +47,4,validate +3125,2,validate +1734,2,validate +2384,4,validate +477,2,validate +2293,2,validate +427,1,validate +31,1,validate +210,3,validate +1947,2,validate +3288,1,validate +4066,3,validate +294,2,validate +2547,3,validate +2718,1,validate +3888,2,validate +1764,2,validate +1065,1,validate +1240,2,validate +973,3,validate +3106,2,validate +2627,4,validate +3538,4,validate +62,2,validate +840,4,validate +1403,1,validate +3572,2,validate +1449,4,validate +275,2,validate +487,1,validate +3701,3,validate +1702,4,validate +2232,4,validate +841,4,validate +3177,3,validate +2091,1,validate +2132,2,validate +875,2,validate +262,4,validate +3390,3,validate +1221,1,validate +3257,4,validate +4082,1,validate +255,1,validate +2000,4,validate +871,4,validate +475,4,validate +3207,3,validate +1950,3,validate +996,4,validate +297,3,validate +3470,4,validate +3857,4,validate +2459,1,validate +1980,3,validate +2417,4,validate +4020,3,validate +1026,4,validate +31,4,validate +2713,2,validate +1281,1,validate +2842,3,validate +1148,2,validate +1585,3,validate +411,1,validate +1664,3,validate +11,3,validate +3485,1,validate +1403,4,validate +1219,3,validate +399,4,validate +3564,1,validate +4080,3,validate +745,3,validate +3689,1,validate +3868,3,validate +1778,2,validate +3556,2,validate +1728,1,validate +259,2,validate +2082,4,validate +1686,4,validate +3685,3,validate +3120,2,validate +2032,3,validate +1729,2,validate +379,3,validate +684,1,validate +3898,3,validate +3502,3,validate +2462,1,validate +205,3,validate +4023,3,validate +938,2,validate +2675,1,validate +1022,1,validate +1242,4,validate +1413,2,validate +2358,1,validate +493,2,validate +1538,2,validate +3616,2,validate +1455,4,validate +756,3,validate +3533,4,validate +2796,3,validate +1963,2,validate +968,2,validate +1405,3,validate +3700,1,validate +3617,3,validate +2443,1,validate +2226,3,validate +3355,2,validate +1527,1,validate +2742,4,validate +94,4,validate +2564,3,validate +1082,1,validate +390,2,validate +3122,1,validate +1994,2,validate +1515,4,validate +2381,2,validate +3689,4,validate +2078,1,validate +1902,4,validate +425,1,validate +511,4,validate +2806,2,validate +3152,1,validate +3110,4,validate +1633,1,validate +2544,1,validate +724,4,validate +3153,2,validate +2461,3,validate +674,3,validate +808,3,validate +2411,2,validate +546,3,validate +3323,4,validate +3669,3,validate +1283,3,validate +1062,4,validate +2228,2,validate +322,2,validate +3536,4,validate +3923,4,validate +3620,3,validate +1833,3,validate +972,3,validate +2358,4,validate +3916,1,validate +2921,1,validate +705,4,validate +2704,3,validate +3833,3,validate +1092,4,validate +264,1,validate +47,3,validate +3175,2,validate +3125,1,validate +3734,2,validate +477,1,validate +952,2,validate +1997,2,validate +2293,1,validate +210,2,validate +1947,1,validate +819,3,validate +294,1,validate +211,3,validate +2506,1,validate +3122,4,validate +120,1,validate +557,2,validate +1764,1,validate +3072,3,validate +903,1,validate +2719,1,validate +3106,1,validate +2627,3,validate +678,4,validate +3152,4,validate +1541,1,validate +3319,1,validate +108,4,validate +2544,4,validate +1449,3,validate +275,1,validate +1886,4,validate +495,4,validate +2232,3,validate +800,2,validate +841,3,validate +276,2,validate +3094,4,validate +488,1,validate +9,3,validate +2445,3,validate +3216,2,validate +2000,3,validate +871,3,validate +3999,2,validate +3470,3,validate +476,4,validate +3083,2,validate +264,4,validate +1168,2,validate +3125,4,validate +1734,4,validate +4029,2,validate +2293,4,validate +427,3,validate +31,3,validate +1947,4,validate +3288,3,validate +294,4,validate +2718,3,validate +3888,4,validate +1148,1,validate +1585,2,validate +1764,4,validate +153,1,validate +1065,3,validate +2327,1,validate +1240,4,validate +1889,4,validate +2194,2,validate +3106,4,validate +62,4,validate +1403,3,validate +3572,4,validate +275,4,validate +487,3,validate +3219,2,validate +1828,2,validate +3868,2,validate +134,1,validate +1778,1,validate +783,1,validate +2132,4,validate +259,1,validate +875,4,validate +2082,3,validate +1221,3,validate +388,2,validate +3120,1,validate +1729,1,validate +4082,3,validate +255,3,validate +3898,2,validate +1992,2,validate +205,2,validate +2076,1,validate +247,4,validate +764,1,validate +2938,1,validate +1413,1,validate +2459,3,validate +3067,2,validate +1455,3,validate +756,2,validate +3533,3,validate +2713,4,validate +1281,3,validate +2884,2,validate +3617,2,validate +1060,4,validate +2226,2,validate +1365,2,validate +411,3,validate +1577,1,validate +3355,1,validate +94,3,validate +4043,2,validate +2177,1,validate +2560,4,validate +3781,1,validate +3564,3,validate +1994,1,validate +1515,3,validate +3689,3,validate +1995,2,validate +1778,4,validate +3556,4,validate +1728,3,validate +1812,2,validate +3153,1,validate +2461,2,validate +1729,4,validate +1896,1,validate +3678,2,validate +2462,3,validate +1283,2,validate +2109,1,validate +322,1,validate +1671,4,validate +938,4,validate +2675,3,validate +3620,2,validate +1022,3,validate +3141,4,validate +931,1,validate +972,2,validate +1413,4,validate +2358,3,validate +2795,4,validate +493,4,validate +1538,4,validate +3833,2,validate +2704,2,validate +3616,4,validate +1963,4,validate +968,4,validate +3700,3,validate +2443,3,validate +3734,1,validate +3355,4,validate +790,2,validate +1997,1,validate +91,1,validate +819,2,validate +1082,3,validate +390,4,validate +3122,3,validate +557,1,validate +3468,2,validate +3984,4,validate +1994,4,validate +2423,1,validate +1166,1,validate +2381,4,validate +2078,3,validate +425,3,validate +2806,4,validate +899,2,validate +2636,1,validate +3152,3,validate +1633,3,validate +108,3,validate +2544,3,validate +3153,4,validate +1979,2,validate +2453,1,validate +2411,4,validate +800,1,validate +276,1,validate +4057,1,validate +405,2,validate +2445,2,validate +2142,1,validate +2228,4,validate +322,4,validate +2791,1,validate +3216,1,validate +2355,1,validate +3999,1,validate +3916,3,validate +2921,3,validate +3825,1,validate +356,1,validate +831,2,validate +1480,2,validate +3083,1,validate +3217,1,validate +264,3,validate +3175,4,validate +1168,1,validate +3125,3,validate +2385,1,validate +1734,3,validate +3734,4,validate +4029,1,validate +477,3,validate +952,4,validate +1997,4,validate +2293,3,validate +427,2,validate +210,4,validate +1947,3,validate +3288,2,validate +294,3,validate +2506,3,validate +337,1,validate +2718,2,validate +557,4,validate +2852,2,validate +1764,3,validate +1065,2,validate +1199,2,validate +2802,1,validate +2244,2,validate +2719,3,validate +2194,1,validate +3106,3,validate +3015,1,validate +2323,2,validate +62,3,validate +1066,2,validate +3319,3,validate +754,1,validate +3228,1,validate +275,3,validate +487,2,validate +276,4,validate +488,3,validate +2091,2,validate +875,3,validate +572,2,validate +3390,4,validate +1221,2,validate +3216,4,validate +4041,1,validate +4082,2,validate +2650,1,validate +255,2,validate +3999,4,validate +1992,1,validate +1950,4,validate +1168,4,validate +1597,1,validate +4029,4,validate +2459,2,validate +3463,1,validate +3067,1,validate +1980,4,validate +1281,2,validate +3280,1,validate +2884,1,validate +1627,1,validate +1365,1,validate +1148,3,validate +411,2,validate +1585,4,validate +153,3,validate +2327,3,validate +3231,1,validate +1840,1,validate +1578,1,validate +1664,4,validate +321,1,validate +4043,1,validate +3485,2,validate +1099,2,validate +3564,2,validate +745,4,validate +3219,4,validate +1050,2,validate +1828,4,validate +3868,4,validate +1262,1,validate +1995,1,validate +1778,3,validate +783,3,validate +259,3,validate +1079,1,validate +388,4,validate +3120,3,validate +1729,3,validate +3678,1,validate +684,2,validate +3898,4,validate +818,2,validate +2462,2,validate +205,4,validate +938,3,validate +2675,2,validate +981,1,validate +1022,2,validate +764,3,validate +2938,3,validate +1413,3,validate +756,4,validate +1581,1,validate +968,3,validate +2884,4,validate +2443,2,validate +3617,4,validate +2226,4,validate +1577,3,validate +3355,3,validate +1527,2,validate +790,1,validate +270,2,validate +3002,1,validate +4043,4,validate +2177,3,validate +1082,2,validate +3914,2,validate +2086,1,validate +3781,3,validate +1994,3,validate +3294,1,validate +3032,1,validate +2078,2,validate +1995,4,validate +425,2,validate +899,1,validate +1033,1,validate +1854,1,validate +1162,2,validate +1633,2,validate +1812,4,validate +3153,3,validate +1979,1,validate +2461,4,validate +1896,3,validate +808,4,validate +3669,4,validate +1283,4,validate +2109,3,validate +3712,2,validate +322,3,validate +3620,4,validate +972,4,validate +1143,2,validate +2921,2,validate +3833,4,validate +2704,4,validate +831,1,validate +3175,3,validate +3734,3,validate +3347,2,validate +952,3,validate +790,4,validate +1997,3,validate +91,3,validate +3035,1,validate +819,4,validate +211,4,validate +2506,2,validate +120,2,validate +557,3,validate +2852,1,validate +3468,4,validate +3072,4,validate +903,2,validate +1199,1,validate +2244,1,validate +3115,2,validate +2719,2,validate +2423,3,validate +1462,2,validate +1674,1,validate +1808,1,validate +1116,2,validate +2323,1,validate +899,4,validate +1066,1,validate +1541,2,validate +3319,2,validate +1979,4,validate +2453,3,validate +800,3,validate +276,3,validate +3878,1,validate +2749,1,validate +488,2,validate +405,4,validate +9,4,validate +1230,1,validate +2445,4,validate +2142,3,validate +572,1,validate +3216,3,validate +3999,3,validate +356,3,validate +3300,1,validate +998,1,validate +1480,4,validate +3083,3,validate +3217,3,validate +1168,3,validate +4029,3,validate +2335,2,validate +944,2,validate +427,4,validate +3464,1,validate +3288,4,validate +2718,4,validate +2852,4,validate +153,2,validate +1065,4,validate +2327,2,validate +1199,4,validate +2802,3,validate +2244,4,validate +3148,2,validate +2194,3,validate +3015,3,validate +2323,4,validate +450,1,validate +1099,1,validate +3099,2,validate +317,2,validate +754,3,validate +487,4,validate +3219,3,validate +1050,1,validate +1828,3,validate +134,2,validate +1871,1,validate +1179,2,validate +783,2,validate +2091,4,validate +1263,1,validate +572,4,validate +1221,4,validate +388,3,validate +2521,2,validate +1130,2,validate +4082,4,validate +255,4,validate +1992,3,validate +818,1,validate +2076,2,validate +1597,3,validate +764,2,validate +2938,2,validate +2459,4,validate +3067,3,validate +2368,2,validate +2022,2,validate +1281,4,validate +3280,3,validate +2884,3,validate +3972,2,validate +2106,1,validate +715,1,validate +1627,3,validate +1365,3,validate +411,4,validate +1577,2,validate +3231,3,validate +1840,3,validate +270,1,validate +1578,3,validate +4043,3,validate +2177,2,validate +3485,4,validate +3914,1,validate +1099,4,validate +3781,2,validate +3082,1,validate +3564,4,validate +1133,2,validate +1262,3,validate +1995,3,validate +513,1,validate +2949,1,validate +1728,4,validate +647,1,validate +1162,1,validate +1079,3,validate +1812,3,validate +1896,2,validate +3678,3,validate +684,4,validate +1247,1,validate +2462,4,validate +2109,2,validate +3712,1,validate +2675,4,validate +331,1,validate +981,3,validate +1022,4,validate +2322,2,validate +3925,1,validate +931,2,validate +1143,1,validate +1581,3,validate +3700,4,validate +2443,4,validate +3347,1,validate +1527,4,validate +790,3,validate +91,2,validate +270,4,validate +3002,3,validate +1082,4,validate +3914,4,validate +3468,3,validate +3115,1,validate +2423,2,validate +3294,3,validate +3032,3,validate +1166,2,validate +1462,1,validate +2078,4,validate +1116,1,validate +425,4,validate +899,3,validate +3590,1,validate +1033,3,validate +2636,2,validate +1937,1,validate +1854,3,validate +1162,4,validate +1633,4,validate +1979,3,validate +3541,1,validate +2453,2,validate +1330,2,validate +4057,2,validate +405,3,validate +3712,4,validate +2142,2,validate +2750,1,validate +2355,2,validate +3916,4,validate +2921,4,validate +356,2,validate +3825,2,validate +831,3,validate +2830,2,validate +1480,3,validate +3217,2,validate +2385,2,validate +477,4,validate +2335,1,validate +944,1,validate +83,1,validate +2598,2,validate +3035,3,validate +2944,1,validate +3381,2,validate +2506,4,validate +1291,1,validate +337,2,validate +120,4,validate +2852,3,validate +903,4,validate +1199,3,validate +2802,2,validate +2244,3,validate +2719,4,validate +3148,1,validate +1462,4,validate +1891,1,validate +1674,3,validate +3673,2,validate +1808,3,validate +1116,4,validate +3015,2,validate +2323,3,validate +3149,2,validate +1066,3,validate +1541,4,validate +2366,1,validate +3099,1,validate +3319,4,validate +317,1,validate +754,2,validate +3228,2,validate +530,1,validate +3878,3,validate +2749,3,validate +1179,1,validate +488,4,validate +2091,3,validate +1230,3,validate +572,3,validate +2521,1,validate +1130,1,validate +4041,2,validate +2650,2,validate +1605,1,validate +3300,3,validate +998,3,validate +1818,1,validate +1597,2,validate +3463,2,validate +2335,4,validate +2368,1,validate +944,4,validate +2206,2,validate +2022,1,validate +2631,2,validate +3972,1,validate +3280,2,validate +3676,2,validate +1627,2,validate +1324,1,validate +1148,4,validate +153,4,validate +2327,4,validate +3627,2,validate +3231,2,validate +1840,2,validate +3148,4,validate +1578,2,validate +146,1,validate +321,2,validate +2320,1,validate +3485,3,validate +450,3,validate +4052,1,validate +1099,3,validate +317,4,validate +1133,1,validate +613,2,validate +1050,3,validate +1262,2,validate +134,4,validate +1871,3,validate +1179,4,validate +783,4,validate +259,4,validate +1263,3,validate +1079,2,validate +3120,4,validate +3687,2,validate +1130,4,validate +684,3,validate +818,3,validate +1688,2,validate +2076,4,validate +981,2,validate +764,4,validate +2322,1,validate +2938,4,validate +2368,4,validate +1194,2,validate +2022,4,validate +1581,2,validate +2106,3,validate +715,3,validate +1577,4,validate +100,1,validate +1527,3,validate +3660,2,validate +270,3,validate +2961,1,validate +3002,2,validate +179,1,validate +2177,4,validate +3914,3,validate +2086,2,validate +3781,4,validate +3082,3,validate +3294,2,validate +1133,4,validate +3032,2,validate +2037,2,validate +1033,2,validate +513,3,validate +2949,3,validate +1854,2,validate +1162,3,validate +3853,1,validate +1896,4,validate +1330,1,validate +1247,3,validate +2109,4,validate +3712,3,validate +973,1,validate +2322,4,validate +3925,3,validate +1622,1,validate +931,4,validate +1143,3,validate +2830,1,validate +2964,1,validate +1702,2,validate +1440,2,validate +3826,1,validate +832,2,validate +3347,3,validate +91,4,validate +262,2,validate +2598,1,validate +3035,2,validate +3381,1,validate +120,3,validate +3856,1,validate +862,2,validate +903,3,validate +3115,3,validate +2423,4,validate +1166,4,validate +1462,3,validate +1674,2,validate +3673,1,validate +1808,2,validate +1116,3,validate +3590,3,validate +3149,1,validate +2636,4,validate +1937,3,validate +763,1,validate +1541,3,validate +2283,2,validate +3541,3,validate +2453,4,validate +800,4,validate +3878,2,validate +2749,2,validate +4057,4,validate +581,2,validate +1230,2,validate +2142,4,validate +2750,3,validate +2355,4,validate +356,4,validate +3825,4,validate +3300,2,validate +998,2,validate +3083,4,validate +3217,4,validate +2385,4,validate +2335,3,validate +428,1,validate +944,3,validate +2206,1,validate +1686,2,validate +2598,4,validate +3464,2,validate +2631,1,validate +33,2,validate +3381,4,validate +3676,1,validate +379,1,validate +1291,3,validate +337,4,validate +2802,4,validate +3627,1,validate +3148,3,validate +2194,4,validate +1891,3,validate +3015,4,validate +3149,4,validate +450,2,validate +3099,3,validate +317,3,validate +754,4,validate +3228,4,validate +613,1,validate +530,3,validate +134,3,validate +1871,2,validate +1179,3,validate +1263,2,validate +2521,3,validate +3687,1,validate +1130,3,validate +4041,4,validate +2650,4,validate +1992,4,validate +1688,1,validate +1605,3,validate +2076,3,validate +36,2,validate +1818,3,validate +1597,4,validate +511,2,validate +3463,4,validate +1852,1,validate +3067,4,validate +2368,3,validate +1194,1,validate +2206,4,validate +3110,2,validate +2022,3,validate +2631,4,validate +3972,3,validate +3280,4,validate +2106,2,validate +3676,4,validate +674,1,validate +715,2,validate +3843,1,validate +1627,4,validate +1324,3,validate +1365,4,validate +3011,1,validate +3231,4,validate +3660,1,validate +1062,2,validate +1840,4,validate +1578,4,validate +146,3,validate +321,4,validate +3923,2,validate +2532,2,validate +1833,1,validate +3873,1,validate +3082,2,validate +1092,2,validate +1133,3,validate +2037,1,validate +613,4,validate +1304,1,validate +47,1,validate +1262,4,validate +2562,2,validate +513,2,validate +2949,2,validate +647,2,validate +2384,1,validate +1079,4,validate +3770,2,validate +3678,4,validate +1688,4,validate +1247,2,validate +2330,2,validate +3375,2,validate +331,2,validate +981,4,validate +2322,3,validate +3925,2,validate +931,3,validate +3538,1,validate +1673,2,validate +840,1,validate +1194,4,validate +1581,4,validate +1702,1,validate +1440,1,validate +3094,2,validate +832,1,validate +3660,4,validate +3002,4,validate +262,1,validate +179,3,validate +3257,1,validate +2086,4,validate +475,1,validate +862,1,validate +996,1,validate +3294,4,validate +3032,4,validate +1166,3,validate +3857,1,validate +2037,4,validate +3590,2,validate +1033,4,validate +3724,2,validate +2636,3,validate +1937,2,validate +1854,4,validate +3853,3,validate +2283,1,validate +2417,1,validate +1026,1,validate +3541,2,validate +1155,2,validate +1330,3,validate +4057,3,validate +581,1,validate +3146,2,validate +2750,2,validate +1889,2,validate +1622,3,validate +2355,3,validate +3825,3,validate +831,4,validate +2830,3,validate +2964,3,validate +399,1,validate +1440,4,validate +2385,3,validate +3826,3,validate +832,4,validate +345,2,validate +83,2,validate +2082,1,validate +1686,1,validate +2598,3,validate +3035,4,validate +33,1,validate +3206,2,validate +2944,2,validate +3381,3,validate +1291,2,validate +337,3,validate +3856,3,validate +862,4,validate +3157,2,validate +1766,2,validate +247,2,validate +1891,2,validate +1674,4,validate +3673,3,validate +1808,4,validate +3149,3,validate +1242,1,validate +1066,4,validate +763,3,validate +2366,2,validate +2283,4,validate +3228,3,validate +1455,1,validate +3533,1,validate +530,2,validate +1060,2,validate +3878,4,validate +2749,4,validate +581,4,validate +1230,4,validate +2742,1,validate +94,1,validate +4041,3,validate +2650,3,validate +3130,2,validate +1605,2,validate +3300,4,validate +998,4,validate +2560,2,validate +36,1,validate +1818,2,validate +1515,1,validate +1902,1,validate +511,1,validate +3463,3,validate +428,3,validate +2206,3,validate +3110,1,validate +3464,4,validate +2631,3,validate +724,1,validate +33,4,validate +3676,3,validate +1324,2,validate +3323,1,validate +3627,3,validate +1062,1,validate +3536,1,validate +3973,2,validate +1671,2,validate +146,2,validate +321,3,validate +2320,2,validate +3923,1,validate +2532,1,validate +450,4,validate +3141,2,validate +4052,2,validate +2795,2,validate +705,1,validate +1092,1,validate +613,3,validate +1050,4,validate +2562,1,validate +1871,4,validate +1263,4,validate +3770,1,validate +3687,3,validate +818,4,validate +1688,3,validate +2330,1,validate +3375,1,validate +3984,2,validate +36,4,validate +1673,1,validate +1852,3,validate +678,1,validate +1194,3,validate +108,1,validate +1886,1,validate +2106,4,validate +495,1,validate +715,4,validate +3406,2,validate +3843,3,validate +3144,2,validate +3094,1,validate +100,2,validate +3011,3,validate +3660,3,validate +2961,2,validate +179,2,validate +2532,4,validate +3873,3,validate +2086,3,validate +3082,4,validate +476,1,validate +2037,3,validate +1304,3,validate +2562,4,validate +3724,1,validate +513,4,validate +2949,4,validate +1734,1,validate +647,4,validate +3853,2,validate +2384,3,validate +3770,4,validate +1155,1,validate +4066,2,validate +1247,4,validate +2547,2,validate +2330,4,validate +3888,1,validate +3375,4,validate +3146,1,validate +1240,1,validate +331,4,validate +1889,1,validate +973,2,validate +3925,4,validate +1622,2,validate +3538,3,validate +1143,4,validate +1673,4,validate +62,1,validate +840,3,validate +2964,2,validate +3572,1,validate +1702,3,validate +3701,2,validate +1440,3,validate +3177,2,validate +3826,2,validate +832,3,validate +2132,1,validate +3347,4,validate +345,1,validate +875,1,validate +262,3,validate +3390,2,validate +3206,1,validate +3257,3,validate +475,3,validate +3207,2,validate +3856,2,validate +1950,2,validate +862,3,validate +3157,1,validate +996,3,validate +1766,1,validate +297,2,validate +3115,4,validate +247,1,validate +3857,3,validate +3590,4,validate +3724,4,validate +1937,4,validate +763,2,validate +2283,3,validate +1980,2,validate +2417,3,validate +4020,2,validate +1026,3,validate +3541,4,validate +1155,4,validate +2713,1,validate +1060,1,validate +2842,2,validate +581,3,validate +3146,4,validate +2750,4,validate +1664,2,validate +11,2,validate +3130,1,validate +1219,2,validate +2560,1,validate +399,3,validate +4080,2,validate +745,2,validate +428,2,validate +3556,1,validate +345,4,validate +83,4,validate +1686,3,validate +3685,2,validate +3464,3,validate +33,3,validate +2032,2,validate +3206,4,validate +2944,4,validate +379,2,validate +1291,4,validate +3502,2,validate +3157,4,validate +1766,4,validate +3973,1,validate +1671,1,validate +938,1,validate +1891,4,validate +1242,3,validate +3141,1,validate +2366,4,validate +3099,4,validate +2795,1,validate +493,1,validate +1538,1,validate +3616,1,validate +2796,2,validate +1963,1,validate +968,1,validate +1405,2,validate +530,4,validate +2742,3,validate +2521,4,validate +2564,2,validate +3130,4,validate +390,1,validate +1605,4,validate +3984,1,validate +36,3,validate +1818,4,validate +2381,1,validate +1902,3,validate +511,3,validate +2806,1,validate +1852,2,validate +3110,3,validate +724,3,validate +3972,4,validate +674,2,validate +3843,2,validate +3406,1,validate +808,2,validate +3144,1,validate +2411,1,validate +546,2,validate +3323,3,validate +1324,4,validate +3669,2,validate +3011,2,validate +1062,3,validate +2228,1,validate +3536,3,validate +3973,4,validate +146,4,validate +2320,4,validate +3923,3,validate +2532,3,validate +1833,2,validate +3873,2,validate +4052,4,validate +705,3,validate +1092,3,validate +1304,2,validate +47,2,validate +3175,1,validate +2562,3,validate +647,3,validate +2384,2,validate +952,1,validate +3770,3,validate +210,1,validate +4066,1,validate +211,2,validate +2547,1,validate +2330,3,validate +3375,3,validate +3072,2,validate +331,3,validate +2627,2,validate +3538,2,validate +1673,3,validate +840,2,validate +678,3,validate +1449,2,validate +1886,3,validate +495,3,validate +3406,4,validate +2232,2,validate +3701,1,validate +3144,4,validate +841,2,validate +3177,1,validate +3094,3,validate +100,4,validate +9,2,validate +2961,4,validate +3390,1,validate +179,4,validate +3257,2,validate +2000,2,validate +871,2,validate +475,2,validate +3207,1,validate +1950,1,validate +996,2,validate +297,1,validate +3470,2,validate +476,3,validate +3857,2,validate +3724,3,validate +3853,4,validate +1980,1,validate +2417,2,validate +4020,1,validate +1026,2,validate +31,2,validate +1155,3,validate +1330,4,validate +4066,4,validate +2842,1,validate +2547,4,validate +3888,3,validate +1585,1,validate +3146,3,validate +1240,3,validate +1889,3,validate +1664,1,validate +973,4,validate +1622,4,validate +11,1,validate +1403,2,validate +2830,4,validate +1219,1,validate +2964,4,validate +399,2,validate +3572,3,validate +4080,1,validate +745,1,validate +3219,1,validate +3701,4,validate +1828,1,validate +3868,1,validate +3177,4,validate +3826,4,validate +782,4,test +3036,1,test +2519,3,test +825,2,test +1341,4,test +1553,3,test +3989,3,test +84,4,test +733,4,test +2732,3,test +2549,3,test +3849,1,test +3453,1,test +593,2,test +3807,4,test +4019,3,test +939,1,test +543,1,test +2628,3,test +2409,1,test +3624,4,test +3362,4,test +976,4,test +1272,2,test +1485,2,test +3442,4,test +1140,4,test +3950,2,test +1352,3,test +4001,4,test +2431,2,test +1739,3,test +1648,1,test +2997,4,test +694,2,test +2906,2,test +1952,3,test +1649,2,test +2298,2,test +2814,4,test +2081,4,test +645,2,test +2427,3,test +2857,2,test +1769,3,test +595,1,test +378,3,test +2115,2,test +3852,1,test +641,4,test +1982,3,test +1932,2,test +463,3,test +3324,3,test +1933,3,test +1537,3,test +3453,4,test +1191,3,test +3537,3,test +1234,1,test +1058,4,test +359,3,test +3437,1,test +2745,2,test +3395,4,test +918,2,test +3650,1,test +1093,3,test +2696,2,test +2393,1,test +2479,4,test +2217,4,test +1955,4,test +826,4,test +3221,3,test +1651,1,test +2775,2,test +1518,2,test +523,2,test +2597,1,test +3213,4,test +1335,2,test +3509,2,test +1252,4,test +2077,1,test +1681,1,test +686,1,test +2727,3,test +3934,2,test +1336,3,test +2939,2,test +382,4,test +2069,2,test +3455,3,test +3193,3,test +595,4,test +2840,1,test +3322,4,test +1669,4,test +192,1,test +362,3,test +3053,1,test +2495,2,test +1104,2,test +446,2,test +1054,1,test +575,3,test +4049,1,test +2524,1,test +1437,4,test +2482,4,test +1783,3,test +2828,3,test +3437,4,test +3952,4,test +3649,3,test +1996,3,test +2130,3,test +2779,3,test +2991,2,test +1297,1,test +639,1,test +943,3,test +3720,4,test +2463,4,test +2597,4,test +3071,3,test +1206,4,test +1552,3,test +423,3,test +3155,2,test +3671,4,test +2414,4,test +3022,3,test +1848,1,test +3459,4,test +3368,2,test +1977,2,test +324,2,test +3014,4,test +408,1,test +3622,3,test +2527,2,test +366,4,test +537,2,test +3093,4,test +1482,1,test +3918,1,test +1745,2,test +1612,3,test +825,1,test +84,3,test +2649,4,test +347,4,test +3815,2,test +559,3,test +2995,3,test +905,2,test +1817,4,test +3766,2,test +593,1,test +3674,4,test +639,4,test +3929,1,test +1797,2,test +3401,2,test +3442,3,test +1140,3,test +3139,2,test +3747,1,test +1352,2,test +3268,3,test +4001,3,test +2052,4,test +1656,4,test +96,3,test +2906,1,test +1482,4,test +1649,1,test +1566,3,test +392,1,test +2081,3,test +216,4,test +3777,1,test +2427,2,test +125,2,test +2857,1,test +3036,3,test +1170,2,test +1600,1,test +825,4,test +641,3,test +1383,2,test +463,2,test +1467,1,test +3324,2,test +1933,2,test +3849,3,test +3453,3,test +2499,4,test +593,4,test +3537,2,test +939,3,test +543,3,test +1151,2,test +1759,1,test +2409,3,test +4012,2,test +918,1,test +1272,4,test +3221,2,test +573,2,test +1485,4,test +523,1,test +481,4,test +2043,2,test +3172,2,test +3950,4,test +2431,4,test +2127,1,test +1648,3,test +1252,3,test +694,4,test +3123,2,test +2727,2,test +2906,4,test +1336,2,test +2298,4,test +645,4,test +1811,2,test +2857,4,test +595,3,test +2115,4,test +3852,3,test +3365,1,test +1932,4,test +3232,2,test +2495,1,test +1500,1,test +1104,1,test +3578,1,test +1233,2,test +2970,1,test +1105,2,test +1317,1,test +1234,3,test +3966,2,test +2138,1,test +3183,1,test +922,2,test +3437,3,test +2745,4,test +1354,4,test +3649,2,test +1397,2,test +2130,2,test +3000,1,test +918,4,test +3650,3,test +2476,1,test +1347,1,test +2696,4,test +2393,3,test +1651,3,test +1086,2,test +2775,4,test +1518,4,test +2597,3,test +3071,2,test +1206,3,test +3983,4,test +1511,1,test +1552,2,test +423,2,test +3155,1,test +1335,4,test +2160,1,test +3509,4,test +1681,3,test +3680,2,test +686,3,test +3022,2,test +3459,3,test +3934,4,test +2939,4,test +3764,1,test +3368,1,test +374,2,test +1977,1,test +2111,1,test +324,1,test +2069,4,test +3235,2,test +2840,3,test +537,1,test +671,1,test +192,3,test +1795,2,test +1929,2,test +1745,1,test +3053,3,test +1104,4,test +446,4,test +2008,2,test +1612,2,test +1054,3,test +3349,1,test +2354,1,test +1958,1,test +2524,3,test +347,3,test +1217,2,test +2995,2,test +905,1,test +1817,3,test +2559,2,test +3766,1,test +3167,1,test +2991,4,test +1297,3,test +639,3,test +1076,4,test +2808,4,test +1069,1,test +3634,2,test +2935,1,test +3155,4,test +3584,1,test +1848,3,test +3401,1,test +3139,1,test +324,4,test +887,1,test +3268,2,test +408,3,test +2011,2,test +2527,4,test +96,2,test +570,1,test +1482,3,test +3918,3,test +528,4,test +1962,2,test +1566,2,test +1745,4,test +3389,4,test +3036,2,test +3170,2,test +825,3,test +2387,1,test +2824,2,test +1383,1,test +2732,4,test +3815,4,test +3462,2,test +905,4,test +3849,2,test +593,3,test +3766,4,test +939,2,test +1151,1,test +2409,2,test +4012,1,test +3929,3,test +1797,4,test +573,1,test +1485,3,test +3401,4,test +3139,4,test +1528,1,test +2043,1,test +1352,4,test +2652,2,test +1648,2,test +3123,1,test +2865,2,test +2906,3,test +999,1,test +1649,3,test +2257,2,test +2298,3,test +392,3,test +3598,1,test +2207,1,test +2427,4,test +125,4,test +2857,3,test +1170,4,test +1600,3,test +3852,2,test +817,2,test +1982,4,test +1383,4,test +463,4,test +3232,1,test +634,2,test +3324,4,test +1933,4,test +1763,1,test +1105,1,test +3537,4,test +1234,2,test +3966,1,test +239,2,test +1151,4,test +4012,4,test +2838,2,test +56,2,test +1397,1,test +918,3,test +3650,2,test +4046,2,test +1093,4,test +2393,2,test +3001,1,test +7,2,test +3221,4,test +1086,1,test +573,4,test +1518,3,test +523,3,test +3172,4,test +2043,4,test +2127,3,test +2077,2,test +3680,1,test +2211,2,test +686,2,test +3123,4,test +1512,1,test +2727,4,test +1336,4,test +2939,3,test +1811,4,test +721,1,test +3844,1,test +192,2,test +3365,3,test +1196,1,test +1929,1,test +3053,2,test +3232,4,test +2495,3,test +1500,3,test +1104,3,test +2666,1,test +3578,3,test +2008,1,test +1054,2,test +1233,4,test +2970,3,test +1105,4,test +1317,3,test +4049,2,test +2221,1,test +3966,4,test +964,1,test +922,4,test +3649,4,test +1996,4,test +2130,4,test +3000,3,test +1826,1,test +2559,1,test +2779,4,test +2476,3,test +1347,3,test +1693,2,test +1297,2,test +1431,2,test +3684,2,test +3071,4,test +1594,1,test +3634,1,test +1332,1,test +1552,4,test +423,4,test +3155,3,test +2160,3,test +3680,4,test +3022,4,test +1848,2,test +3847,1,test +416,1,test +3368,3,test +374,4,test +1977,3,test +2111,3,test +324,3,test +3235,4,test +408,2,test +3622,4,test +2011,1,test +3927,2,test +537,3,test +671,3,test +1795,4,test +1962,1,test +967,1,test +1745,3,test +2008,4,test +1612,4,test +3170,1,test +3349,3,test +1180,1,test +1958,3,test +2824,1,test +651,2,test +3815,3,test +1217,4,test +559,4,test +2995,4,test +3462,1,test +905,3,test +2559,4,test +3725,2,test +3766,3,test +1993,1,test +2855,2,test +2072,1,test +207,2,test +1810,1,test +3929,2,test +1069,3,test +3584,3,test +1797,3,test +3401,3,test +3139,3,test +3048,1,test +2652,1,test +3268,4,test +1657,1,test +2011,4,test +96,4,test +570,3,test +2865,1,test +3261,1,test +3910,1,test +2257,1,test +1566,4,test +392,2,test +3777,2,test +125,3,test +3036,4,test +1170,3,test +3170,4,test +867,2,test +3599,1,test +1600,2,test +2824,4,test +817,1,test +1383,3,test +1080,2,test +2683,1,test +1467,2,test +634,1,test +3462,4,test +3849,4,test +939,4,test +543,4,test +239,1,test +1151,3,test +1759,2,test +2409,4,test +4012,3,test +2838,1,test +56,1,test +586,1,test +2268,1,test +4046,1,test +1794,1,test +7,1,test +573,3,test +354,1,test +3172,3,test +2043,3,test +2652,4,test +3081,1,test +2127,2,test +1648,4,test +2211,1,test +3123,3,test +1216,1,test +999,3,test +2474,2,test +2257,4,test +3598,3,test +2207,3,test +1811,3,test +3852,4,test +3365,2,test +1113,2,test +851,2,test +3232,3,test +634,4,test +1500,2,test +3578,2,test +1233,3,test +1763,3,test +2970,2,test +1105,3,test +1276,1,test +1317,2,test +1234,4,test +3966,3,test +2138,2,test +3183,2,test +922,3,test +2838,4,test +3267,1,test +56,4,test +1397,3,test +4088,1,test +3000,2,test +4046,4,test +3650,4,test +2476,2,test +1347,2,test +1044,1,test +2393,4,test +1693,1,test +3001,3,test +1431,1,test +7,4,test +436,1,test +1651,4,test +1086,3,test +1956,2,test +565,2,test +3684,1,test +1511,2,test +516,2,test +2160,2,test +2077,4,test +1681,4,test +3680,3,test +686,4,test +3764,2,test +374,3,test +2111,2,test +3235,3,test +3540,1,test +721,3,test +3927,1,test +2840,4,test +1067,2,test +671,2,test +3844,3,test +192,4,test +1795,3,test +1929,3,test +2537,2,test +3053,4,test +884,2,test +2883,1,test +2008,3,test +1054,4,test +3349,2,test +2354,2,test +1958,2,test +4049,4,test +2524,4,test +2221,3,test +651,1,test +1217,3,test +1260,1,test +1826,3,test +2559,3,test +3725,1,test +3167,2,test +1693,4,test +82,1,test +1297,4,test +2855,1,test +1431,4,test +3938,1,test +207,1,test +3118,2,test +1290,1,test +3330,1,test +1069,2,test +470,2,test +3684,4,test +1594,3,test +420,1,test +3634,3,test +1332,3,test +2935,2,test +3543,1,test +3584,2,test +1848,4,test +3847,3,test +416,3,test +887,2,test +408,4,test +2011,3,test +1920,1,test +3918,4,test +1962,3,test +55,1,test +967,3,test +2916,1,test +2654,1,test +3170,3,test +867,1,test +2387,2,test +2824,3,test +651,4,test +1080,1,test +3462,3,test +2855,4,test +115,1,test +3971,1,test +1810,3,test +3929,4,test +3314,1,test +1528,2,test +3747,4,test +3048,3,test +2652,3,test +1657,3,test +3394,2,test +2865,3,test +999,2,test +696,1,test +3910,3,test +2736,1,test +1649,4,test +2474,1,test +2257,3,test +392,4,test +1954,2,test +3598,2,test +3295,1,test +3777,4,test +2207,2,test +301,2,test +867,4,test +3599,3,test +1600,4,test +817,3,test +2683,3,test +1113,1,test +851,1,test +1467,4,test +634,3,test +2633,2,test +1763,2,test +69,1,test +239,3,test +1976,2,test +1759,4,test +4054,2,test +2838,3,test +56,3,test +2268,3,test +4046,3,test +1794,3,test +2960,1,test +3001,2,test +7,3,test +1956,1,test +565,1,test +523,4,test +2303,1,test +3081,3,test +2127,4,test +516,1,test +2036,2,test +2077,3,test +2211,3,test +1512,2,test +1216,3,test +721,2,test +1804,2,test +1067,1,test +3844,2,test +3365,4,test +1196,2,test +2537,1,test +851,4,test +2495,4,test +884,1,test +1500,4,test +2666,2,test +3578,4,test +2101,1,test +2970,4,test +1276,3,test +1317,4,test +4049,3,test +2221,2,test +2138,4,test +964,2,test +3183,4,test +1310,1,test +3267,3,test +3909,1,test +2914,1,test +3000,4,test +1826,2,test +1960,2,test +3563,1,test +2476,4,test +1261,1,test +1347,4,test +1044,3,test +2647,2,test +1693,3,test +1431,3,test +436,3,test +2731,1,test +782,2,test +1078,1,test +3118,1,test +565,4,test +470,1,test +3684,3,test +1553,1,test +1594,2,test +1332,2,test +1511,4,test +2160,4,test +683,1,test +3847,2,test +416,2,test +2415,1,test +3764,4,test +3368,4,test +1977,4,test +2111,4,test +2628,1,test +3927,3,test +537,4,test +671,4,test +3362,2,test +2537,4,test +967,2,test +884,4,test +3349,4,test +1442,2,test +2354,4,test +1180,2,test +1958,4,test +135,1,test +651,3,test +1739,1,test +1260,3,test +2863,2,test +2601,2,test +3725,3,test +3167,4,test +1993,2,test +2814,2,test +2855,3,test +3938,3,test +2072,2,test +207,3,test +1810,2,test +3118,4,test +378,1,test +1290,3,test +3330,3,test +1069,4,test +3414,2,test +420,3,test +2935,4,test +3543,3,test +3584,4,test +1537,1,test +1191,1,test +3747,3,test +3048,2,test +887,4,test +1657,2,test +3656,1,test +3394,1,test +3528,1,test +1920,3,test +3261,2,test +3395,2,test +3910,2,test +1742,2,test +55,3,test +1954,1,test +3777,3,test +697,1,test +301,1,test +2916,3,test +2654,3,test +1955,2,test +826,2,test +867,3,test +3599,2,test +2387,4,test +3637,1,test +1080,3,test +2683,2,test +1984,1,test +1467,3,test +2633,1,test +2197,1,test +3242,1,test +2980,1,test +1976,1,test +1759,3,test +4054,1,test +2585,2,test +1456,2,test +3193,1,test +3971,3,test +586,2,test +2268,2,test +1794,2,test +362,1,test +3314,3,test +3610,1,test +1528,4,test +354,2,test +3739,2,test +1437,2,test +3081,2,test +2036,1,test +1216,2,test +3952,2,test +3690,2,test +999,4,test +696,3,test +2736,3,test +2474,3,test +3598,4,test +3295,3,test +2207,4,test +301,4,test +122,1,test +1804,1,test +1938,1,test +943,1,test +3720,2,test +2067,2,test +1113,3,test +851,3,test +2633,4,test +1763,4,test +1276,2,test +1410,2,test +19,2,test +2751,1,test +2138,3,test +1976,4,test +3183,3,test +4054,4,test +103,1,test +3267,2,test +1397,4,test +4088,2,test +3093,2,test +1960,1,test +1044,2,test +2647,1,test +3001,4,test +436,2,test +1086,4,test +1956,3,test +782,1,test +565,3,test +1341,1,test +84,1,test +733,1,test +1511,3,test +516,3,test +2036,4,test +1512,4,test +3764,3,test +3807,1,test +3540,2,test +3674,2,test +721,4,test +3624,1,test +1804,4,test +1067,3,test +3066,2,test +3362,1,test +3844,4,test +976,1,test +1196,4,test +3491,2,test +1929,4,test +2537,3,test +884,3,test +2883,2,test +2666,4,test +1442,1,test +2354,3,test +1705,2,test +2221,4,test +3442,1,test +964,4,test +1310,3,test +1656,2,test +1260,2,test +2863,1,test +2997,1,test +2601,1,test +3909,3,test +1826,4,test +1960,4,test +3563,3,test +3167,3,test +1261,3,test +2647,4,test +82,2,test +2814,1,test +2081,1,test +216,2,test +2731,3,test +3938,2,test +1078,3,test +3118,3,test +1290,2,test +3330,2,test +470,3,test +641,1,test +3414,1,test +1594,4,test +420,2,test +3634,4,test +1332,4,test +2935,3,test +3543,2,test +683,3,test +3847,4,test +416,4,test +2415,3,test +3756,2,test +2499,2,test +887,3,test +1058,1,test +1920,2,test +3395,1,test +1742,1,test +1962,4,test +55,2,test +967,4,test +2479,1,test +2916,2,test +2217,1,test +2654,2,test +1955,1,test +826,1,test +1442,4,test +1180,4,test +2387,3,test +135,3,test +481,2,test +3213,1,test +2863,4,test +1252,1,test +2601,4,test +1993,4,test +382,1,test +115,2,test +2585,1,test +1456,1,test +2072,4,test +3971,2,test +1810,4,test +3322,1,test +66,2,test +1669,1,test +3414,4,test +3314,2,test +1528,3,test +3739,1,test +3048,4,test +1437,1,test +1657,4,test +3656,3,test +2482,1,test +3394,3,test +3528,3,test +3952,1,test +3261,4,test +1354,2,test +2865,4,test +3690,1,test +696,2,test +3910,4,test +2736,2,test +1742,4,test +1954,3,test +3295,2,test +697,3,test +301,3,test +3599,4,test +1692,2,test +817,4,test +3720,1,test +860,2,test +3637,3,test +2463,1,test +2067,1,test +2683,4,test +1984,3,test +1206,1,test +3983,2,test +2633,3,test +3671,1,test +3113,2,test +2414,1,test +2197,3,test +3459,1,test +69,2,test +3242,3,test +2980,3,test +1410,1,test +19,1,test +3192,2,test +239,4,test +1976,3,test +4054,3,test +2585,4,test +1456,4,test +3014,1,test +366,1,test +3143,2,test +586,4,test +2268,4,test +3093,1,test +1794,4,test +2960,2,test +3610,3,test +2911,2,test +354,4,test +3739,4,test +2303,2,test +3081,4,test +2649,1,test +347,1,test +2036,3,test +2211,4,test +1216,4,test +1512,3,test +3690,4,test +1817,1,test +3674,1,test +1076,2,test +122,3,test +1804,3,test +3066,1,test +1938,3,test +2808,2,test +1196,3,test +3491,1,test +2067,4,test +2666,3,test +2101,2,test +1276,4,test +1705,1,test +1410,4,test +19,4,test +2314,2,test +2751,3,test +964,3,test +103,3,test +1310,2,test +2052,1,test +1656,1,test +3267,4,test +3909,2,test +4088,4,test +2914,2,test +1960,3,test +3563,2,test +528,2,test +1261,2,test +1044,4,test +2647,3,test +216,1,test +3389,2,test +436,4,test +2731,2,test +782,3,test +1078,2,test +2519,2,test +1341,3,test +1553,2,test +3989,2,test +733,3,test +2732,2,test +683,2,test +2415,2,test +2549,2,test +3756,1,test +2499,1,test +3807,3,test +4019,2,test +2628,2,test +3540,4,test +3927,4,test +3624,3,test +3066,4,test +3362,3,test +976,3,test +3491,4,test +2883,4,test +1272,1,test +1442,3,test +1180,3,test +1485,1,test +1705,4,test +135,2,test +481,1,test +3950,1,test +2431,1,test +1739,2,test +1260,4,test +2863,3,test +2997,3,test +2601,3,test +694,1,test +3725,4,test +1993,3,test +2298,1,test +82,4,test +2814,3,test +645,1,test +3938,4,test +2072,3,test +207,4,test +1769,2,test +378,2,test +1290,4,test +3330,4,test +2115,1,test +66,1,test +3414,3,test +420,4,test +1982,2,test +3543,4,test +1932,1,test +1537,2,test +3756,4,test +1191,2,test +3656,2,test +1058,3,test +359,2,test +3528,2,test +1920,4,test +2745,1,test +3261,3,test +1354,1,test +3395,3,test +1742,3,test +55,4,test +1093,2,test +697,2,test +2696,1,test +2479,3,test +2916,4,test +2654,4,test +1955,3,test +826,3,test +1692,1,test +2775,1,test +1518,1,test +860,1,test +3637,2,test +1080,4,test +3213,3,test +1984,2,test +3983,1,test +1335,1,test +3509,1,test +3113,1,test +2197,2,test +3934,1,test +3242,2,test +2939,1,test +2980,2,test +382,3,test +3192,1,test +115,4,test +2069,1,test +2585,3,test +1456,3,test +3455,2,test +3193,2,test +3971,4,test +3143,1,test +586,3,test +3322,3,test +66,4,test +1669,3,test +362,2,test +3314,4,test +446,1,test +3610,2,test +575,2,test +2911,1,test +354,3,test +3739,3,test +1437,3,test +2482,3,test +1783,2,test +2828,2,test +3952,3,test +3690,3,test +696,4,test +2736,4,test +1996,2,test +2474,4,test +2779,2,test +3295,4,test +2991,1,test +1076,1,test +1692,4,test +122,2,test +1938,2,test +2808,1,test +943,2,test +3720,3,test +860,4,test +2463,3,test +2067,3,test +1113,4,test +3671,3,test +3113,4,test +2414,3,test +69,4,test +1410,3,test +19,3,test +2314,1,test +2751,2,test +3192,4,test +103,2,test +3014,3,test +3622,2,test +2527,1,test +366,3,test +3143,4,test +4088,3,test +3093,3,test +528,1,test +2960,4,test +3389,1,test +1956,4,test +2519,1,test +2911,4,test +1341,2,test +3989,1,test +84,2,test +2303,4,test +733,2,test +2732,1,test +516,4,test +2649,3,test +3815,1,test +559,2,test +2549,1,test +3807,2,test +4019,1,test +3540,3,test +3674,3,test +3624,2,test +1067,4,test +3066,3,test +976,2,test +3491,3,test +2883,3,test +2101,4,test +1797,1,test +1705,3,test +3442,2,test +2314,4,test +1140,2,test +1352,1,test +1310,4,test +4001,2,test +2052,3,test +1656,3,test +2997,2,test +3909,4,test +2914,4,test +3563,4,test +1952,1,test +1261,4,test +82,3,test +2081,2,test +216,3,test +2731,4,test +2427,1,test +125,1,test +1769,1,test +1078,4,test +1170,1,test +2519,4,test +470,4,test +641,2,test +1553,4,test +3989,4,test +1982,1,test +463,1,test +683,4,test +3324,1,test +1933,1,test +2415,4,test +2549,4,test +3756,3,test +3453,2,test +2499,3,test +3537,1,test +4019,4,test +543,2,test +2628,4,test +1058,2,test +359,1,test +1093,1,test +1272,3,test +2479,2,test +2217,2,test +3221,1,test +135,4,test +481,3,test +3172,1,test +3213,2,test +3950,3,test +2431,3,test +1739,4,test +1252,2,test +694,3,test +2727,1,test +1336,1,test +1952,4,test +382,2,test +115,3,test +645,3,test +1811,1,test +3455,1,test +1769,4,test +595,2,test +378,4,test +2115,3,test +3322,2,test +66,3,test +1669,2,test +1932,3,test +1537,4,test +1233,1,test +575,1,test +1191,4,test +3656,4,test +2482,2,test +3394,4,test +1783,1,test +359,4,test +3528,4,test +2828,1,test +922,1,test +3437,2,test +2745,3,test +1354,3,test +3649,1,test +1996,1,test +2130,1,test +1954,4,test +2779,1,test +697,4,test +2696,3,test +1651,2,test +1692,3,test +2775,3,test +860,3,test +3637,4,test +2463,2,test +2597,2,test +3071,1,test +1206,2,test +3983,3,test +1984,4,test +1552,1,test +423,1,test +1335,3,test +3671,2,test +3509,3,test +3113,3,test +1681,2,test +2414,2,test +2197,4,test +3459,2,test +3022,1,test +3934,3,test +69,3,test +3242,4,test +2980,4,test +374,1,test +3192,3,test +2069,3,test +3235,1,test +3455,4,test +3014,2,test +3193,4,test +3622,1,test +366,2,test +3143,3,test +2840,2,test +1795,1,test +2960,3,test +362,4,test +446,3,test +1612,1,test +3610,4,test +575,4,test +2911,3,test +2524,2,test +2303,3,test +1783,4,test +2649,2,test +347,2,test +2828,4,test +1217,1,test +559,1,test +2995,1,test +1817,2,test +2991,3,test +639,2,test +1076,3,test +122,4,test +1938,4,test +2808,3,test +943,4,test +2101,3,test +2314,3,test +2751,4,test +1140,1,test +103,4,test +3268,1,test +4001,1,test +2052,2,test +2527,3,test +96,1,test +2914,3,test +1482,2,test +3918,2,test +528,3,test +1566,1,test +3389,3,test +1695,2,calibrate +596,3,calibrate +1433,2,calibrate +2625,3,calibrate +624,3,calibrate +3150,4,calibrate +1988,4,calibrate +3591,3,calibrate +1737,4,calibrate +201,4,calibrate +3552,2,calibrate +273,1,calibrate +3446,2,calibrate +2336,3,calibrate +748,2,calibrate +2933,2,calibrate +1345,1,calibrate +3408,3,calibrate +2850,4,calibrate +2017,3,calibrate +1011,3,calibrate +603,1,calibrate +1941,4,calibrate +1264,3,calibrate +3397,2,calibrate +710,2,calibrate +3860,1,calibrate +1558,1,calibrate +4058,4,calibrate +907,3,calibrate +3191,1,calibrate +4069,4,calibrate +3119,3,calibrate +774,4,calibrate +75,3,calibrate +2500,3,calibrate +657,4,calibrate +2952,2,calibrate +3666,1,calibrate +209,3,calibrate +3131,4,calibrate +2671,1,calibrate +186,1,calibrate +858,3,calibrate +2869,4,calibrate +1299,2,calibrate +3332,3,calibrate +2233,4,calibrate +3070,3,calibrate +1238,4,calibrate +1667,1,calibrate +725,4,calibrate +2724,3,calibrate +2317,3,calibrate +2328,3,calibrate +1584,3,calibrate +3613,3,calibrate +2477,1,calibrate +2663,2,calibrate +76,3,calibrate +3731,4,calibrate +3346,4,calibrate +980,1,calibrate +49,4,calibrate +2014,1,calibrate +71,1,calibrate +2290,3,calibrate +2279,3,calibrate +3905,4,calibrate +888,3,calibrate +596,2,calibrate +637,3,calibrate +2625,2,calibrate +3810,4,calibrate +2837,1,calibrate +3715,1,calibrate +1644,4,calibrate +201,3,calibrate +3552,1,calibrate +1040,2,calibrate +2336,2,calibrate +748,1,calibrate +2933,1,calibrate +3408,2,calibrate +466,4,calibrate +2017,2,calibrate +3829,4,calibrate +1941,3,calibrate +1264,2,calibrate +3316,4,calibrate +710,1,calibrate +2825,4,calibrate +907,2,calibrate +2708,4,calibrate +3863,2,calibrate +3119,2,calibrate +177,4,calibrate +1758,3,calibrate +629,3,calibrate +774,3,calibrate +740,1,calibrate +75,2,calibrate +2500,2,calibrate +657,3,calibrate +2952,1,calibrate +1165,1,calibrate +858,2,calibrate +1613,2,calibrate +1299,1,calibrate +1385,4,calibrate +2536,4,calibrate +2199,1,calibrate +2233,3,calibrate +2210,1,calibrate +3574,2,calibrate +273,4,calibrate +3312,2,calibrate +725,3,calibrate +2317,2,calibrate +2328,2,calibrate +3613,2,calibrate +3658,1,calibrate +2663,1,calibrate +2016,1,calibrate +603,4,calibrate +4068,3,calibrate +3346,3,calibrate +4079,3,calibrate +2677,3,calibrate +2290,2,calibrate +2279,2,calibrate +3905,3,calibrate +3191,4,calibrate +3475,1,calibrate +888,2,calibrate +637,2,calibrate +2625,1,calibrate +375,2,calibrate +3779,3,calibrate +1644,3,calibrate +1142,3,calibrate +2297,1,calibrate +2734,2,calibrate +454,2,calibrate +1040,1,calibrate +2336,1,calibrate +3741,3,calibrate +747,4,calibrate +466,3,calibrate +3976,4,calibrate +496,4,calibrate +1941,2,calibrate +1264,1,calibrate +3316,3,calibrate +355,1,calibrate +71,4,calibrate +907,1,calibrate +960,4,calibrate +3714,3,calibrate +2825,3,calibrate +1400,1,calibrate +249,1,calibrate +2708,3,calibrate +3863,1,calibrate +177,3,calibrate +1758,2,calibrate +629,2,calibrate +1362,2,calibrate +3425,4,calibrate +2837,4,calibrate +1970,1,calibrate +1959,1,calibrate +553,3,calibrate +2882,3,calibrate +2190,4,calibrate +1005,2,calibrate +3715,4,calibrate +1613,1,calibrate +526,4,calibrate +2536,3,calibrate +1385,3,calibrate +3574,1,calibrate +2464,2,calibrate +2475,2,calibrate +3312,1,calibrate +2810,1,calibrate +2035,4,calibrate +4079,2,calibrate +4068,2,calibrate +2677,2,calibrate +1985,3,calibrate +3600,4,calibrate +2186,2,calibrate +3109,4,calibrate +637,1,calibrate +241,1,calibrate +375,1,calibrate +1590,4,calibrate +3779,2,calibrate +344,4,calibrate +1644,2,calibrate +283,3,calibrate +3049,4,calibrate +1165,4,calibrate +757,2,calibrate +1142,2,calibrate +2734,1,calibrate +454,1,calibrate +484,2,calibrate +1780,2,calibrate +3858,2,calibrate +1981,1,calibrate +830,1,calibrate +1312,4,calibrate +150,4,calibrate +161,4,calibrate +3741,2,calibrate +579,1,calibrate +2205,2,calibrate +747,3,calibrate +3976,3,calibrate +496,3,calibrate +731,4,calibrate +2016,4,calibrate +1776,4,calibrate +385,4,calibrate +2825,2,calibrate +960,3,calibrate +3714,2,calibrate +2604,3,calibrate +3475,4,calibrate +525,2,calibrate +2984,4,calibrate +1362,1,calibrate +3425,3,calibrate +553,2,calibrate +4063,3,calibrate +2190,3,calibrate +2220,4,calibrate +1005,1,calibrate +2882,2,calibrate +2923,3,calibrate +526,3,calibrate +2536,2,calibrate +1385,2,calibrate +1426,3,calibrate +913,3,calibrate +2475,1,calibrate +2464,1,calibrate +3679,4,calibrate +3573,4,calibrate +571,1,calibrate +1042,4,calibrate +4079,1,calibrate +4068,1,calibrate +2677,1,calibrate +1985,2,calibrate +3600,3,calibrate +3652,4,calibrate +2186,1,calibrate +1506,4,calibrate +355,4,calibrate +3109,3,calibrate +795,1,calibrate +1400,4,calibrate +1590,3,calibrate +3779,1,calibrate +837,3,calibrate +2003,1,calibrate +1072,4,calibrate +3049,3,calibrate +283,2,calibrate +757,1,calibrate +484,1,calibrate +1780,1,calibrate +1855,4,calibrate +3858,1,calibrate +3899,2,calibrate +1312,3,calibrate +161,3,calibrate +150,3,calibrate +3827,4,calibrate +2205,1,calibrate +3576,4,calibrate +496,2,calibrate +731,3,calibrate +2364,3,calibrate +906,4,calibrate +206,1,calibrate +385,3,calibrate +2604,2,calibrate +3382,4,calibrate +3265,4,calibrate +525,1,calibrate +2984,3,calibrate +1874,4,calibrate +734,4,calibrate +3425,2,calibrate +1623,4,calibrate +4063,2,calibrate +2923,2,calibrate +2220,3,calibrate +526,2,calibrate +1426,2,calibrate +913,2,calibrate +3679,3,calibrate +685,4,calibrate +1981,4,calibrate +830,4,calibrate +3573,3,calibrate +579,4,calibrate +3640,2,calibrate +1042,3,calibrate +328,4,calibrate +3412,4,calibrate +1695,1,calibrate +1433,1,calibrate +3944,4,calibrate +2804,4,calibrate +2060,4,calibrate +3652,3,calibrate +3933,4,calibrate +624,2,calibrate +1536,4,calibrate +3109,2,calibrate +3150,3,calibrate +1988,3,calibrate +3591,2,calibrate +1737,3,calibrate +3446,1,calibrate +837,2,calibrate +1072,3,calibrate +1258,4,calibrate +2850,3,calibrate +1855,3,calibrate +1011,2,calibrate +3899,1,calibrate +1683,4,calibrate +3827,3,calibrate +3397,1,calibrate +3576,3,calibrate +571,4,calibrate +4069,3,calibrate +2611,4,calibrate +2204,4,calibrate +4058,3,calibrate +2364,2,calibrate +2604,1,calibrate +209,2,calibrate +3382,3,calibrate +3131,3,calibrate +3265,3,calibrate +2869,3,calibrate +3332,2,calibrate +1874,3,calibrate +734,3,calibrate +3070,2,calibrate +1623,3,calibrate +1238,3,calibrate +4063,1,calibrate +2923,1,calibrate +2220,2,calibrate +2724,2,calibrate +2003,4,calibrate +1584,2,calibrate +1345,4,calibrate +76,2,calibrate +913,1,calibrate +3679,2,calibrate +3731,3,calibrate +685,3,calibrate +49,3,calibrate +3640,1,calibrate +3860,4,calibrate +3412,3,calibrate +1558,4,calibrate +596,1,calibrate +3810,3,calibrate +3933,3,calibrate +3944,3,calibrate +2804,3,calibrate +3652,2,calibrate +624,1,calibrate +1536,3,calibrate +3150,2,calibrate +1988,2,calibrate +3591,1,calibrate +3666,4,calibrate +186,4,calibrate +1737,2,calibrate +201,2,calibrate +2671,4,calibrate +1667,4,calibrate +3408,1,calibrate +1258,3,calibrate +2850,2,calibrate +2477,4,calibrate +2017,1,calibrate +1011,1,calibrate +3829,3,calibrate +1683,3,calibrate +980,4,calibrate +2014,4,calibrate +4058,2,calibrate +2611,3,calibrate +4069,2,calibrate +2204,3,calibrate +3119,1,calibrate +2364,1,calibrate +774,2,calibrate +75,1,calibrate +2500,1,calibrate +657,2,calibrate +209,1,calibrate +3382,2,calibrate +3131,2,calibrate +858,1,calibrate +2869,2,calibrate +3332,1,calibrate +2233,2,calibrate +3070,1,calibrate +3552,4,calibrate +1238,2,calibrate +273,3,calibrate +3446,4,calibrate +748,4,calibrate +2724,1,calibrate +2328,1,calibrate +1584,1,calibrate +725,2,calibrate +3613,1,calibrate +1345,3,calibrate +2317,1,calibrate +2933,4,calibrate +76,1,calibrate +3731,2,calibrate +3346,2,calibrate +603,3,calibrate +49,2,calibrate +3397,4,calibrate +710,4,calibrate +3860,3,calibrate +2290,1,calibrate +2279,1,calibrate +3905,2,calibrate +3191,3,calibrate +888,1,calibrate +3810,2,calibrate +3933,2,calibrate +2804,2,calibrate +3944,2,calibrate +740,4,calibrate +3666,3,calibrate +2952,4,calibrate +186,3,calibrate +201,1,calibrate +1299,4,calibrate +2199,4,calibrate +2210,4,calibrate +1667,3,calibrate +466,2,calibrate +3658,4,calibrate +2477,3,calibrate +2663,4,calibrate +3829,2,calibrate +1941,1,calibrate +980,3,calibrate +3316,2,calibrate +71,3,calibrate +4058,1,calibrate +4069,1,calibrate +2204,2,calibrate +2708,2,calibrate +596,4,calibrate +177,2,calibrate +2625,4,calibrate +1758,1,calibrate +629,1,calibrate +774,1,calibrate +2837,3,calibrate +3715,3,calibrate +657,1,calibrate +2233,1,calibrate +2297,4,calibrate +3552,3,calibrate +1238,1,calibrate +1040,4,calibrate +273,2,calibrate +2336,4,calibrate +748,3,calibrate +725,1,calibrate +2933,3,calibrate +603,2,calibrate +3731,1,calibrate +3346,1,calibrate +1264,4,calibrate +3905,1,calibrate +907,4,calibrate +3191,2,calibrate +249,4,calibrate +3810,1,calibrate +3863,4,calibrate +740,3,calibrate +344,3,calibrate +1970,4,calibrate +75,4,calibrate +1959,4,calibrate +1644,1,calibrate +186,2,calibrate +2952,3,calibrate +1165,3,calibrate +1142,1,calibrate +858,4,calibrate +1299,3,calibrate +1613,4,calibrate +2199,3,calibrate +2210,3,calibrate +3574,4,calibrate +1667,2,calibrate +3312,4,calibrate +3741,1,calibrate +2317,4,calibrate +2328,4,calibrate +747,2,calibrate +2810,4,calibrate +466,1,calibrate +3976,2,calibrate +3658,3,calibrate +2663,3,calibrate +3829,1,calibrate +2016,3,calibrate +1776,3,calibrate +3316,1,calibrate +71,2,calibrate +2825,1,calibrate +960,2,calibrate +3714,1,calibrate +2290,4,calibrate +2279,4,calibrate +2708,1,calibrate +3475,3,calibrate +888,4,calibrate +637,4,calibrate +241,4,calibrate +177,1,calibrate +375,4,calibrate +2837,2,calibrate +553,1,calibrate +3715,2,calibrate +2190,2,calibrate +2882,1,calibrate +2536,1,calibrate +1385,1,calibrate +2297,3,calibrate +2734,4,calibrate +454,4,calibrate +1040,3,calibrate +2035,2,calibrate +1985,1,calibrate +3600,2,calibrate +1506,3,calibrate +355,3,calibrate +1400,3,calibrate +249,3,calibrate +3863,3,calibrate +1590,2,calibrate +1758,4,calibrate +629,4,calibrate +1362,4,calibrate +740,2,calibrate +344,2,calibrate +1970,3,calibrate +1959,3,calibrate +1005,4,calibrate +283,1,calibrate +3049,2,calibrate +1613,3,calibrate +1165,2,calibrate +2210,2,calibrate +2199,2,calibrate +3574,3,calibrate +2464,4,calibrate +1312,2,calibrate +150,2,calibrate +3312,3,calibrate +161,2,calibrate +2475,4,calibrate +747,1,calibrate +2810,3,calibrate +3658,2,calibrate +3976,1,calibrate +496,1,calibrate +731,2,calibrate +2016,2,calibrate +906,3,calibrate +4079,4,calibrate +4068,4,calibrate +1776,2,calibrate +2677,4,calibrate +385,2,calibrate +960,1,calibrate +2186,4,calibrate +3475,2,calibrate +795,4,calibrate +241,3,calibrate +2984,2,calibrate +375,3,calibrate +3425,1,calibrate +3779,4,calibrate +2190,1,calibrate +526,1,calibrate +1426,1,calibrate +757,4,calibrate +1142,4,calibrate +2297,2,calibrate +454,3,calibrate +484,4,calibrate +2734,3,calibrate +1780,4,calibrate +3858,4,calibrate +1981,3,calibrate +830,3,calibrate +3573,2,calibrate +3741,4,calibrate +579,3,calibrate +2205,4,calibrate +1042,2,calibrate +328,3,calibrate +2035,1,calibrate +2060,3,calibrate +3600,1,calibrate +206,4,calibrate +1506,2,calibrate +355,2,calibrate +3109,1,calibrate +3714,4,calibrate +1400,2,calibrate +249,2,calibrate +1590,1,calibrate +525,4,calibrate +1362,3,calibrate +344,1,calibrate +1959,2,calibrate +1970,2,calibrate +837,1,calibrate +553,4,calibrate +2882,4,calibrate +1005,3,calibrate +1072,2,calibrate +3049,1,calibrate +1855,2,calibrate +2475,3,calibrate +1312,1,calibrate +150,1,calibrate +2464,3,calibrate +161,1,calibrate +3827,2,calibrate +3576,2,calibrate +2810,2,calibrate +571,3,calibrate +731,1,calibrate +1695,4,calibrate +906,2,calibrate +1776,1,calibrate +1433,4,calibrate +1985,4,calibrate +385,1,calibrate +2186,3,calibrate +795,3,calibrate +3265,2,calibrate +241,2,calibrate +2984,1,calibrate +1874,2,calibrate +734,2,calibrate +1623,2,calibrate +2220,1,calibrate +2003,3,calibrate +283,4,calibrate +757,3,calibrate +484,3,calibrate +1780,3,calibrate +3679,1,calibrate +685,2,calibrate +3858,3,calibrate +1981,2,calibrate +830,2,calibrate +3899,4,calibrate +3573,1,calibrate +579,2,calibrate +2205,3,calibrate +1042,1,calibrate +328,2,calibrate +3412,2,calibrate +1558,3,calibrate +2060,2,calibrate +206,3,calibrate +3652,1,calibrate +1506,1,calibrate +1536,2,calibrate +3150,1,calibrate +1988,1,calibrate +2604,4,calibrate +1737,1,calibrate +2671,3,calibrate +525,3,calibrate +4063,4,calibrate +2923,4,calibrate +1072,1,calibrate +1258,2,calibrate +2850,1,calibrate +1426,4,calibrate +1855,1,calibrate +913,4,calibrate +1683,2,calibrate +3827,1,calibrate +2014,3,calibrate +3576,1,calibrate +3640,4,calibrate +571,2,calibrate +2611,2,calibrate +1695,3,calibrate +906,1,calibrate +1433,3,calibrate +624,4,calibrate +3382,1,calibrate +795,2,calibrate +3131,1,calibrate +3591,4,calibrate +3265,1,calibrate +2869,1,calibrate +1874,1,calibrate +734,1,calibrate +1623,1,calibrate +3446,3,calibrate +837,4,calibrate +2003,2,calibrate +1345,2,calibrate +3408,4,calibrate +2017,4,calibrate +1011,4,calibrate +685,1,calibrate +3899,3,calibrate +49,1,calibrate +3397,3,calibrate +328,1,calibrate +3860,2,calibrate +3412,1,calibrate +1558,2,calibrate +710,3,calibrate +3119,4,calibrate +2364,4,calibrate +3933,1,calibrate +3944,1,calibrate +2804,1,calibrate +206,2,calibrate +2060,1,calibrate +1536,1,calibrate +2500,4,calibrate +3666,2,calibrate +209,4,calibrate +2671,2,calibrate +3332,4,calibrate +3070,4,calibrate +2724,4,calibrate +1584,4,calibrate +3613,4,calibrate +1258,1,calibrate +2477,2,calibrate +76,4,calibrate +1683,1,calibrate +980,2,calibrate +2014,2,calibrate +3640,3,calibrate +2611,1,calibrate +2204,1,calibrate diff --git a/pyproject.toml b/pyproject.toml index 374d6a8..213b854 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,6 +32,7 @@ dependencies = [ "omegaconf>=2.3", "orbax-checkpoint>=0.12.0", "wandb>=0.28.0", + "huggingface_hub>=0.24.0", ] [project.optional-dependencies] diff --git a/src/estimint/v2/conf/export_config.yaml b/src/estimint/v2/conf/export_config.yaml index 37e989a..af3ec5b 100644 --- a/src/estimint/v2/conf/export_config.yaml +++ b/src/estimint/v2/conf/export_config.yaml @@ -1,6 +1,6 @@ predictor: "prev_y9" target: "eir" -name: "{predictor}-{target}" +name: "${predictor}-${target}" # Data features_scaler_file: train_outputs/${name}/features_scaler.pkl @@ -8,12 +8,13 @@ target_scaler_file: train_outputs/${name}/target_scaler.pkl # Model - ensure these match the checkpointed model's parameters +model_name: "RQS" width: 256 depth: 2 mlp_residual: true -dropout_rate: 0.0 -n_bins: 32 +n_bins: 24 rqs_bounds: 6 +dropout_rate: 0.05 # Checkpointing checkpoint_dir: ??? diff --git a/src/estimint/v2/conf/sweeps/hbr_eir.yaml b/src/estimint/v2/conf/sweeps/hbr_eir.yaml new file mode 100644 index 0000000..b7b3de2 --- /dev/null +++ b/src/estimint/v2/conf/sweeps/hbr_eir.yaml @@ -0,0 +1,42 @@ +program: estimint/v2/train_base.py +project: estimint-sweep +name: sweep-hbr-eir +method: bayes +metric: + goal: minimize + name: val/loss + +parameters: + lr: + distribution: log_uniform_values + min: 1e-4 + max: 1e-2 + batch_size: + values: [256, 512] + dropout_rate: + values: [0.0, 0.05, 0.1] + + # model-specific + width: + values: [256, 512] + depth: + values: [2, 3, 4] + n_bins: + values: [24, 32] + rqs_bounds: + values: [6, 8] + mlp_residual: + values: [true, false] + + +command: + - ${env} + - python + - -m + - estimint.v2.train_base + - "hydra.output_subdir=null" + - "hydra.run.dir=." + - ${args_no_hyphens} + - use_wandb=true + - num_epochs=120 + - min_epochs=120 diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index b0df781..ae1a9b1 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -1,6 +1,7 @@ -predictor: "prev_y9" +predictor: "hbr_y9" target: "eir" name: "${predictor}-${target}" + # data data_file: "datasets/estimint_simulations_y9.parquet" split_file: "datasets/split_${name}.csv" @@ -11,7 +12,7 @@ calib_frac: 0.06 # model width: 256 -depth: 4 +depth: 2 mlp_residual: false dropout_rate: 0.0 n_bins: 24 diff --git a/src/estimint/v2/data/features.py b/src/estimint/v2/data/features.py index 226968b..b984974 100644 --- a/src/estimint/v2/data/features.py +++ b/src/estimint/v2/data/features.py @@ -1,6 +1,6 @@ import numpy as np from ..common.types import PredictorType -# TODO: update to handle eir-> hbr, hbr -> eir (move prev9) + FEATURES_BASE = ["dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use"] def get_features(predictor: PredictorType) -> list[str]: @@ -27,6 +27,10 @@ def __init__(self): self.mean_: np.ndarray | None = None self.scale_: np.ndarray | None = None + @property + def is_fitted(self) -> bool: + return self.mean_ is not None and self.scale_ is not None + def fit(self, X: np.ndarray) -> "StandardScaler": """ Fit feature means and scales. @@ -54,7 +58,7 @@ def transform(self, X: np.ndarray) -> np.ndarray: Returns: Standardized features. """ - if self.mean_ is None or self.scale_ is None: + if not self.is_fitted: raise ValueError("StandardScaler instance is not fitted yet.") return (X - self.mean_) / self.scale_ @@ -80,6 +84,6 @@ def inverse_transform(self, X: np.ndarray) -> np.ndarray: Returns: Features in the original scale. """ - if self.mean_ is None or self.scale_ is None: + if not self.is_fitted: raise ValueError("StandardScaler instance is not fitted yet.") return X * self.scale_ + self.mean_ diff --git a/src/estimint/v2/model_export.py b/src/estimint/v2/model_export.py new file mode 100644 index 0000000..7005d28 --- /dev/null +++ b/src/estimint/v2/model_export.py @@ -0,0 +1,61 @@ +import logging +import hydra +import pickle +from omegaconf import DictConfig, OmegaConf +from pathlib import Path +from .models.rqs import ConditionalRQS +from .training.checkpoint import restore_model, save_checkpoint +from .data.preprocess import StandardScaler, get_features +import json + +log = logging.getLogger(__name__) + +@hydra.main(version_base=None, config_path="conf", config_name="export_config") +def main(cfg: DictConfig): + """ + Export the trained model for sharing to other users. + + Args: + cfg: Hydra config for exporting the model. + """ + log.info(OmegaConf.to_yaml(cfg)) + artifact_dir = Path(cfg.artifact_dir) + artifact_dir.mkdir(parents=True, exist_ok=True) + + with open(cfg.features_scaler_file, "rb") as f: + feature_scaler: StandardScaler = pickle.load(f) + with open(cfg.target_scaler_file, "rb") as f: + target_scaler: StandardScaler = pickle.load(f) + if not feature_scaler.is_fitted or not target_scaler.is_fitted: + raise ValueError("Feature or target scaler is not fitted. Please fit the scalers before exporting the model.") + + features = get_features(cfg.predictor) + model = ConditionalRQS.from_cfg(cfg, n_context=len(features)) + model = restore_model(cfg.checkpoint_dir, cfg.model_name, model) + model.eval() + save_checkpoint(f"{cfg.artifact_dir}/checkpoint", cfg.model_name, model) + + + config = dict( + model_name=cfg.model_name, + predictor=cfg.predictor, + target=cfg.target, + width=cfg.width, + depth=cfg.depth, + n_bins=cfg.n_bins, + rqs_bounds=cfg.rqs_bounds, + mlp_residual=cfg.mlp_residual, + dropout_rate=cfg.dropout_rate, + features=features, + feature_scalar_mean=feature_scaler.mean_.tolist(), + feature_scalar_scale=feature_scaler.scale_.tolist(), + target_scalar_mean=target_scaler.mean_.tolist(), + target_scalar_scale=target_scaler.scale_.tolist(), + ) + + with (artifact_dir / "config.json").open("w") as f: + json.dump(config, f, indent=2) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/estimint/v2/models/hub.py b/src/estimint/v2/models/hub.py new file mode 100644 index 0000000..722af81 --- /dev/null +++ b/src/estimint/v2/models/hub.py @@ -0,0 +1,89 @@ +import json +from pathlib import Path +from typing import Any + +import numpy as np +from huggingface_hub import snapshot_download +from omegaconf import OmegaConf +from ..common.types import PredictorType + +from ..data.features import StandardScaler +from .rqs import ConditionalRQS, RQSArtifact +from ..training.checkpoint import restore_model + + +def _load_json(path: Path) -> dict[str, Any]: + with path.open("r") as f: + return json.load(f) + + +def _load_scaler(mean: list[float], scale: list[float]) -> StandardScaler: + scaler = StandardScaler() + scaler.mean_ = np.array(mean, dtype=np.float32) + scaler.scale_ = np.array(scale, dtype=np.float32) + return scaler + + +def _download_from_hf( + repo_id: str, + name: str, + *, + revision: str | None = None, + cache_dir: str | Path | None = None, + local_dir: str | Path | None = None, +) -> Path: + root = snapshot_download( + repo_id=repo_id, + allow_patterns=[f"{name}/*", f"{name}/**"], + revision=revision, + cache_dir=cache_dir, + local_dir=local_dir, + ) + return Path(root) / name + + +def load_model_artifact( + path_or_repo_id: str, + predictor: PredictorType, + target: PredictorType, + *, + revision: str | None = None, + cache_dir: str | Path | None = None, + local_dir: str | Path | None = None, +) -> RQSArtifact: + """ + Load an RQS inference artifact from a local folder or Hugging Face repo. + + Expected artifact layout, matching estimint.v2.model_export: + /config.json + /checkpoint/ + + Args: + path_or_repo_id: Hugging Face repo ID or local folder path. + name: Artifact subfolder name, e.g. "prev_y9-eir". + revision: Optional revision of the model to load from the repo. + cache_dir: Optional cache directory for the Hugging Face repo. + local_dir: Optional local directory to download the repo into. + + Returns: + RQSArtifact wrapping the restored model and fitted scalers. + """ + if Path(path_or_repo_id).exists(): + artifact_dir = Path(path_or_repo_id) + else: + artifact_dir = _download_from_hf( + path_or_repo_id, f"{predictor}-{target}", revision=revision, cache_dir=cache_dir, local_dir=local_dir + ) + + config = _load_json(artifact_dir / "config.json") + + features = config["features"] + model = ConditionalRQS.from_cfg(OmegaConf.create(config), n_context=len(features)) + model = restore_model(str(artifact_dir / "checkpoint"), config["model_name"], model) + model.eval() + + feature_scaler = _load_scaler(config["feature_scalar_mean"], config["feature_scalar_scale"]) + target_scaler = _load_scaler(config["target_scalar_mean"], config["target_scalar_scale"]) + + return RQSArtifact(model=model, feature_scaler=feature_scaler, target_scaler=target_scaler, features=features) + diff --git a/src/estimint/v2/models/rqs.py b/src/estimint/v2/models/rqs.py index 72e9502..af070af 100644 --- a/src/estimint/v2/models/rqs.py +++ b/src/estimint/v2/models/rqs.py @@ -5,6 +5,7 @@ from estimint.v2.data.features import StandardScaler import numpy as np from omegaconf import DictConfig +from ..common.types import PredictorType class ConditionalRQS(nnx.Module): """Conditional rational-quadratic spline flow. @@ -62,7 +63,7 @@ def _invert(z_scalar): def from_cfg(cls, cfg: DictConfig, n_context: int) -> "ConditionalRQS": return cls( n_context, - rngs=nnx.Rngs(cfg.seed), + rngs=nnx.Rngs(cfg.get("seed", 0)), width=cfg.width, depth=cfg.depth, n_bins=cfg.n_bins, @@ -70,29 +71,97 @@ def from_cfg(cls, cfg: DictConfig, n_context: int) -> "ConditionalRQS": residual=cfg.mlp_residual, dropout_rate=cfg.dropout_rate) + @classmethod + def from_pretrained( + cls, + path_or_repo_id: str, + predictor: PredictorType, + target: PredictorType, + *, + revision: str | None = None, + cache_dir: str | None = None, + local_dir: str | None = None, + ) -> "RQSArtifact": + """ + Load a pretrained RQS artifact from a local folder or Hugging Face repo. + + Example usage: + ``` + ConditionalRQS.from_pretrained("dide-ic/estiMINT", predictor="prev_y9", target="eir") + ConditionalRQS.from_pretrained("dide-ic/estiMINT", predictor="prev_y9", target="eir", revision="v0.1.0") + ``` + + Args: + path_or_repo_id: Hugging Face repo ID or local folder path. + predictor: Predictor type. + target: Target type. + revision: Optional revision of the model to load from the repo. + cache_dir: Optional cache directory for the Hugging Face repo. + local_dir: Optional local directory to download the repo into. + + Returns: + RQSArtifact containing the restored model and fitted scalers. + """ + from .hub import load_model_artifact + + return load_model_artifact( + path_or_repo_id, predictor, target, revision=revision, cache_dir=cache_dir, local_dir=local_dir, + ) + @nnx.jit def _forward(model: nnx.Module, context: jnp.ndarray, quantile: float): return model.quantile(context, quantile) # type: ignore +FeatureInput = np.ndarray | dict[str, float] | list[dict[str, float]] class RQSArtifact: - def __init__(self, model: nnx.Module, feature_scaler: StandardScaler, target_scaler: StandardScaler): + def __init__(self, model: nnx.Module, feature_scaler: StandardScaler, target_scaler: StandardScaler, features: list[str]): self.model = model self.feature_scaler = feature_scaler self.target_scaler = target_scaler self.conformal = dict() # alpha -> offset Q - - def _quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: - context = jnp.array(self.feature_scaler.transform(X_raw)) + self.feature_names = features + + if self.feature_scaler.mean_.shape[0] != len(self.feature_names): + raise ValueError(f"Feature scaler has {self.feature_scaler.mean_.shape[0]} features, but expected {len(self.feature_names)} features for features {self.feature_names}.") + + def _prepare_inputs(self, X_raw: FeatureInput) -> np.ndarray: + """Normalize user input to a (B, C) float32 array in training feature order.""" + if isinstance(X_raw, dict): + X_raw = [X_raw] + + if isinstance(X_raw, list): + if not X_raw: + raise ValueError("Input list is empty.") + + names = self.feature_names + rows = [] + for i, row in enumerate(X_raw): + missing = [f for f in names if f not in row] + extra = [f for f in row if f not in names] + if missing or extra: + raise KeyError(f"row {i}: missing={missing}, unexpected={extra}. Expected exactly {names}.") + rows.append([row[f] for f in names]) # preserve feature order + X = np.array(rows, dtype=np.float32) + else: + X = np.asarray(X_raw, dtype=np.float32) + if X.ndim == 1: + X = X[None, :] # add batch dimension + return X + + + def _quantile(self, X_raw: FeatureInput, quantile: float) -> np.ndarray: + X = self._prepare_inputs(X_raw) + context = jnp.array(self.feature_scaler.transform(X)) y0 = _forward(self.model, context, quantile) return np.maximum(0, np.power(10, self.target_scaler.inverse_transform(y0))) - def predict(self, X_raw: np.ndarray) -> np.ndarray: + def predict(self, X_raw: FeatureInput) -> np.ndarray: return self._quantile(X_raw, 0.5) # median prediction - def quantile(self, X_raw: np.ndarray, quantile: float) -> np.ndarray: + def quantile(self, X_raw: FeatureInput, quantile: float) -> np.ndarray: return self._quantile(X_raw, quantile) - def interval(self, X_raw: np.ndarray, alpha: float = 0.10) -> tuple[np.ndarray, np.ndarray]: + def interval(self, X_raw: FeatureInput, alpha: float = 0.10) -> tuple[np.ndarray, np.ndarray]: """Conformal (1-alpha) band with guaranteed coverage on calibration set. Returns (lower, upper) bounds.""" lower = self._quantile(X_raw, alpha / 2) upper = self._quantile(X_raw, 1 - alpha / 2) diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index a8a4814..69aaf15 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -20,10 +20,11 @@ log = logging.getLogger(__name__) def train_rqs(cfg: DictConfig, prepared_data: PreparedData): - model = ConditionalRQS.from_cfg(cfg, n_context=len(get_features(cfg.predictor))) + features = get_features(cfg.predictor) + model = ConditionalRQS.from_cfg(cfg, n_context=len(features)) model = train_model(model, cfg, prepared_data, rqs_loss, name="RQS", use_standardized_y=True) - rqs_artifact = RQSArtifact(model, prepared_data.feature_scaler, prepared_data.target_scaler) + rqs_artifact = RQSArtifact(model, prepared_data.feature_scaler, prepared_data.target_scaler, features=features) # ------------ calibration ------------------- calib_loader = make_loader( diff --git a/src/estimint/v2/training/checkpoint.py b/src/estimint/v2/training/checkpoint.py index 2a6090e..a4598fd 100644 --- a/src/estimint/v2/training/checkpoint.py +++ b/src/estimint/v2/training/checkpoint.py @@ -1,9 +1,4 @@ import logging -from contextlib import contextmanager -from dataclasses import dataclass -from os import PathLike -from typing import Any, Iterator - import flax.nnx as nnx from orbax.checkpoint import v1 as ocp from etils import epath diff --git a/train_base.log b/train_base.log new file mode 100644 index 0000000..00b37c7 --- /dev/null +++ b/train_base.log @@ -0,0 +1,118 @@ +[2026-08-05 11:18:52,695][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.0004012116914909676 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:18:53,175][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:18:53,329][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:18:54,617][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:18:54,634][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:18:54,641][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:18:54,666][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:18:54,667][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:18:59,814][estimint.v2.training.train_step][INFO] - Total parameters: 0.16M +[2026-08-05 11:19:07,768][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.00046407414511213577 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:19:08,175][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:19:08,320][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:19:09,374][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:19:09,390][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:19:09,397][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:19:09,422][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:19:09,423][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:19:14,501][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-05 11:22:04,560][__main__][INFO] - test R2=0.9992 RMSE=3.10 MAE=1.18 MSE=9.64 Bias=-0.65 +[2026-08-05 11:22:14,640][__main__][INFO] - Raw 90% interval coverage: 0.9838 +[2026-08-05 11:22:14,640][__main__][INFO] - Conformal 90% interval coverage: 0.9379 +[2026-08-05 11:22:28,865][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.00016850712573697677 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:22:29,352][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:22:29,503][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:22:31,176][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:22:31,201][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:22:31,212][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:22:31,256][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:22:31,257][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:22:37,444][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M +[2026-08-05 11:23:12,446][__main__][INFO] - test R2=0.9987 RMSE=3.89 MAE=1.19 MSE=15.16 Bias=-0.33 diff --git a/uv.lock b/uv.lock index 395135d..c748155 100644 --- a/uv.lock +++ b/uv.lock @@ -403,6 +403,7 @@ version = "1.5.4" source = { editable = "." } dependencies = [ { name = "flax" }, + { name = "huggingface-hub" }, { name = "jax" }, { name = "jaxtyping" }, { name = "numpy" }, @@ -468,6 +469,7 @@ requires-dist = [ { name = "estimint", extras = ["train", "viz", "download", "scenarios"], marker = "extra == 'all'" }, { name = "flax", specifier = ">=0.12.7" }, { name = "grain", marker = "extra == 'train'", specifier = ">=0.2.16" }, + { name = "huggingface-hub", specifier = ">=0.24.0" }, { name = "hydra-core", marker = "extra == 'train'", specifier = ">=1.3.2" }, { name = "jax", specifier = ">=0.10.1" }, { name = "jax", extras = ["cuda12"], marker = "extra == 'gpu'", specifier = ">=0.10.1" }, From fb494135baabc4bbe15645f656823fb16fd05543 Mon Sep 17 00:00:00 2001 From: Anmol Date: Thu, 6 Aug 2026 14:31:40 +0000 Subject: [PATCH 19/32] fix: remove .log from .gitignore to clean up ignored files --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7f31121..c13b651 100644 --- a/.gitignore +++ b/.gitignore @@ -42,7 +42,6 @@ output/ scripts/output/ *logs/ wandb/ -.log # Model training artifacts (regenerable; shipped copies live in src/estimint/data/) models/**/*.parquet From 9ccb0cdae9492a5be7224ab7809bd6261c584125 Mon Sep 17 00:00:00 2001 From: Anmol Date: Fri, 7 Aug 2026 08:10:17 +0000 Subject: [PATCH 20/32] tests + scaler updates --- src/estimint/utils.py | 22 + src/estimint/v2/common/types.py | 3 +- src/estimint/v2/conf/export_config.yaml | 6 +- src/estimint/v2/conf/sweeps/prev_eir.yaml | 42 - .../conf/sweeps/{hbr_eir.yaml => sweep.yaml} | 4 +- src/estimint/v2/conf/train_config.yaml | 4 +- src/estimint/v2/data/features.py | 25 + src/estimint/v2/data/preprocess.py | 11 +- src/estimint/v2/eval/metrics.py | 8 +- src/estimint/v2/model_export.py | 7 +- src/estimint/v2/models/hub.py | 12 +- src/estimint/v2/models/rqs.py | 9 +- src/estimint/v2/train_base.py | 5 +- src/estimint/v2/training/train_step.py | 10 +- tests/v2/__init__.py | 0 tests/v2/data/__init__.py | 0 tests/v2/data/test_dataset.py | 73 + tests/v2/data/test_features.py | 59 + tests/v2/data/test_preprocess.py | 299 + tests/v2/eval/__init__.py | 0 tests/v2/eval/test_metrics.py | 72 + tests/v2/models/__init__.py | 0 tests/v2/models/test_rqs.py | 249 + tests/v2/training/__init__.py | 0 tests/v2/training/test_calibrate.py | 45 + tests/v2/training/test_checkpoint.py | 74 + tests/v2/training/test_train_step.py | 193 + train_base.log | 9148 +++++++++++++++++ 28 files changed, 10303 insertions(+), 77 deletions(-) delete mode 100644 src/estimint/v2/conf/sweeps/prev_eir.yaml rename src/estimint/v2/conf/sweeps/{hbr_eir.yaml => sweep.yaml} (92%) create mode 100644 tests/v2/__init__.py create mode 100644 tests/v2/data/__init__.py create mode 100644 tests/v2/data/test_dataset.py create mode 100644 tests/v2/data/test_features.py create mode 100644 tests/v2/data/test_preprocess.py create mode 100644 tests/v2/eval/__init__.py create mode 100644 tests/v2/eval/test_metrics.py create mode 100644 tests/v2/models/__init__.py create mode 100644 tests/v2/models/test_rqs.py create mode 100644 tests/v2/training/__init__.py create mode 100644 tests/v2/training/test_calibrate.py create mode 100644 tests/v2/training/test_checkpoint.py create mode 100644 tests/v2/training/test_train_step.py diff --git a/src/estimint/utils.py b/src/estimint/utils.py index f8106ba..7e2164e 100644 --- a/src/estimint/utils.py +++ b/src/estimint/utils.py @@ -126,6 +126,28 @@ def mae(y: ArrayLike, yhat: ArrayLike) -> float: yhat = np.asarray(yhat) return np.mean(np.abs(y - yhat)) +def medape(y: ArrayLike, yhat: ArrayLike) -> float: + """ + Calculate Median Absolute Percentage Error. + + Equivalent to R's medape() function. + + Parameters + ---------- + y : array-like + True values + yhat : array-like + Predicted values + + Returns + ------- + float + Median APE value + """ + y = np.asarray(y) + yhat = np.asarray(yhat) + return np.median(np.abs((y - yhat) / np.maximum(1, y))) * 100 + def bias(y: ArrayLike, yhat: ArrayLike) -> float: """ Calculate bias (mean error). diff --git a/src/estimint/v2/common/types.py b/src/estimint/v2/common/types.py index 5103a93..5d4ebda 100644 --- a/src/estimint/v2/common/types.py +++ b/src/estimint/v2/common/types.py @@ -13,4 +13,5 @@ def from_cfg(cls, cfg: DictConfig, input_size: int) -> nnx.Module: ... class ModelArtifact(Protocol): def predict(self, X_raw: np.ndarray) -> np.ndarray: ... -PredictorType = Literal["prev_y9", "eir", "hbr_y9"] \ No newline at end of file +PredictorType = Literal["prev_y9", "eir", "hbr_y9"] +TargetType = Literal["eir", "hbr_y9"] \ No newline at end of file diff --git a/src/estimint/v2/conf/export_config.yaml b/src/estimint/v2/conf/export_config.yaml index af3ec5b..a8dff79 100644 --- a/src/estimint/v2/conf/export_config.yaml +++ b/src/estimint/v2/conf/export_config.yaml @@ -1,4 +1,4 @@ -predictor: "prev_y9" +predictor: "hbr_y9" target: "eir" name: "${predictor}-${target}" @@ -12,9 +12,9 @@ model_name: "RQS" width: 256 depth: 2 mlp_residual: true -n_bins: 24 +n_bins: 32 rqs_bounds: 6 -dropout_rate: 0.05 +dropout_rate: 0.0 # Checkpointing checkpoint_dir: ??? diff --git a/src/estimint/v2/conf/sweeps/prev_eir.yaml b/src/estimint/v2/conf/sweeps/prev_eir.yaml deleted file mode 100644 index 7e358f8..0000000 --- a/src/estimint/v2/conf/sweeps/prev_eir.yaml +++ /dev/null @@ -1,42 +0,0 @@ -program: estimint/v2/train_base.py -project: estimint-sweep -name: sweep-prev-eir -method: bayes -metric: - goal: minimize - name: val/loss - -parameters: - lr: - distribution: log_uniform_values - min: 1e-4 - max: 1e-2 - batch_size: - values: [256, 512] - dropout_rate: - values: [0.0, 0.05, 0.1] - - # model-specific - width: - values: [256, 512] - depth: - values: [2, 3, 4] - n_bins: - values: [24, 32] - rqs_bounds: - values: [6, 8] - mlp_residual: - values: [true, false] - - -command: - - ${env} - - python - - -m - - estimint.v2.train_base - - "hydra.output_subdir=null" - - "hydra.run.dir=." - - ${args_no_hyphens} - - use_wandb=true - - num_epochs=120 - - min_epochs=120 diff --git a/src/estimint/v2/conf/sweeps/hbr_eir.yaml b/src/estimint/v2/conf/sweeps/sweep.yaml similarity index 92% rename from src/estimint/v2/conf/sweeps/hbr_eir.yaml rename to src/estimint/v2/conf/sweeps/sweep.yaml index b7b3de2..37d4929 100644 --- a/src/estimint/v2/conf/sweeps/hbr_eir.yaml +++ b/src/estimint/v2/conf/sweeps/sweep.yaml @@ -1,6 +1,6 @@ program: estimint/v2/train_base.py project: estimint-sweep -name: sweep-hbr-eir +name: estimint-sweep method: bayes metric: goal: minimize @@ -40,3 +40,5 @@ command: - use_wandb=true - num_epochs=120 - min_epochs=120 + - predictor=eir + - target=hbr_y9 diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index ae1a9b1..f7aa538 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -1,4 +1,4 @@ -predictor: "hbr_y9" +predictor: "prev_y9" target: "eir" name: "${predictor}-${target}" @@ -21,7 +21,7 @@ rqs_bounds: 6 # Hyperparameters num_epochs: 120 min_epochs: 100 -patience: 50 +patience: 30 lr: 1e-3 batch_size: 256 weight_decay: 1e-4 diff --git a/src/estimint/v2/data/features.py b/src/estimint/v2/data/features.py index b984974..1554a9f 100644 --- a/src/estimint/v2/data/features.py +++ b/src/estimint/v2/data/features.py @@ -2,6 +2,7 @@ from ..common.types import PredictorType FEATURES_BASE = ["dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use"] +LOG_FEATURES = ("eir", "hbr_y9") def get_features(predictor: PredictorType) -> list[str]: """ @@ -87,3 +88,27 @@ def inverse_transform(self, X: np.ndarray) -> np.ndarray: if not self.is_fitted: raise ValueError("StandardScaler instance is not fitted yet.") return X * self.scale_ + self.mean_ + +class FeatureScaler(StandardScaler): + """StandardScaler that log10s the features that are in LOG_FEATURES before standardizing them.""" + def __init__(self, log_idx: list[int] = []): + super().__init__() + self.log_idx = log_idx + + @classmethod + def for_features(cls, features: list[str]) -> "FeatureScaler": + return cls([i for i, f in enumerate(features) if f in LOG_FEATURES]) + + def _pre(self, X: np.ndarray) -> np.ndarray: + if not self.log_idx: + return X + X = np.array(X, copy=True) + X[..., self.log_idx] = np.log10(np.maximum(X[..., self.log_idx], 1e-12)) + return X + + def fit(self, X: np.ndarray) -> "FeatureScaler": + super().fit(self._pre(X)) + return self + + def transform(self, X: np.ndarray) -> np.ndarray: + return super().transform(self._pre(X)) diff --git a/src/estimint/v2/data/preprocess.py b/src/estimint/v2/data/preprocess.py index 1cc4ffa..f951b07 100644 --- a/src/estimint/v2/data/preprocess.py +++ b/src/estimint/v2/data/preprocess.py @@ -6,11 +6,12 @@ import logging from pathlib import Path import numpy as np -from .features import StandardScaler, get_features +from .features import StandardScaler, FeatureScaler, get_features from estimint.data_processing import make_value_weights import pickle from dataclasses import dataclass, field from typing import cast + log = logging.getLogger(__name__) @dataclass @@ -243,7 +244,7 @@ def _save_split(path, split_ps: SplitParamSims): pd.DataFrame(rows, columns=["parameter_index", "simulation_index", "split"]).to_csv(path, index=False) log.info(f"Split saved to {path}") -def _fit_features_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: str, features: list[str]) -> StandardScaler: +def _fit_features_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], output_dir: str, features: list[str]) -> FeatureScaler: """ Fit and save the static feature scaler. @@ -262,7 +263,7 @@ def _fit_features_scaler(df: pd.DataFrame, train_ps: set[tuple[int, int]], outpu .drop_duplicates(subset=["_ps"])[features] .to_numpy(dtype=np.float32) ) - scaler = StandardScaler() + scaler = FeatureScaler.for_features(features) scaler.fit(train_static) save_path = Path(output_dir) / "features_scaler.pkl" @@ -343,8 +344,8 @@ def _build_data( "x_raw": X_raw, "x": X, "y_raw": Y_raw, - "y": Y, - "y_std": Y_std, + "y": Y, # log10 target + "y_std": Y_std, # standardized log10 target "w": W, "ps": np.asarray(ps, dtype=np.int32), # (2,) parameter_index, simulation_index } diff --git a/src/estimint/v2/eval/metrics.py b/src/estimint/v2/eval/metrics.py index 5f4860d..444f662 100644 --- a/src/estimint/v2/eval/metrics.py +++ b/src/estimint/v2/eval/metrics.py @@ -1,6 +1,6 @@ import numpy as np from grain.python import DataLoader -from estimint.utils import mse, r2, rmse, mae, bias +from estimint.utils import mse, r2, rmse, mae, bias, medape from dataclasses import dataclass from estimint.v2.common.types import ModelArtifact @@ -9,8 +9,10 @@ class Metrics: mse: float r2: float rmse: float + log10_mse: float mae: float bias: float + medape: float def compute_metrics( model_artifact: ModelArtifact, @@ -23,7 +25,9 @@ def compute_metrics( r2=r2(targets, preds), rmse=rmse(targets, preds), mae=mae(targets, preds), - bias=bias(targets, preds) + bias=bias(targets, preds), + medape=medape(targets, preds), + log10_mse=mse(np.log10(targets), np.log10(preds)) ) diff --git a/src/estimint/v2/model_export.py b/src/estimint/v2/model_export.py index 7005d28..0d51f5f 100644 --- a/src/estimint/v2/model_export.py +++ b/src/estimint/v2/model_export.py @@ -5,7 +5,7 @@ from pathlib import Path from .models.rqs import ConditionalRQS from .training.checkpoint import restore_model, save_checkpoint -from .data.preprocess import StandardScaler, get_features +from .data.preprocess import StandardScaler, FeatureScaler, get_features import json log = logging.getLogger(__name__) @@ -23,7 +23,7 @@ def main(cfg: DictConfig): artifact_dir.mkdir(parents=True, exist_ok=True) with open(cfg.features_scaler_file, "rb") as f: - feature_scaler: StandardScaler = pickle.load(f) + feature_scaler: FeatureScaler = pickle.load(f) with open(cfg.target_scaler_file, "rb") as f: target_scaler: StandardScaler = pickle.load(f) if not feature_scaler.is_fitted or not target_scaler.is_fitted: @@ -49,6 +49,7 @@ def main(cfg: DictConfig): features=features, feature_scalar_mean=feature_scaler.mean_.tolist(), feature_scalar_scale=feature_scaler.scale_.tolist(), + feature_log_idx=list(feature_scaler.log_idx), target_scalar_mean=target_scaler.mean_.tolist(), target_scalar_scale=target_scaler.scale_.tolist(), ) @@ -56,6 +57,8 @@ def main(cfg: DictConfig): with (artifact_dir / "config.json").open("w") as f: json.dump(config, f, indent=2) + log.info(f"Exported model and config to {artifact_dir}") + if __name__ == "__main__": main() \ No newline at end of file diff --git a/src/estimint/v2/models/hub.py b/src/estimint/v2/models/hub.py index 722af81..3cc561f 100644 --- a/src/estimint/v2/models/hub.py +++ b/src/estimint/v2/models/hub.py @@ -5,9 +5,9 @@ import numpy as np from huggingface_hub import snapshot_download from omegaconf import OmegaConf -from ..common.types import PredictorType +from ..common.types import PredictorType, TargetType -from ..data.features import StandardScaler +from ..data.features import StandardScaler, FeatureScaler from .rqs import ConditionalRQS, RQSArtifact from ..training.checkpoint import restore_model @@ -17,8 +17,8 @@ def _load_json(path: Path) -> dict[str, Any]: return json.load(f) -def _load_scaler(mean: list[float], scale: list[float]) -> StandardScaler: - scaler = StandardScaler() +def _load_scaler(mean: list[float], scale: list[float], log_idx: list[int] | None = None) -> StandardScaler: + scaler = FeatureScaler(log_idx) if log_idx is not None else StandardScaler() scaler.mean_ = np.array(mean, dtype=np.float32) scaler.scale_ = np.array(scale, dtype=np.float32) return scaler @@ -45,7 +45,7 @@ def _download_from_hf( def load_model_artifact( path_or_repo_id: str, predictor: PredictorType, - target: PredictorType, + target: TargetType, *, revision: str | None = None, cache_dir: str | Path | None = None, @@ -82,7 +82,7 @@ def load_model_artifact( model = restore_model(str(artifact_dir / "checkpoint"), config["model_name"], model) model.eval() - feature_scaler = _load_scaler(config["feature_scalar_mean"], config["feature_scalar_scale"]) + feature_scaler = _load_scaler(config["feature_scalar_mean"], config["feature_scalar_scale"], config["feature_log_idx"]) target_scaler = _load_scaler(config["target_scalar_mean"], config["target_scalar_scale"]) return RQSArtifact(model=model, feature_scaler=feature_scaler, target_scaler=target_scaler, features=features) diff --git a/src/estimint/v2/models/rqs.py b/src/estimint/v2/models/rqs.py index af070af..e5e6d27 100644 --- a/src/estimint/v2/models/rqs.py +++ b/src/estimint/v2/models/rqs.py @@ -2,10 +2,10 @@ from .mlp import MLP import jax.numpy as jnp import jax -from estimint.v2.data.features import StandardScaler +from estimint.v2.data.features import StandardScaler, FeatureScaler import numpy as np from omegaconf import DictConfig -from ..common.types import PredictorType +from ..common.types import PredictorType, TargetType class ConditionalRQS(nnx.Module): """Conditional rational-quadratic spline flow. @@ -76,7 +76,7 @@ def from_pretrained( cls, path_or_repo_id: str, predictor: PredictorType, - target: PredictorType, + target: TargetType, *, revision: str | None = None, cache_dir: str | None = None, @@ -104,6 +104,7 @@ def from_pretrained( """ from .hub import load_model_artifact + return load_model_artifact( path_or_repo_id, predictor, target, revision=revision, cache_dir=cache_dir, local_dir=local_dir, ) @@ -114,7 +115,7 @@ def _forward(model: nnx.Module, context: jnp.ndarray, quantile: float): FeatureInput = np.ndarray | dict[str, float] | list[dict[str, float]] class RQSArtifact: - def __init__(self, model: nnx.Module, feature_scaler: StandardScaler, target_scaler: StandardScaler, features: list[str]): + def __init__(self, model: nnx.Module, feature_scaler: FeatureScaler | StandardScaler, target_scaler: StandardScaler, features: list[str]): self.model = model self.feature_scaler = feature_scaler self.target_scaler = target_scaler diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index 69aaf15..925642e 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -10,7 +10,6 @@ from .data.dataset import make_loader import wandb from .data.features import get_features -from flax import nnx from .training.train_step import train_model import numpy as np from estimint.v2.eval.metrics import compute_metrics @@ -50,9 +49,9 @@ def train_rqs(cfg: DictConfig, prepared_data: PreparedData): drop_remainder=True, ) metrics = compute_metrics(rqs_artifact, test_loader) - log.info(f"test R2={metrics.r2:.4f} RMSE={metrics.rmse:.2f} MAE={metrics.mae:.2f} MSE={metrics.mse:.2f} Bias={metrics.bias:.2f}") + log.info(f"test R2={metrics.r2:.4f} RMSE={metrics.rmse:.2f} MAE={metrics.mae:.2f} MSE={metrics.mse:.2f} Bias={metrics.bias:.2f} Median APE={metrics.medape:.2f} Log10 MSE={metrics.log10_mse:.2f}") if cfg.use_wandb: - wandb.log({"test/r2": metrics.r2, "test/rmse": metrics.rmse, "test/mae": metrics.mae, "test/mse": metrics.mse, "test/bias": metrics.bias}) + wandb.log({"test/r2": metrics.r2, "test/rmse": metrics.rmse, "test/mae": metrics.mae, "test/mse": metrics.mse, "test/bias": metrics.bias, "test/medape": metrics.medape, "test/log10_mse": metrics.log10_mse}) # confidence interval evaluation test_loader = make_loader( diff --git a/src/estimint/v2/training/train_step.py b/src/estimint/v2/training/train_step.py index 74d3df8..fb720e1 100644 --- a/src/estimint/v2/training/train_step.py +++ b/src/estimint/v2/training/train_step.py @@ -102,7 +102,7 @@ def train_model( # ---- training loop ---- patience_n = 0 best_val_loss = float("inf") - best_model = nnx.state(model) + best_state = jax.tree.map(lambda x: x, nnx.state(model)) epoch_pbar = tqdm(range(cfg.num_epochs), desc="Epoch") for epoch in epoch_pbar: # remake train loader each epoch to reshuffle with new seed @@ -129,19 +129,17 @@ def train_model( ) if cfg.use_wandb: wandb.log({"train/loss": avg_train_loss, "val/loss": avg_val_loss, "epoch": epoch}) - if epoch < cfg.min_epochs: - continue if avg_val_loss < best_val_loss: best_val_loss = avg_val_loss - best_model = nnx.state(model) + best_state = jax.tree.map(lambda x: x, nnx.state(model)) patience_n = 0 else: patience_n += 1 - if patience_n >= cfg.patience: + if epoch >= cfg.min_epochs and patience_n >= cfg.patience: log.info(f"Early stopping at epoch {epoch} with best val loss {best_val_loss:.6f}") break - nnx.update(model, best_model) + nnx.update(model, best_state) save_checkpoint(cfg.checkpoint_dir, name, model) return model \ No newline at end of file diff --git a/tests/v2/__init__.py b/tests/v2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/v2/data/__init__.py b/tests/v2/data/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/v2/data/test_dataset.py b/tests/v2/data/test_dataset.py new file mode 100644 index 0000000..08987d0 --- /dev/null +++ b/tests/v2/data/test_dataset.py @@ -0,0 +1,73 @@ +""" +Tests for the Grain data source and loader. +""" + +import numpy as np +import pytest + +from estimint.v2.data.dataset import DataSource, make_loader + + +def make_records(n=10, n_features=3): + return [ + { + "x": np.full(n_features, i, dtype=np.float32), + "y_std": np.float32(i), + "w": np.float32(1.0), + "ps": np.array([i, 0], dtype=np.int32), + } + for i in range(n) + ] + + +@pytest.fixture +def records(): + return make_records() + + +class TestDataSource: + def test_length_matches_the_records(self, records): + assert len(DataSource(records)) == len(records) + + def test_getitem_returns_the_record(self, records): + assert DataSource(records)[3] is records[3] + + +class TestMakeLoader: + def test_batches_have_a_leading_batch_dimension(self, records): + batch = next(iter(make_loader(records, batch_size=5))) + assert batch["x"].shape == (5, 3) + assert batch["y_std"].shape == (5,) + assert batch["ps"].shape == (5, 2) + + def test_drop_remainder_discards_the_partial_batch(self, records): + batches = list(make_loader(records, batch_size=4, drop_remainder=True)) + assert [b["y_std"].shape[0] for b in batches] == [4, 4] + + def test_keeping_the_remainder_yields_every_record(self, records): + batches = list(make_loader(records, batch_size=4, drop_remainder=False)) + assert [b["y_std"].shape[0] for b in batches] == [4, 4, 2] + + def test_unshuffled_loader_preserves_record_order(self, records): + batches = list(make_loader(records, batch_size=5, shuffle=False)) + seen = np.concatenate([b["y_std"] for b in batches]) + np.testing.assert_array_equal(seen, np.arange(len(records), dtype=np.float32)) + + def test_shuffle_reorders_records_without_losing_any(self, records): + batches = list(make_loader(records, batch_size=5, shuffle=True, seed=0)) + seen = np.concatenate([b["y_std"] for b in batches]) + assert sorted(seen) == list(np.arange(len(records), dtype=np.float32)) + + def test_same_seed_gives_the_same_shuffle(self, records): + order = lambda seed: np.concatenate( + [b["y_std"] for b in make_loader(records, batch_size=5, shuffle=True, seed=seed)] + ) + np.testing.assert_array_equal(order(0), order(0)) + assert not np.array_equal(order(0), order(1)) + + def test_loader_covers_exactly_one_epoch(self, records): + assert sum(b["y_std"].shape[0] for b in make_loader(records, batch_size=2)) == len(records) + + def test_full_batch_loads_everything_at_once(self, records): + batches = list(make_loader(records, batch_size=len(records))) + assert len(batches) == 1 and batches[0]["x"].shape == (len(records), 3) diff --git a/tests/v2/data/test_features.py b/tests/v2/data/test_features.py new file mode 100644 index 0000000..4bed9b1 --- /dev/null +++ b/tests/v2/data/test_features.py @@ -0,0 +1,59 @@ +""" +Tests for the v2 feature naming and standardization helpers. +""" + +import numpy as np +import pytest + +from estimint.v2.data.features import FEATURES_BASE, StandardScaler, get_features + + +class TestGetFeatures: + @pytest.mark.parametrize("predictor", ["prev_y9", "eir", "hbr_y9"]) + def test_predictor_leads_the_feature_list(self, predictor): + features = get_features(predictor) + assert features[0] == predictor + assert features[1:] == FEATURES_BASE + + def test_feature_names_are_unique(self): + features = get_features("prev_y9") + assert len(set(features)) == len(features) + + +class TestStandardScaler: + @pytest.fixture + def X(self): + return np.array([[1.0, 10.0], [2.0, 20.0], [3.0, 30.0]]) + + def test_unfitted_scaler_raises(self, X): + scaler = StandardScaler() + assert not scaler.is_fitted + with pytest.raises(ValueError, match="not fitted"): + scaler.transform(X) + with pytest.raises(ValueError, match="not fitted"): + scaler.inverse_transform(X) + + def test_fit_transform_standardizes_columns(self, X): + Z = StandardScaler().fit_transform(X) + np.testing.assert_allclose(Z.mean(axis=0), 0.0, atol=1e-12) + np.testing.assert_allclose(Z.std(axis=0), 1.0) + + def test_inverse_transform_round_trips(self, X): + scaler = StandardScaler().fit(X) + np.testing.assert_allclose(scaler.inverse_transform(scaler.transform(X)), X) + + def test_constant_column_does_not_divide_by_zero(self): + X = np.array([[5.0, 1.0], [5.0, 2.0], [5.0, 3.0]]) + scaler = StandardScaler().fit(X) + assert scaler.scale_[0] == 1.0 + assert np.all(np.isfinite(scaler.transform(X))) + + def test_fit_returns_self(self, X): + scaler = StandardScaler() + assert scaler.fit(X) is scaler + assert scaler.is_fitted + + def test_transform_uses_train_statistics(self, X): + scaler = StandardScaler().fit(X) + # a row equal to the training mean maps to zero + np.testing.assert_allclose(scaler.transform(X.mean(axis=0)[None, :]), 0.0, atol=1e-12) diff --git a/tests/v2/data/test_preprocess.py b/tests/v2/data/test_preprocess.py new file mode 100644 index 0000000..0c090fa --- /dev/null +++ b/tests/v2/data/test_preprocess.py @@ -0,0 +1,299 @@ +""" +Tests for the v2 data preparation pipeline: filtering, splitting, scaling, record building. +""" + +import pickle + +import numpy as np +import pandas as pd +import pytest +from omegaconf import OmegaConf + +from estimint.v2.data.features import FEATURES_BASE, StandardScaler, get_features +from estimint.v2.data.preprocess import ( + SplitParamSims, + _assign_param_group, + _assign_param_splits, + _build_data, + _create_split, + _filter_by_threshold, + _fit_features_scaler, + _fit_target_scaler, + _load_split, + _parameter_strata, + _save_split, + prepare_data, +) + +N_PARAMS = 20 +N_SIMS = 2 +ROWS_PER_SIM = 3 + + +def make_df(n_params=N_PARAMS, n_sims=N_SIMS, rows_per_sim=ROWS_PER_SIM, low_prev_params=()): + """Synthetic simulation frame: constant feature/target values within a (param, sim) pair.""" + rng = np.random.default_rng(0) + rows = [] + for p in range(n_params): + for s in range(n_sims): + static = {f: float(rng.uniform(0, 1)) for f in FEATURES_BASE} + static["prev_y9"] = 0.001 if p in low_prev_params else float(rng.uniform(0.05, 0.8)) + static["hbr_y9"] = float(rng.uniform(1, 100)) + static["eir"] = float(rng.uniform(0.1, 500)) + rows += [{"parameter_index": p, "simulation_index": s, **static}] * rows_per_sim + return pd.DataFrame(rows) + + +@pytest.fixture +def df(): + return make_df() + + +@pytest.fixture +def filtered_df(df): + return _filter_by_threshold(df) + + +@pytest.fixture +def cfg(tmp_path): + return OmegaConf.create( + { + "seed": 0, + "predictor": "prev_y9", + "target": "eir", + "stratify": False, + "use_existing_split": False, + "split_file": str(tmp_path / "split.csv"), + "output_dir": str(tmp_path / "out"), + } + ) + + +def param_indices(pairs): + return {p for p, _ in pairs} + + +class TestFilterByThreshold: + def test_drops_pairs_below_prevalence_threshold(self): + df = make_df(n_params=6, low_prev_params=(1, 4)) + out = _filter_by_threshold(df) + assert param_indices(out["_ps"]) == {0, 2, 3, 5} + + def test_adds_pair_column(self, filtered_df): + assert list(filtered_df["_ps"].iloc[0]) == [ + filtered_df["parameter_index"].iloc[0], + filtered_df["simulation_index"].iloc[0], + ] + + def test_keeps_everything_above_threshold(self, df, filtered_df): + assert len(filtered_df) == len(df) + + +class TestSplitting: + def test_splits_are_disjoint_and_cover_all_pairs(self, filtered_df): + split = _create_split(filtered_df, seed=0, calib_frac=0.1) + all_pairs = set(filtered_df["_ps"]) + parts = [split.train, split.val, split.calib, split.test] + assert set().union(*parts) == all_pairs + assert sum(len(p) for p in parts) == len(all_pairs) + + def test_a_parameter_never_straddles_two_splits(self, filtered_df): + split = _create_split(filtered_df, seed=0, calib_frac=0.1) + groups = [param_indices(p) for p in (split.train, split.val, split.calib, split.test)] + for i, a in enumerate(groups): + for b in groups[i + 1 :]: + assert not (a & b) + + def test_split_is_deterministic_given_a_seed(self, filtered_df): + assert _create_split(filtered_df, seed=0).train == _create_split(filtered_df, seed=0).train + + def test_different_seeds_give_different_splits(self, filtered_df): + assert _create_split(filtered_df, seed=0).train != _create_split(filtered_df, seed=1).train + + def test_train_gets_roughly_seventy_percent(self, filtered_df): + split = _create_split(filtered_df, seed=0, stratify=False) + assert len(param_indices(split.train)) == pytest.approx(0.7 * N_PARAMS, abs=1) + + def test_calibration_split_is_empty_by_default(self, filtered_df): + assert _create_split(filtered_df, seed=0).calib == set() + + def test_rejects_calibration_fraction_that_starves_validation(self, filtered_df): + with pytest.raises(ValueError, match="Validation fraction"): + _assign_param_splits(filtered_df, seed=0, calib_frac=0.4) + + def test_assign_param_group_respects_fractions(self): + assign = _assign_param_group( + np.arange(100), np.random.default_rng(0), train_frac=0.7, val_frac=0.15, calib_frac=0.05 + ) + counts = pd.Series(list(assign.values())).value_counts() + assert counts["train"] == 70 and counts["val"] == 15 and counts["calib"] == 5 and counts["test"] == 10 + + +class TestParameterStrata: + def test_unstratified_returns_one_group(self, filtered_df): + strata = _parameter_strata(filtered_df, "eir", n_bins=10, stratify=False) + assert len(strata) == 1 + assert len(strata[0]) == N_PARAMS + + def test_stratified_partitions_every_parameter_once(self, filtered_df): + strata = _parameter_strata(filtered_df, "eir", n_bins=5, stratify=True) + assert len(strata) <= 5 + assert sorted(np.concatenate(strata)) == sorted(filtered_df["parameter_index"].unique()) + + def test_strata_are_ordered_by_target_magnitude(self, filtered_df): + strata = _parameter_strata(filtered_df, "eir", n_bins=4, stratify=True) + means = filtered_df.groupby("parameter_index")["eir"].mean() + stratum_means = [means[s].mean() for s in strata] + assert stratum_means == sorted(stratum_means) + + +class TestSplitFileRoundTrip: + def test_save_then_load_preserves_splits(self, filtered_df, tmp_path): + split = _create_split(filtered_df, seed=0, calib_frac=0.1) + path = tmp_path / "split.csv" + _save_split(path, split) + loaded = _load_split(str(path), filtered_df) + assert loaded == split + + def test_load_ignores_pairs_absent_from_the_frame(self, filtered_df, tmp_path): + path = tmp_path / "split.csv" + split = _create_split(filtered_df, seed=0) + _save_split(path, split) + smaller = filtered_df[filtered_df["parameter_index"] < 5] + loaded = _load_split(str(path), smaller) + assert param_indices(loaded.train | loaded.val | loaded.test) <= {0, 1, 2, 3, 4} + + def test_load_maps_csv_split_names(self, filtered_df, tmp_path): + path = tmp_path / "split.csv" + _save_split(path, SplitParamSims(train={(0, 0)}, val={(1, 0)}, calib={(2, 0)}, test={(3, 0)})) + assert set(pd.read_csv(path)["split"]) == {"train", "validate", "calibrate", "test"} + loaded = _load_split(str(path), filtered_df) + assert loaded.val == {(1, 0)} and loaded.calib == {(2, 0)} + + +class TestScalers: + def test_feature_scaler_uses_train_pairs_only(self, filtered_df, tmp_path): + train_ps = {ps for ps in filtered_df["_ps"] if ps[0] < 5} + features = get_features("prev_y9") + scaler = _fit_features_scaler(filtered_df, train_ps, str(tmp_path), features) + + expected = ( + filtered_df[filtered_df["_ps"].isin(train_ps)] + .drop_duplicates(subset=["_ps"])[features] + .to_numpy(dtype=np.float32) + ) + np.testing.assert_allclose(scaler.mean_, expected.mean(axis=0), rtol=1e-5) + + def test_feature_scaler_is_pickled_to_the_output_dir(self, filtered_df, tmp_path): + train_ps = set(filtered_df["_ps"]) + scaler = _fit_features_scaler(filtered_df, train_ps, str(tmp_path), get_features("prev_y9")) + with open(tmp_path / "features_scaler.pkl", "rb") as f: + np.testing.assert_allclose(pickle.load(f).mean_, scaler.mean_) + + def test_target_scaler_is_fitted_in_log_space(self, filtered_df, tmp_path): + train_ps = set(filtered_df["_ps"]) + scaler = _fit_target_scaler(filtered_df, train_ps, str(tmp_path), target="eir") + + eir = filtered_df.drop_duplicates(subset=["_ps"])["eir"].to_numpy(dtype=np.float32) + np.testing.assert_allclose(scaler.mean_, np.log10(eir).mean(), rtol=1e-4) + assert (tmp_path / "target_scaler.pkl").exists() + + def test_wide_range_predictor_is_fitted_in_log_space(self, filtered_df, tmp_path): + # eir spans ~3 decades, so it is standardized in log space like the target. + # The bounded covariates in FEATURES_BASE are left alone. + features = get_features("eir") + scaler = _fit_features_scaler(filtered_df, set(filtered_df["_ps"]), str(tmp_path), features) + + static = filtered_df.drop_duplicates(subset=["_ps"]) + eir = static["eir"].to_numpy(dtype=np.float32) + np.testing.assert_allclose(scaler.mean_[0], np.log10(eir).mean(), rtol=1e-4) + np.testing.assert_allclose( + scaler.mean_[1:], static[FEATURES_BASE].to_numpy(dtype=np.float32).mean(axis=0), rtol=1e-5 + ) + + +class TestBuildData: + @pytest.fixture + def records(self, filtered_df, tmp_path): + filtered_df = filtered_df.assign(_weight=1.0) + features = get_features("prev_y9") + pairs = set(filtered_df["_ps"]) + feature_scaler = _fit_features_scaler(filtered_df, pairs, str(tmp_path), features) + target_scaler = _fit_target_scaler(filtered_df, pairs, str(tmp_path), "eir") + data = _build_data(filtered_df, pairs, feature_scaler, target_scaler, features, "eir") + return data, feature_scaler, target_scaler, features + + def test_one_record_per_pair_with_expected_keys(self, records, filtered_df): + data, *_ = records + assert len(data) == len(set(filtered_df["_ps"])) + assert set(data[0]) == {"x_raw", "x", "y_raw", "y", "y_std", "w", "ps"} + + def test_features_are_scaled_versions_of_the_raw_row(self, records): + data, feature_scaler, _, features = records + record = data[0] + assert record["x_raw"].shape == (len(features),) + np.testing.assert_allclose(record["x"], feature_scaler.transform(record["x_raw"]), rtol=1e-5) + + def test_target_is_log10_then_standardized(self, records): + data, _, target_scaler, _ = records + record = data[0] + assert record["y"] == pytest.approx(np.log10(record["y_raw"]), rel=1e-6) + assert record["y_std"] == pytest.approx( + target_scaler.transform(np.array([[record["y"]]], dtype=np.float32))[0, 0], rel=1e-5 + ) + + def test_unknown_pairs_are_skipped(self, filtered_df, tmp_path): + filtered_df = filtered_df.assign(_weight=1.0) + features = get_features("prev_y9") + scaler = _fit_features_scaler(filtered_df, set(filtered_df["_ps"]), str(tmp_path), features) + target_scaler = _fit_target_scaler(filtered_df, set(filtered_df["_ps"]), str(tmp_path), "eir") + data = _build_data(filtered_df, {(0, 0), (999, 999)}, scaler, target_scaler, features, "eir") + assert len(data) == 1 + + +class TestPrepareData: + def test_end_to_end(self, df, cfg): + prepared = prepare_data(df, cfg, calib_frac=0.1) + + assert prepared.input_size == len(get_features(cfg.predictor)) + assert all(len(d) > 0 for d in (prepared.train_data, prepared.val_data, prepared.calib_data, prepared.test_data)) + n_records = sum(len(d) for d in (prepared.train_data, prepared.val_data, prepared.calib_data, prepared.test_data)) + assert n_records == N_PARAMS * N_SIMS + assert isinstance(prepared.feature_scaler, StandardScaler) and prepared.feature_scaler.is_fitted + + def test_writes_split_and_scalers(self, df, cfg, tmp_path): + prepare_data(df, cfg, calib_frac=0.1) + assert (tmp_path / "split.csv").exists() + assert (tmp_path / "out" / "features_scaler.pkl").exists() + assert (tmp_path / "out" / "target_scaler.pkl").exists() + + def test_reuses_an_existing_split_file(self, df, cfg): + first = prepare_data(df, cfg, calib_frac=0.1) + cfg.use_existing_split = True + cfg.seed = 999 # would produce a different split if it were recreated + second = prepare_data(df, cfg, calib_frac=0.1) + assert second.train_param_sims == first.train_param_sims + + def test_low_prevalence_pairs_are_excluded(self, cfg): + prepared = prepare_data(make_df(low_prev_params=(0, 1)), cfg, calib_frac=0.1) + kept = set().union( + prepared.train_param_sims, prepared.val_param_sims, prepared.calib_param_sims, prepared.test_param_sims + ) + assert not param_indices(kept) & {0, 1} + + def test_scalers_ignore_non_train_pairs(self, df, cfg): + prepared = prepare_data(df, cfg, calib_frac=0.1) + train_x = np.stack([r["x_raw"] for r in prepared.train_data]) + np.testing.assert_allclose(prepared.feature_scaler.mean_, train_x.mean(axis=0), rtol=1e-4) + + def test_feature_scaler_reproduces_every_record_from_its_raw_row(self, df, cfg): + # Training consumes record["x"], while compute_metrics and RQSArtifact re-derive + # the context from record["x_raw"] via prepared.feature_scaler. Any feature + # transform has to live inside the scaler or those two paths drift apart. + cfg.predictor = "hbr_y9" # wide-range predictor, so a log transform is in play + prepared = prepare_data(df, cfg, calib_frac=0.1) + + for split in (prepared.train_data, prepared.val_data, prepared.calib_data, prepared.test_data): + x_raw = np.stack([r["x_raw"] for r in split]) + x = np.stack([r["x"] for r in split]) + np.testing.assert_allclose(x, prepared.feature_scaler.transform(x_raw), rtol=1e-5) diff --git a/tests/v2/eval/__init__.py b/tests/v2/eval/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/v2/eval/test_metrics.py b/tests/v2/eval/test_metrics.py new file mode 100644 index 0000000..6e78923 --- /dev/null +++ b/tests/v2/eval/test_metrics.py @@ -0,0 +1,72 @@ +""" +Tests for evaluation metric aggregation over a data loader. +""" + +import numpy as np +import pytest + +from estimint.v2.data.dataset import make_loader +from estimint.v2.eval.metrics import Metrics, compute_metrics, get_preds_targets + + +class ConstantOffset: + """Stand-in ModelArtifact: predicts the first raw feature plus a fixed offset.""" + + def __init__(self, offset=0.0): + self.offset = offset + + def predict(self, X_raw): + return X_raw[:, 0] + self.offset + + +@pytest.fixture +def records(): + rng = np.random.default_rng(0) + y = rng.uniform(1, 100, size=12).astype(np.float32) + return [{"x_raw": np.array([v, 0.0], dtype=np.float32), "y_raw": v} for v in y] + + +@pytest.fixture +def loader(records): + return make_loader(records, batch_size=4, shuffle=False) + + +class TestGetPredsTargets: + def test_returns_one_value_per_record(self, loader, records): + preds, targets = get_preds_targets(ConstantOffset(), loader) + assert preds.shape == targets.shape == (len(records),) + + def test_targets_follow_loader_order(self, loader, records): + _, targets = get_preds_targets(ConstantOffset(), loader) + np.testing.assert_allclose(targets, [r["y_raw"] for r in records]) + + def test_predictions_come_from_raw_features(self, loader, records): + preds, _ = get_preds_targets(ConstantOffset(offset=2.0), loader) + np.testing.assert_allclose(preds, [r["x_raw"][0] + 2.0 for r in records], rtol=1e-6) + + def test_dropped_remainder_shortens_the_result(self, records): + loader = make_loader(records, batch_size=5, drop_remainder=True) + preds, _ = get_preds_targets(ConstantOffset(), loader) + assert preds.shape == (10,) + + +class TestComputeMetrics: + def test_perfect_predictions_score_perfectly(self, loader): + metrics = compute_metrics(ConstantOffset(), loader) + assert isinstance(metrics, Metrics) + assert metrics.mse == pytest.approx(0.0, abs=1e-8) + assert metrics.rmse == pytest.approx(0.0, abs=1e-8) + assert metrics.mae == pytest.approx(0.0, abs=1e-8) + assert metrics.r2 == pytest.approx(1.0) + + def test_constant_offset_shows_up_as_bias(self, loader): + metrics = compute_metrics(ConstantOffset(offset=3.0), loader) + assert metrics.bias == pytest.approx(3.0, rel=1e-4) + assert metrics.mae == pytest.approx(3.0, rel=1e-4) + assert metrics.rmse == pytest.approx(3.0, rel=1e-4) + + def test_worse_predictions_lower_r2(self, records): + better = compute_metrics(ConstantOffset(offset=1.0), make_loader(records, batch_size=4)) + worse = compute_metrics(ConstantOffset(offset=50.0), make_loader(records, batch_size=4)) + assert worse.r2 < better.r2 + assert worse.mse > better.mse diff --git a/tests/v2/models/__init__.py b/tests/v2/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/v2/models/test_rqs.py b/tests/v2/models/test_rqs.py new file mode 100644 index 0000000..9a9ef52 --- /dev/null +++ b/tests/v2/models/test_rqs.py @@ -0,0 +1,249 @@ +""" +Tests for the v2 conditional rational-quadratic spline (RQS) flow model. +""" + +import jax +import jax.numpy as jnp +import numpy as np +import pytest +from flax import nnx +from omegaconf import OmegaConf + +from estimint.v2.data.features import StandardScaler +from estimint.v2.models.rqs import ConditionalRQS, RQSArtifact, _rqs, rqs_loss + +BOUNDS = 6 +N_BINS = 8 +N_CONTEXT = 4 + + +@pytest.fixture +def raw_params(): + """Unconstrained (widths, heights, derivatives) for a batch of splines.""" + key = jax.random.key(0) + k1, k2, k3 = jax.random.split(key, 3) + n = 16 + return ( + jax.random.normal(k1, (n, N_BINS)), + jax.random.normal(k2, (n, N_BINS)), + jax.random.normal(k3, (n, N_BINS + 1)), + ) + + +@pytest.fixture +def model(): + return ConditionalRQS(N_CONTEXT, width=16, depth=2, n_bins=N_BINS, bounds=BOUNDS, rngs=nnx.Rngs(0)) + + +@pytest.fixture +def context(): + return jax.random.normal(jax.random.key(1), (16, N_CONTEXT)) + + +class TestSpline: + """The bare spline transform, independent of any network.""" + + def test_forward_inverse_round_trip(self, raw_params): + x = jnp.linspace(-BOUNDS + 0.1, BOUNDS - 0.1, 16) + z, _ = _rqs(x, *raw_params, BOUNDS, inverse=False) + x_back, _ = _rqs(z, *raw_params, BOUNDS, inverse=True) + np.testing.assert_allclose(x_back, x, atol=1e-4) + + def test_identity_outside_bounds(self, raw_params): + x = jnp.full((16,), BOUNDS + 2.0) + z, log_det = _rqs(x, *raw_params, BOUNDS, inverse=False) + np.testing.assert_allclose(z, x) + np.testing.assert_allclose(log_det, 0.0) + + def test_forward_is_monotonic(self, raw_params): + widths, heights, derivatives = raw_params + # Evaluate one spline (row 0) on an increasing grid of inputs. + grid = jnp.linspace(-BOUNDS + 0.1, BOUNDS - 0.1, 64) + row = lambda p: jnp.repeat(p[:1], grid.shape[0], axis=0) + z, _ = _rqs(grid, row(widths), row(heights), row(derivatives), BOUNDS, inverse=False) + assert jnp.all(jnp.diff(z) > 0) + + def test_stays_within_bounds(self, raw_params): + x = jnp.linspace(-BOUNDS + 0.1, BOUNDS - 0.1, 16) + z, _ = _rqs(x, *raw_params, BOUNDS, inverse=False) + assert jnp.all(jnp.abs(z) <= BOUNDS) + + def test_log_det_matches_numerical_derivative(self, raw_params): + x = jnp.linspace(-BOUNDS + 0.5, BOUNDS - 0.5, 16) + eps = 1e-3 + z_hi, _ = _rqs(x + eps, *raw_params, BOUNDS, inverse=False) + z_lo, _ = _rqs(x - eps, *raw_params, BOUNDS, inverse=False) + _, log_det = _rqs(x, *raw_params, BOUNDS, inverse=False) + np.testing.assert_allclose(jnp.exp(log_det), (z_hi - z_lo) / (2 * eps), rtol=1e-2) + + +class TestConditionalRQS: + def test_log_prob_shape_and_finite(self, model, context): + y0 = jax.random.normal(jax.random.key(2), (context.shape[0],)) + log_prob = model.log_prob(y0, context) + assert log_prob.shape == (context.shape[0],) + assert jnp.all(jnp.isfinite(log_prob)) + + def test_density_integrates_to_one(self, model, context): + """The flow is a normalized density in the standardized target space.""" + grid = jnp.linspace(-12, 12, 4001) + one_row = jnp.repeat(context[:1], grid.shape[0], axis=0) + density = jnp.exp(model.log_prob(grid, one_row)) + assert jnp.trapezoid(density, grid) == pytest.approx(1.0, abs=1e-3) + + def test_quantiles_increase_with_probability(self, model, context): + probs = jnp.array([0.05, 0.25, 0.5, 0.75, 0.95]) + y0 = model.quantiles(context, probs) # (Q, B) + assert y0.shape == (probs.shape[0], context.shape[0]) + assert jnp.all(jnp.diff(y0, axis=0) > 0) + + def test_quantiles_matches_single_quantile(self, model, context): + probs = jnp.array([0.1, 0.5, 0.9]) + batched = model.quantiles(context, probs) + for i, q in enumerate(probs): + np.testing.assert_allclose(batched[i], model.quantile(context, float(q)), atol=1e-5) + + def test_median_maps_back_to_base_zero(self, model, context): + """quantile(0.5) is the target value the flow maps to z = 0.""" + y0 = model.quantile(context, 0.5) + widths, heights, derivatives = model._params(context) + z, _ = _rqs(y0, widths, heights, derivatives, model.bounds, inverse=False) + np.testing.assert_allclose(z, 0.0, atol=1e-4) + + def test_from_cfg(self): + cfg = OmegaConf.create( + { + "seed": 0, + "width": 16, + "depth": 2, + "n_bins": N_BINS, + "rqs_bounds": BOUNDS, + "mlp_residual": False, + "dropout_rate": 0.0, + } + ) + model = ConditionalRQS.from_cfg(cfg, n_context=N_CONTEXT) + assert model.K == N_BINS + assert model.bounds == BOUNDS + # net emits K widths + K heights + (K + 1) derivatives + assert model.net(jnp.zeros((2, N_CONTEXT))).shape == (2, 3 * N_BINS + 1) + + def test_residual_variant_runs(self, context): + model = ConditionalRQS( + N_CONTEXT, width=16, depth=2, n_bins=N_BINS, bounds=BOUNDS, residual=True, rngs=nnx.Rngs(0) + ) + assert jnp.all(jnp.isfinite(model.log_prob(jnp.zeros(context.shape[0]), context))) + + +class TestLoss: + def test_loss_is_finite(self, model, context): + y0 = jax.random.normal(jax.random.key(3), (context.shape[0],)) + w = jnp.ones_like(y0) + assert jnp.isfinite(rqs_loss(model, context, y0, w)) + + def test_loss_is_gradable(self, model, context): + y0 = jax.random.normal(jax.random.key(3), (context.shape[0],)) + w = jnp.ones_like(y0) + grads = nnx.grad(rqs_loss)(model, context, y0, w) + leaves = jax.tree_util.tree_leaves(grads) + assert leaves and all(jnp.all(jnp.isfinite(g)) for g in leaves) + + def test_zero_weight_rows_are_ignored(self, model, context): + y0 = jax.random.normal(jax.random.key(3), (context.shape[0],)) + w = jnp.ones_like(y0).at[8:].set(0.0) + masked = rqs_loss(model, context, y0, w) + kept = rqs_loss(model, context[:8], y0[:8], jnp.ones(8)) + assert masked == pytest.approx(float(kept), rel=1e-5) + + +def make_scaler(mean, scale): + scaler = StandardScaler() + scaler.mean_ = np.array(mean, dtype=np.float32) + scaler.scale_ = np.array(scale, dtype=np.float32) + return scaler + + +@pytest.fixture +def features(): + return ["prev_y9", "dn0_use", "Q0", "phi_bednets"] + + +@pytest.fixture +def artifact(model, features): + model.eval() + return RQSArtifact( + model=model, + feature_scaler=make_scaler(np.zeros(len(features)), np.ones(len(features))), + target_scaler=make_scaler([0.0], [1.0]), + features=features, + ) + + +class TestRQSArtifact: + def test_rejects_scaler_with_wrong_feature_count(self, model, features): + with pytest.raises(ValueError, match="features"): + RQSArtifact( + model=model, + feature_scaler=make_scaler(np.zeros(2), np.ones(2)), + target_scaler=make_scaler([0.0], [1.0]), + features=features, + ) + + def test_predict_shape_and_non_negative(self, artifact, features): + X = np.random.default_rng(0).normal(size=(5, len(features))).astype(np.float32) + preds = artifact.predict(X) + assert preds.shape == (5,) + assert np.all(preds >= 0) + + def test_predict_accepts_single_row(self, artifact, features): + X = np.zeros(len(features), dtype=np.float32) + assert artifact.predict(X).shape == (1,) + + def test_dict_input_matches_array_input(self, artifact, features): + values = [0.4, 0.1, 0.9, 0.5] + row = dict(zip(features, values)) + np.testing.assert_allclose(artifact.predict(row), artifact.predict(np.array(values, dtype=np.float32))) + + def test_dict_input_is_order_independent(self, artifact, features): + row = {f: v for f, v in zip(features, [0.4, 0.1, 0.9, 0.5])} + shuffled = dict(reversed(list(row.items()))) + np.testing.assert_allclose(artifact.predict(shuffled), artifact.predict(row)) + + def test_list_of_dicts_is_batched(self, artifact, features): + rows = [dict.fromkeys(features, 0.1), dict.fromkeys(features, 0.2)] + assert artifact.predict(rows).shape == (2,) + + @pytest.mark.parametrize( + "bad_row", + [ + {"prev_y9": 0.1}, # missing features + {"prev_y9": 0.1, "dn0_use": 0.1, "Q0": 0.1, "phi_bednets": 0.1, "nope": 0.1}, # unexpected feature + ], + ) + def test_rejects_malformed_dict_rows(self, artifact, bad_row): + with pytest.raises(KeyError): + artifact.predict(bad_row) + + def test_rejects_empty_input(self, artifact): + with pytest.raises(ValueError, match="empty"): + artifact.predict([]) + + def test_quantiles_are_ordered(self, artifact, features): + X = np.zeros((3, len(features)), dtype=np.float32) + low, mid, high = (artifact.quantile(X, q) for q in (0.1, 0.5, 0.9)) + assert np.all(low <= mid) and np.all(mid <= high) + + def test_interval_brackets_the_prediction(self, artifact, features): + X = np.zeros((3, len(features)), dtype=np.float32) + lower, upper = artifact.interval(X, alpha=0.10) + preds = artifact.predict(X) + assert np.all(lower >= 0) + assert np.all(lower <= preds) and np.all(preds <= upper) + + def test_conformal_offset_widens_the_interval(self, artifact, features): + X = np.zeros((3, len(features)), dtype=np.float32) + lower, upper = artifact.interval(X, alpha=0.10) + artifact.conformal[0.10] = 1.0 + wide_lower, wide_upper = artifact.interval(X, alpha=0.10) + assert np.all(wide_upper > upper) + assert np.all(wide_lower <= lower) diff --git a/tests/v2/training/__init__.py b/tests/v2/training/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/v2/training/test_calibrate.py b/tests/v2/training/test_calibrate.py new file mode 100644 index 0000000..2a3d18b --- /dev/null +++ b/tests/v2/training/test_calibrate.py @@ -0,0 +1,45 @@ +""" +Tests for the split-conformal interval correction. +""" + +import numpy as np +import pytest + +from estimint.v2.training.calibrate import conformal_offset + + +@pytest.fixture +def y(): + return np.random.default_rng(0).normal(size=500) + + +def test_offset_shrinks_intervals_that_already_over_cover(): + y = np.linspace(0, 1, 100) + offset = conformal_offset(y - 1.0, y + 1.0, y, alpha=0.10) + # every score is negative here, so the correction narrows rather than widens + assert offset == pytest.approx(-1.0) + + +def test_offset_restores_target_coverage(y): + lower, upper = np.zeros_like(y), np.zeros_like(y) # degenerate point intervals + offset = conformal_offset(lower, upper, y, alpha=0.10) + coverage = np.mean((y >= lower - offset) & (y <= upper + offset)) + assert coverage >= 0.90 + + +def test_offset_is_the_score_quantile(y): + lower, upper = -np.ones_like(y), np.ones_like(y) + scores = np.maximum(lower - y, y - upper) + k = int(np.ceil((len(y) + 1) * 0.90)) + assert conformal_offset(lower, upper, y, alpha=0.10) == pytest.approx(np.sort(scores)[k - 1]) + + +def test_wider_intervals_need_a_smaller_offset(y): + tight = conformal_offset(-0.1 * np.ones_like(y), 0.1 * np.ones_like(y), y) + loose = conformal_offset(-1.0 * np.ones_like(y), 1.0 * np.ones_like(y), y) + assert loose < tight + + +def test_smaller_alpha_gives_a_larger_offset(y): + lower, upper = np.zeros_like(y), np.zeros_like(y) + assert conformal_offset(lower, upper, y, alpha=0.01) > conformal_offset(lower, upper, y, alpha=0.20) diff --git a/tests/v2/training/test_checkpoint.py b/tests/v2/training/test_checkpoint.py new file mode 100644 index 0000000..7189626 --- /dev/null +++ b/tests/v2/training/test_checkpoint.py @@ -0,0 +1,74 @@ +""" +Tests for Orbax checkpoint saving and restoring. +""" + +import jax +import jax.numpy as jnp +import numpy as np +import pytest +from flax import nnx + +from estimint.v2.models.mlp import MLP +from estimint.v2.training.checkpoint import _resolve_checkpoint_dir, restore_model, save_checkpoint + +MODEL_NAME = "RQS" + + +def make_model(seed): + return MLP(3, 1, width=4, depth=1, dropout_rate=0.0, rngs=nnx.Rngs(seed)) + + +def weights(model): + return [np.asarray(w) for w in jax.tree_util.tree_leaves(nnx.state(model, nnx.Param))] + + +@pytest.fixture +def ckpt_dir(tmp_path): + return str(tmp_path / "ckpts") + + +def test_resolve_checkpoint_dir_appends_the_model_name(tmp_path): + assert _resolve_checkpoint_dir(str(tmp_path), MODEL_NAME).name == MODEL_NAME + + +def test_save_creates_the_checkpoint_directory(ckpt_dir): + save_checkpoint(ckpt_dir, MODEL_NAME, make_model(0)) + assert _resolve_checkpoint_dir(ckpt_dir, MODEL_NAME).exists() + + +def test_restore_recovers_the_saved_weights(ckpt_dir): + saved = make_model(0) + save_checkpoint(ckpt_dir, MODEL_NAME, saved) + + restored = restore_model(ckpt_dir, MODEL_NAME, make_model(1)) # different init + for got, want in zip(weights(restored), weights(saved)): + np.testing.assert_allclose(got, want) + + +def test_restored_model_reproduces_predictions(ckpt_dir): + saved = make_model(0) + save_checkpoint(ckpt_dir, MODEL_NAME, saved) + x = jnp.ones((2, 3)) + + restored = restore_model(ckpt_dir, MODEL_NAME, make_model(1)) + np.testing.assert_allclose(restored(x), saved(x), rtol=1e-6) + + +def test_saving_twice_keeps_the_latest_weights(ckpt_dir): + save_checkpoint(ckpt_dir, MODEL_NAME, make_model(0)) + latest = make_model(2) + save_checkpoint(ckpt_dir, MODEL_NAME, latest) + + restored = restore_model(ckpt_dir, MODEL_NAME, make_model(1)) + for got, want in zip(weights(restored), weights(latest)): + np.testing.assert_allclose(got, want) + + +def test_models_are_namespaced_by_name(ckpt_dir): + first, second = make_model(0), make_model(2) + save_checkpoint(ckpt_dir, "first", first) + save_checkpoint(ckpt_dir, "second", second) + + restored = restore_model(ckpt_dir, "first", make_model(1)) + for got, want in zip(weights(restored), weights(first)): + np.testing.assert_allclose(got, want) diff --git a/tests/v2/training/test_train_step.py b/tests/v2/training/test_train_step.py new file mode 100644 index 0000000..85402f0 --- /dev/null +++ b/tests/v2/training/test_train_step.py @@ -0,0 +1,193 @@ +""" +Tests for the optimizer, train/eval steps, and the training loop. +""" + +import jax +import jax.numpy as jnp +import numpy as np +import pytest +from flax import nnx +from omegaconf import OmegaConf + +from estimint.v2.data.features import StandardScaler +from estimint.v2.data.preprocess import PreparedData +from estimint.v2.models.mlp import MLP +from estimint.v2.training.checkpoint import _resolve_checkpoint_dir +from estimint.v2.training.train_step import ( + create_optimizer, + get_total_params, + make_eval_step, + make_train_step, + train_model, +) + +N_FEATURES = 3 + + +def mse_loss(model, x, y, w): + """Weighted MSE against a scalar target — stands in for rqs_loss.""" + preds = model(x)[:, 0] + return jnp.sum(w * (preds - y) ** 2) / jnp.sum(w) + + +def make_model(seed=0, width=8, depth=1): + return MLP(N_FEATURES, 1, width=width, depth=depth, dropout_rate=0.0, rngs=nnx.Rngs(seed)) + + +def make_records(n=32, seed=0): + """Records shaped like preprocess output: y_std is a linear function of x.""" + rng = np.random.default_rng(seed) + X = rng.normal(size=(n, N_FEATURES)).astype(np.float32) + y = X.sum(axis=1).astype(np.float32) + return [{"x": X[i], "y": y[i], "y_std": y[i], "w": np.float32(1.0)} for i in range(n)] + + +def weights(model): + return [np.asarray(w) for w in jax.tree_util.tree_leaves(nnx.state(model, nnx.Param))] + + +@pytest.fixture +def batch(): + records = make_records(16) + return ( + jnp.stack([r["x"] for r in records]), + jnp.array([r["y_std"] for r in records]), + jnp.ones(len(records)), + ) + + +class TestGetTotalParams: + def test_counts_every_weight_and_bias(self): + # inp: 3*8 + 8, hidden: 8*8 + 8, out: 8*1 + 1 + assert get_total_params(make_model(width=8, depth=1)) == 32 + 72 + 9 + + def test_deeper_models_have_more_parameters(self): + assert get_total_params(make_model(depth=3)) > get_total_params(make_model(depth=1)) + + +class TestCreateOptimizer: + def apply_updates(self, model, optimizer, batch, n): + for _ in range(n): + _, grads = nnx.value_and_grad(mse_loss)(model, *batch) + optimizer.update(model, grads) + + def test_first_step_is_a_no_op_because_warmup_starts_at_zero(self, batch): + model = make_model() + optimizer = create_optimizer(model, learning_rate=1e-2, total_steps=100) + before = weights(model) + + self.apply_updates(model, optimizer, batch, 1) + + for a, b in zip(before, weights(model)): + np.testing.assert_allclose(a, b) + + def test_optimizer_updates_the_model_once_warmup_ramps_up(self, batch): + model = make_model() + optimizer = create_optimizer(model, learning_rate=1e-2, total_steps=100) + before = weights(model) + + self.apply_updates(model, optimizer, batch, 5) # warmup is 3% of total_steps + + assert any(not np.allclose(a, b) for a, b in zip(before, weights(model))) + + +class TestTrainStep: + def test_training_reduces_the_loss(self, batch): + model = make_model() + optimizer = create_optimizer(model, learning_rate=1e-2, total_steps=100) + train_step = make_train_step(mse_loss) + + first = float(train_step(model, optimizer, *batch)) + for _ in range(50): + last = float(train_step(model, optimizer, *batch)) + assert last < first + + def test_train_step_returns_the_pre_update_loss(self, batch): + model = make_model() + optimizer = create_optimizer(model, learning_rate=1e-2, total_steps=100) + eval_step = make_eval_step(mse_loss) + + expected = float(eval_step(model, *batch)) + assert float(make_train_step(mse_loss)(model, optimizer, *batch)) == pytest.approx(expected, rel=1e-5) + + def test_eval_step_leaves_the_model_unchanged(self, batch): + model = make_model() + before = weights(model) + make_eval_step(mse_loss)(model, *batch) + for a, b in zip(before, weights(model)): + np.testing.assert_array_equal(a, b) + + +@pytest.fixture +def cfg(tmp_path): + return OmegaConf.create( + { + "batch_size": 8, + "seed": 0, + "num_workers": 0, + "num_epochs": 8, + "min_epochs": 0, + "patience": 3, + "lr": 1e-2, + "weight_decay": 1e-4, + "use_wandb": False, + "checkpoint_dir": str(tmp_path / "ckpts"), + } + ) + + +@pytest.fixture +def prepared_data(): + scaler = StandardScaler().fit(np.zeros((2, N_FEATURES)) + np.arange(N_FEATURES)) + return PreparedData( + train_data=make_records(64, seed=0), + val_data=make_records(32, seed=1), + test_data=[], + input_size=N_FEATURES, + feature_scaler=scaler, + target_scaler=scaler, + ) + + +class TestTrainModel: + def test_training_improves_validation_loss(self, cfg, prepared_data): + model = make_model() + eval_step = make_eval_step(mse_loss) + val = ( + jnp.stack([r["x"] for r in prepared_data.val_data]), + jnp.array([r["y_std"] for r in prepared_data.val_data]), + jnp.ones(len(prepared_data.val_data)), + ) + before = float(eval_step(model, *val)) + + trained = train_model(model, cfg, prepared_data, mse_loss, name="RQS", use_standardized_y=True) + assert float(eval_step(trained, *val)) < before + + def test_training_writes_a_checkpoint(self, cfg, prepared_data): + train_model(make_model(), cfg, prepared_data, mse_loss, name="RQS") + assert _resolve_checkpoint_dir(cfg.checkpoint_dir, "RQS").exists() + + def test_returns_the_same_model_instance_updated_in_place(self, cfg, prepared_data): + model = make_model() + assert train_model(model, cfg, prepared_data, mse_loss, name="RQS") is model + + def test_early_stopping_ends_training_when_validation_stalls(self, cfg, prepared_data, caplog): + cfg.num_epochs = 50 + cfg.patience = 2 + constant_loss = lambda model, x, y, w: jnp.sum(jnp.zeros_like(y)) + 1.0 + + with caplog.at_level("INFO"): + train_model(make_model(), cfg, prepared_data, constant_loss, name="RQS") + + assert "Early stopping" in caplog.text + + def test_min_epochs_defers_early_stopping(self, cfg, prepared_data, caplog): + cfg.num_epochs = 4 + cfg.min_epochs = 4 # never eligible to stop or checkpoint a best model + cfg.patience = 1 + constant_loss = lambda model, x, y, w: jnp.sum(jnp.zeros_like(y)) + 1.0 + + with caplog.at_level("INFO"): + train_model(make_model(), cfg, prepared_data, constant_loss, name="RQS") + + assert "Early stopping" not in caplog.text diff --git a/train_base.log b/train_base.log index 00b37c7..b9a54a2 100644 --- a/train_base.log +++ b/train_base.log @@ -116,3 +116,9151 @@ wandb: [2026-08-05 11:22:31,257][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 [2026-08-05 11:22:37,444][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M [2026-08-05 11:23:12,446][__main__][INFO] - test R2=0.9987 RMSE=3.89 MAE=1.19 MSE=15.16 Bias=-0.33 +[2026-08-05 11:23:27,073][__main__][INFO] - Raw 90% interval coverage: 0.9806 +[2026-08-05 11:23:27,074][__main__][INFO] - Conformal 90% interval coverage: 0.8940 +[2026-08-05 11:23:38,999][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.0001328455394870772 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:23:39,461][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:23:39,610][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:23:41,010][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:23:41,026][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:23:41,033][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:23:41,064][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:23:41,065][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:23:46,181][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-05 11:26:10,647][__main__][INFO] - test R2=0.9972 RMSE=5.68 MAE=2.03 MSE=32.29 Bias=0.41 +[2026-08-05 11:26:24,734][__main__][INFO] - Raw 90% interval coverage: 0.9741 +[2026-08-05 11:26:24,734][__main__][INFO] - Conformal 90% interval coverage: 0.9037 +[2026-08-05 11:26:44,421][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.007680232298701982 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:26:44,925][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:26:45,088][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:26:47,165][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:26:47,182][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:26:47,190][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:26:47,251][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:26:47,252][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:26:52,511][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-05 11:27:28,407][__main__][INFO] - test R2=0.9987 RMSE=3.90 MAE=1.58 MSE=15.22 Bias=0.03 +[2026-08-05 11:27:38,354][__main__][INFO] - Raw 90% interval coverage: 0.8028 +[2026-08-05 11:27:38,355][__main__][INFO] - Conformal 90% interval coverage: 0.8998 +[2026-08-05 11:27:53,000][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.001551815288237503 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:27:53,483][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:27:53,637][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:27:55,517][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:27:55,532][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:27:55,539][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:27:55,591][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:27:55,592][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:28:00,891][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-05 11:30:51,378][__main__][INFO] - test R2=-0.2084 RMSE=118.95 MAE=58.52 MSE=14148.22 Bias=-49.40 +[2026-08-05 11:31:06,026][__main__][INFO] - Raw 90% interval coverage: 0.5197 +[2026-08-05 11:31:06,026][__main__][INFO] - Conformal 90% interval coverage: 0.8449 +[2026-08-05 11:31:25,934][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.004446198034952427 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:31:26,457][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:31:26,629][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:31:28,757][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:31:28,774][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:31:28,784][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:31:28,821][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:31:28,822][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:31:34,217][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-05 11:31:46,814][__main__][INFO] - test R2=0.9996 RMSE=2.24 MAE=0.86 MSE=5.00 Bias=-0.04 +[2026-08-05 11:31:55,963][__main__][INFO] - Raw 90% interval coverage: 0.6787 +[2026-08-05 11:31:55,964][__main__][INFO] - Conformal 90% interval coverage: 0.8824 +[2026-08-05 11:32:05,233][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.0006702100220539498 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:32:05,682][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:32:05,836][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:32:07,116][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:32:07,131][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:32:07,138][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:32:07,169][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:32:07,169][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:32:12,321][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M +[2026-08-05 11:34:51,319][__main__][INFO] - test R2=0.9923 RMSE=9.50 MAE=3.53 MSE=90.29 Bias=-3.07 +[2026-08-05 11:35:00,512][__main__][INFO] - Raw 90% interval coverage: 0.8785 +[2026-08-05 11:35:00,513][__main__][INFO] - Conformal 90% interval coverage: 0.9276 +[2026-08-05 11:35:16,787][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.0003637141513402766 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:35:17,287][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:35:17,462][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:35:19,396][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:35:19,422][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:35:19,435][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:35:19,471][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:35:19,472][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:35:23,274][__main__][INFO] - test R2=0.9984 RMSE=4.30 MAE=1.42 MSE=18.45 Bias=-0.66 +[2026-08-05 11:35:25,376][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M +[2026-08-05 11:35:32,376][__main__][INFO] - Raw 90% interval coverage: 0.9735 +[2026-08-05 11:35:32,376][__main__][INFO] - Conformal 90% interval coverage: 0.9101 +[2026-08-05 11:35:42,586][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.006938406104605892 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:35:43,027][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:35:43,200][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:35:44,382][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:35:44,398][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:35:44,405][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:35:44,438][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:35:44,439][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:35:49,558][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-05 11:39:11,778][__main__][INFO] - test R2=0.9449 RMSE=25.39 MAE=14.26 MSE=644.80 Bias=-3.68 +[2026-08-05 11:39:26,635][__main__][INFO] - Raw 90% interval coverage: 0.7699 +[2026-08-05 11:39:26,636][__main__][INFO] - Conformal 90% interval coverage: 0.9095 +[2026-08-05 11:39:28,946][__main__][INFO] - test R2=0.9991 RMSE=3.31 MAE=1.04 MSE=10.96 Bias=-0.32 +[2026-08-05 11:39:43,809][__main__][INFO] - Raw 90% interval coverage: 0.9948 +[2026-08-05 11:39:43,810][__main__][INFO] - Conformal 90% interval coverage: 0.9140 +[2026-08-05 11:39:44,224][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.004334471675794304 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:39:44,698][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:39:44,871][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:39:46,845][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:39:46,861][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:39:46,869][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:39:46,917][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:39:46,917][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:39:49,749][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.009165095010178962 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:39:50,161][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:39:50,311][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:39:51,482][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:39:51,499][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:39:51,507][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:39:51,529][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:39:51,529][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:39:52,198][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-05 11:39:56,643][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-05 11:43:34,747][__main__][INFO] - test R2=0.9621 RMSE=21.06 MAE=7.49 MSE=443.51 Bias=-7.22 +[2026-08-05 11:43:44,787][__main__][INFO] - Raw 90% interval coverage: 0.7957 +[2026-08-05 11:43:44,788][__main__][INFO] - Conformal 90% interval coverage: 0.8617 +[2026-08-05 11:43:59,747][__main__][INFO] - test R2=nan RMSE=nan MAE=nan MSE=nan Bias=nan +[2026-08-05 11:44:01,418][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.0006006170659499329 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:44:01,934][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:44:02,099][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:44:04,229][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:44:04,255][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:44:04,266][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:44:04,300][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:44:04,301][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:44:10,219][estimint.v2.training.train_step][INFO] - Total parameters: 2.15M +[2026-08-05 11:44:14,389][__main__][INFO] - Raw 90% interval coverage: 0.0000 +[2026-08-05 11:44:14,389][__main__][INFO] - Conformal 90% interval coverage: 0.0000 +[2026-08-05 11:44:22,279][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.004088626795113247 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:44:22,744][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:44:22,894][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:44:24,171][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:44:24,188][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:44:24,195][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:44:24,232][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:44:24,233][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:44:29,513][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-05 11:47:50,519][__main__][INFO] - test R2=0.9452 RMSE=25.34 MAE=10.50 MSE=642.05 Bias=-9.58 +[2026-08-05 11:48:05,149][__main__][INFO] - Raw 90% interval coverage: 0.7970 +[2026-08-05 11:48:05,149][__main__][INFO] - Conformal 90% interval coverage: 0.8630 +[2026-08-05 11:48:26,885][__main__][INFO] - test R2=0.9704 RMSE=18.63 MAE=7.06 MSE=347.09 Bias=-6.05 +[2026-08-05 11:48:27,564][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.000983266239655992 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:48:28,156][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:48:28,337][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:48:30,670][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:48:30,696][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:48:30,708][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:48:30,749][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:48:30,750][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:48:36,613][estimint.v2.training.train_step][INFO] - Total parameters: 0.16M +[2026-08-05 11:48:40,994][__main__][INFO] - Raw 90% interval coverage: 0.9625 +[2026-08-05 11:48:40,994][__main__][INFO] - Conformal 90% interval coverage: 0.9334 +[2026-08-05 11:48:50,032][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 50 +lr: 0.0009858879144581827 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-05 11:48:50,526][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-05 11:48:50,673][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-05 11:48:51,945][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-05 11:48:51,961][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-05 11:48:51,973][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:48:52,001][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-05 11:48:52,013][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-05 11:48:57,081][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-05 11:51:41,092][__main__][INFO] - test R2=0.9984 RMSE=4.34 MAE=1.33 MSE=18.83 Bias=-0.86 +[2026-08-05 11:51:51,097][__main__][INFO] - Raw 90% interval coverage: 0.9877 +[2026-08-05 11:51:51,098][__main__][INFO] - Conformal 90% interval coverage: 0.9114 +[2026-08-05 11:52:03,099][__main__][INFO] - test R2=0.9952 RMSE=7.50 MAE=2.15 MSE=56.31 Bias=-1.62 +[2026-08-05 11:52:13,040][__main__][INFO] - Raw 90% interval coverage: 0.9832 +[2026-08-05 11:52:13,040][__main__][INFO] - Conformal 90% interval coverage: 0.8940 +[2026-08-06 11:18:05,852][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0023514380765263933 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:18:10,761][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:18:13,168][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:18:14,774][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:18:14,790][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:18:14,799][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:18:14,932][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:18:14,933][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:18:20,209][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 11:19:01,074][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0007379865779939993 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:19:01,299][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:19:01,456][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:19:02,685][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:19:02,709][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:19:02,720][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:19:02,862][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:19:02,863][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:19:08,647][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 11:20:05,301][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00017053299520122637 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:20:05,595][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:20:05,742][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:20:06,956][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:20:06,983][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:20:06,994][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:20:07,131][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:20:07,132][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:20:13,141][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 11:22:15,066][__main__][INFO] - test R2=0.6078 RMSE=67.76 MAE=28.06 MSE=4591.57 Bias=-25.99 Median APE=28.15 Log10 MSE=0.05 +[2026-08-06 11:22:18,584][__main__][INFO] - test R2=0.9995 RMSE=2.50 MAE=0.87 MSE=6.25 Bias=-0.35 Median APE=0.85 Log10 MSE=0.00 +[2026-08-06 11:22:20,670][__main__][INFO] - Raw 90% interval coverage: 0.9974 +[2026-08-06 11:22:20,670][__main__][INFO] - Conformal 90% interval coverage: 0.9244 +[2026-08-06 11:22:24,117][__main__][INFO] - Raw 90% interval coverage: 0.9910 +[2026-08-06 11:22:24,117][__main__][INFO] - Conformal 90% interval coverage: 0.9237 +[2026-08-06 11:22:32,981][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0014722303400395396 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:22:33,189][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:22:33,326][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:22:33,918][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0036683754952090137 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:22:34,100][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:22:34,242][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:22:34,616][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:22:34,633][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:22:34,640][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:22:34,802][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:22:34,803][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:22:35,520][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:22:35,535][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:22:35,543][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:22:35,676][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:22:35,676][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:22:40,023][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 11:22:41,152][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 11:23:47,448][__main__][INFO] - test R2=0.9961 RMSE=110335.27 MAE=31477.99 MSE=12173870080.00 Bias=-29176.05 Median APE=0.72 Log10 MSE=0.00 +[2026-08-06 11:23:51,679][__main__][INFO] - Raw 90% interval coverage: 0.9981 +[2026-08-06 11:23:51,680][__main__][INFO] - Conformal 90% interval coverage: 0.9166 +[2026-08-06 11:23:59,698][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.002727033781484934 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:23:59,894][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:24:00,037][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:24:01,322][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:24:01,339][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:24:01,346][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:24:01,377][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:24:01,378][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:24:06,890][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 11:26:20,449][__main__][INFO] - test R2=0.9995 RMSE=2.34 MAE=0.79 MSE=5.47 Bias=-0.03 Median APE=0.71 Log10 MSE=0.00 +[2026-08-06 11:26:24,456][__main__][INFO] - Raw 90% interval coverage: 0.8455 +[2026-08-06 11:26:24,457][__main__][INFO] - Conformal 90% interval coverage: 0.8862 +[2026-08-06 11:26:30,806][__main__][INFO] - test R2=0.9978 RMSE=5.02 MAE=1.86 MSE=25.23 Bias=-0.17 Median APE=2.09 Log10 MSE=0.00 +[2026-08-06 11:26:35,601][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.004142181192612314 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:26:35,800][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:26:35,944][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:26:36,613][__main__][INFO] - Raw 90% interval coverage: 0.8875 +[2026-08-06 11:26:36,614][__main__][INFO] - Conformal 90% interval coverage: 0.8817 +[2026-08-06 11:26:37,277][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:26:37,293][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:26:37,300][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:26:37,435][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:26:37,435][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:26:42,746][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M +[2026-08-06 11:26:46,107][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00015152485169716946 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:26:46,299][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:26:46,442][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:26:47,568][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:26:47,585][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:26:47,592][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:26:47,726][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:26:47,727][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:26:52,950][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M +[2026-08-06 11:27:54,086][__main__][INFO] - test R2=0.9995 RMSE=39533.89 MAE=13716.68 MSE=1562928128.00 Bias=-2480.86 Median APE=0.91 Log10 MSE=0.00 +[2026-08-06 11:27:59,536][__main__][INFO] - Raw 90% interval coverage: 0.8313 +[2026-08-06 11:27:59,536][__main__][INFO] - Conformal 90% interval coverage: 0.8985 +[2026-08-06 11:28:13,174][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0001051415908692829 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:28:13,400][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:28:13,537][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:28:14,693][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:28:14,709][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:28:14,716][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:28:14,851][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:28:14,852][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:28:20,340][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-06 11:29:48,504][__main__][INFO] - test R2=nan RMSE=nan MAE=nan MSE=nan Bias=nan Median APE=nan Log10 MSE=nan +[2026-08-06 11:29:54,097][__main__][INFO] - Raw 90% interval coverage: 0.8255 +[2026-08-06 11:29:54,097][__main__][INFO] - Conformal 90% interval coverage: 0.8920 +[2026-08-06 11:30:06,787][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0021352300854995776 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:30:06,987][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:30:07,135][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:30:08,513][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:30:08,529][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:30:08,537][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:30:08,688][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:30:08,689][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:30:14,264][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 11:30:44,736][__main__][INFO] - test R2=0.9879 RMSE=11.91 MAE=4.34 MSE=141.84 Bias=-0.77 Median APE=5.22 Log10 MSE=0.00 +[2026-08-06 11:30:50,260][__main__][INFO] - Raw 90% interval coverage: 0.8035 +[2026-08-06 11:30:50,260][__main__][INFO] - Conformal 90% interval coverage: 0.8824 +[2026-08-06 11:30:58,646][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.001609653077733546 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:30:58,852][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:30:58,988][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:31:00,243][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:31:00,259][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:31:00,266][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:31:00,394][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:31:00,395][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:31:05,582][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M +[2026-08-06 11:31:28,133][__main__][INFO] - test R2=0.9643 RMSE=334384.84 MAE=125499.48 MSE=111813222400.00 Bias=24924.13 Median APE=8.01 Log10 MSE=0.00 +[2026-08-06 11:31:33,865][__main__][INFO] - Raw 90% interval coverage: 0.8209 +[2026-08-06 11:31:33,866][__main__][INFO] - Conformal 90% interval coverage: 0.9043 +[2026-08-06 11:31:42,245][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.002420132028142598 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:31:42,502][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:31:42,645][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:31:44,237][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:31:44,254][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:31:44,261][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:31:44,399][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:31:44,400][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:31:49,781][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 11:33:26,303][__main__][INFO] - test R2=0.9949 RMSE=7.76 MAE=3.04 MSE=60.27 Bias=-2.92 Median APE=2.59 Log10 MSE=0.00 +[2026-08-06 11:33:32,050][__main__][INFO] - Raw 90% interval coverage: 0.9644 +[2026-08-06 11:33:32,050][__main__][INFO] - Conformal 90% interval coverage: 0.9198 +[2026-08-06 11:33:42,880][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0017334768951539853 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:33:43,075][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:33:43,210][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:33:44,488][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:33:44,507][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:33:44,514][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:33:44,560][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:33:44,560][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:33:50,029][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 11:34:03,519][__main__][INFO] - test R2=0.9879 RMSE=11.91 MAE=3.88 MSE=141.83 Bias=-3.09 Median APE=2.55 Log10 MSE=0.00 +[2026-08-06 11:34:07,794][__main__][INFO] - Raw 90% interval coverage: 0.9735 +[2026-08-06 11:34:07,794][__main__][INFO] - Conformal 90% interval coverage: 0.9198 +[2026-08-06 11:34:14,409][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.000981759635374673 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:34:14,596][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:34:14,727][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:34:15,850][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:34:15,866][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:34:15,874][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:34:15,909][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:34:15,910][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:34:21,256][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 11:35:26,381][__main__][INFO] - test R2=0.9936 RMSE=142045.89 MAE=49623.05 MSE=20177033216.00 Bias=-46813.19 Median APE=1.60 Log10 MSE=0.00 +[2026-08-06 11:35:30,493][__main__][INFO] - Raw 90% interval coverage: 0.9871 +[2026-08-06 11:35:30,493][__main__][INFO] - Conformal 90% interval coverage: 0.9166 +[2026-08-06 11:35:38,828][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00014112059169343874 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:35:39,020][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:35:39,157][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:35:40,339][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:35:40,356][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:35:40,363][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:35:40,497][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:35:40,497][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:35:46,034][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 11:37:00,905][__main__][INFO] - test R2=0.9995 RMSE=2.52 MAE=0.96 MSE=6.35 Bias=-0.13 Median APE=1.45 Log10 MSE=0.00 +[2026-08-06 11:37:06,488][__main__][INFO] - Raw 90% interval coverage: 0.9897 +[2026-08-06 11:37:06,488][__main__][INFO] - Conformal 90% interval coverage: 0.9005 +[2026-08-06 11:37:19,312][__main__][INFO] - test R2=0.9905 RMSE=10.54 MAE=3.47 MSE=111.04 Bias=-2.58 Median APE=2.72 Log10 MSE=0.00 +[2026-08-06 11:37:19,656][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.002851269615028461 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:37:19,881][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:37:20,037][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:37:21,315][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:37:21,339][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:37:21,350][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:37:21,391][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:37:21,392][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:37:23,481][__main__][INFO] - Raw 90% interval coverage: 0.9438 +[2026-08-06 11:37:23,481][__main__][INFO] - Conformal 90% interval coverage: 0.8959 +[2026-08-06 11:37:27,088][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 11:37:30,080][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0034210310888261024 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:37:30,282][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:37:30,422][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:37:31,567][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:37:31,583][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:37:31,591][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:37:31,621][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:37:31,622][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:37:36,931][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 11:39:18,199][__main__][INFO] - test R2=0.9996 RMSE=36263.48 MAE=12020.02 MSE=1315039616.00 Bias=-1048.68 Median APE=0.58 Log10 MSE=0.00 +[2026-08-06 11:39:22,629][__main__][INFO] - Raw 90% interval coverage: 0.8242 +[2026-08-06 11:39:22,629][__main__][INFO] - Conformal 90% interval coverage: 0.8571 +[2026-08-06 11:39:32,278][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.002422704101096793 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:39:32,480][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:39:32,623][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:39:34,301][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:39:34,318][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:39:34,326][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:39:34,361][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:39:34,362][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:39:39,860][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 11:40:26,641][__main__][INFO] - test R2=0.9828 RMSE=14.18 MAE=4.77 MSE=201.20 Bias=-4.30 Median APE=1.69 Log10 MSE=0.00 +[2026-08-06 11:40:30,780][__main__][INFO] - Raw 90% interval coverage: 0.9929 +[2026-08-06 11:40:30,781][__main__][INFO] - Conformal 90% interval coverage: 0.9179 +[2026-08-06 11:40:38,130][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00031827554540004807 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:40:38,329][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:40:38,469][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:40:39,955][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:40:39,971][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:40:39,978][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:40:40,017][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:40:40,018][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:40:45,328][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M +[2026-08-06 11:40:45,822][__main__][INFO] - test R2=0.9974 RMSE=5.53 MAE=2.06 MSE=30.58 Bias=0.25 Median APE=2.29 Log10 MSE=0.00 +[2026-08-06 11:40:51,458][__main__][INFO] - Raw 90% interval coverage: 0.9224 +[2026-08-06 11:40:51,458][__main__][INFO] - Conformal 90% interval coverage: 0.9030 +[2026-08-06 11:40:59,075][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00953693007551666 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:40:59,261][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:40:59,394][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:41:00,610][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:41:00,626][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:41:00,633][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:41:00,656][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:41:00,657][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:41:05,763][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 11:42:33,975][__main__][INFO] - test R2=0.9963 RMSE=107001.98 MAE=31046.33 MSE=11449424896.00 Bias=-28197.83 Median APE=0.77 Log10 MSE=0.00 +[2026-08-06 11:42:38,074][__main__][INFO] - Raw 90% interval coverage: 0.9858 +[2026-08-06 11:42:38,075][__main__][INFO] - Conformal 90% interval coverage: 0.8959 +[2026-08-06 11:42:48,947][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00012488033688135447 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:42:49,175][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:42:49,317][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:42:50,841][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:42:50,858][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:42:50,865][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:42:50,884][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:42:50,885][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:42:56,412][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 11:43:45,403][__main__][INFO] - test R2=0.9968 RMSE=6.12 MAE=1.93 MSE=37.49 Bias=-1.58 Median APE=1.01 Log10 MSE=0.00 +[2026-08-06 11:43:49,567][__main__][INFO] - Raw 90% interval coverage: 0.9974 +[2026-08-06 11:43:49,568][__main__][INFO] - Conformal 90% interval coverage: 0.9205 +[2026-08-06 11:43:57,833][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00021884075795472067 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:43:58,025][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:43:58,168][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:43:59,289][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:43:59,304][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:43:59,312][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:43:59,338][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:43:59,338][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:44:04,608][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 11:44:14,076][__main__][INFO] - test R2=0.9881 RMSE=11.80 MAE=4.55 MSE=139.30 Bias=3.18 Median APE=4.36 Log10 MSE=0.00 +[2026-08-06 11:44:19,636][__main__][INFO] - Raw 90% interval coverage: 0.9392 +[2026-08-06 11:44:19,637][__main__][INFO] - Conformal 90% interval coverage: 0.8778 +[2026-08-06 11:44:27,788][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.001391965685384743 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:44:27,973][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:44:28,115][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:44:29,298][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:44:29,314][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:44:29,322][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:44:29,360][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:44:29,361][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:44:34,529][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 11:45:49,586][__main__][INFO] - test R2=0.9989 RMSE=58364.02 MAE=21582.39 MSE=3406359296.00 Bias=-5236.52 Median APE=0.93 Log10 MSE=0.00 +[2026-08-06 11:45:53,719][__main__][INFO] - Raw 90% interval coverage: 0.8500 +[2026-08-06 11:45:53,720][__main__][INFO] - Conformal 90% interval coverage: 0.8694 +[2026-08-06 11:46:00,985][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0003975362216761093 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:46:01,186][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:46:01,318][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:46:02,458][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:46:02,474][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:46:02,481][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:46:02,505][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:46:02,506][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:46:07,758][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 11:47:53,498][__main__][INFO] - test R2=0.9991 RMSE=3.33 MAE=0.99 MSE=11.08 Bias=-0.16 Median APE=1.07 Log10 MSE=0.00 +[2026-08-06 11:47:59,039][__main__][INFO] - Raw 90% interval coverage: 0.9761 +[2026-08-06 11:47:59,039][__main__][INFO] - Conformal 90% interval coverage: 0.9211 +[2026-08-06 11:48:07,249][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0010587985021800752 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:48:07,452][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:48:07,597][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:48:08,903][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:48:08,919][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:48:08,926][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:48:08,974][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:48:08,975][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:48:10,520][__main__][INFO] - test R2=0.9940 RMSE=8.39 MAE=2.85 MSE=70.38 Bias=-1.85 Median APE=2.45 Log10 MSE=0.00 +[2026-08-06 11:48:14,557][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M +[2026-08-06 11:48:14,616][__main__][INFO] - Raw 90% interval coverage: 0.8940 +[2026-08-06 11:48:14,616][__main__][INFO] - Conformal 90% interval coverage: 0.8765 +[2026-08-06 11:48:19,518][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.002976262270399795 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:48:19,700][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:48:19,839][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:48:20,965][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:48:20,982][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:48:20,990][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:48:21,013][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:48:21,014][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:48:26,236][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M +[2026-08-06 11:49:55,271][__main__][INFO] - test R2=0.9979 RMSE=81573.70 MAE=24968.82 MSE=6654267392.00 Bias=-10578.96 Median APE=1.04 Log10 MSE=0.00 +[2026-08-06 11:50:00,970][__main__][INFO] - Raw 90% interval coverage: 0.7944 +[2026-08-06 11:50:00,971][__main__][INFO] - Conformal 90% interval coverage: 0.9218 +[2026-08-06 11:50:11,007][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0016868031484292073 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:50:11,203][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:50:11,346][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:50:12,586][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:50:12,604][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:50:12,611][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:50:12,638][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:50:12,639][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:50:18,197][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M +[2026-08-06 11:51:34,815][__main__][INFO] - test R2=0.9913 RMSE=10.07 MAE=3.79 MSE=101.36 Bias=0.90 Median APE=4.17 Log10 MSE=0.00 +[2026-08-06 11:51:40,387][__main__][INFO] - Raw 90% interval coverage: 0.9586 +[2026-08-06 11:51:40,387][__main__][INFO] - Conformal 90% interval coverage: 0.8946 +[2026-08-06 11:51:50,041][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0021503405830990575 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:51:50,239][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:51:50,377][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:51:51,694][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:51:51,710][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:51:51,717][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:51:51,742][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:51:51,742][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:51:54,589][__main__][INFO] - test R2=0.9926 RMSE=9.33 MAE=3.05 MSE=86.98 Bias=-2.91 Median APE=1.05 Log10 MSE=0.00 +[2026-08-06 11:51:57,143][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 11:51:58,860][__main__][INFO] - Raw 90% interval coverage: 0.9683 +[2026-08-06 11:51:58,860][__main__][INFO] - Conformal 90% interval coverage: 0.9198 +[2026-08-06 11:52:06,172][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.000288450940611043 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:52:06,386][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:52:06,523][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:52:07,754][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:52:07,770][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:52:07,778][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:52:07,821][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:52:07,821][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:52:13,260][estimint.v2.training.train_step][INFO] - Total parameters: 2.15M +[2026-08-06 11:53:24,257][__main__][INFO] - test R2=0.9832 RMSE=229491.88 MAE=98780.10 MSE=52666519552.00 Bias=-77796.16 Median APE=9.65 Log10 MSE=0.00 +[2026-08-06 11:53:29,954][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 11:53:29,954][__main__][INFO] - Conformal 90% interval coverage: 0.9069 +[2026-08-06 11:53:41,404][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0008321860870387337 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:53:41,602][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:53:41,737][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:53:43,149][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:53:43,167][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:53:43,175][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:53:43,196][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:53:43,197][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:53:48,523][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 11:54:57,685][__main__][INFO] - test R2=0.9801 RMSE=15.26 MAE=5.13 MSE=233.01 Bias=-4.56 Median APE=2.87 Log10 MSE=0.00 +[2026-08-06 11:55:01,989][__main__][INFO] - Raw 90% interval coverage: 0.9573 +[2026-08-06 11:55:01,989][__main__][INFO] - Conformal 90% interval coverage: 0.9024 +[2026-08-06 11:55:12,738][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.002345828089515989 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:55:12,934][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:55:13,074][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:55:14,362][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:55:14,378][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:55:14,386][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:55:14,410][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:55:14,411][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:55:19,596][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M +[2026-08-06 11:56:07,492][__main__][INFO] - test R2=0.9667 RMSE=19.75 MAE=7.19 MSE=389.97 Bias=-3.94 Median APE=3.69 Log10 MSE=0.00 +[2026-08-06 11:56:13,049][__main__][INFO] - Raw 90% interval coverage: 0.9948 +[2026-08-06 11:56:13,050][__main__][INFO] - Conformal 90% interval coverage: 0.9050 +[2026-08-06 11:56:20,055][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0015352941130162617 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:56:20,264][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:56:20,404][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:56:21,703][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:56:21,719][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:56:21,726][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:56:21,759][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:56:21,759][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:56:26,925][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 11:57:39,487][__main__][INFO] - test R2=0.9996 RMSE=33670.55 MAE=12060.33 MSE=1133705856.00 Bias=-7904.70 Median APE=0.79 Log10 MSE=0.00 +[2026-08-06 11:57:45,096][__main__][INFO] - Raw 90% interval coverage: 0.9825 +[2026-08-06 11:57:45,097][__main__][INFO] - Conformal 90% interval coverage: 0.8578 +[2026-08-06 11:57:56,064][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0019659022506878896 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:57:56,288][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:57:56,425][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:57:57,823][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:57:57,840][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:57:57,848][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:57:57,868][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 11:57:57,869][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:58:03,460][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 11:58:54,066][__main__][INFO] - test R2=0.9881 RMSE=11.81 MAE=4.03 MSE=139.56 Bias=-3.45 Median APE=2.52 Log10 MSE=0.00 +[2026-08-06 11:58:58,279][__main__][INFO] - Raw 90% interval coverage: 0.9095 +[2026-08-06 11:58:58,279][__main__][INFO] - Conformal 90% interval coverage: 0.8836 +[2026-08-06 11:59:06,411][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0003995439774577304 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:59:06,607][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:59:06,744][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:59:07,944][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:59:07,960][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:59:07,968][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 11:59:08,002][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 11:59:08,003][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:59:13,203][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 11:59:27,212][__main__][INFO] - test R2=0.9956 RMSE=7.14 MAE=2.14 MSE=50.95 Bias=-1.94 Median APE=1.00 Log10 MSE=0.00 +[2026-08-06 11:59:31,314][__main__][INFO] - Raw 90% interval coverage: 0.9910 +[2026-08-06 11:59:31,314][__main__][INFO] - Conformal 90% interval coverage: 0.9076 +[2026-08-06 11:59:39,832][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00013140853946132288 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 11:59:40,031][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 11:59:40,175][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 11:59:41,325][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 11:59:41,341][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 11:59:41,348][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:59:41,372][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 11:59:41,373][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 11:59:46,703][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 12:01:34,262][__main__][INFO] - test R2=0.9917 RMSE=161390.00 MAE=57528.61 MSE=26046732288.00 Bias=-55794.23 Median APE=1.02 Log10 MSE=0.00 +[2026-08-06 12:01:38,504][__main__][INFO] - Raw 90% interval coverage: 0.8824 +[2026-08-06 12:01:38,505][__main__][INFO] - Conformal 90% interval coverage: 0.8824 +[2026-08-06 12:01:48,092][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0021894429089891966 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:01:48,288][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:01:48,426][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:01:49,710][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:01:49,727][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:01:49,734][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:01:49,763][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:01:49,763][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:01:55,280][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 12:03:04,485][__main__][INFO] - test R2=0.9967 RMSE=6.23 MAE=2.28 MSE=38.80 Bias=-0.45 Median APE=2.24 Log10 MSE=0.00 +[2026-08-06 12:03:10,033][__main__][INFO] - Raw 90% interval coverage: 0.9205 +[2026-08-06 12:03:10,033][__main__][INFO] - Conformal 90% interval coverage: 0.8765 +[2026-08-06 12:03:18,571][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0016422055369937766 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:03:18,770][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:03:18,916][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:03:20,167][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:03:20,183][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:03:20,190][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:03:20,214][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:03:20,214][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:03:25,532][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M +[2026-08-06 12:03:37,046][__main__][INFO] - test R2=0.9964 RMSE=6.51 MAE=2.15 MSE=42.44 Bias=0.02 Median APE=2.29 Log10 MSE=0.00 +[2026-08-06 12:03:42,511][__main__][INFO] - Raw 90% interval coverage: 0.7369 +[2026-08-06 12:03:42,511][__main__][INFO] - Conformal 90% interval coverage: 0.8571 +[2026-08-06 12:03:52,078][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004150462995383971 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:03:52,267][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:03:52,401][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:03:53,519][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:03:53,535][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:03:53,543][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:03:53,573][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:03:53,574][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:03:59,104][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M +[2026-08-06 12:05:44,418][__main__][INFO] - test R2=0.9942 RMSE=134547.95 MAE=47341.89 MSE=18103150592.00 Bias=28817.83 Median APE=2.60 Log10 MSE=0.00 +[2026-08-06 12:05:49,920][__main__][INFO] - Raw 90% interval coverage: 0.9948 +[2026-08-06 12:05:49,921][__main__][INFO] - Conformal 90% interval coverage: 0.8869 +[2026-08-06 12:06:00,806][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0029566952482200557 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:06:01,028][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:06:01,168][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:06:02,491][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:06:02,508][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:06:02,516][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:06:02,561][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:06:02,563][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:06:07,937][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M +[2026-08-06 12:07:00,098][__main__][INFO] - test R2=0.9971 RMSE=5.82 MAE=1.77 MSE=33.91 Bias=-1.55 Median APE=0.85 Log10 MSE=0.00 +[2026-08-06 12:07:04,248][__main__][INFO] - Raw 90% interval coverage: 0.9897 +[2026-08-06 12:07:04,248][__main__][INFO] - Conformal 90% interval coverage: 0.9095 +[2026-08-06 12:07:15,001][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004094909932097586 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:07:15,194][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:07:15,340][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:07:16,379][__main__][INFO] - test R2=0.9739 RMSE=17.49 MAE=7.38 MSE=305.81 Bias=-5.28 Median APE=11.48 Log10 MSE=0.01 +[2026-08-06 12:07:16,494][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:07:16,510][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:07:16,517][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:07:16,537][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:07:16,537][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:07:21,871][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 12:07:21,871][__main__][INFO] - Conformal 90% interval coverage: 0.9082 +[2026-08-06 12:07:22,076][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 12:07:29,111][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.000914560671627941 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:07:29,301][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:07:29,444][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:07:30,707][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:07:30,723][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:07:30,731][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:07:30,774][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:07:30,774][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:07:35,975][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 12:09:05,096][__main__][INFO] - test R2=0.9997 RMSE=31221.91 MAE=10062.96 MSE=974807808.00 Bias=-4314.28 Median APE=0.56 Log10 MSE=0.00 +[2026-08-06 12:09:09,468][__main__][INFO] - Raw 90% interval coverage: 0.8649 +[2026-08-06 12:09:09,468][__main__][INFO] - Conformal 90% interval coverage: 0.9270 +[2026-08-06 12:09:21,936][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00027831097550714824 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:09:22,173][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:09:22,333][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:09:24,023][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:09:24,041][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:09:24,049][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:09:24,080][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:09:24,081][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:09:29,560][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 12:10:33,257][__main__][INFO] - test R2=0.9987 RMSE=3.88 MAE=1.14 MSE=15.08 Bias=-0.48 Median APE=0.84 Log10 MSE=0.00 +[2026-08-06 12:10:38,680][__main__][INFO] - Raw 90% interval coverage: 0.9922 +[2026-08-06 12:10:38,680][__main__][INFO] - Conformal 90% interval coverage: 0.9186 +[2026-08-06 12:10:47,366][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0025579008467657574 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:10:47,558][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:10:47,693][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:10:48,867][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:10:48,883][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:10:48,890][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:10:48,921][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:10:48,921][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:10:54,236][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M +[2026-08-06 12:11:26,440][__main__][INFO] - test R2=0.9979 RMSE=4.99 MAE=2.01 MSE=24.94 Bias=0.21 Median APE=2.32 Log10 MSE=0.00 +[2026-08-06 12:11:32,125][__main__][INFO] - Raw 90% interval coverage: 0.9211 +[2026-08-06 12:11:32,125][__main__][INFO] - Conformal 90% interval coverage: 0.8843 +[2026-08-06 12:11:41,444][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004774559957942644 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:11:41,638][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:11:41,784][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:11:42,935][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:11:42,951][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:11:42,959][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:11:42,982][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:11:42,982][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:11:48,141][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 12:12:26,756][__main__][INFO] - test R2=0.9993 RMSE=47000.61 MAE=15584.15 MSE=2209057024.00 Bias=-3803.94 Median APE=0.87 Log10 MSE=0.00 +[2026-08-06 12:12:30,885][__main__][INFO] - Raw 90% interval coverage: 0.8591 +[2026-08-06 12:12:30,885][__main__][INFO] - Conformal 90% interval coverage: 0.8694 +[2026-08-06 12:12:40,303][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00010399086654302044 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:12:40,501][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:12:40,642][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:12:41,750][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:12:41,767][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:12:41,775][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:12:41,804][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:12:41,804][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:12:47,208][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 12:14:34,146][__main__][INFO] - test R2=0.9942 RMSE=8.24 MAE=2.83 MSE=67.93 Bias=-2.64 Median APE=1.70 Log10 MSE=0.00 +[2026-08-06 12:14:38,393][__main__][INFO] - Raw 90% interval coverage: 0.9489 +[2026-08-06 12:14:38,393][__main__][INFO] - Conformal 90% interval coverage: 0.8824 +[2026-08-06 12:14:46,110][__main__][INFO] - test R2=0.9947 RMSE=7.87 MAE=2.75 MSE=61.93 Bias=-1.89 Median APE=2.46 Log10 MSE=0.00 +[2026-08-06 12:14:50,213][__main__][INFO] - Raw 90% interval coverage: 0.9586 +[2026-08-06 12:14:50,213][__main__][INFO] - Conformal 90% interval coverage: 0.8985 +[2026-08-06 12:14:52,177][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.002257300877040622 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:14:52,378][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:14:52,516][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:14:53,942][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:14:53,958][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:14:53,966][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:14:53,997][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:14:53,997][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:14:58,049][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0007855011465892996 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:14:58,246][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:14:58,383][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:14:59,161][estimint.v2.training.train_step][INFO] - Total parameters: 0.16M +[2026-08-06 12:14:59,456][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:14:59,471][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:14:59,479][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:14:59,519][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:14:59,520][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:15:04,966][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 12:15:53,046][__main__][INFO] - test R2=0.9953 RMSE=121374.04 MAE=40694.46 MSE=14731658240.00 Bias=-6468.00 Median APE=2.25 Log10 MSE=0.00 +[2026-08-06 12:15:58,590][__main__][INFO] - Raw 90% interval coverage: 0.9948 +[2026-08-06 12:15:58,590][__main__][INFO] - Conformal 90% interval coverage: 0.9282 +[2026-08-06 12:16:10,440][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.009403451162532304 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:16:10,673][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:16:10,817][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:16:12,067][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:16:12,086][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:16:12,093][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:16:12,113][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:16:12,113][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:16:17,601][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 12:17:57,692][__main__][INFO] - test R2=0.9964 RMSE=6.52 MAE=2.12 MSE=42.48 Bias=-1.97 Median APE=1.02 Log10 MSE=0.00 +[2026-08-06 12:18:01,840][__main__][INFO] - Raw 90% interval coverage: 0.9890 +[2026-08-06 12:18:01,840][__main__][INFO] - Conformal 90% interval coverage: 0.9056 +[2026-08-06 12:18:03,298][__main__][INFO] - test R2=0.9932 RMSE=8.90 MAE=2.99 MSE=79.22 Bias=-1.88 Median APE=2.53 Log10 MSE=0.00 +[2026-08-06 12:18:07,394][__main__][INFO] - Raw 90% interval coverage: 0.9444 +[2026-08-06 12:18:07,394][__main__][INFO] - Conformal 90% interval coverage: 0.8785 +[2026-08-06 12:18:15,091][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0008278119239003903 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:18:15,091][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.001340227449947289 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:18:15,337][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:18:15,412][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:18:15,565][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:18:15,580][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:18:17,022][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:18:17,027][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:18:17,038][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:18:17,043][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:18:17,045][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:18:17,051][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:18:17,090][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:18:17,091][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:18:17,092][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:18:17,092][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:18:22,299][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 12:18:22,481][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M +[2026-08-06 12:19:52,260][__main__][INFO] - test R2=0.8026 RMSE=786719.12 MAE=292020.72 MSE=618926964736.00 Bias=-254070.38 Median APE=22.36 Log10 MSE=0.02 +[2026-08-06 12:19:56,535][__main__][INFO] - Raw 90% interval coverage: 0.9974 +[2026-08-06 12:19:56,536][__main__][INFO] - Conformal 90% interval coverage: 0.9198 +[2026-08-06 12:20:03,596][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00011081662038556644 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:20:03,823][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:20:03,963][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:20:05,623][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:20:05,641][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:20:05,648][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:20:05,694][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:20:05,695][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:20:11,081][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 12:21:55,139][__main__][INFO] - test R2=0.9922 RMSE=9.53 MAE=3.25 MSE=90.86 Bias=-3.15 Median APE=1.52 Log10 MSE=0.00 +[2026-08-06 12:21:57,427][__main__][INFO] - test R2=0.9935 RMSE=8.74 MAE=2.89 MSE=76.42 Bias=-1.58 Median APE=2.63 Log10 MSE=0.00 +[2026-08-06 12:21:59,311][__main__][INFO] - Raw 90% interval coverage: 0.9922 +[2026-08-06 12:21:59,312][__main__][INFO] - Conformal 90% interval coverage: 0.9211 +[2026-08-06 12:22:01,560][__main__][INFO] - Raw 90% interval coverage: 0.9276 +[2026-08-06 12:22:01,561][__main__][INFO] - Conformal 90% interval coverage: 0.8836 +[2026-08-06 12:22:12,008][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005311123681289737 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:22:12,008][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0003324545641539456 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:22:12,246][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:22:12,318][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:22:12,490][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:22:12,495][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:22:13,907][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:22:13,911][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:22:13,931][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:22:13,936][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:22:13,942][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:22:13,946][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:22:13,991][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:22:13,993][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:22:13,993][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:22:13,994][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:22:19,643][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M +[2026-08-06 12:22:19,889][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M +[2026-08-06 12:23:19,984][__main__][INFO] - test R2=0.9992 RMSE=48815.74 MAE=16803.50 MSE=2382976768.00 Bias=-6537.09 Median APE=0.85 Log10 MSE=0.00 +[2026-08-06 12:23:25,716][__main__][INFO] - Raw 90% interval coverage: 0.9955 +[2026-08-06 12:23:25,716][__main__][INFO] - Conformal 90% interval coverage: 0.9308 +[2026-08-06 12:23:35,657][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00031886584522886974 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:23:35,860][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:23:35,996][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:23:37,223][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:23:37,240][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:23:37,248][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:23:37,270][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:23:37,270][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:23:42,542][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 12:25:54,561][__main__][INFO] - test R2=0.9912 RMSE=10.17 MAE=3.42 MSE=103.34 Bias=-2.49 Median APE=2.50 Log10 MSE=0.00 +[2026-08-06 12:25:57,807][__main__][INFO] - test R2=0.9845 RMSE=13.46 MAE=4.19 MSE=181.18 Bias=-4.04 Median APE=1.34 Log10 MSE=0.00 +[2026-08-06 12:25:58,733][__main__][INFO] - Raw 90% interval coverage: 0.9780 +[2026-08-06 12:25:58,733][__main__][INFO] - Conformal 90% interval coverage: 0.9114 +[2026-08-06 12:26:01,968][__main__][INFO] - Raw 90% interval coverage: 0.9955 +[2026-08-06 12:26:01,968][__main__][INFO] - Conformal 90% interval coverage: 0.8869 +[2026-08-06 12:26:09,041][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005119118786535208 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:26:09,073][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0012751270294813473 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:26:09,307][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:26:09,383][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:26:09,544][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:26:09,563][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:26:11,028][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:26:11,044][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:26:11,052][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:26:11,063][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:26:11,078][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:26:11,086][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:26:11,089][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:26:11,089][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:26:11,108][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:26:11,108][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:26:16,293][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 12:26:16,595][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 12:26:40,986][__main__][INFO] - test R2=0.9996 RMSE=33182.84 MAE=10937.21 MSE=1101100672.00 Bias=4399.64 Median APE=0.61 Log10 MSE=0.00 +[2026-08-06 12:26:45,035][__main__][INFO] - Raw 90% interval coverage: 0.8500 +[2026-08-06 12:26:45,035][__main__][INFO] - Conformal 90% interval coverage: 0.8824 +[2026-08-06 12:26:50,575][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005564287212555498 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:26:50,763][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:26:50,898][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:26:52,046][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:26:52,062][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:26:52,070][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:26:52,092][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:26:52,093][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:26:57,488][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-06 12:29:51,347][__main__][INFO] - test R2=0.9961 RMSE=6.74 MAE=2.03 MSE=45.41 Bias=-1.86 Median APE=0.92 Log10 MSE=0.00 +[2026-08-06 12:29:55,611][__main__][INFO] - Raw 90% interval coverage: 0.9716 +[2026-08-06 12:29:55,611][__main__][INFO] - Conformal 90% interval coverage: 0.9134 +[2026-08-06 12:30:05,198][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0011122922481898575 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:30:05,396][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:30:05,535][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:30:06,207][__main__][INFO] - test R2=0.9968 RMSE=6.07 MAE=2.27 MSE=36.89 Bias=-0.15 Median APE=2.33 Log10 MSE=0.00 +[2026-08-06 12:30:06,824][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:30:06,840][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:30:06,856][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:30:06,899][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:30:06,900][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:30:07,100][__main__][INFO] - test R2=0.9991 RMSE=53163.04 MAE=17488.08 MSE=2826308864.00 Bias=-9027.60 Median APE=0.77 Log10 MSE=0.00 +[2026-08-06 12:30:11,813][__main__][INFO] - Raw 90% interval coverage: 0.9522 +[2026-08-06 12:30:11,814][__main__][INFO] - Conformal 90% interval coverage: 0.8979 +[2026-08-06 12:30:12,444][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 12:30:12,851][__main__][INFO] - Raw 90% interval coverage: 0.9974 +[2026-08-06 12:30:12,851][__main__][INFO] - Conformal 90% interval coverage: 0.9063 +[2026-08-06 12:30:21,722][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00034558352846492026 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:30:21,794][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0018197790445993248 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:30:21,950][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:30:22,035][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:30:22,199][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:30:22,214][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:30:23,630][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:30:23,648][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:30:23,655][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:30:23,680][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:30:23,680][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:30:23,762][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:30:23,778][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:30:23,786][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:30:23,804][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:30:23,805][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:30:28,996][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 12:30:29,203][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-06 12:33:47,825][__main__][INFO] - test R2=0.9956 RMSE=7.22 MAE=2.32 MSE=52.06 Bias=-2.19 Median APE=0.84 Log10 MSE=0.00 +[2026-08-06 12:33:51,919][__main__][INFO] - Raw 90% interval coverage: 0.9787 +[2026-08-06 12:33:51,919][__main__][INFO] - Conformal 90% interval coverage: 0.9147 +[2026-08-06 12:34:01,971][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00012361631937720185 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:34:02,178][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:34:02,318][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:34:03,551][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:34:03,566][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:34:03,574][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:34:03,706][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:34:03,706][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:34:09,177][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 12:34:18,003][__main__][INFO] - test R2=0.9997 RMSE=30708.52 MAE=9173.88 MSE=943013120.00 Bias=-2294.55 Median APE=0.43 Log10 MSE=0.00 +[2026-08-06 12:34:19,366][__main__][INFO] - test R2=0.9970 RMSE=5.90 MAE=2.12 MSE=34.80 Bias=0.05 Median APE=2.14 Log10 MSE=0.00 +[2026-08-06 12:34:23,698][__main__][INFO] - Raw 90% interval coverage: 0.8688 +[2026-08-06 12:34:23,698][__main__][INFO] - Conformal 90% interval coverage: 0.9005 +[2026-08-06 12:34:25,096][__main__][INFO] - Raw 90% interval coverage: 0.8992 +[2026-08-06 12:34:25,097][__main__][INFO] - Conformal 90% interval coverage: 0.8559 +[2026-08-06 12:34:29,124][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0015772020238424458 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:34:29,320][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:34:29,455][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:34:30,611][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:34:30,630][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:34:30,637][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:34:30,778][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:34:30,778][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:34:34,024][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0016644815855968455 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:34:34,206][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:34:34,347][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:34:35,565][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:34:35,581][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:34:35,589][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:34:35,715][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:34:35,716][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:34:36,171][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 12:34:40,944][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 12:37:40,850][__main__][INFO] - test R2=0.9908 RMSE=10.37 MAE=3.37 MSE=107.48 Bias=-1.83 Median APE=2.76 Log10 MSE=0.00 +[2026-08-06 12:37:45,039][__main__][INFO] - Raw 90% interval coverage: 0.9392 +[2026-08-06 12:37:45,039][__main__][INFO] - Conformal 90% interval coverage: 0.8901 +[2026-08-06 12:37:53,818][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0003381934932484014 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:37:54,039][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:37:54,174][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:37:55,414][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:37:55,432][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:37:55,440][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:37:55,468][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:37:55,469][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:38:00,851][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 12:38:03,363][__main__][INFO] - test R2=0.9996 RMSE=2.13 MAE=0.78 MSE=4.55 Bias=0.06 Median APE=0.92 Log10 MSE=0.00 +[2026-08-06 12:38:09,043][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 12:38:09,044][__main__][INFO] - Conformal 90% interval coverage: 0.9140 +[2026-08-06 12:38:15,649][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005707859318296529 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:38:15,832][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:38:15,972][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:38:17,118][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:38:17,134][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:38:17,141][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:38:17,169][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:38:17,169][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:38:22,391][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M +[2026-08-06 12:38:27,052][__main__][INFO] - test R2=0.9903 RMSE=174041.92 MAE=56375.89 MSE=30290591744.00 Bias=-34114.22 Median APE=3.12 Log10 MSE=0.00 +[2026-08-06 12:38:32,805][__main__][INFO] - Raw 90% interval coverage: 0.9502 +[2026-08-06 12:38:32,806][__main__][INFO] - Conformal 90% interval coverage: 0.9392 +[2026-08-06 12:38:41,858][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006841928318514862 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:38:42,051][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:38:42,194][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:38:43,322][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:38:43,339][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:38:43,346][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:38:43,366][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:38:43,366][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:38:48,610][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 12:41:09,363][__main__][INFO] - test R2=0.9966 RMSE=6.31 MAE=2.30 MSE=39.76 Bias=-0.43 Median APE=2.42 Log10 MSE=0.00 +[2026-08-06 12:41:14,975][__main__][INFO] - Raw 90% interval coverage: 0.9334 +[2026-08-06 12:41:14,975][__main__][INFO] - Conformal 90% interval coverage: 0.8817 +[2026-08-06 12:41:26,013][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0008085430940180454 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:41:26,230][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:41:26,366][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:41:27,618][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:41:27,633][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:41:27,641][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:41:27,674][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:41:27,675][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:41:32,908][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 12:42:04,495][__main__][INFO] - test R2=0.9962 RMSE=6.66 MAE=2.02 MSE=44.34 Bias=-1.79 Median APE=0.78 Log10 MSE=0.00 +[2026-08-06 12:42:08,732][__main__][INFO] - Raw 90% interval coverage: 0.9864 +[2026-08-06 12:42:08,732][__main__][INFO] - Conformal 90% interval coverage: 0.9367 +[2026-08-06 12:42:17,690][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00023828923146847417 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:42:17,918][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:42:18,063][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:42:19,697][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:42:19,713][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:42:19,721][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:42:19,750][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:42:19,750][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:42:22,267][__main__][INFO] - test R2=0.9996 RMSE=33458.53 MAE=10436.27 MSE=1119473152.00 Bias=1899.59 Median APE=0.42 Log10 MSE=0.00 +[2026-08-06 12:42:25,279][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 12:42:26,322][__main__][INFO] - Raw 90% interval coverage: 0.7763 +[2026-08-06 12:42:26,322][__main__][INFO] - Conformal 90% interval coverage: 0.8565 +[2026-08-06 12:42:37,817][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00012296532147675816 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:42:38,019][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:42:38,160][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:42:39,440][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:42:39,457][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:42:39,464][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:42:39,483][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:42:39,484][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:42:45,093][estimint.v2.training.train_step][INFO] - Total parameters: 2.15M +[2026-08-06 12:45:22,361][__main__][INFO] - test R2=0.9976 RMSE=5.31 MAE=1.58 MSE=28.23 Bias=-1.26 Median APE=0.76 Log10 MSE=0.00 +[2026-08-06 12:45:22,867][__main__][INFO] - test R2=0.9939 RMSE=8.42 MAE=3.24 MSE=70.87 Bias=0.91 Median APE=3.22 Log10 MSE=0.00 +[2026-08-06 12:45:26,416][__main__][INFO] - Raw 90% interval coverage: 0.9974 +[2026-08-06 12:45:26,417][__main__][INFO] - Conformal 90% interval coverage: 0.9257 +[2026-08-06 12:45:28,587][__main__][INFO] - Raw 90% interval coverage: 0.9670 +[2026-08-06 12:45:28,587][__main__][INFO] - Conformal 90% interval coverage: 0.9263 +[2026-08-06 12:45:37,571][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.001401565434879452 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:45:37,571][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0068869413443323245 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:45:37,817][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:45:37,896][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:45:38,055][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:45:38,071][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:45:39,740][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:45:39,740][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:45:39,756][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:45:39,756][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:45:39,763][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:45:39,764][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:45:39,919][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:45:39,920][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:45:39,925][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:45:39,926][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:45:45,113][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 12:45:45,366][estimint.v2.training.train_step][INFO] - Total parameters: 0.16M +[2026-08-06 12:46:36,909][__main__][INFO] - test R2=0.9991 RMSE=53218.92 MAE=16948.54 MSE=2832253440.00 Bias=-8382.37 Median APE=1.04 Log10 MSE=0.00 +[2026-08-06 12:46:42,462][__main__][INFO] - Raw 90% interval coverage: 0.9916 +[2026-08-06 12:46:42,462][__main__][INFO] - Conformal 90% interval coverage: 0.9224 +[2026-08-06 12:46:53,939][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00044162112717022574 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:46:54,150][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:46:54,291][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:46:55,603][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:46:55,619][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:46:55,627][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:46:55,670][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:46:55,671][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:47:01,058][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M +[2026-08-06 12:48:43,370][__main__][INFO] - test R2=0.9918 RMSE=9.80 MAE=3.80 MSE=96.09 Bias=-3.65 Median APE=2.47 Log10 MSE=0.00 +[2026-08-06 12:48:47,603][__main__][INFO] - Raw 90% interval coverage: 0.8468 +[2026-08-06 12:48:47,603][__main__][INFO] - Conformal 90% interval coverage: 0.8500 +[2026-08-06 12:48:58,590][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006918459319611338 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:48:58,798][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:48:58,936][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:49:00,404][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:49:00,420][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:49:00,428][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:49:00,561][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:49:00,562][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:49:05,844][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 12:49:23,773][__main__][INFO] - test R2=0.9886 RMSE=11.55 MAE=3.69 MSE=133.38 Bias=-2.87 Median APE=2.91 Log10 MSE=0.00 +[2026-08-06 12:49:27,806][__main__][INFO] - Raw 90% interval coverage: 0.9218 +[2026-08-06 12:49:27,806][__main__][INFO] - Conformal 90% interval coverage: 0.9030 +[2026-08-06 12:49:36,076][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0015385529815639203 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:49:36,278][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:49:36,413][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:49:37,573][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:49:37,589][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:49:37,596][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:49:37,736][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:49:37,736][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:49:42,884][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M +[2026-08-06 12:50:07,338][__main__][INFO] - test R2=0.9864 RMSE=206582.00 MAE=74531.34 MSE=42676125696.00 Bias=25726.84 Median APE=4.60 Log10 MSE=0.00 +[2026-08-06 12:50:12,912][__main__][INFO] - Raw 90% interval coverage: 0.8054 +[2026-08-06 12:50:12,912][__main__][INFO] - Conformal 90% interval coverage: 0.9270 +[2026-08-06 12:50:24,167][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004456498789591352 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:50:24,364][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:50:24,504][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:50:25,769][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:50:25,786][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:50:25,793][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:50:25,934][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:50:25,934][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:50:31,245][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 12:52:14,906][__main__][INFO] - test R2=0.9975 RMSE=5.44 MAE=1.59 MSE=29.54 Bias=-1.07 Median APE=1.04 Log10 MSE=0.00 +[2026-08-06 12:52:20,442][__main__][INFO] - Raw 90% interval coverage: 0.9897 +[2026-08-06 12:52:20,442][__main__][INFO] - Conformal 90% interval coverage: 0.9315 +[2026-08-06 12:52:30,880][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0015860935764615135 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:52:31,104][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:52:31,250][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:52:32,782][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:52:32,806][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:52:32,817][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:52:32,954][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:52:32,954][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:52:39,071][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 12:53:22,210][__main__][INFO] - test R2=0.9906 RMSE=10.51 MAE=3.50 MSE=110.55 Bias=-2.74 Median APE=3.03 Log10 MSE=0.00 +[2026-08-06 12:53:26,463][__main__][INFO] - Raw 90% interval coverage: 0.8849 +[2026-08-06 12:53:26,464][__main__][INFO] - Conformal 90% interval coverage: 0.8946 +[2026-08-06 12:53:34,039][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0012227070939002825 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:53:34,238][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:53:34,376][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:53:35,614][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:53:35,630][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:53:35,637][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:53:35,671][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:53:35,672][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:53:39,293][__main__][INFO] - test R2=0.9992 RMSE=49331.25 MAE=15908.62 MSE=2433572608.00 Bias=-2465.85 Median APE=0.76 Log10 MSE=0.00 +[2026-08-06 12:53:41,024][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 12:53:44,976][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 12:53:44,976][__main__][INFO] - Conformal 90% interval coverage: 0.9063 +[2026-08-06 12:53:54,319][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.008044769213400573 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:53:54,517][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:53:54,656][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:53:55,800][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:53:55,818][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:53:55,825][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:53:55,852][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:53:55,853][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:54:01,261][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 12:56:29,592][__main__][INFO] - test R2=0.9997 RMSE=1.77 MAE=0.63 MSE=3.13 Bias=-0.08 Median APE=0.92 Log10 MSE=0.00 +[2026-08-06 12:56:35,187][__main__][INFO] - Raw 90% interval coverage: 0.9703 +[2026-08-06 12:56:35,187][__main__][INFO] - Conformal 90% interval coverage: 0.9043 +[2026-08-06 12:56:49,112][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0034521181240971645 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:56:49,312][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:56:49,461][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:56:50,842][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:56:50,866][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:56:50,877][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:56:51,018][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 12:56:51,019][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:56:56,732][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 12:56:57,542][__main__][INFO] - test R2=0.9997 RMSE=32002.67 MAE=10739.77 MSE=1024171008.00 Bias=-594.21 Median APE=0.62 Log10 MSE=0.00 +[2026-08-06 12:57:01,647][__main__][INFO] - Raw 90% interval coverage: 0.8436 +[2026-08-06 12:57:01,647][__main__][INFO] - Conformal 90% interval coverage: 0.8985 +[2026-08-06 12:57:10,142][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0007216741007139319 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:57:10,338][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:57:10,479][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:57:11,677][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:57:11,694][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:57:11,702][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:57:11,837][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 12:57:11,838][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:57:16,270][__main__][INFO] - test R2=0.9937 RMSE=8.57 MAE=2.86 MSE=73.48 Bias=-1.63 Median APE=2.55 Log10 MSE=0.00 +[2026-08-06 12:57:17,141][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 12:57:20,424][__main__][INFO] - Raw 90% interval coverage: 0.9276 +[2026-08-06 12:57:20,424][__main__][INFO] - Conformal 90% interval coverage: 0.8733 +[2026-08-06 12:57:30,100][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.004972159712322502 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 12:57:30,290][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 12:57:30,426][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 12:57:32,005][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 12:57:32,021][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 12:57:32,029][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 12:57:32,158][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 12:57:32,158][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 12:57:37,476][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M +[2026-08-06 13:00:22,077][__main__][INFO] - test R2=0.9996 RMSE=35938.88 MAE=12287.98 MSE=1291602816.00 Bias=154.39 Median APE=0.57 Log10 MSE=0.00 +[2026-08-06 13:00:27,692][__main__][INFO] - Raw 90% interval coverage: 0.9819 +[2026-08-06 13:00:27,693][__main__][INFO] - Conformal 90% interval coverage: 0.9153 +[2026-08-06 13:00:35,645][__main__][INFO] - test R2=0.9916 RMSE=9.91 MAE=3.37 MSE=98.16 Bias=-3.23 Median APE=1.62 Log10 MSE=0.00 +[2026-08-06 13:00:39,900][__main__][INFO] - Raw 90% interval coverage: 0.9405 +[2026-08-06 13:00:39,900][__main__][INFO] - Conformal 90% interval coverage: 0.8914 +[2026-08-06 13:00:47,103][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0007573352022218117 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:00:47,127][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00017255999075871934 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:00:47,365][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:00:47,454][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:00:47,602][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:00:47,634][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:00:49,081][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:00:49,097][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:00:49,104][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:00:49,126][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:00:49,126][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:00:49,159][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:00:49,177][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:00:49,184][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:00:49,204][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:00:49,204][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:00:54,647][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 13:00:54,660][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 13:01:17,003][__main__][INFO] - test R2=0.1586 RMSE=99.25 MAE=39.40 MSE=9851.27 Bias=32.80 Median APE=37.62 Log10 MSE=0.05 +[2026-08-06 13:01:21,457][__main__][INFO] - Raw 90% interval coverage: 0.9916 +[2026-08-06 13:01:21,457][__main__][INFO] - Conformal 90% interval coverage: 0.9237 +[2026-08-06 13:01:28,784][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0011367210562812302 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:01:28,983][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:01:29,127][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:01:30,623][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:01:30,639][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:01:30,647][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:01:30,672][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:01:30,672][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:01:35,898][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 13:03:53,636][__main__][INFO] - test R2=0.9979 RMSE=4.91 MAE=1.64 MSE=24.13 Bias=-1.35 Median APE=0.91 Log10 MSE=0.00 +[2026-08-06 13:03:57,693][__main__][INFO] - Raw 90% interval coverage: 0.9981 +[2026-08-06 13:03:57,694][__main__][INFO] - Conformal 90% interval coverage: 0.8959 +[2026-08-06 13:04:21,864][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00010410261076516482 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:04:22,101][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:04:22,266][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:04:23,650][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:04:23,674][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:04:23,685][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:04:23,718][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:04:23,719][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:04:29,586][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 13:04:40,067][__main__][INFO] - test R2=0.9998 RMSE=24999.36 MAE=9045.38 MSE=624967872.00 Bias=2284.69 Median APE=0.50 Log10 MSE=0.00 +[2026-08-06 13:04:45,692][__main__][INFO] - Raw 90% interval coverage: 0.9851 +[2026-08-06 13:04:45,692][__main__][INFO] - Conformal 90% interval coverage: 0.9037 +[2026-08-06 13:04:45,698][__main__][INFO] - test R2=0.9975 RMSE=5.45 MAE=2.04 MSE=29.65 Bias=-0.48 Median APE=2.24 Log10 MSE=0.00 +[2026-08-06 13:04:51,310][__main__][INFO] - Raw 90% interval coverage: 0.9308 +[2026-08-06 13:04:51,311][__main__][INFO] - Conformal 90% interval coverage: 0.8914 +[2026-08-06 13:05:04,248][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0010853414413184834 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:05:04,269][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0002479414126085863 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:05:04,492][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:05:04,587][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:05:04,738][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:05:04,762][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:05:06,412][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:05:06,436][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:05:06,447][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:05:06,487][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:05:06,512][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:05:06,523][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:05:06,589][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:05:06,590][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:05:06,657][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:05:06,657][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:05:12,426][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 13:05:12,722][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 13:08:07,714][__main__][INFO] - test R2=0.9967 RMSE=101880.53 MAE=30604.88 MSE=10379641856.00 Bias=-26904.51 Median APE=0.58 Log10 MSE=0.00 +[2026-08-06 13:08:11,122][__main__][INFO] - test R2=0.9920 RMSE=9.69 MAE=3.28 MSE=93.86 Bias=-3.17 Median APE=1.37 Log10 MSE=0.00 +[2026-08-06 13:08:11,855][__main__][INFO] - Raw 90% interval coverage: 0.9974 +[2026-08-06 13:08:11,855][__main__][INFO] - Conformal 90% interval coverage: 0.8946 +[2026-08-06 13:08:15,308][__main__][INFO] - Raw 90% interval coverage: 0.9987 +[2026-08-06 13:08:15,308][__main__][INFO] - Conformal 90% interval coverage: 0.8901 +[2026-08-06 13:08:24,032][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.007653113812336395 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:08:24,268][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:08:24,411][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:08:25,138][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.006591502639757018 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:08:25,326][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:08:25,473][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:08:25,978][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:08:26,000][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:08:26,008][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:08:26,050][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:08:26,051][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:08:27,418][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:08:27,434][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:08:27,441][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:08:27,482][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:08:27,482][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:08:31,589][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M +[2026-08-06 13:08:32,998][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 13:08:48,220][__main__][INFO] - test R2=0.9907 RMSE=10.45 MAE=3.49 MSE=109.11 Bias=-2.55 Median APE=2.65 Log10 MSE=0.00 +[2026-08-06 13:08:52,569][__main__][INFO] - Raw 90% interval coverage: 0.9263 +[2026-08-06 13:08:52,569][__main__][INFO] - Conformal 90% interval coverage: 0.8946 +[2026-08-06 13:09:03,228][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005690408715532371 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:09:03,419][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:09:03,560][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:09:04,758][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:09:04,774][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:09:04,781][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:09:04,816][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:09:04,817][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:09:10,052][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 13:11:26,722][__main__][INFO] - test R2=0.9934 RMSE=143366.91 MAE=44347.31 MSE=20554070016.00 Bias=-26047.40 Median APE=1.97 Log10 MSE=0.00 +[2026-08-06 13:11:30,833][__main__][INFO] - Raw 90% interval coverage: 0.9819 +[2026-08-06 13:11:30,833][__main__][INFO] - Conformal 90% interval coverage: 0.8946 +[2026-08-06 13:11:38,760][__main__][INFO] - test R2=-0.1579 RMSE=116.43 MAE=45.27 MSE=13556.86 Bias=19.51 Median APE=53.57 Log10 MSE=0.26 +[2026-08-06 13:11:40,586][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.001083035708129713 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:11:40,785][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:11:40,925][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:11:42,187][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:11:42,204][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:11:42,212][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:11:42,244][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:11:42,245][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:11:44,251][__main__][INFO] - Raw 90% interval coverage: 0.8455 +[2026-08-06 13:11:44,252][__main__][INFO] - Conformal 90% interval coverage: 0.9612 +[2026-08-06 13:11:47,620][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 13:11:51,373][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00033486006506612103 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:11:51,562][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:11:51,709][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:11:53,208][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:11:53,225][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:11:53,233][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:11:53,261][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:11:53,261][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:11:58,742][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 13:12:46,398][__main__][INFO] - test R2=0.9956 RMSE=7.20 MAE=2.41 MSE=51.80 Bias=-1.46 Median APE=2.17 Log10 MSE=0.00 +[2026-08-06 13:12:50,470][__main__][INFO] - Raw 90% interval coverage: 0.9173 +[2026-08-06 13:12:50,470][__main__][INFO] - Conformal 90% interval coverage: 0.8824 +[2026-08-06 13:13:05,782][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0020535268676319936 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:13:05,989][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:13:06,136][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:13:07,433][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:13:07,458][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:13:07,468][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:13:07,502][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:13:07,502][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:13:13,379][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 13:15:37,210][__main__][INFO] - test R2=0.9997 RMSE=31545.30 MAE=11906.04 MSE=995106112.00 Bias=1568.53 Median APE=0.59 Log10 MSE=0.00 +[2026-08-06 13:15:42,837][__main__][INFO] - Raw 90% interval coverage: 0.8824 +[2026-08-06 13:15:42,838][__main__][INFO] - Conformal 90% interval coverage: 0.9263 +[2026-08-06 13:15:52,089][__main__][INFO] - test R2=0.9995 RMSE=2.34 MAE=0.74 MSE=5.49 Bias=0.11 Median APE=0.64 Log10 MSE=0.00 +[2026-08-06 13:15:57,581][__main__][INFO] - Raw 90% interval coverage: 0.9922 +[2026-08-06 13:15:57,582][__main__][INFO] - Conformal 90% interval coverage: 0.9024 +[2026-08-06 13:16:06,537][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.000996807147985872 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:16:06,572][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00014925341954107255 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:16:06,775][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:16:06,871][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:16:07,028][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:16:07,063][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:16:08,792][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:16:08,808][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:16:08,816][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:16:08,851][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:16:08,851][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:16:09,041][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:16:09,069][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:16:09,080][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:16:09,112][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:16:09,112][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:16:11,937][__main__][INFO] - test R2=0.9927 RMSE=9.26 MAE=2.96 MSE=85.75 Bias=-1.54 Median APE=2.70 Log10 MSE=0.00 +[2026-08-06 13:16:14,238][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 13:16:15,191][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M +[2026-08-06 13:16:15,990][__main__][INFO] - Raw 90% interval coverage: 0.8979 +[2026-08-06 13:16:15,990][__main__][INFO] - Conformal 90% interval coverage: 0.8901 +[2026-08-06 13:16:39,208][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0010871103558841126 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:16:39,448][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:16:39,604][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:16:41,458][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:16:41,483][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:16:41,494][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:16:41,521][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:16:41,522][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:16:47,606][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 13:19:50,607][__main__][INFO] - test R2=0.9834 RMSE=13.94 MAE=4.43 MSE=194.44 Bias=-4.29 Median APE=1.05 Log10 MSE=0.00 +[2026-08-06 13:19:54,792][__main__][INFO] - Raw 90% interval coverage: 0.9625 +[2026-08-06 13:19:54,793][__main__][INFO] - Conformal 90% interval coverage: 0.9231 +[2026-08-06 13:20:07,741][__main__][INFO] - test R2=0.9985 RMSE=67729.95 MAE=24522.62 MSE=4587346432.00 Bias=119.51 Median APE=1.30 Log10 MSE=0.00 +[2026-08-06 13:20:13,376][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 13:20:13,377][__main__][INFO] - Conformal 90% interval coverage: 0.9341 +[2026-08-06 13:20:19,562][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0014063572827480218 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:20:19,829][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:20:19,989][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:20:21,713][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:20:21,738][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:20:21,749][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:20:21,799][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:20:21,800][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:20:24,404][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.004342113526542186 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:20:24,596][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:20:24,733][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:20:25,395][__main__][INFO] - test R2=0.9838 RMSE=13.77 MAE=4.47 MSE=189.52 Bias=-3.78 Median APE=3.09 Log10 MSE=0.00 +[2026-08-06 13:20:26,092][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:20:26,108][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:20:26,116][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:20:26,190][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:20:26,191][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:20:27,746][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-06 13:20:29,551][__main__][INFO] - Raw 90% interval coverage: 0.8979 +[2026-08-06 13:20:29,551][__main__][INFO] - Conformal 90% interval coverage: 0.8765 +[2026-08-06 13:20:31,633][estimint.v2.training.train_step][INFO] - Total parameters: 0.16M +[2026-08-06 13:20:37,435][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0025802765387868782 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:20:37,631][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:20:37,787][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:20:39,139][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:20:39,155][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:20:39,165][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:20:39,198][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:20:39,198][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:20:44,507][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M +[2026-08-06 13:23:25,852][__main__][INFO] - test R2=0.9997 RMSE=31568.84 MAE=11074.45 MSE=996591808.00 Bias=3837.75 Median APE=0.55 Log10 MSE=0.00 +[2026-08-06 13:23:29,941][__main__][INFO] - Raw 90% interval coverage: 0.8778 +[2026-08-06 13:23:29,941][__main__][INFO] - Conformal 90% interval coverage: 0.8836 +[2026-08-06 13:23:36,492][__main__][INFO] - test R2=0.9988 RMSE=3.70 MAE=1.23 MSE=13.69 Bias=-0.38 Median APE=1.32 Log10 MSE=0.00 +[2026-08-06 13:23:42,105][__main__][INFO] - Raw 90% interval coverage: 0.8720 +[2026-08-06 13:23:42,105][__main__][INFO] - Conformal 90% interval coverage: 0.9334 +[2026-08-06 13:23:43,069][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004592012577393376 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:23:43,283][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:23:43,430][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:23:44,983][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:23:45,000][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:23:45,008][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:23:45,028][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:23:45,028][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:23:48,251][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.002621237443071434 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:23:48,432][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:23:48,565][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:23:49,734][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:23:49,749][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:23:49,759][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:23:49,792][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:23:49,793][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:23:50,402][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 13:23:55,213][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 13:24:22,896][__main__][INFO] - test R2=0.9930 RMSE=9.05 MAE=3.35 MSE=81.93 Bias=-2.16 Median APE=3.27 Log10 MSE=0.00 +[2026-08-06 13:24:27,010][__main__][INFO] - Raw 90% interval coverage: 0.9108 +[2026-08-06 13:24:27,010][__main__][INFO] - Conformal 90% interval coverage: 0.9205 +[2026-08-06 13:24:38,723][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006247096965471033 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:24:38,921][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:24:39,069][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:24:40,548][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:24:40,572][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:24:40,582][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:24:40,611][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:24:40,611][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:24:46,235][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 13:27:31,855][__main__][INFO] - test R2=0.9913 RMSE=10.07 MAE=3.19 MSE=101.42 Bias=-2.87 Median APE=1.74 Log10 MSE=0.00 +[2026-08-06 13:27:35,881][__main__][INFO] - Raw 90% interval coverage: 0.9974 +[2026-08-06 13:27:35,881][__main__][INFO] - Conformal 90% interval coverage: 0.9263 +[2026-08-06 13:27:37,346][__main__][INFO] - test R2=0.9996 RMSE=33809.06 MAE=10844.56 MSE=1143052800.00 Bias=-1314.28 Median APE=0.54 Log10 MSE=0.00 +[2026-08-06 13:27:42,886][__main__][INFO] - Raw 90% interval coverage: 0.9806 +[2026-08-06 13:27:42,887][__main__][INFO] - Conformal 90% interval coverage: 0.9095 +[2026-08-06 13:27:46,138][__main__][INFO] - test R2=0.9914 RMSE=10.05 MAE=3.24 MSE=101.02 Bias=-2.10 Median APE=2.73 Log10 MSE=0.00 +[2026-08-06 13:27:50,292][__main__][INFO] - Raw 90% interval coverage: 0.9560 +[2026-08-06 13:27:50,293][__main__][INFO] - Conformal 90% interval coverage: 0.9127 +[2026-08-06 13:27:50,581][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0048552503653020865 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:27:50,787][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:27:50,790][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.006827421948458927 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:27:50,985][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:27:50,987][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:27:51,130][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:27:52,277][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:27:52,290][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:27:52,302][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:27:52,308][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:27:52,312][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:27:52,315][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:27:52,356][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:27:52,356][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:27:52,367][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:27:52,368][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:27:55,735][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00027461690583477897 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:27:55,926][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:27:56,063][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:27:57,212][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:27:57,231][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:27:57,238][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:27:57,263][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:27:57,265][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:27:57,789][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M +[2026-08-06 13:27:58,348][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 13:28:02,669][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 13:31:03,034][__main__][INFO] - test R2=0.9951 RMSE=124422.89 MAE=40858.76 MSE=15481056256.00 Bias=-36888.13 Median APE=0.99 Log10 MSE=0.00 +[2026-08-06 13:31:08,599][__main__][INFO] - Raw 90% interval coverage: 0.9690 +[2026-08-06 13:31:08,599][__main__][INFO] - Conformal 90% interval coverage: 0.9011 +[2026-08-06 13:31:21,380][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0001840656957687508 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:31:21,606][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:31:21,743][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:31:23,382][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:31:23,400][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:31:23,407][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:31:23,426][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:31:23,427][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:31:28,910][estimint.v2.training.train_step][INFO] - Total parameters: 2.15M +[2026-08-06 13:31:34,461][__main__][INFO] - test R2=0.9868 RMSE=12.43 MAE=4.71 MSE=154.55 Bias=-4.50 Median APE=2.02 Log10 MSE=0.00 +[2026-08-06 13:31:38,674][__main__][INFO] - Raw 90% interval coverage: 0.9470 +[2026-08-06 13:31:38,674][__main__][INFO] - Conformal 90% interval coverage: 0.8778 +[2026-08-06 13:31:49,859][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004559114855870667 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:31:50,077][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:31:50,214][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:31:51,548][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:31:51,564][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:31:51,572][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:31:51,619][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:31:51,620][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:31:52,017][__main__][INFO] - test R2=0.9972 RMSE=5.77 MAE=2.09 MSE=33.31 Bias=-0.28 Median APE=2.12 Log10 MSE=0.00 +[2026-08-06 13:31:57,044][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 13:31:57,677][__main__][INFO] - Raw 90% interval coverage: 0.9089 +[2026-08-06 13:31:57,677][__main__][INFO] - Conformal 90% interval coverage: 0.8681 +[2026-08-06 13:32:03,140][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.002008121480368435 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:32:03,322][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:32:03,454][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:32:04,844][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:32:04,860][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:32:04,868][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:32:04,895][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:32:04,896][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:32:10,060][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 13:35:20,527][__main__][INFO] - test R2=0.9993 RMSE=45790.55 MAE=15163.95 MSE=2096774144.00 Bias=-3326.87 Median APE=0.77 Log10 MSE=0.00 +[2026-08-06 13:35:20,804][__main__][INFO] - test R2=0.8530 RMSE=41.49 MAE=16.88 MSE=1721.07 Bias=-4.15 Median APE=23.99 Log10 MSE=0.03 +[2026-08-06 13:35:26,067][__main__][INFO] - Raw 90% interval coverage: 0.9922 +[2026-08-06 13:35:26,067][__main__][INFO] - Conformal 90% interval coverage: 0.9392 +[2026-08-06 13:35:26,432][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 13:35:26,432][__main__][INFO] - Conformal 90% interval coverage: 0.9114 +[2026-08-06 13:35:32,141][__main__][INFO] - test R2=0.9986 RMSE=4.03 MAE=1.23 MSE=16.23 Bias=-1.07 Median APE=0.60 Log10 MSE=0.00 +[2026-08-06 13:35:36,395][__main__][INFO] - Raw 90% interval coverage: 0.9832 +[2026-08-06 13:35:36,396][__main__][INFO] - Conformal 90% interval coverage: 0.9050 +[2026-08-06 13:35:40,379][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.000627386652472972 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:35:40,380][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0027042112911568276 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:35:45,147][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:35:45,205][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0001803512579806097 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:35:46,892][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:35:47,033][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:35:47,155][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:35:47,167][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:35:47,195][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:35:49,177][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:35:49,193][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:35:49,196][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:35:49,200][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:35:49,201][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:35:49,217][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:35:49,218][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:35:49,224][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:35:49,227][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:35:49,262][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:35:49,264][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:35:49,269][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:35:49,270][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:35:49,276][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:35:49,277][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:35:54,667][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 13:35:54,764][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M +[2026-08-06 13:35:54,842][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 13:39:01,943][__main__][INFO] - test R2=0.9997 RMSE=32097.78 MAE=10584.25 MSE=1030267200.00 Bias=1599.34 Median APE=0.60 Log10 MSE=0.00 +[2026-08-06 13:39:07,426][__main__][INFO] - Raw 90% interval coverage: 0.9974 +[2026-08-06 13:39:07,426][__main__][INFO] - Conformal 90% interval coverage: 0.9334 +[2026-08-06 13:39:20,874][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.004980276626111767 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:39:21,072][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:39:21,208][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:39:22,591][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:39:22,616][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:39:22,625][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:39:22,650][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:39:22,650][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:39:28,194][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 13:39:31,435][__main__][INFO] - test R2=0.9977 RMSE=5.18 MAE=1.51 MSE=26.80 Bias=-1.31 Median APE=0.66 Log10 MSE=0.00 +[2026-08-06 13:39:35,641][__main__][INFO] - Raw 90% interval coverage: 0.9890 +[2026-08-06 13:39:35,641][__main__][INFO] - Conformal 90% interval coverage: 0.8985 +[2026-08-06 13:39:42,014][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.003606127754483304 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:39:42,208][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:39:42,340][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:39:43,430][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:39:43,446][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:39:43,473][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:39:43,513][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:39:43,514][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:39:44,072][__main__][INFO] - test R2=0.9917 RMSE=9.88 MAE=3.39 MSE=97.59 Bias=-1.83 Median APE=3.75 Log10 MSE=0.00 +[2026-08-06 13:39:49,100][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M +[2026-08-06 13:39:49,958][__main__][INFO] - Raw 90% interval coverage: 0.8533 +[2026-08-06 13:39:49,959][__main__][INFO] - Conformal 90% interval coverage: 0.9108 +[2026-08-06 13:39:57,526][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004945106791946531 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:39:57,722][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:39:57,867][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:39:58,939][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:39:58,956][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:39:58,963][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:39:58,995][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:39:58,996][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:40:04,380][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 13:43:03,739][__main__][INFO] - test R2=0.9898 RMSE=10.92 MAE=3.62 MSE=119.25 Bias=-2.85 Median APE=2.78 Log10 MSE=0.00 +[2026-08-06 13:43:08,009][__main__][INFO] - Raw 90% interval coverage: 0.9496 +[2026-08-06 13:43:08,010][__main__][INFO] - Conformal 90% interval coverage: 0.8946 +[2026-08-06 13:43:15,625][__main__][INFO] - test R2=0.9996 RMSE=33898.52 MAE=12217.49 MSE=1149109760.00 Bias=-2954.37 Median APE=0.61 Log10 MSE=0.00 +[2026-08-06 13:43:17,373][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0008378819322413172 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:43:17,581][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:43:17,725][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:43:18,981][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:43:18,997][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:43:19,005][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:43:19,044][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:43:19,045][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:43:21,192][__main__][INFO] - Raw 90% interval coverage: 0.9153 +[2026-08-06 13:43:21,192][__main__][INFO] - Conformal 90% interval coverage: 0.9140 +[2026-08-06 13:43:24,241][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 13:43:25,829][__main__][INFO] - test R2=0.9996 RMSE=2.24 MAE=0.75 MSE=5.00 Bias=0.10 Median APE=0.70 Log10 MSE=0.00 +[2026-08-06 13:43:29,817][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0009979567345089358 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:43:29,893][__main__][INFO] - Raw 90% interval coverage: 0.8229 +[2026-08-06 13:43:29,894][__main__][INFO] - Conformal 90% interval coverage: 0.9127 +[2026-08-06 13:43:30,017][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:43:30,153][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:43:31,308][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:43:31,326][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:43:31,334][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:43:31,361][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:43:31,361][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:43:36,831][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M +[2026-08-06 13:43:39,215][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.005032481569035229 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:43:39,413][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:43:39,555][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:43:40,759][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:43:40,775][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:43:40,782][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:43:40,815][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:43:40,816][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:43:46,215][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 13:46:32,181][__main__][INFO] - test R2=0.9980 RMSE=78980.30 MAE=21891.33 MSE=6237888000.00 Bias=-17807.34 Median APE=0.56 Log10 MSE=0.00 +[2026-08-06 13:46:34,110][__main__][INFO] - test R2=0.9960 RMSE=6.81 MAE=2.42 MSE=46.37 Bias=-0.38 Median APE=2.29 Log10 MSE=0.00 +[2026-08-06 13:46:36,292][__main__][INFO] - Raw 90% interval coverage: 0.9929 +[2026-08-06 13:46:36,293][__main__][INFO] - Conformal 90% interval coverage: 0.9114 +[2026-08-06 13:46:39,734][__main__][INFO] - Raw 90% interval coverage: 0.9483 +[2026-08-06 13:46:39,734][__main__][INFO] - Conformal 90% interval coverage: 0.8882 +[2026-08-06 13:46:50,129][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0008642439205382613 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:46:50,129][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00037519856189651975 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:46:50,370][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:46:50,452][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:46:50,617][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:46:50,637][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:46:52,253][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:46:52,267][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:46:52,271][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:46:52,278][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:46:52,285][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:46:52,292][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:46:52,325][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:46:52,325][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:46:52,340][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:46:52,341][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:46:52,586][__main__][INFO] - test R2=0.9998 RMSE=1.59 MAE=0.57 MSE=2.53 Bias=0.00 Median APE=0.68 Log10 MSE=0.00 +[2026-08-06 13:46:57,741][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 13:46:57,859][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 13:46:58,102][__main__][INFO] - Raw 90% interval coverage: 0.9606 +[2026-08-06 13:46:58,102][__main__][INFO] - Conformal 90% interval coverage: 0.9192 +[2026-08-06 13:47:05,552][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.005810331460325178 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:47:05,755][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:47:05,899][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:47:07,082][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:47:07,099][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:47:07,107][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:47:07,137][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:47:07,138][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:47:12,466][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-06 13:50:07,741][__main__][INFO] - test R2=0.9452 RMSE=25.33 MAE=10.32 MSE=641.61 Bias=-9.41 Median APE=15.27 Log10 MSE=0.01 +[2026-08-06 13:50:13,507][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 13:50:13,507][__main__][INFO] - Conformal 90% interval coverage: 0.9095 +[2026-08-06 13:50:27,317][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0010925375954413412 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:50:27,515][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:50:27,652][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:50:29,008][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:50:29,032][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:50:29,043][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:50:29,075][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:50:29,077][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:50:29,315][__main__][INFO] - test R2=0.9967 RMSE=101713.94 MAE=31573.80 MSE=10345724928.00 Bias=-29299.00 Median APE=0.56 Log10 MSE=0.00 +[2026-08-06 13:50:33,530][__main__][INFO] - Raw 90% interval coverage: 0.9903 +[2026-08-06 13:50:33,530][__main__][INFO] - Conformal 90% interval coverage: 0.9308 +[2026-08-06 13:50:34,725][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 13:50:44,264][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0009628075512895328 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:50:44,461][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:50:44,599][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:50:45,741][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:50:45,758][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:50:45,766][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:50:45,785][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:50:45,786][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:50:51,293][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 13:51:06,952][__main__][INFO] - test R2=0.9999 RMSE=1.20 MAE=0.47 MSE=1.45 Bias=0.09 Median APE=0.55 Log10 MSE=0.00 +[2026-08-06 13:51:12,453][__main__][INFO] - Raw 90% interval coverage: 0.9612 +[2026-08-06 13:51:12,453][__main__][INFO] - Conformal 90% interval coverage: 0.8804 +[2026-08-06 13:51:18,337][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.005127564142088664 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:51:18,519][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:51:18,654][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:51:19,818][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:51:19,834][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:51:19,841][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:51:19,866][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:51:19,866][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:51:25,051][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 13:53:34,788][__main__][INFO] - test R2=0.9794 RMSE=15.52 MAE=5.03 MSE=240.80 Bias=-4.49 Median APE=3.03 Log10 MSE=0.00 +[2026-08-06 13:53:38,907][__main__][INFO] - Raw 90% interval coverage: 0.9360 +[2026-08-06 13:53:38,908][__main__][INFO] - Conformal 90% interval coverage: 0.8946 +[2026-08-06 13:53:45,766][__main__][INFO] - test R2=0.9997 RMSE=32436.72 MAE=9909.56 MSE=1052141056.00 Bias=-886.27 Median APE=0.41 Log10 MSE=0.00 +[2026-08-06 13:53:49,977][__main__][INFO] - Raw 90% interval coverage: 0.8610 +[2026-08-06 13:53:49,978][__main__][INFO] - Conformal 90% interval coverage: 0.8992 +[2026-08-06 13:53:52,975][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004874378574875727 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:53:53,207][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:53:53,347][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:53:54,859][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:53:54,875][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:53:54,883][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:53:54,920][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:53:54,920][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:53:59,296][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.009798613646994673 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:53:59,481][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:53:59,627][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:54:00,167][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 13:54:00,774][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:54:00,790][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:54:00,798][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:54:00,825][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:54:00,825][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:54:06,168][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 13:55:03,794][__main__][INFO] - test R2=0.9796 RMSE=15.47 MAE=5.74 MSE=239.41 Bias=-5.60 Median APE=2.96 Log10 MSE=0.00 +[2026-08-06 13:55:07,924][__main__][INFO] - Raw 90% interval coverage: 0.9405 +[2026-08-06 13:55:07,925][__main__][INFO] - Conformal 90% interval coverage: 0.9173 +[2026-08-06 13:55:19,783][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.006806457002246565 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:55:19,977][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:55:20,120][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:55:21,464][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:55:21,480][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:55:21,487][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:55:21,529][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:55:21,529][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:55:26,906][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 13:56:59,145][__main__][INFO] - test R2=0.9953 RMSE=7.44 MAE=2.64 MSE=55.41 Bias=-1.47 Median APE=2.55 Log10 MSE=0.00 +[2026-08-06 13:57:03,298][__main__][INFO] - Raw 90% interval coverage: 0.9586 +[2026-08-06 13:57:03,298][__main__][INFO] - Conformal 90% interval coverage: 0.9005 +[2026-08-06 13:57:11,500][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00024767484042759457 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:57:11,709][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:57:11,853][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:57:12,413][__main__][INFO] - test R2=-16990.1816 RMSE=230793888.00 MAE=22622312.00 MSE=53265819332771840.00 Bias=21255230.00 Median APE=78.59 Log10 MSE=0.52 +[2026-08-06 13:57:13,057][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:57:13,073][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:57:13,081][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 13:57:13,100][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 13:57:13,106][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:57:18,013][__main__][INFO] - Raw 90% interval coverage: 0.7912 +[2026-08-06 13:57:18,013][__main__][INFO] - Conformal 90% interval coverage: 0.8759 +[2026-08-06 13:57:18,303][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 13:57:25,684][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00025318422689582336 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:57:25,892][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:57:26,028][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:57:27,179][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:57:27,196][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:57:27,204][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:57:27,232][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 13:57:27,233][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:57:32,549][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 13:59:19,567][__main__][INFO] - test R2=-460704.0938 RMSE=73443.60 MAE=9050.17 MSE=5393962496.00 Bias=9013.00 Median APE=71.90 Log10 MSE=1.09 +[2026-08-06 13:59:25,168][__main__][INFO] - Raw 90% interval coverage: 0.8119 +[2026-08-06 13:59:25,169][__main__][INFO] - Conformal 90% interval coverage: 0.9328 +[2026-08-06 13:59:38,011][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.008367079214005202 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 13:59:38,255][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 13:59:38,411][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 13:59:39,844][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 13:59:39,860][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 13:59:39,867][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:59:39,896][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 13:59:39,896][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 13:59:45,353][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M +[2026-08-06 14:00:26,397][__main__][INFO] - test R2=0.9961 RMSE=6.79 MAE=2.44 MSE=46.15 Bias=-0.39 Median APE=2.37 Log10 MSE=0.00 +[2026-08-06 14:00:32,056][__main__][INFO] - Raw 90% interval coverage: 0.9470 +[2026-08-06 14:00:32,056][__main__][INFO] - Conformal 90% interval coverage: 0.9076 +[2026-08-06 14:00:44,345][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005938786782539121 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:00:44,540][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:00:44,677][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:00:46,073][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:00:46,088][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:00:46,096][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:00:46,120][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:00:46,120][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:00:51,185][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 14:01:06,755][__main__][INFO] - test R2=0.9997 RMSE=30342.02 MAE=10838.88 MSE=920638272.00 Bias=424.59 Median APE=0.64 Log10 MSE=0.00 +[2026-08-06 14:01:10,843][__main__][INFO] - Raw 90% interval coverage: 0.8462 +[2026-08-06 14:01:10,844][__main__][INFO] - Conformal 90% interval coverage: 0.8856 +[2026-08-06 14:01:17,947][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0018058357557578892 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:01:18,143][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:01:18,287][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:01:19,770][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:01:19,790][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:01:19,797][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:01:19,816][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:01:19,817][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:01:25,342][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M +[2026-08-06 14:03:36,961][__main__][INFO] - test R2=-238395.4219 RMSE=52831.42 MAE=2943.89 MSE=2791159296.00 Bias=2862.74 Median APE=85.32 Log10 MSE=2.25 +[2026-08-06 14:03:42,430][__main__][INFO] - Raw 90% interval coverage: 0.6904 +[2026-08-06 14:03:42,430][__main__][INFO] - Conformal 90% interval coverage: 0.8830 +[2026-08-06 14:03:54,657][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0012983890263373937 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:03:54,863][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:03:55,005][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:03:57,180][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:03:57,196][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:03:57,207][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:03:57,235][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:03:57,236][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:04:02,520][__main__][INFO] - test R2=0.9971 RMSE=5.83 MAE=2.34 MSE=33.98 Bias=0.29 Median APE=2.56 Log10 MSE=0.00 +[2026-08-06 14:04:02,810][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 14:04:08,168][__main__][INFO] - Raw 90% interval coverage: 0.9567 +[2026-08-06 14:04:08,168][__main__][INFO] - Conformal 90% interval coverage: 0.8979 +[2026-08-06 14:04:23,465][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0070489575441455045 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:04:23,669][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:04:23,819][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:04:26,064][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:04:26,088][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:04:26,099][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:04:26,139][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:04:26,141][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:04:32,031][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 14:04:32,926][__main__][INFO] - test R2=0.9995 RMSE=40651.08 MAE=15093.87 MSE=1652510592.00 Bias=-10272.41 Median APE=0.81 Log10 MSE=0.00 +[2026-08-06 14:04:38,423][__main__][INFO] - Raw 90% interval coverage: 0.9910 +[2026-08-06 14:04:38,423][__main__][INFO] - Conformal 90% interval coverage: 0.9173 +[2026-08-06 14:05:12,559][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0007676672664785771 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:05:13,320][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:05:13,482][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:05:16,162][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:05:16,189][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:05:16,200][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:05:16,251][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:05:16,252][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:05:22,441][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M +[2026-08-06 14:07:38,066][__main__][INFO] - test R2=0.9964 RMSE=6.53 MAE=1.99 MSE=42.61 Bias=-1.88 Median APE=0.76 Log10 MSE=0.00 +[2026-08-06 14:07:42,178][__main__][INFO] - Raw 90% interval coverage: 0.9729 +[2026-08-06 14:07:42,178][__main__][INFO] - Conformal 90% interval coverage: 0.8953 +[2026-08-06 14:07:42,446][__main__][INFO] - test R2=0.9978 RMSE=5.08 MAE=1.94 MSE=25.77 Bias=0.52 Median APE=2.22 Log10 MSE=0.00 +[2026-08-06 14:07:48,138][__main__][INFO] - Raw 90% interval coverage: 0.9050 +[2026-08-06 14:07:48,138][__main__][INFO] - Conformal 90% interval coverage: 0.8953 +[2026-08-06 14:07:52,709][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00035989511084242405 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:07:52,914][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:07:53,053][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:07:54,517][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:07:54,533][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:07:54,540][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:07:54,572][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:07:54,574][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:08:00,144][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 14:08:00,498][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0053960480459402625 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:08:00,703][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:08:00,855][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:08:02,330][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:08:02,346][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:08:02,353][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:08:02,406][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:08:02,407][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:08:07,758][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M +[2026-08-06 14:08:21,156][__main__][INFO] - test R2=0.9996 RMSE=33171.28 MAE=10102.22 MSE=1100333952.00 Bias=734.01 Median APE=0.48 Log10 MSE=0.00 +[2026-08-06 14:08:25,236][__main__][INFO] - Raw 90% interval coverage: 0.8164 +[2026-08-06 14:08:25,237][__main__][INFO] - Conformal 90% interval coverage: 0.8746 +[2026-08-06 14:08:36,016][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006289446520767339 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:08:36,229][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:08:36,370][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:08:37,749][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:08:37,766][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:08:37,773][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:08:37,815][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:08:37,816][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:08:43,216][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M +[2026-08-06 14:11:19,002][__main__][INFO] - test R2=0.9951 RMSE=7.61 MAE=2.76 MSE=57.95 Bias=-1.82 Median APE=2.74 Log10 MSE=0.00 +[2026-08-06 14:11:24,707][__main__][INFO] - Raw 90% interval coverage: 0.8882 +[2026-08-06 14:11:24,707][__main__][INFO] - Conformal 90% interval coverage: 0.8765 +[2026-08-06 14:11:38,691][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.005205181698841106 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:11:38,897][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:11:39,030][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:11:40,478][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:11:40,502][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:11:40,513][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:11:40,546][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:11:40,547][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:11:46,583][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-06 14:11:52,756][__main__][INFO] - test R2=0.9997 RMSE=1.88 MAE=0.68 MSE=3.52 Bias=-0.20 Median APE=0.60 Log10 MSE=0.00 +[2026-08-06 14:11:58,336][__main__][INFO] - Raw 90% interval coverage: 0.9858 +[2026-08-06 14:11:58,337][__main__][INFO] - Conformal 90% interval coverage: 0.9069 +[2026-08-06 14:12:09,208][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00739313713113594 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:12:09,407][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:12:09,550][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:12:11,195][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:12:11,211][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:12:11,219][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:12:11,248][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:12:11,248][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:12:16,700][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 14:12:18,955][__main__][INFO] - test R2=0.9797 RMSE=252365.69 MAE=80068.08 MSE=63688441856.00 Bias=-78119.90 Median APE=1.17 Log10 MSE=0.00 +[2026-08-06 14:12:23,016][__main__][INFO] - Raw 90% interval coverage: 0.9476 +[2026-08-06 14:12:23,016][__main__][INFO] - Conformal 90% interval coverage: 0.9121 +[2026-08-06 14:12:32,769][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0026443727657188515 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:12:32,968][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:12:33,103][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:12:34,798][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:12:34,815][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:12:34,823][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:12:34,872][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:12:34,873][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:12:40,232][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-06 14:14:56,592][__main__][INFO] - test R2=0.9438 RMSE=25.65 MAE=9.95 MSE=657.93 Bias=-7.53 Median APE=11.73 Log10 MSE=0.01 +[2026-08-06 14:15:02,333][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 14:15:02,334][__main__][INFO] - Conformal 90% interval coverage: 0.9095 +[2026-08-06 14:15:34,615][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005878976603352423 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:15:34,868][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:15:35,032][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:15:37,476][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:15:37,500][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:15:37,512][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:15:37,565][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:15:37,566][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:15:43,702][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 14:15:49,353][__main__][INFO] - test R2=0.9987 RMSE=62622.17 MAE=23360.23 MSE=3921535744.00 Bias=-17915.79 Median APE=1.37 Log10 MSE=0.00 +[2026-08-06 14:15:52,100][__main__][INFO] - test R2=0.9996 RMSE=2.18 MAE=0.78 MSE=4.77 Bias=-0.38 Median APE=0.60 Log10 MSE=0.00 +[2026-08-06 14:15:55,126][__main__][INFO] - Raw 90% interval coverage: 0.9942 +[2026-08-06 14:15:55,126][__main__][INFO] - Conformal 90% interval coverage: 0.8979 +[2026-08-06 14:15:56,281][__main__][INFO] - Raw 90% interval coverage: 0.8429 +[2026-08-06 14:15:56,281][__main__][INFO] - Conformal 90% interval coverage: 0.8733 +[2026-08-06 14:16:27,343][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0019800915758169135 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:16:27,345][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0014135083006375536 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:16:27,660][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:16:27,741][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:16:27,914][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:16:27,932][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:16:29,786][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:16:29,788][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:16:29,811][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:16:29,814][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:16:29,821][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:16:29,825][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:16:29,864][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:16:29,865][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:16:29,875][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:16:29,876][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:16:35,811][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 14:16:35,926][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 14:18:44,403][__main__][INFO] - test R2=0.9888 RMSE=11.44 MAE=3.77 MSE=130.92 Bias=-2.98 Median APE=2.75 Log10 MSE=0.00 +[2026-08-06 14:18:48,575][__main__][INFO] - Raw 90% interval coverage: 0.9560 +[2026-08-06 14:18:48,576][__main__][INFO] - Conformal 90% interval coverage: 0.9082 +[2026-08-06 14:19:01,976][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005611273332084451 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:19:02,184][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:19:02,328][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:19:03,932][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:19:03,948][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:19:03,956][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:19:03,982][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:19:03,983][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:19:09,235][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 14:19:45,272][__main__][INFO] - test R2=0.9534 RMSE=23.37 MAE=9.32 MSE=546.03 Bias=-8.45 Median APE=10.86 Log10 MSE=0.01 +[2026-08-06 14:19:50,778][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 14:19:50,778][__main__][INFO] - Conformal 90% interval coverage: 0.9095 +[2026-08-06 14:19:58,459][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.000963304013380037 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:19:58,675][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:19:58,821][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:20:00,879][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:20:00,895][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:20:00,902][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:20:00,946][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:20:00,947][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:20:06,440][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M +[2026-08-06 14:20:08,007][__main__][INFO] - test R2=0.9939 RMSE=137789.91 MAE=44693.94 MSE=18986059776.00 Bias=-42966.38 Median APE=0.73 Log10 MSE=0.00 +[2026-08-06 14:20:12,164][__main__][INFO] - Raw 90% interval coverage: 0.9735 +[2026-08-06 14:20:12,164][__main__][INFO] - Conformal 90% interval coverage: 0.9037 +[2026-08-06 14:20:39,005][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004306352647695792 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:20:39,401][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:20:39,570][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:20:43,158][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:20:43,184][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:20:43,195][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:20:43,243][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:20:43,244][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:20:49,877][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 14:23:01,728][__main__][INFO] - test R2=0.9971 RMSE=5.80 MAE=2.30 MSE=33.60 Bias=0.96 Median APE=2.38 Log10 MSE=0.00 +[2026-08-06 14:23:07,443][__main__][INFO] - Raw 90% interval coverage: 0.9476 +[2026-08-06 14:23:07,444][__main__][INFO] - Conformal 90% interval coverage: 0.9063 +[2026-08-06 14:23:19,409][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.001959920797553164 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:23:19,625][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:23:19,771][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:23:21,068][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:23:21,084][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:23:21,092][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:23:21,116][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:23:21,116][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:23:26,271][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 14:23:45,510][__main__][INFO] - test R2=0.9934 RMSE=8.82 MAE=2.77 MSE=77.74 Bias=-2.61 Median APE=0.93 Log10 MSE=0.00 +[2026-08-06 14:23:49,624][__main__][INFO] - Raw 90% interval coverage: 0.9780 +[2026-08-06 14:23:49,624][__main__][INFO] - Conformal 90% interval coverage: 0.9076 +[2026-08-06 14:24:02,457][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.005989485339101165 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:24:02,665][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:24:02,806][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:24:04,869][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:24:04,885][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:24:04,892][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:24:04,957][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:24:04,958][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:24:10,985][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 14:24:21,014][__main__][INFO] - test R2=0.9998 RMSE=24550.53 MAE=8803.23 MSE=602728256.00 Bias=-2379.38 Median APE=0.48 Log10 MSE=0.00 +[2026-08-06 14:24:25,012][__main__][INFO] - Raw 90% interval coverage: 0.8752 +[2026-08-06 14:24:25,012][__main__][INFO] - Conformal 90% interval coverage: 0.9153 +[2026-08-06 14:24:58,530][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0003175346856304151 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:24:58,801][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:24:58,970][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:25:01,025][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:25:01,051][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:25:01,062][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:25:01,111][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:25:01,112][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:25:07,025][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 14:27:11,008][__main__][INFO] - test R2=0.8385 RMSE=43.49 MAE=17.18 MSE=1891.09 Bias=-16.59 Median APE=16.46 Log10 MSE=0.01 +[2026-08-06 14:27:15,247][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 14:27:15,247][__main__][INFO] - Conformal 90% interval coverage: 0.9043 +[2026-08-06 14:27:19,828][__main__][INFO] - test R2=0.9965 RMSE=6.39 MAE=2.43 MSE=40.88 Bias=-0.92 Median APE=2.56 Log10 MSE=0.00 +[2026-08-06 14:27:25,525][__main__][INFO] - Raw 90% interval coverage: 0.9263 +[2026-08-06 14:27:25,526][__main__][INFO] - Conformal 90% interval coverage: 0.8979 +[2026-08-06 14:27:31,809][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00032468152529926763 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:27:32,106][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:27:32,268][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:27:34,545][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:27:34,569][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:27:34,580][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:27:34,615][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:27:34,616][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:27:40,486][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M +[2026-08-06 14:27:40,600][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0007829096128396415 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:27:40,823][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:27:40,965][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:27:42,749][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:27:42,765][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:27:42,789][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:27:42,820][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:27:42,820][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:27:48,292][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 14:28:03,638][__main__][INFO] - test R2=0.9996 RMSE=37176.55 MAE=12185.79 MSE=1382095744.00 Bias=3291.75 Median APE=0.65 Log10 MSE=0.00 +[2026-08-06 14:28:07,749][__main__][INFO] - Raw 90% interval coverage: 0.8462 +[2026-08-06 14:28:07,749][__main__][INFO] - Conformal 90% interval coverage: 0.8765 +[2026-08-06 14:28:25,915][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.008407327215464526 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:28:26,307][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:28:26,450][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:28:28,654][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:28:28,680][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:28:28,690][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:28:28,723][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:28:28,723][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:28:34,658][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 14:30:47,917][__main__][INFO] - test R2=0.9924 RMSE=9.45 MAE=3.11 MSE=89.25 Bias=-1.71 Median APE=2.58 Log10 MSE=0.00 +[2026-08-06 14:30:52,021][__main__][INFO] - Raw 90% interval coverage: 0.9489 +[2026-08-06 14:30:52,021][__main__][INFO] - Conformal 90% interval coverage: 0.8946 +[2026-08-06 14:31:11,340][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.003992068632036663 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:31:11,691][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:31:11,838][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:31:13,951][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:31:13,967][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:31:13,974][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:31:14,168][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:31:14,169][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:31:18,800][__main__][INFO] - test R2=0.9996 RMSE=2.06 MAE=0.73 MSE=4.26 Bias=-0.08 Median APE=0.61 Log10 MSE=0.00 +[2026-08-06 14:31:19,557][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 14:31:22,861][__main__][INFO] - Raw 90% interval coverage: 0.8662 +[2026-08-06 14:31:22,861][__main__][INFO] - Conformal 90% interval coverage: 0.9005 +[2026-08-06 14:31:36,078][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0009705004419454208 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:31:36,316][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:31:36,471][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:31:38,521][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:31:38,544][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:31:38,555][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:31:38,721][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:31:38,722][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:31:44,690][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 14:32:07,618][__main__][INFO] - test R2=0.9719 RMSE=297028.28 MAE=117746.87 MSE=88225792000.00 Bias=-116104.90 Median APE=3.20 Log10 MSE=0.00 +[2026-08-06 14:32:11,828][__main__][INFO] - Raw 90% interval coverage: 0.8151 +[2026-08-06 14:32:11,829][__main__][INFO] - Conformal 90% interval coverage: 0.8662 +[2026-08-06 14:32:31,978][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005065722752137629 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:32:32,272][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:32:32,426][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:32:35,058][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:32:35,076][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:32:35,083][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:32:35,152][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:32:35,153][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:32:41,115][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 14:34:30,787][__main__][INFO] - test R2=0.9933 RMSE=8.88 MAE=3.45 MSE=78.81 Bias=-0.52 Median APE=4.40 Log10 MSE=0.00 +[2026-08-06 14:34:36,405][__main__][INFO] - Raw 90% interval coverage: 0.9586 +[2026-08-06 14:34:36,406][__main__][INFO] - Conformal 90% interval coverage: 0.9347 +[2026-08-06 14:34:44,764][__main__][INFO] - test R2=0.9962 RMSE=6.64 MAE=2.08 MSE=44.07 Bias=-1.89 Median APE=0.84 Log10 MSE=0.00 +[2026-08-06 14:34:48,894][__main__][INFO] - Raw 90% interval coverage: 0.9942 +[2026-08-06 14:34:48,894][__main__][INFO] - Conformal 90% interval coverage: 0.9134 +[2026-08-06 14:34:59,070][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0031763381446113406 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:34:59,393][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:34:59,553][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:35:01,918][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:35:01,942][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:35:01,953][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:35:02,007][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:35:02,008][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:35:05,812][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00794635758898536 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:35:06,085][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:35:06,236][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:35:08,035][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M +[2026-08-06 14:35:08,523][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:35:08,539][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:35:08,547][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:35:08,575][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:35:08,576][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:35:14,258][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 14:36:18,370][__main__][INFO] - test R2=0.9883 RMSE=191131.64 MAE=61764.43 MSE=36531306496.00 Bias=-59741.81 Median APE=0.70 Log10 MSE=0.00 +[2026-08-06 14:36:22,384][__main__][INFO] - Raw 90% interval coverage: 0.9787 +[2026-08-06 14:36:22,384][__main__][INFO] - Conformal 90% interval coverage: 0.8959 +[2026-08-06 14:36:39,461][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.000928401150517254 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:36:39,704][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:36:39,865][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:36:42,233][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:36:42,259][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:36:42,269][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:36:42,300][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:36:42,301][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:36:48,283][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 14:38:18,059][__main__][INFO] - test R2=-44778.6602 RMSE=22897.22 MAE=782.67 MSE=524282880.00 Bias=706.27 Median APE=67.14 Log10 MSE=0.60 +[2026-08-06 14:38:23,695][__main__][INFO] - Raw 90% interval coverage: 0.8080 +[2026-08-06 14:38:23,695][__main__][INFO] - Conformal 90% interval coverage: 0.9341 +[2026-08-06 14:38:41,307][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004945454545049356 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:38:41,588][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:38:41,749][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:38:43,937][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:38:43,960][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:38:43,971][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:38:44,010][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:38:44,010][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:38:50,091][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 14:39:05,646][__main__][INFO] - test R2=-79541184.0000 RMSE=965024.81 MAE=75828.48 MSE=931272851456.00 Bias=75739.50 Median APE=65.25 Log10 MSE=0.76 +[2026-08-06 14:39:11,412][__main__][INFO] - Raw 90% interval coverage: 0.8326 +[2026-08-06 14:39:11,412][__main__][INFO] - Conformal 90% interval coverage: 0.8869 +[2026-08-06 14:39:26,163][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00031301703594982066 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:39:26,365][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:39:26,505][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:39:28,537][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:39:28,561][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:39:28,572][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:39:28,616][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:39:28,618][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:39:34,707][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M +[2026-08-06 14:39:56,831][__main__][INFO] - test R2=0.9417 RMSE=427606.38 MAE=154949.14 MSE=182847209472.00 Bias=-50363.64 Median APE=14.30 Log10 MSE=0.01 +[2026-08-06 14:40:02,393][__main__][INFO] - Raw 90% interval coverage: 0.9696 +[2026-08-06 14:40:02,393][__main__][INFO] - Conformal 90% interval coverage: 0.8836 +[2026-08-06 14:40:22,959][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0007807120791233418 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:40:23,358][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:40:23,519][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:40:26,199][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:40:26,226][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:40:26,237][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:40:26,287][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:40:26,288][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:40:32,184][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M +[2026-08-06 14:42:28,691][__main__][INFO] - test R2=0.9878 RMSE=11.93 MAE=3.89 MSE=142.26 Bias=-3.16 Median APE=2.76 Log10 MSE=0.00 +[2026-08-06 14:42:32,876][__main__][INFO] - Raw 90% interval coverage: 0.9399 +[2026-08-06 14:42:32,876][__main__][INFO] - Conformal 90% interval coverage: 0.9017 +[2026-08-06 14:42:53,768][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005608201619727719 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:42:54,001][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:42:54,158][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:42:56,146][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:42:56,170][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:42:56,181][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:42:56,228][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:42:56,229][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:43:02,052][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 14:43:28,270][__main__][INFO] - test R2=0.9993 RMSE=2.79 MAE=0.84 MSE=7.77 Bias=-0.36 Median APE=0.73 Log10 MSE=0.00 +[2026-08-06 14:43:34,031][__main__][INFO] - Raw 90% interval coverage: 0.9948 +[2026-08-06 14:43:34,032][__main__][INFO] - Conformal 90% interval coverage: 0.9101 +[2026-08-06 14:43:35,867][__main__][INFO] - test R2=0.9996 RMSE=33812.29 MAE=12368.58 MSE=1143270784.00 Bias=-4983.61 Median APE=0.79 Log10 MSE=0.00 +[2026-08-06 14:43:41,438][__main__][INFO] - Raw 90% interval coverage: 0.8306 +[2026-08-06 14:43:41,439][__main__][INFO] - Conformal 90% interval coverage: 0.9341 +[2026-08-06 14:43:51,405][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0020953978814026164 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:43:51,753][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:43:51,906][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:43:53,714][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:43:53,738][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:43:53,748][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:43:53,785][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:43:53,785][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:43:57,015][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0001773202552539171 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:43:57,399][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:43:57,552][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:43:59,875][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 14:43:59,954][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:43:59,980][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:43:59,990][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:44:00,039][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:44:00,040][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:44:05,854][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 14:46:12,502][__main__][INFO] - test R2=0.9966 RMSE=6.27 MAE=2.30 MSE=39.37 Bias=-0.44 Median APE=2.28 Log10 MSE=0.00 +[2026-08-06 14:46:18,195][__main__][INFO] - Raw 90% interval coverage: 0.9606 +[2026-08-06 14:46:18,195][__main__][INFO] - Conformal 90% interval coverage: 0.8972 +[2026-08-06 14:46:40,988][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006299910994120604 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:46:41,416][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:46:41,578][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:46:44,022][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:46:44,046][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:46:44,057][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:46:44,104][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:46:44,104][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:46:49,984][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M +[2026-08-06 14:47:02,503][__main__][INFO] - test R2=0.9965 RMSE=104772.45 MAE=28594.06 MSE=10977266688.00 Bias=-23978.31 Median APE=0.76 Log10 MSE=0.00 +[2026-08-06 14:47:06,666][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 14:47:06,666][__main__][INFO] - Conformal 90% interval coverage: 0.9218 +[2026-08-06 14:47:22,471][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0014106363074070452 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:47:22,805][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:47:22,966][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:47:25,472][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:47:25,497][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:47:25,508][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:47:25,587][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:47:25,587][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:47:31,987][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M +[2026-08-06 14:47:45,888][__main__][INFO] - test R2=0.9998 RMSE=1.39 MAE=0.51 MSE=1.93 Bias=0.12 Median APE=0.43 Log10 MSE=0.00 +[2026-08-06 14:47:51,384][__main__][INFO] - Raw 90% interval coverage: 0.8875 +[2026-08-06 14:47:51,385][__main__][INFO] - Conformal 90% interval coverage: 0.8998 +[2026-08-06 14:48:12,095][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00034085263159978863 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:48:12,513][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:48:12,670][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:48:14,915][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:48:14,939][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:48:14,950][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:48:14,985][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:48:14,986][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:48:21,136][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M +[2026-08-06 14:50:00,425][__main__][INFO] - test R2=0.9963 RMSE=6.62 MAE=2.57 MSE=43.78 Bias=0.43 Median APE=2.64 Log10 MSE=0.00 +[2026-08-06 14:50:05,902][__main__][INFO] - Raw 90% interval coverage: 0.9593 +[2026-08-06 14:50:05,902][__main__][INFO] - Conformal 90% interval coverage: 0.9108 +[2026-08-06 14:50:23,953][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0009004122036440726 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:50:24,199][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:50:24,359][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:50:26,576][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:50:26,602][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:50:26,613][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:50:26,691][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:50:26,693][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:50:32,251][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 14:50:35,351][__main__][INFO] - test R2=0.9996 RMSE=36004.70 MAE=13914.90 MSE=1296338304.00 Bias=-5233.16 Median APE=0.80 Log10 MSE=0.00 +[2026-08-06 14:50:40,859][__main__][INFO] - Raw 90% interval coverage: 0.8688 +[2026-08-06 14:50:40,859][__main__][INFO] - Conformal 90% interval coverage: 0.9063 +[2026-08-06 14:50:57,898][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.005409525320780131 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:50:58,169][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:50:58,327][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:51:00,130][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:51:00,147][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:51:00,155][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:51:00,190][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:51:00,190][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:51:06,137][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 14:51:32,020][__main__][INFO] - test R2=0.9947 RMSE=7.89 MAE=2.19 MSE=62.26 Bias=-0.98 Median APE=1.72 Log10 MSE=0.00 +[2026-08-06 14:51:37,538][__main__][INFO] - Raw 90% interval coverage: 0.9955 +[2026-08-06 14:51:37,538][__main__][INFO] - Conformal 90% interval coverage: 0.9276 +[2026-08-06 14:51:49,906][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006638009634874219 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:51:50,142][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:51:50,284][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:51:51,880][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:51:51,895][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:51:51,903][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:51:51,968][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:51:51,969][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:51:57,426][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 14:54:10,269][__main__][INFO] - test R2=0.9893 RMSE=11.19 MAE=3.68 MSE=125.19 Bias=-2.93 Median APE=2.49 Log10 MSE=0.00 +[2026-08-06 14:54:12,170][__main__][INFO] - test R2=0.9935 RMSE=142221.70 MAE=52701.77 MSE=20227014656.00 Bias=-46953.99 Median APE=2.06 Log10 MSE=0.00 +[2026-08-06 14:54:14,447][__main__][INFO] - Raw 90% interval coverage: 0.9373 +[2026-08-06 14:54:14,448][__main__][INFO] - Conformal 90% interval coverage: 0.8953 +[2026-08-06 14:54:17,726][__main__][INFO] - Raw 90% interval coverage: 0.9767 +[2026-08-06 14:54:17,727][__main__][INFO] - Conformal 90% interval coverage: 0.9173 +[2026-08-06 14:54:24,388][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.001677933116395654 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:54:24,609][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:54:24,747][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:54:26,414][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:54:26,432][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:54:26,439][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:54:26,482][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:54:26,483][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:54:26,991][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.007497978926040672 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:54:27,179][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:54:27,315][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:54:28,684][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:54:28,701][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:54:28,708][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:54:28,759][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:54:28,760][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:54:31,842][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 14:54:34,155][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 14:55:47,681][__main__][INFO] - test R2=0.9996 RMSE=2.23 MAE=0.80 MSE=4.97 Bias=0.20 Median APE=0.69 Log10 MSE=0.00 +[2026-08-06 14:55:53,374][__main__][INFO] - Raw 90% interval coverage: 0.7666 +[2026-08-06 14:55:53,374][__main__][INFO] - Conformal 90% interval coverage: 0.8985 +[2026-08-06 14:56:03,317][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00017060635463242747 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:56:03,521][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:56:03,663][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:56:05,206][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:56:05,221][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:56:05,229][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:56:05,266][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:56:05,267][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:56:10,709][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 14:57:40,692][__main__][INFO] - test R2=0.9992 RMSE=49757.59 MAE=18989.88 MSE=2475818240.00 Bias=-15217.43 Median APE=1.72 Log10 MSE=0.00 +[2026-08-06 14:57:42,886][__main__][INFO] - test R2=0.9969 RMSE=5.98 MAE=2.28 MSE=35.81 Bias=-0.54 Median APE=2.41 Log10 MSE=0.00 +[2026-08-06 14:57:46,414][__main__][INFO] - Raw 90% interval coverage: 0.9502 +[2026-08-06 14:57:46,414][__main__][INFO] - Conformal 90% interval coverage: 0.9056 +[2026-08-06 14:57:48,568][__main__][INFO] - Raw 90% interval coverage: 0.9386 +[2026-08-06 14:57:48,569][__main__][INFO] - Conformal 90% interval coverage: 0.8869 +[2026-08-06 14:57:56,614][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006665560746576976 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:57:56,761][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.000439958170912193 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:57:56,826][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:57:56,996][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:57:57,100][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:57:57,153][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:57:58,416][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:57:58,432][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:57:58,434][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:57:58,442][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:57:58,448][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:57:58,455][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 14:57:58,474][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 14:57:58,474][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:57:58,504][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 14:57:58,505][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:58:03,621][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-06 14:58:03,939][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 14:59:09,910][__main__][INFO] - test R2=0.9986 RMSE=4.00 MAE=1.57 MSE=15.99 Bias=-0.07 Median APE=1.58 Log10 MSE=0.00 +[2026-08-06 14:59:14,148][__main__][INFO] - Raw 90% interval coverage: 0.8811 +[2026-08-06 14:59:14,149][__main__][INFO] - Conformal 90% interval coverage: 0.9211 +[2026-08-06 14:59:21,923][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0013638728911172903 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 14:59:22,108][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 14:59:22,241][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 14:59:23,431][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 14:59:23,446][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 14:59:23,454][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:59:23,472][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 14:59:23,473][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 14:59:28,709][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 15:01:13,122][__main__][INFO] - test R2=0.9994 RMSE=42741.98 MAE=13964.16 MSE=1826877312.00 Bias=-133.82 Median APE=0.64 Log10 MSE=0.00 +[2026-08-06 15:01:15,789][__main__][INFO] - test R2=0.9967 RMSE=6.17 MAE=2.51 MSE=38.07 Bias=0.60 Median APE=2.62 Log10 MSE=0.00 +[2026-08-06 15:01:18,839][__main__][INFO] - Raw 90% interval coverage: 0.9955 +[2026-08-06 15:01:18,840][__main__][INFO] - Conformal 90% interval coverage: 0.9244 +[2026-08-06 15:01:21,452][__main__][INFO] - Raw 90% interval coverage: 0.9800 +[2026-08-06 15:01:21,453][__main__][INFO] - Conformal 90% interval coverage: 0.8985 +[2026-08-06 15:01:27,570][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004120846762862936 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:01:27,787][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:01:27,924][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:01:28,139][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0013483856201908803 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:01:28,324][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:01:28,461][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:01:29,232][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:01:29,250][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:01:29,258][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:01:29,289][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:01:29,290][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:01:29,568][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:01:29,584][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:01:29,592][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:01:29,627][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:01:29,628][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:01:34,705][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 15:01:34,939][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 15:02:25,717][__main__][INFO] - test R2=0.9905 RMSE=10.52 MAE=3.32 MSE=110.65 Bias=-3.17 Median APE=1.02 Log10 MSE=0.00 +[2026-08-06 15:02:29,824][__main__][INFO] - Raw 90% interval coverage: 0.9942 +[2026-08-06 15:02:29,824][__main__][INFO] - Conformal 90% interval coverage: 0.9250 +[2026-08-06 15:02:39,051][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00025279934620848934 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:02:39,261][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:02:39,400][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:02:40,554][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:02:40,570][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:02:40,578][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:02:40,599][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:02:40,600][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:02:46,026][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M +[2026-08-06 15:04:32,828][__main__][INFO] - test R2=0.9923 RMSE=9.46 MAE=3.10 MSE=89.59 Bias=-1.76 Median APE=2.78 Log10 MSE=0.00 +[2026-08-06 15:04:36,945][__main__][INFO] - Raw 90% interval coverage: 0.9425 +[2026-08-06 15:04:36,945][__main__][INFO] - Conformal 90% interval coverage: 0.8824 +[2026-08-06 15:04:46,389][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0011339706004154422 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:04:46,584][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:04:46,726][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:04:48,200][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:04:48,216][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:04:48,224][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:04:48,249][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:04:48,249][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:04:53,614][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M +[2026-08-06 15:05:10,240][__main__][INFO] - test R2=0.9925 RMSE=153427.06 MAE=48789.07 MSE=23539865600.00 Bias=-44672.62 Median APE=0.69 Log10 MSE=0.00 +[2026-08-06 15:05:14,281][__main__][INFO] - Raw 90% interval coverage: 0.9845 +[2026-08-06 15:05:14,281][__main__][INFO] - Conformal 90% interval coverage: 0.9095 +[2026-08-06 15:05:22,467][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.005444773088433371 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:05:22,660][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:05:22,801][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:05:23,880][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:05:23,898][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:05:23,905][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:05:23,938][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:05:23,939][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:05:29,250][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 15:05:57,062][__main__][INFO] - test R2=0.9977 RMSE=5.24 MAE=1.83 MSE=27.42 Bias=-0.36 Median APE=1.66 Log10 MSE=0.00 +[2026-08-06 15:06:02,630][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 15:06:02,631][__main__][INFO] - Conformal 90% interval coverage: 0.9263 +[2026-08-06 15:06:09,912][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00025733578698090305 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:06:10,111][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:06:10,254][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:06:11,715][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:06:11,731][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:06:11,739][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:06:11,765][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:06:11,765][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:06:17,209][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M +[2026-08-06 15:08:31,460][__main__][INFO] - test R2=0.9880 RMSE=11.87 MAE=3.59 MSE=140.88 Bias=-2.72 Median APE=2.68 Log10 MSE=0.00 +[2026-08-06 15:08:35,619][__main__][INFO] - Raw 90% interval coverage: 0.9153 +[2026-08-06 15:08:35,619][__main__][INFO] - Conformal 90% interval coverage: 0.8920 +[2026-08-06 15:08:44,398][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0008424246968696935 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:08:44,591][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:08:44,735][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:08:46,263][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:08:46,279][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:08:46,300][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:08:46,329][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:08:46,330][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:08:51,637][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M +[2026-08-06 15:09:16,219][__main__][INFO] - test R2=0.9999 RMSE=17178.40 MAE=6237.03 MSE=295097376.00 Bias=2183.35 Median APE=0.35 Log10 MSE=0.00 +[2026-08-06 15:09:17,678][__main__][INFO] - test R2=0.9952 RMSE=7.46 MAE=2.28 MSE=55.71 Bias=-1.99 Median APE=1.00 Log10 MSE=0.00 +[2026-08-06 15:09:21,775][__main__][INFO] - Raw 90% interval coverage: 0.9373 +[2026-08-06 15:09:21,776][__main__][INFO] - Conformal 90% interval coverage: 0.8765 +[2026-08-06 15:09:21,827][__main__][INFO] - Raw 90% interval coverage: 0.9981 +[2026-08-06 15:09:21,827][__main__][INFO] - Conformal 90% interval coverage: 0.8830 +[2026-08-06 15:09:29,821][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0002120981397925171 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:09:30,025][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:09:30,164][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:09:30,732][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0007321301665149796 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:09:30,922][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:09:31,062][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:09:31,357][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:09:31,373][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:09:31,381][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:09:31,413][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:09:31,413][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:09:32,248][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:09:32,264][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:09:32,272][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:09:32,295][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:09:32,295][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:09:36,820][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 15:09:37,556][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 15:12:00,076][__main__][INFO] - test R2=0.9976 RMSE=5.33 MAE=2.02 MSE=28.45 Bias=-0.46 Median APE=2.31 Log10 MSE=0.00 +[2026-08-06 15:12:05,720][__main__][INFO] - Raw 90% interval coverage: 0.9347 +[2026-08-06 15:12:05,720][__main__][INFO] - Conformal 90% interval coverage: 0.9037 +[2026-08-06 15:12:16,176][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0007198800797122557 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:12:16,394][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:12:16,536][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:12:17,789][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:12:17,805][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:12:17,813][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:12:17,856][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:12:17,858][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:12:22,942][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M +[2026-08-06 15:13:13,514][__main__][INFO] - test R2=0.9925 RMSE=152941.02 MAE=45334.33 MSE=23390953472.00 Bias=-41234.25 Median APE=1.30 Log10 MSE=0.00 +[2026-08-06 15:13:17,845][__main__][INFO] - Raw 90% interval coverage: 0.9871 +[2026-08-06 15:13:17,845][__main__][INFO] - Conformal 90% interval coverage: 0.9192 +[2026-08-06 15:13:23,758][__main__][INFO] - test R2=0.9782 RMSE=15.99 MAE=4.84 MSE=255.55 Bias=-1.58 Median APE=3.41 Log10 MSE=0.00 +[2026-08-06 15:13:23,968][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.001011616367927375 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:13:24,174][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:13:24,312][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:13:25,558][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:13:25,574][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:13:25,582][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:13:25,600][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:13:25,601][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:13:29,549][__main__][INFO] - Raw 90% interval coverage: 0.8003 +[2026-08-06 15:13:29,549][__main__][INFO] - Conformal 90% interval coverage: 0.8468 +[2026-08-06 15:13:31,117][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-06 15:13:36,829][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004946628310052123 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:13:37,012][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:13:37,154][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:13:38,292][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:13:38,308][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:13:38,316][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:13:38,335][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:13:38,335][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:13:43,630][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M +[2026-08-06 15:15:21,342][__main__][INFO] - test R2=0.9936 RMSE=8.66 MAE=2.91 MSE=74.96 Bias=-1.99 Median APE=2.39 Log10 MSE=0.00 +[2026-08-06 15:15:25,476][__main__][INFO] - Raw 90% interval coverage: 0.9502 +[2026-08-06 15:15:25,476][__main__][INFO] - Conformal 90% interval coverage: 0.8714 +[2026-08-06 15:15:37,354][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0012164537994387564 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:15:37,552][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:15:37,690][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:15:39,073][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:15:39,089][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:15:39,097][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:15:39,118][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:15:39,118][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:15:44,424][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 15:17:23,650][__main__][INFO] - test R2=0.9955 RMSE=7.25 MAE=2.17 MSE=52.62 Bias=-1.97 Median APE=0.72 Log10 MSE=0.00 +[2026-08-06 15:17:24,394][__main__][INFO] - test R2=0.9989 RMSE=59410.11 MAE=19392.91 MSE=3529560832.00 Bias=-11595.28 Median APE=1.03 Log10 MSE=0.00 +[2026-08-06 15:17:27,872][__main__][INFO] - Raw 90% interval coverage: 0.9806 +[2026-08-06 15:17:27,872][__main__][INFO] - Conformal 90% interval coverage: 0.9231 +[2026-08-06 15:17:30,231][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 15:17:30,232][__main__][INFO] - Conformal 90% interval coverage: 0.9108 +[2026-08-06 15:17:39,180][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00037559511763267 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:17:39,181][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004377063305232232 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:17:39,447][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:17:39,529][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:17:39,689][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:17:39,708][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:17:41,153][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:17:41,153][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:17:41,170][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:17:41,172][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:17:41,177][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:17:41,180][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:17:41,214][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:17:41,215][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:17:41,219][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:17:41,221][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:17:46,625][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 15:17:46,765][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 15:19:36,845][__main__][INFO] - test R2=0.9972 RMSE=5.68 MAE=2.24 MSE=32.28 Bias=0.11 Median APE=2.81 Log10 MSE=0.00 +[2026-08-06 15:19:42,434][__main__][INFO] - Raw 90% interval coverage: 0.9379 +[2026-08-06 15:19:42,434][__main__][INFO] - Conformal 90% interval coverage: 0.8959 +[2026-08-06 15:19:58,533][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.000479518230201964 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:19:58,760][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:19:58,905][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:20:00,402][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:20:00,426][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:20:00,437][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:20:00,471][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:20:00,472][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:20:06,188][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M +[2026-08-06 15:21:24,485][__main__][INFO] - test R2=0.9999 RMSE=21661.26 MAE=7835.85 MSE=469210112.00 Bias=-58.64 Median APE=0.38 Log10 MSE=0.00 +[2026-08-06 15:21:28,437][__main__][INFO] - test R2=0.9858 RMSE=12.91 MAE=4.32 MSE=166.55 Bias=-4.22 Median APE=1.21 Log10 MSE=0.00 +[2026-08-06 15:21:28,665][__main__][INFO] - Raw 90% interval coverage: 0.8028 +[2026-08-06 15:21:28,665][__main__][INFO] - Conformal 90% interval coverage: 0.9101 +[2026-08-06 15:21:32,600][__main__][INFO] - Raw 90% interval coverage: 0.9845 +[2026-08-06 15:21:32,600][__main__][INFO] - Conformal 90% interval coverage: 0.8791 +[2026-08-06 15:21:42,376][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00011659772097651203 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:21:42,376][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.005095670695681824 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:21:42,625][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:21:42,704][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:21:42,860][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:21:42,879][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:21:44,384][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:21:44,385][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:21:44,401][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:21:44,402][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:21:44,409][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:21:44,411][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:21:44,437][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:21:44,438][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:21:44,448][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:21:44,449][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:21:49,733][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M +[2026-08-06 15:21:49,866][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M +[2026-08-06 15:23:59,092][__main__][INFO] - test R2=0.9978 RMSE=5.07 MAE=2.04 MSE=25.67 Bias=0.35 Median APE=2.36 Log10 MSE=0.00 +[2026-08-06 15:24:04,649][__main__][INFO] - Raw 90% interval coverage: 0.9328 +[2026-08-06 15:24:04,650][__main__][INFO] - Conformal 90% interval coverage: 0.8940 +[2026-08-06 15:24:14,837][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006960763833740912 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:24:15,032][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:24:15,168][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:24:16,518][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:24:16,534][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:24:16,541][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:24:16,574][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:24:16,575][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:24:21,998][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M +[2026-08-06 15:24:47,413][__main__][INFO] - test R2=0.9992 RMSE=49203.78 MAE=16129.74 MSE=2421011712.00 Bias=1949.51 Median APE=0.58 Log10 MSE=0.00 +[2026-08-06 15:24:51,522][__main__][INFO] - Raw 90% interval coverage: 0.8765 +[2026-08-06 15:24:51,523][__main__][INFO] - Conformal 90% interval coverage: 0.8901 +[2026-08-06 15:24:59,854][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005214189665141573 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:25:00,070][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:25:00,214][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:25:01,449][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:25:01,465][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:25:01,473][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:25:01,502][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:25:01,502][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:25:06,818][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M +[2026-08-06 15:25:40,126][__main__][INFO] - test R2=0.9388 RMSE=26.76 MAE=8.76 MSE=716.07 Bias=2.57 Median APE=6.93 Log10 MSE=0.00 +[2026-08-06 15:25:45,677][__main__][INFO] - Raw 90% interval coverage: 0.7602 +[2026-08-06 15:25:45,677][__main__][INFO] - Conformal 90% interval coverage: 0.9043 +[2026-08-06 15:25:56,496][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0005062651456405674 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:25:56,704][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:25:56,843][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:25:58,110][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:25:58,125][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:25:58,133][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:25:58,151][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:25:58,152][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:26:03,579][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M +[2026-08-06 15:27:59,771][__main__][INFO] - test R2=0.9846 RMSE=13.42 MAE=4.40 MSE=179.98 Bias=-3.82 Median APE=2.73 Log10 MSE=0.00 +[2026-08-06 15:28:03,866][__main__][INFO] - Raw 90% interval coverage: 0.9257 +[2026-08-06 15:28:03,866][__main__][INFO] - Conformal 90% interval coverage: 0.8785 +[2026-08-06 15:28:13,146][__main__][INFO] - test R2=0.9963 RMSE=107421.96 MAE=38417.21 MSE=11539477504.00 Bias=-27930.07 Median APE=2.10 Log10 MSE=0.00 +[2026-08-06 15:28:18,079][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00020567483023273297 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:28:18,296][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:28:18,445][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:28:18,824][__main__][INFO] - Raw 90% interval coverage: 0.8500 +[2026-08-06 15:28:18,824][__main__][INFO] - Conformal 90% interval coverage: 0.9011 +[2026-08-06 15:28:19,675][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:28:19,691][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:28:19,699][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:28:19,732][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:28:19,733][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:28:25,128][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M +[2026-08-06 15:28:26,429][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0002904032403744138 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:28:26,621][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:28:26,759][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:28:27,857][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:28:27,874][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:28:27,882][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:28:27,903][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:28:27,904][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:28:33,290][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 15:29:00,914][__main__][INFO] - test R2=0.9995 RMSE=2.35 MAE=0.75 MSE=5.52 Bias=-0.30 Median APE=0.62 Log10 MSE=0.00 +[2026-08-06 15:29:05,013][__main__][INFO] - Raw 90% interval coverage: 0.8630 +[2026-08-06 15:29:05,013][__main__][INFO] - Conformal 90% interval coverage: 0.9037 +[2026-08-06 15:29:11,751][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 2 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0010691674228170127 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:29:11,932][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:29:12,064][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:29:13,331][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:29:13,346][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:29:13,354][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:29:13,374][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:29:13,374][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:29:18,670][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M +[2026-08-06 15:31:40,237][__main__][INFO] - test R2=0.9988 RMSE=61917.42 MAE=21403.18 MSE=3833766656.00 Bias=-8243.08 Median APE=1.32 Log10 MSE=0.00 +[2026-08-06 15:31:45,948][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 15:31:45,949][__main__][INFO] - Conformal 90% interval coverage: 0.9289 +[2026-08-06 15:31:57,817][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00010858418001539352 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:31:58,022][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:31:58,163][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:31:59,436][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:31:59,454][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:31:59,461][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:31:59,498][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:31:59,499][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:32:05,451][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 15:32:14,643][__main__][INFO] - test R2=0.9966 RMSE=6.28 MAE=2.16 MSE=39.42 Bias=-0.48 Median APE=2.33 Log10 MSE=0.00 +[2026-08-06 15:32:20,079][__main__][INFO] - Raw 90% interval coverage: 0.9173 +[2026-08-06 15:32:20,079][__main__][INFO] - Conformal 90% interval coverage: 0.8830 +[2026-08-06 15:32:23,666][__main__][INFO] - test R2=0.9987 RMSE=3.84 MAE=1.06 MSE=14.73 Bias=-0.62 Median APE=0.82 Log10 MSE=0.00 +[2026-08-06 15:32:25,686][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: false +dropout_rate: 0.05 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0011700604384657263 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:32:25,871][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:32:26,013][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:32:27,137][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:32:27,152][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:32:27,160][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:32:27,184][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:32:27,184][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:32:29,267][__main__][INFO] - Raw 90% interval coverage: 0.8365 +[2026-08-06 15:32:29,268][__main__][INFO] - Conformal 90% interval coverage: 0.8849 +[2026-08-06 15:32:32,399][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M +[2026-08-06 15:32:37,762][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006437539196626359 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:32:37,952][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:32:38,096][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:32:39,379][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:32:39,395][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:32:39,403][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:32:39,433][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:32:39,434][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:32:44,967][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M +[2026-08-06 15:35:51,768][__main__][INFO] - test R2=0.9759 RMSE=274810.97 MAE=85500.74 MSE=75521073152.00 Bias=-1483.02 Median APE=4.59 Log10 MSE=0.00 +[2026-08-06 15:35:51,895][__main__][INFO] - test R2=0.9993 RMSE=2.80 MAE=0.97 MSE=7.85 Bias=-0.13 Median APE=1.00 Log10 MSE=0.00 +[2026-08-06 15:35:57,357][__main__][INFO] - Raw 90% interval coverage: 0.7692 +[2026-08-06 15:35:57,357][__main__][INFO] - Conformal 90% interval coverage: 0.9192 +[2026-08-06 15:35:57,399][__main__][INFO] - Raw 90% interval coverage: 0.8222 +[2026-08-06 15:35:57,399][__main__][INFO] - Conformal 90% interval coverage: 0.9282 +[2026-08-06 15:36:08,875][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 4 +mlp_residual: true +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.001365567655358299 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:36:08,876][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 4 +mlp_residual: false +dropout_rate: 0 +n_bins: 24 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0019399093796720367 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:36:09,139][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:36:09,221][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:36:09,373][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:36:09,392][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:36:10,709][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:36:10,713][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:36:10,726][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:36:10,728][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:36:10,733][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:36:10,736][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:36:10,766][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:36:10,766][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:36:10,768][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:36:10,768][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:36:12,620][__main__][INFO] - test R2=0.9943 RMSE=8.20 MAE=2.72 MSE=67.21 Bias=-1.47 Median APE=2.34 Log10 MSE=0.00 +[2026-08-06 15:36:16,201][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M +[2026-08-06 15:36:16,265][estimint.v2.training.train_step][INFO] - Total parameters: 2.15M +[2026-08-06 15:36:16,915][__main__][INFO] - Raw 90% interval coverage: 0.8966 +[2026-08-06 15:36:16,915][__main__][INFO] - Conformal 90% interval coverage: 0.8817 +[2026-08-06 15:36:22,823][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0004120706509314787 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:36:23,012][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:36:23,157][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:36:24,369][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:36:24,385][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:36:24,393][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:36:24,416][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:36:24,416][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:36:29,650][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M +[2026-08-06 15:39:13,474][__main__][INFO] - test R2=0.9996 RMSE=37129.04 MAE=11586.69 MSE=1378565632.00 Bias=1380.95 Median APE=0.51 Log10 MSE=0.00 +[2026-08-06 15:39:17,634][__main__][INFO] - Raw 90% interval coverage: 0.8662 +[2026-08-06 15:39:17,635][__main__][INFO] - Conformal 90% interval coverage: 0.8992 +[2026-08-06 15:39:32,596][__main__][INFO] - predictor: eir +target: hbr_y9 +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006244780161786682 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:39:32,795][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:39:32,955][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:39:34,201][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:39:34,218][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:39:34,225][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:39:34,257][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv +[2026-08-06 15:39:34,257][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:39:39,665][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M +[2026-08-06 15:39:39,758][__main__][INFO] - test R2=0.9964 RMSE=6.54 MAE=2.47 MSE=42.73 Bias=-0.30 Median APE=2.53 Log10 MSE=0.00 +[2026-08-06 15:39:45,373][__main__][INFO] - Raw 90% interval coverage: 0.9580 +[2026-08-06 15:39:45,374][__main__][INFO] - Conformal 90% interval coverage: 0.9037 +[2026-08-06 15:39:54,093][__main__][INFO] - predictor: prev_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 256 +depth: 3 +mlp_residual: true +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.0006494400653788419 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:39:54,286][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:39:54,430][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:39:55,552][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:39:55,568][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:39:55,576][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv +[2026-08-06 15:39:55,602][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv +[2026-08-06 15:39:55,602][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:40:00,730][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M +[2026-08-06 15:40:08,901][__main__][INFO] - test R2=0.9785 RMSE=15.85 MAE=6.63 MSE=251.21 Bias=-5.84 Median APE=11.91 Log10 MSE=0.00 +[2026-08-06 15:40:14,576][__main__][INFO] - Raw 90% interval coverage: 1.0000 +[2026-08-06 15:40:14,577][__main__][INFO] - Conformal 90% interval coverage: 0.9095 +[2026-08-06 15:40:21,822][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 3 +mlp_residual: false +dropout_rate: 0.1 +n_bins: 32 +rqs_bounds: 8 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00015320249295013158 +batch_size: 256 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:40:22,012][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:40:22,155][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:40:23,355][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:40:23,371][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:40:23,378][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:40:23,401][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:40:23,402][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:40:28,785][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M +[2026-08-06 15:43:12,024][__main__][INFO] - test R2=0.9964 RMSE=6.52 MAE=2.38 MSE=42.47 Bias=-0.57 Median APE=2.37 Log10 MSE=0.00 +[2026-08-06 15:43:17,639][__main__][INFO] - Raw 90% interval coverage: 0.9586 +[2026-08-06 15:43:17,640][__main__][INFO] - Conformal 90% interval coverage: 0.9179 +[2026-08-06 15:43:24,984][__main__][INFO] - test R2=0.9998 RMSE=23429.46 MAE=9156.10 MSE=548939712.00 Bias=105.12 Median APE=0.62 Log10 MSE=0.00 +[2026-08-06 15:43:30,746][__main__][INFO] - Raw 90% interval coverage: 0.9845 +[2026-08-06 15:43:30,747][__main__][INFO] - Conformal 90% interval coverage: 0.9186 +[2026-08-06 15:44:06,509][__main__][INFO] - test R2=0.9925 RMSE=9.37 MAE=2.87 MSE=87.81 Bias=-2.75 Median APE=0.96 Log10 MSE=0.00 +[2026-08-06 15:44:10,755][__main__][INFO] - Raw 90% interval coverage: 0.9942 +[2026-08-06 15:44:10,755][__main__][INFO] - Conformal 90% interval coverage: 0.8811 +[2026-08-06 15:44:25,322][__main__][INFO] - predictor: hbr_y9 +target: eir +name: ${predictor}-${target} +data_file: datasets/estimint_simulations_y9.parquet +split_file: datasets/split_${name}.csv +num_workers: 0 +use_existing_split: false +stratify: false +calib_frac: 0.06 +width: 512 +depth: 2 +mlp_residual: true +dropout_rate: 0.05 +n_bins: 32 +rqs_bounds: 6 +num_epochs: 120 +min_epochs: 120 +patience: 30 +lr: 0.00035203356591147314 +batch_size: 512 +weight_decay: 0.0001 +checkpoint_dir: ${output_dir}/ckpts-${cur_time} +cur_time: ${now:%Y-%m-%dT%H:%M:%S} +seed: 42 +use_wandb: true +output_dir: train_outputs/${name} +wandb: + project: estimint-training-${name} + name: train-${cur_time} + +[2026-08-06 15:44:30,268][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory +[2026-08-06 15:44:32,719][__main__][INFO] - JAX devices: [CudaDevice(id=0)] +[2026-08-06 15:44:34,517][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 +[2026-08-06 15:44:34,536][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split +[2026-08-06 15:44:34,544][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:44:34,570][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv +[2026-08-06 15:44:34,570][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 +[2026-08-06 15:44:40,072][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M +[2026-08-06 15:47:45,961][__main__][INFO] - test R2=0.9995 RMSE=2.48 MAE=0.83 MSE=6.17 Bias=0.13 Median APE=0.67 Log10 MSE=0.00 +[2026-08-06 15:47:51,488][__main__][INFO] - Raw 90% interval coverage: 0.9780 +[2026-08-06 15:47:51,488][__main__][INFO] - Conformal 90% interval coverage: 0.9308 From 2f71f878e0fd3a95009e54536aab11275a2d569d Mon Sep 17 00:00:00 2001 From: Anmol Date: Fri, 7 Aug 2026 11:17:20 +0000 Subject: [PATCH 21/32] save conformal so can be used by hf loaded weights --- src/estimint/v2/conf/export_config.yaml | 15 +++++++++------ src/estimint/v2/conf/train_config.yaml | 1 + src/estimint/v2/model_export.py | 3 +++ src/estimint/v2/models/hub.py | 3 ++- src/estimint/v2/models/rqs.py | 4 ++-- src/estimint/v2/train_base.py | 6 ++++++ 6 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/estimint/v2/conf/export_config.yaml b/src/estimint/v2/conf/export_config.yaml index a8dff79..105f37e 100644 --- a/src/estimint/v2/conf/export_config.yaml +++ b/src/estimint/v2/conf/export_config.yaml @@ -1,24 +1,27 @@ -predictor: "hbr_y9" +predictor: "prev_y9" target: "eir" name: "${predictor}-${target}" # Data -features_scaler_file: train_outputs/${name}/features_scaler.pkl -target_scaler_file: train_outputs/${name}/target_scaler.pkl +features_scaler_file: ${output_dir}/features_scaler.pkl +target_scaler_file: ${output_dir}/target_scaler.pkl # Model - ensure these match the checkpointed model's parameters model_name: "RQS" width: 256 depth: 2 -mlp_residual: true -n_bins: 32 +mlp_residual: false +n_bins: 24 rqs_bounds: 6 dropout_rate: 0.0 +conformal_file: "${output_dir}/conformal-${timestamp}.json" # Checkpointing -checkpoint_dir: ??? +checkpoint_dir: "${output_dir}/ckpts-${timestamp}" # General +output_dir: "train_outputs/${name}" +timestamp: ??? seed: 42 artifact_dir: "artifacts/${name}" \ No newline at end of file diff --git a/src/estimint/v2/conf/train_config.yaml b/src/estimint/v2/conf/train_config.yaml index f7aa538..81fe26a 100644 --- a/src/estimint/v2/conf/train_config.yaml +++ b/src/estimint/v2/conf/train_config.yaml @@ -17,6 +17,7 @@ mlp_residual: false dropout_rate: 0.0 n_bins: 24 rqs_bounds: 6 +conformal_file: "${output_dir}/conformal-${cur_time}.json" # Hyperparameters num_epochs: 120 diff --git a/src/estimint/v2/model_export.py b/src/estimint/v2/model_export.py index 0d51f5f..b3a5d68 100644 --- a/src/estimint/v2/model_export.py +++ b/src/estimint/v2/model_export.py @@ -29,6 +29,8 @@ def main(cfg: DictConfig): if not feature_scaler.is_fitted or not target_scaler.is_fitted: raise ValueError("Feature or target scaler is not fitted. Please fit the scalers before exporting the model.") + with open(cfg.conformal_file, "r") as f: + conformal = json.load(f) features = get_features(cfg.predictor) model = ConditionalRQS.from_cfg(cfg, n_context=len(features)) model = restore_model(cfg.checkpoint_dir, cfg.model_name, model) @@ -52,6 +54,7 @@ def main(cfg: DictConfig): feature_log_idx=list(feature_scaler.log_idx), target_scalar_mean=target_scaler.mean_.tolist(), target_scalar_scale=target_scaler.scale_.tolist(), + conformal=conformal, ) with (artifact_dir / "config.json").open("w") as f: diff --git a/src/estimint/v2/models/hub.py b/src/estimint/v2/models/hub.py index 3cc561f..0f3a312 100644 --- a/src/estimint/v2/models/hub.py +++ b/src/estimint/v2/models/hub.py @@ -84,6 +84,7 @@ def load_model_artifact( feature_scaler = _load_scaler(config["feature_scalar_mean"], config["feature_scalar_scale"], config["feature_log_idx"]) target_scaler = _load_scaler(config["target_scalar_mean"], config["target_scalar_scale"]) + conformal = {float(k): v for k, v in config.get("conformal", {}).items()} - return RQSArtifact(model=model, feature_scaler=feature_scaler, target_scaler=target_scaler, features=features) + return RQSArtifact(model=model, feature_scaler=feature_scaler, target_scaler=target_scaler, features=features, conformal=conformal) diff --git a/src/estimint/v2/models/rqs.py b/src/estimint/v2/models/rqs.py index e5e6d27..8a0f7aa 100644 --- a/src/estimint/v2/models/rqs.py +++ b/src/estimint/v2/models/rqs.py @@ -115,11 +115,11 @@ def _forward(model: nnx.Module, context: jnp.ndarray, quantile: float): FeatureInput = np.ndarray | dict[str, float] | list[dict[str, float]] class RQSArtifact: - def __init__(self, model: nnx.Module, feature_scaler: FeatureScaler | StandardScaler, target_scaler: StandardScaler, features: list[str]): + def __init__(self, model: nnx.Module, feature_scaler: FeatureScaler | StandardScaler, target_scaler: StandardScaler, features: list[str], conformal: dict[float, float] = dict()): self.model = model self.feature_scaler = feature_scaler self.target_scaler = target_scaler - self.conformal = dict() # alpha -> offset Q + self.conformal = conformal # alpha -> offset Q self.feature_names = features if self.feature_scaler.mean_.shape[0] != len(self.feature_names): diff --git a/src/estimint/v2/train_base.py b/src/estimint/v2/train_base.py index 925642e..0e7326d 100644 --- a/src/estimint/v2/train_base.py +++ b/src/estimint/v2/train_base.py @@ -15,6 +15,7 @@ from estimint.v2.eval.metrics import compute_metrics from .models.rqs import ConditionalRQS, rqs_loss, RQSArtifact from .training.calibrate import conformal_offset +import json log = logging.getLogger(__name__) @@ -39,6 +40,11 @@ def train_rqs(cfg: DictConfig, prepared_data: PreparedData): lower, upper = rqs_artifact.quantile(calib_x_raw, 0.05), rqs_artifact.quantile(calib_x_raw, 0.95) rqs_artifact.conformal[0.10] = conformal_offset(lower, upper, calib_y_raw, alpha=0.10) + with open(cfg.conformal_file, "w") as f: + json.dump(rqs_artifact.conformal, f, indent=2) + log.info(f"Saved conformal offsets to {cfg.conformal_file}") + + # ------------ test evaluation ---------------- test_loader = make_loader( data=prepared_data.test_data, From 1313eb3be2f0e7de70dd9889040865b91a053d83 Mon Sep 17 00:00:00 2001 From: Anmol Date: Fri, 7 Aug 2026 12:46:40 +0000 Subject: [PATCH 22/32] random --- random.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 random.py diff --git a/random.py b/random.py new file mode 100644 index 0000000..61dcbf3 --- /dev/null +++ b/random.py @@ -0,0 +1 @@ +shit balls \ No newline at end of file From b42665ac287e0533a1ae720811ec6be5c6e7ed12 Mon Sep 17 00:00:00 2001 From: Anmol Date: Fri, 7 Aug 2026 12:47:29 +0000 Subject: [PATCH 23/32] remove: delete unused random.py file --- random.py | 1 - 1 file changed, 1 deletion(-) delete mode 100644 random.py diff --git a/random.py b/random.py deleted file mode 100644 index 61dcbf3..0000000 --- a/random.py +++ /dev/null @@ -1 +0,0 @@ -shit balls \ No newline at end of file From bf99fa0a48d1eb50eb03fe5d8f665d4f85fe9bbb Mon Sep 17 00:00:00 2001 From: Anmol Date: Thu, 13 Aug 2026 11:16:28 +0000 Subject: [PATCH 24/32] get working with scenarios --- src/estimint/hbr.py | 84 +- src/estimint/scenarios.py | 106 +- src/estimint/types.py | 18 +- src/estimint/v2/common/types.py | 3 +- src/estimint/v2/models/hub.py | 5 +- tests/test_flows.py | 4 +- tests/test_scenarios.py | 12 +- train_base.log | 9266 ------------------------------- 8 files changed, 127 insertions(+), 9371 deletions(-) delete mode 100644 train_base.log diff --git a/src/estimint/hbr.py b/src/estimint/hbr.py index fa70135..f7878c7 100644 --- a/src/estimint/hbr.py +++ b/src/estimint/hbr.py @@ -10,15 +10,12 @@ 4. HBR model predicts EIR at both HBR values (ratio approach) 5. EIR_new = EIR_baseline * (EIR_scaled / EIR_roundtrip) """ +import numpy as np +from estimint.types import PreparedScenario, INPUT_MODE_TO_REPO_IDS +from estimint.v2.models.rqs import RQSArtifact -from typing import Any -import pandas as pd - -from .run import run_xgb_model - - -def estimate_eir_with_mosquito_delta(inputs: pd.DataFrame, *, models: dict[str, Any]) -> pd.DataFrame: +def estimate_eir_with_mosquito_delta(prepared_scenarios: list[PreparedScenario], *, eir_models: dict[str, RQSArtifact]) -> list[dict[str, float]]: """ Estimate new EIR after a change in mosquito density for multiple scenarios. @@ -68,53 +65,62 @@ def estimate_eir_with_mosquito_delta(inputs: pd.DataFrame, *, models: dict[str, >>> result = estimate_eir_with_mosquito_delta(inputs, models=models) >>> print(result[["eir_baseline", "eir_new"]]) """ - features = [ - "dn0_use", - "Q0", - "phi_bednets", - "seasonal", - "itn_use", - "irs_use", - ] - intervention_data = inputs[features] - # Step 1: prevalence -> EIR baseline - prevalence_data = intervention_data.assign(prev_y9=inputs["prevalence"].to_numpy()) - eir_baseline = run_xgb_model(prevalence_data, models["prevalence"]) + prev_eir_artifact = eir_models[INPUT_MODE_TO_REPO_IDS["prevalence"]] + prev_eir_records = [ + { + **prepared_scenario.eir_model_features, + "prev_y9": prepared_scenario.eir_target.input_value, + } + for prepared_scenario in prepared_scenarios + ] + eir_baselines = prev_eir_artifact.predict(prev_eir_records) - # Step 2: EIR -> HBR baseline - eir_data = intervention_data.assign(eir=eir_baseline) - hbr_baseline = run_xgb_model(eir_data, models["eir_to_hbr"]) + # 2: EIR -> HBR baseline + eir_hbr_artifact = eir_models[INPUT_MODE_TO_REPO_IDS["eir"]] + eir_hbr_records = [ + { + **prepared_scenario.eir_model_features, + "eir": eir_value, + } + for prepared_scenario, eir_value in zip(prepared_scenarios, eir_baselines) + ] + hbr_baselines = eir_hbr_artifact.predict(eir_hbr_records) # Step 3: apply mosquito delta (positive or negative) - hbr_new = hbr_baseline * (1 + inputs["mosquito_delta"].to_numpy()) + mosquito_deltas = [prepared_scenario.mosquito_density_change for prepared_scenario in prepared_scenarios] + hbr_adjusted = hbr_baselines * (1 + np.array(mosquito_deltas)) # Step 4: ratio approach — batch both HBR values in one call so they # share the same smooth PCHIP curve - hbr_data = pd.concat( - [ - intervention_data.assign(hbr_y9=hbr_baseline), - intervention_data.assign(hbr_y9=hbr_new), - ], - ignore_index=True, - ) - eir_from_hbr = run_xgb_model(hbr_data, models["hbr"]) - - count = len(inputs) + hbr_eir_artifact = eir_models[INPUT_MODE_TO_REPO_IDS["hbr"]] + hbr_eir_records = [ + { + **prepared_scenario.eir_model_features, + "hbr_y9": hbr_value, + } + for hbr_values in (hbr_baselines, hbr_adjusted) + for prepared_scenario, hbr_value in zip(prepared_scenarios, hbr_values) + ] + eir_from_hbr = hbr_eir_artifact.predict(hbr_eir_records) + + count = len(prepared_scenarios) eir_rt = eir_from_hbr[:count] eir_new_raw = eir_from_hbr[count:] # Step 5: multiplier applied to clean baseline multiplier = eir_new_raw / eir_rt - eir_new = eir_baseline * multiplier + eir_new = eir_baselines * multiplier - return pd.DataFrame( + return [ { "eir_baseline": eir_baseline, "eir_new": eir_new, "eir_multiplier": multiplier, "hbr_baseline": hbr_baseline, - "hbr_new": hbr_new, - }, - index=inputs.index, - ) + "hbr_new": hbr_adjusted, + } + for eir_baseline, eir_new, multiplier, hbr_baseline, hbr_adjusted in zip( + eir_baselines, eir_new, multiplier, hbr_baselines, hbr_adjusted + ) + ] diff --git a/src/estimint/scenarios.py b/src/estimint/scenarios.py index d853d4b..6119b5d 100644 --- a/src/estimint/scenarios.py +++ b/src/estimint/scenarios.py @@ -6,15 +6,18 @@ import numpy as np import pandas as pd +from estimint.v2.common.types import TargetType, PredictorType + from .bednet import DN0Result, calculate_dn0 from .hbr import estimate_eir_with_mosquito_delta -from .run import run_xgb_model -from .storage import load_xgb_model -from .types import EirTarget, Scenario +from estimint.v2.models.rqs import ConditionalRQS, RQSArtifact +from estimint.v2.models.hub import repo_id +from .types import Scenario, Input_Mode, PreparedScenario, INPUT_MODE_TO_REPO_IDS from collections import defaultdict ####################### Constants and global storage ################### -HF_REPO = "dide-ic/stateMINT" +STATEMINT_HF_REPO = "dide-ic/stateMINT" +ESTIMINT_HF_REPO = "dide-ic/estiMINT" # 157 windows of 14 days from day 2190; intervention at day 3285. _ABS_TIME = 2190 + 14 * np.arange(157) _IDX_Y9 = int(np.argmin(np.abs(_ABS_TIME - 3285))) @@ -29,8 +32,17 @@ "py_ppf", ) -_REQUIRED_EIR_MODEL_NAMES = ("prevalence", "hbr", "eir_to_hbr") +ESTIMINT_MODEL_MAPS: Dict[PredictorType, TargetType] = { + "prev_y9": "eir", + "hbr_y9": "eir", + "eir": "hbr_y9", +} +INPUT_MODE_TO_PREDICTOR: Dict[Input_Mode, PredictorType] = { + "prevalence": "prev_y9", + "hbr": "hbr_y9", + "eir": "eir", +} @dataclass(frozen=True) class _EirInputModelConfig: @@ -38,19 +50,16 @@ class _EirInputModelConfig: model_name: str -_EIR_INPUT_MODEL_CONFIG = { - "prevalence": _EirInputModelConfig(feature_column="prev_y9", model_name="prevalence"), - "hbr": _EirInputModelConfig(feature_column="hbr_y9", model_name="hbr"), -} - - +# TODO: need to update all docs and type hints etc. readme as well ######################## Internal helpers ######################## -def _load_eir_hbr_models() -> Dict[str, Any]: - if not _EIR_MODEL_CACHE: - for model_name in _REQUIRED_EIR_MODEL_NAMES: - _EIR_MODEL_CACHE[model_name] = load_xgb_model(model_name) - return _EIR_MODEL_CACHE +def _load_estimint_models(hf_repo: str) -> Dict[str, RQSArtifact]: + if hf_repo not in _EIR_MODEL_CACHE: + _EIR_MODEL_CACHE[hf_repo] = { + repo_id(predictor, target): ConditionalRQS.from_pretrained(hf_repo, predictor, target) + for predictor, target in ESTIMINT_MODEL_MAPS.items() + } + return _EIR_MODEL_CACHE[hf_repo] def _load_emulators(hf_repo: str) -> Dict[str, Any]: if hf_repo not in _EMULATOR_MODEL_CACHE: @@ -94,17 +103,7 @@ def _calculate_bednet_effects(scenario: Scenario) -> _BedNetEffects: future=future_effect, ) - -@dataclass -class _PreparedScenario: - eir_target: EirTarget - mosquito_density_change: float - eir_model_features: Dict[str, float] - summary_values: dict[str, Any] - emulator_covariates: dict[str, float] - - -def _prepare_scenario_inputs(scenario: Scenario) -> _PreparedScenario: +def _prepare_scenario_inputs(scenario: Scenario) -> PreparedScenario: """Compute the model inputs and initial output values for one scenario.""" bednet_effects = _calculate_bednet_effects(scenario) current_dn0 = bednet_effects.current.dn0 @@ -161,7 +160,7 @@ def _prepare_scenario_inputs(scenario: Scenario) -> _PreparedScenario: "hbr_new": np.nan, } - return _PreparedScenario( + return PreparedScenario( eir_target=scenario.eir_target, mosquito_density_change=scenario.mosquito_delta, eir_model_features=eir_model_features, @@ -171,7 +170,7 @@ def _prepare_scenario_inputs(scenario: Scenario) -> _PreparedScenario: def _record_eir_estimate( - prepared_scenario: _PreparedScenario, + prepared_scenario: PreparedScenario, *, eir_baseline: float, eir_final: float, @@ -185,20 +184,22 @@ def _record_eir_estimate( prepared_scenario.emulator_covariates["eir"] = float(eir_final) +# TODO: sort types out and string conversions etc def _predict_eir_from_measurements( - prepared_scenarios: list[_PreparedScenario], *, input_mode: str, eir_models: Dict[str, Any] + prepared_scenarios: list[PreparedScenario], *, input_mode: Input_Mode, eir_models: Dict[str, RQSArtifact] ) -> None: """Predict EIR from baseline prevalence or HBR measurements.""" - model_config = _EIR_INPUT_MODEL_CONFIG[input_mode] + model_artifact = eir_models[INPUT_MODE_TO_REPO_IDS[input_mode]] + model_input_records = [ { **prepared_scenario.eir_model_features, - model_config.feature_column: prepared_scenario.eir_target.input_value, + INPUT_MODE_TO_PREDICTOR[input_mode]: prepared_scenario.eir_target.input_value, } for prepared_scenario in prepared_scenarios ] - eir_predictions = run_xgb_model(pd.DataFrame(model_input_records), eir_models[model_config.model_name]) + eir_predictions = model_artifact.predict(model_input_records) for prepared_scenario, eir_prediction in zip(prepared_scenarios, eir_predictions): _record_eir_estimate( @@ -208,7 +209,7 @@ def _predict_eir_from_measurements( ) -def _classify_prepared_scenario(prepared_scenario: _PreparedScenario) -> str: +def _classify_prepared_scenario(prepared_scenario: PreparedScenario) -> str: """Return the EIR estimation method for a prepared scenario.""" if prepared_scenario.eir_target.input_mode == "eir": return "eir" @@ -217,18 +218,10 @@ def _classify_prepared_scenario(prepared_scenario: _PreparedScenario) -> str: return prepared_scenario.eir_target.input_mode # "prevalence" or "hbr" -def _apply_mosquito_delta_batch(prepared_scenarios: list[_PreparedScenario], eir_models: Dict[str, Any]) -> None: - inputs = pd.DataFrame( - [ - { - "prevalence": prepared_scenario.eir_target.input_value, - "mosquito_delta": prepared_scenario.mosquito_density_change, - **prepared_scenario.eir_model_features, - } - for prepared_scenario in prepared_scenarios - ] - ) - estimates = estimate_eir_with_mosquito_delta(inputs, models=eir_models).to_dict(orient="records") +def _apply_mosquito_delta_batch(prepared_scenarios: list[PreparedScenario], eir_models: Dict[str, RQSArtifact]) -> None: + """Estimate EIR for a batch of scenarios with prevalence input and a mosquito-density change.""" + + estimates = estimate_eir_with_mosquito_delta(prepared_scenarios, eir_models=eir_models) for prepared_scenario, estimate in zip(prepared_scenarios, estimates): _record_eir_estimate( prepared_scenario, @@ -239,7 +232,7 @@ def _apply_mosquito_delta_batch(prepared_scenarios: list[_PreparedScenario], eir ) -def _estimate_eir(scenarios: list[Scenario], eir_models: Dict[str, Any]) -> list[_PreparedScenario]: +def _estimate_eir(scenarios: list[Scenario], eir_models: Dict[str, RQSArtifact]) -> list[PreparedScenario]: """Estimate EIR for many scenarios, dispatching each to one of three paths: - "eir": supplied directly, passed through unchanged - "prevalence" / "hbr": predicted from baseline measurements via XGBoost @@ -250,7 +243,7 @@ def _estimate_eir(scenarios: list[Scenario], eir_models: Dict[str, Any]) -> list prepared_scenarios = [_prepare_scenario_inputs(scenario) for scenario in scenarios] - scenario_groups: dict[str, list[_PreparedScenario]] = defaultdict(list) + scenario_groups: dict[str, list[PreparedScenario]] = defaultdict(list) for prepared_scenario in prepared_scenarios: scenario_groups[_classify_prepared_scenario(prepared_scenario)].append(prepared_scenario) @@ -269,10 +262,10 @@ def _estimate_eir(scenarios: list[Scenario], eir_models: Dict[str, Any]) -> list ######################### Public API ######################## -def preload_models(*, hf_repo: str = HF_REPO) -> tuple[Dict[str, Any], Dict[str, Any]]: +def preload_models(*, statemint_hf_repo: str = STATEMINT_HF_REPO, estimint_hf_repo: str = ESTIMINT_HF_REPO) -> tuple[Dict[str, RQSArtifact], Dict[str, Any]]: """Preload the models used by run_scenarios.""" - eir_models = _load_eir_hbr_models() - emulator_models = _load_emulators(hf_repo) + eir_models = _load_estimint_models(estimint_hf_repo) + emulator_models = _load_emulators(statemint_hf_repo) return eir_models, emulator_models @@ -280,7 +273,8 @@ def preload_models(*, hf_repo: str = HF_REPO) -> tuple[Dict[str, Any], Dict[str, def run_scenarios( scenarios: list[Scenario], *, - hf_repo: str = HF_REPO, + statemint_hf_repo: str = STATEMINT_HF_REPO, + estimint_hf_repo: str = ESTIMINT_HF_REPO ) -> pd.DataFrame: """Run a list of scenarios through the estiMINT -> stateMINT pipeline. @@ -293,8 +287,10 @@ def run_scenarios( scenarios: Scenarios to evaluate. Each ``Scenario`` describes intervention coverages (ITN, IRS, LSM, etc.) and an ``EirTarget`` specifying the baseline transmission intensity. - hf_repo: HuggingFace repo ID from which emulator model weights are - downloaded. Defaults to the package-level ``HF_REPO`` constant. + statemint_hf_repo: HuggingFace repo ID from which stateMINT emulator model weights are + downloaded. Defaults to the package-level ``STATEMINT_HF_REPO`` constant. + estimint_hf_repo: HuggingFace repo ID from which estiMINT model weights are + downloaded. Defaults to the package-level ``ESTIMINT_HF_REPO`` constant. Returns: A ``pd.DataFrame`` with one row per scenario containing: @@ -349,7 +345,7 @@ def run_scenarios( if not scenarios: return pd.DataFrame() - eir_models, emulator_models = preload_models(hf_repo=hf_repo) + eir_models, emulator_models = preload_models(statemint_hf_repo=statemint_hf_repo, estimint_hf_repo=estimint_hf_repo) scenario_estimates = _estimate_eir(scenarios, eir_models) emulator_covariates = [estimate.emulator_covariates for estimate in scenario_estimates] diff --git a/src/estimint/types.py b/src/estimint/types.py index 10bc61a..b8e2e52 100644 --- a/src/estimint/types.py +++ b/src/estimint/types.py @@ -1,6 +1,8 @@ -from typing import Literal +from typing import Any, Literal, Dict from dataclasses import dataclass +from estimint.v2.models.hub import repo_id + Input_Mode = Literal["prevalence", "eir", "hbr"] @@ -29,3 +31,17 @@ class Scenario: irs_future: float = 0.0 routine: float = 0.0 lsm: float = 0.0 + +@dataclass +class PreparedScenario: + eir_target: EirTarget + mosquito_density_change: float + eir_model_features: Dict[str, float] + summary_values: dict[str, Any] + emulator_covariates: dict[str, float] + +INPUT_MODE_TO_REPO_IDS: Dict[Input_Mode, str] = { + "prevalence": repo_id("prev_y9", "eir"), + "hbr": repo_id("hbr_y9", "eir"), + "eir": repo_id("eir", "hbr_y9"), +} \ No newline at end of file diff --git a/src/estimint/v2/common/types.py b/src/estimint/v2/common/types.py index 5d4ebda..b078468 100644 --- a/src/estimint/v2/common/types.py +++ b/src/estimint/v2/common/types.py @@ -14,4 +14,5 @@ class ModelArtifact(Protocol): def predict(self, X_raw: np.ndarray) -> np.ndarray: ... PredictorType = Literal["prev_y9", "eir", "hbr_y9"] -TargetType = Literal["eir", "hbr_y9"] \ No newline at end of file +TargetType = Literal["eir", "hbr_y9"] + diff --git a/src/estimint/v2/models/hub.py b/src/estimint/v2/models/hub.py index 0f3a312..e3007d7 100644 --- a/src/estimint/v2/models/hub.py +++ b/src/estimint/v2/models/hub.py @@ -12,6 +12,9 @@ from ..training.checkpoint import restore_model +def repo_id(predictor: PredictorType, target: TargetType) -> str: + return f"{predictor}-{target}" + def _load_json(path: Path) -> dict[str, Any]: with path.open("r") as f: return json.load(f) @@ -72,7 +75,7 @@ def load_model_artifact( artifact_dir = Path(path_or_repo_id) else: artifact_dir = _download_from_hf( - path_or_repo_id, f"{predictor}-{target}", revision=revision, cache_dir=cache_dir, local_dir=local_dir + path_or_repo_id, repo_id(predictor, target), revision=revision, cache_dir=cache_dir, local_dir=local_dir ) config = _load_json(artifact_dir / "config.json") diff --git a/tests/test_flows.py b/tests/test_flows.py index 4d7a164..903a48a 100644 --- a/tests/test_flows.py +++ b/tests/test_flows.py @@ -40,7 +40,7 @@ def models(self): def _run(self, models, delta): inputs = pd.DataFrame([{"prevalence": 0.30, "mosquito_delta": delta, **INTERVENTIONS}]) - return estimate_eir_with_mosquito_delta(inputs, models=models).iloc[0] + return estimate_eir_with_mosquito_delta(inputs, eir_models=models).iloc[0] def test_returns_expected_columns(self, models): res = self._run(models, 0.25) @@ -68,6 +68,6 @@ def test_batch_is_monotonic_in_delta(self, models): # a single batched call handles every row and preserves input order deltas = [-0.5, -0.25, 0.0, 0.25, 0.5, 1.0] inputs = pd.DataFrame([{"prevalence": 0.30, "mosquito_delta": d, **INTERVENTIONS} for d in deltas]) - res = estimate_eir_with_mosquito_delta(inputs, models=models) + res = estimate_eir_with_mosquito_delta(inputs, eir_models=models) assert list(res.index) == list(range(len(deltas))) assert list(res["eir_new"]) == sorted(res["eir_new"]) diff --git a/tests/test_scenarios.py b/tests/test_scenarios.py index e986d37..ff03ab2 100644 --- a/tests/test_scenarios.py +++ b/tests/test_scenarios.py @@ -11,11 +11,11 @@ import pytest from estimint.scenarios import ( - _PreparedScenario, + PreparedScenario, _apply_mosquito_delta_batch, _classify_prepared_scenario, _estimate_eir, - _load_eir_hbr_models, + _load_estimint_models, _prepare_scenario_inputs, run_scenarios, ) @@ -32,14 +32,14 @@ def mk(**kwargs: Any) -> Scenario: return Scenario(eir_target=EirTarget(input_value, input_mode), **defaults) -def _estimate_eir_single(scenario: Scenario, eir_models: dict[str, Any]) -> _PreparedScenario: +def _estimate_eir_single(scenario: Scenario, eir_models: dict[str, Any]) -> PreparedScenario: """Estimate EIR for a single scenario via the batch estimator.""" return _estimate_eir([scenario], eir_models)[0] @pytest.fixture(scope="module") def est(): - return _load_eir_hbr_models() + return _load_estimint_models() class TestEstimateEir: @@ -174,11 +174,11 @@ def test_batch_mixed_input_modes(self, est): class TestClassifyPreparedScenario: - def _make_prepared(self, input_mode: str, mosquito_density_change: float = 0.0) -> _PreparedScenario: + def _make_prepared(self, input_mode: str, mosquito_density_change: float = 0.0) -> PreparedScenario: from typing import cast from estimint.types import Input_Mode - return _PreparedScenario( + return PreparedScenario( eir_target=EirTarget(input_value=10.0, input_mode=cast(Input_Mode, input_mode)), mosquito_density_change=mosquito_density_change, eir_model_features={}, diff --git a/train_base.log b/train_base.log deleted file mode 100644 index b9a54a2..0000000 --- a/train_base.log +++ /dev/null @@ -1,9266 +0,0 @@ -[2026-08-05 11:18:52,695][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.0004012116914909676 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:18:53,175][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:18:53,329][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:18:54,617][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:18:54,634][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:18:54,641][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:18:54,666][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:18:54,667][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:18:59,814][estimint.v2.training.train_step][INFO] - Total parameters: 0.16M -[2026-08-05 11:19:07,768][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.00046407414511213577 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:19:08,175][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:19:08,320][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:19:09,374][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:19:09,390][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:19:09,397][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:19:09,422][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:19:09,423][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:19:14,501][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-05 11:22:04,560][__main__][INFO] - test R2=0.9992 RMSE=3.10 MAE=1.18 MSE=9.64 Bias=-0.65 -[2026-08-05 11:22:14,640][__main__][INFO] - Raw 90% interval coverage: 0.9838 -[2026-08-05 11:22:14,640][__main__][INFO] - Conformal 90% interval coverage: 0.9379 -[2026-08-05 11:22:28,865][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.00016850712573697677 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:22:29,352][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:22:29,503][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:22:31,176][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:22:31,201][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:22:31,212][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:22:31,256][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:22:31,257][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:22:37,444][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M -[2026-08-05 11:23:12,446][__main__][INFO] - test R2=0.9987 RMSE=3.89 MAE=1.19 MSE=15.16 Bias=-0.33 -[2026-08-05 11:23:27,073][__main__][INFO] - Raw 90% interval coverage: 0.9806 -[2026-08-05 11:23:27,074][__main__][INFO] - Conformal 90% interval coverage: 0.8940 -[2026-08-05 11:23:38,999][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.0001328455394870772 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:23:39,461][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:23:39,610][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:23:41,010][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:23:41,026][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:23:41,033][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:23:41,064][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:23:41,065][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:23:46,181][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-05 11:26:10,647][__main__][INFO] - test R2=0.9972 RMSE=5.68 MAE=2.03 MSE=32.29 Bias=0.41 -[2026-08-05 11:26:24,734][__main__][INFO] - Raw 90% interval coverage: 0.9741 -[2026-08-05 11:26:24,734][__main__][INFO] - Conformal 90% interval coverage: 0.9037 -[2026-08-05 11:26:44,421][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.007680232298701982 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:26:44,925][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:26:45,088][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:26:47,165][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:26:47,182][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:26:47,190][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:26:47,251][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:26:47,252][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:26:52,511][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-05 11:27:28,407][__main__][INFO] - test R2=0.9987 RMSE=3.90 MAE=1.58 MSE=15.22 Bias=0.03 -[2026-08-05 11:27:38,354][__main__][INFO] - Raw 90% interval coverage: 0.8028 -[2026-08-05 11:27:38,355][__main__][INFO] - Conformal 90% interval coverage: 0.8998 -[2026-08-05 11:27:53,000][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.001551815288237503 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:27:53,483][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:27:53,637][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:27:55,517][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:27:55,532][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:27:55,539][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:27:55,591][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:27:55,592][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:28:00,891][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-05 11:30:51,378][__main__][INFO] - test R2=-0.2084 RMSE=118.95 MAE=58.52 MSE=14148.22 Bias=-49.40 -[2026-08-05 11:31:06,026][__main__][INFO] - Raw 90% interval coverage: 0.5197 -[2026-08-05 11:31:06,026][__main__][INFO] - Conformal 90% interval coverage: 0.8449 -[2026-08-05 11:31:25,934][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.004446198034952427 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:31:26,457][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:31:26,629][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:31:28,757][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:31:28,774][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:31:28,784][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:31:28,821][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:31:28,822][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:31:34,217][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-05 11:31:46,814][__main__][INFO] - test R2=0.9996 RMSE=2.24 MAE=0.86 MSE=5.00 Bias=-0.04 -[2026-08-05 11:31:55,963][__main__][INFO] - Raw 90% interval coverage: 0.6787 -[2026-08-05 11:31:55,964][__main__][INFO] - Conformal 90% interval coverage: 0.8824 -[2026-08-05 11:32:05,233][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.0006702100220539498 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:32:05,682][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:32:05,836][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:32:07,116][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:32:07,131][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:32:07,138][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:32:07,169][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:32:07,169][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:32:12,321][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M -[2026-08-05 11:34:51,319][__main__][INFO] - test R2=0.9923 RMSE=9.50 MAE=3.53 MSE=90.29 Bias=-3.07 -[2026-08-05 11:35:00,512][__main__][INFO] - Raw 90% interval coverage: 0.8785 -[2026-08-05 11:35:00,513][__main__][INFO] - Conformal 90% interval coverage: 0.9276 -[2026-08-05 11:35:16,787][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.0003637141513402766 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:35:17,287][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:35:17,462][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:35:19,396][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:35:19,422][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:35:19,435][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:35:19,471][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:35:19,472][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:35:23,274][__main__][INFO] - test R2=0.9984 RMSE=4.30 MAE=1.42 MSE=18.45 Bias=-0.66 -[2026-08-05 11:35:25,376][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M -[2026-08-05 11:35:32,376][__main__][INFO] - Raw 90% interval coverage: 0.9735 -[2026-08-05 11:35:32,376][__main__][INFO] - Conformal 90% interval coverage: 0.9101 -[2026-08-05 11:35:42,586][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.006938406104605892 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:35:43,027][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:35:43,200][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:35:44,382][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:35:44,398][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:35:44,405][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:35:44,438][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:35:44,439][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:35:49,558][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-05 11:39:11,778][__main__][INFO] - test R2=0.9449 RMSE=25.39 MAE=14.26 MSE=644.80 Bias=-3.68 -[2026-08-05 11:39:26,635][__main__][INFO] - Raw 90% interval coverage: 0.7699 -[2026-08-05 11:39:26,636][__main__][INFO] - Conformal 90% interval coverage: 0.9095 -[2026-08-05 11:39:28,946][__main__][INFO] - test R2=0.9991 RMSE=3.31 MAE=1.04 MSE=10.96 Bias=-0.32 -[2026-08-05 11:39:43,809][__main__][INFO] - Raw 90% interval coverage: 0.9948 -[2026-08-05 11:39:43,810][__main__][INFO] - Conformal 90% interval coverage: 0.9140 -[2026-08-05 11:39:44,224][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.004334471675794304 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:39:44,698][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:39:44,871][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:39:46,845][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:39:46,861][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:39:46,869][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:39:46,917][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:39:46,917][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:39:49,749][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.009165095010178962 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:39:50,161][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:39:50,311][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:39:51,482][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:39:51,499][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:39:51,507][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:39:51,529][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:39:51,529][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:39:52,198][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-05 11:39:56,643][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-05 11:43:34,747][__main__][INFO] - test R2=0.9621 RMSE=21.06 MAE=7.49 MSE=443.51 Bias=-7.22 -[2026-08-05 11:43:44,787][__main__][INFO] - Raw 90% interval coverage: 0.7957 -[2026-08-05 11:43:44,788][__main__][INFO] - Conformal 90% interval coverage: 0.8617 -[2026-08-05 11:43:59,747][__main__][INFO] - test R2=nan RMSE=nan MAE=nan MSE=nan Bias=nan -[2026-08-05 11:44:01,418][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.0006006170659499329 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:44:01,934][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:44:02,099][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:44:04,229][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:44:04,255][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:44:04,266][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:44:04,300][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:44:04,301][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:44:10,219][estimint.v2.training.train_step][INFO] - Total parameters: 2.15M -[2026-08-05 11:44:14,389][__main__][INFO] - Raw 90% interval coverage: 0.0000 -[2026-08-05 11:44:14,389][__main__][INFO] - Conformal 90% interval coverage: 0.0000 -[2026-08-05 11:44:22,279][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.004088626795113247 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:44:22,744][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:44:22,894][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:44:24,171][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:44:24,188][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:44:24,195][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:44:24,232][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:44:24,233][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:44:29,513][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-05 11:47:50,519][__main__][INFO] - test R2=0.9452 RMSE=25.34 MAE=10.50 MSE=642.05 Bias=-9.58 -[2026-08-05 11:48:05,149][__main__][INFO] - Raw 90% interval coverage: 0.7970 -[2026-08-05 11:48:05,149][__main__][INFO] - Conformal 90% interval coverage: 0.8630 -[2026-08-05 11:48:26,885][__main__][INFO] - test R2=0.9704 RMSE=18.63 MAE=7.06 MSE=347.09 Bias=-6.05 -[2026-08-05 11:48:27,564][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.000983266239655992 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:48:28,156][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:48:28,337][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:48:30,670][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:48:30,696][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:48:30,708][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:48:30,749][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:48:30,750][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:48:36,613][estimint.v2.training.train_step][INFO] - Total parameters: 0.16M -[2026-08-05 11:48:40,994][__main__][INFO] - Raw 90% interval coverage: 0.9625 -[2026-08-05 11:48:40,994][__main__][INFO] - Conformal 90% interval coverage: 0.9334 -[2026-08-05 11:48:50,032][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 50 -lr: 0.0009858879144581827 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-05 11:48:50,526][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-05 11:48:50,673][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-05 11:48:51,945][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-05 11:48:51,961][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-05 11:48:51,973][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:48:52,001][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-05 11:48:52,013][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-05 11:48:57,081][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-05 11:51:41,092][__main__][INFO] - test R2=0.9984 RMSE=4.34 MAE=1.33 MSE=18.83 Bias=-0.86 -[2026-08-05 11:51:51,097][__main__][INFO] - Raw 90% interval coverage: 0.9877 -[2026-08-05 11:51:51,098][__main__][INFO] - Conformal 90% interval coverage: 0.9114 -[2026-08-05 11:52:03,099][__main__][INFO] - test R2=0.9952 RMSE=7.50 MAE=2.15 MSE=56.31 Bias=-1.62 -[2026-08-05 11:52:13,040][__main__][INFO] - Raw 90% interval coverage: 0.9832 -[2026-08-05 11:52:13,040][__main__][INFO] - Conformal 90% interval coverage: 0.8940 -[2026-08-06 11:18:05,852][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0023514380765263933 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:18:10,761][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:18:13,168][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:18:14,774][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:18:14,790][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:18:14,799][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:18:14,932][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:18:14,933][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:18:20,209][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 11:19:01,074][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0007379865779939993 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:19:01,299][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:19:01,456][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:19:02,685][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:19:02,709][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:19:02,720][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:19:02,862][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:19:02,863][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:19:08,647][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 11:20:05,301][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00017053299520122637 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:20:05,595][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:20:05,742][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:20:06,956][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:20:06,983][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:20:06,994][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:20:07,131][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:20:07,132][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:20:13,141][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 11:22:15,066][__main__][INFO] - test R2=0.6078 RMSE=67.76 MAE=28.06 MSE=4591.57 Bias=-25.99 Median APE=28.15 Log10 MSE=0.05 -[2026-08-06 11:22:18,584][__main__][INFO] - test R2=0.9995 RMSE=2.50 MAE=0.87 MSE=6.25 Bias=-0.35 Median APE=0.85 Log10 MSE=0.00 -[2026-08-06 11:22:20,670][__main__][INFO] - Raw 90% interval coverage: 0.9974 -[2026-08-06 11:22:20,670][__main__][INFO] - Conformal 90% interval coverage: 0.9244 -[2026-08-06 11:22:24,117][__main__][INFO] - Raw 90% interval coverage: 0.9910 -[2026-08-06 11:22:24,117][__main__][INFO] - Conformal 90% interval coverage: 0.9237 -[2026-08-06 11:22:32,981][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0014722303400395396 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:22:33,189][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:22:33,326][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:22:33,918][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0036683754952090137 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:22:34,100][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:22:34,242][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:22:34,616][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:22:34,633][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:22:34,640][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:22:34,802][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:22:34,803][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:22:35,520][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:22:35,535][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:22:35,543][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:22:35,676][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:22:35,676][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:22:40,023][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 11:22:41,152][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 11:23:47,448][__main__][INFO] - test R2=0.9961 RMSE=110335.27 MAE=31477.99 MSE=12173870080.00 Bias=-29176.05 Median APE=0.72 Log10 MSE=0.00 -[2026-08-06 11:23:51,679][__main__][INFO] - Raw 90% interval coverage: 0.9981 -[2026-08-06 11:23:51,680][__main__][INFO] - Conformal 90% interval coverage: 0.9166 -[2026-08-06 11:23:59,698][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.002727033781484934 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:23:59,894][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:24:00,037][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:24:01,322][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:24:01,339][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:24:01,346][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:24:01,377][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:24:01,378][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:24:06,890][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 11:26:20,449][__main__][INFO] - test R2=0.9995 RMSE=2.34 MAE=0.79 MSE=5.47 Bias=-0.03 Median APE=0.71 Log10 MSE=0.00 -[2026-08-06 11:26:24,456][__main__][INFO] - Raw 90% interval coverage: 0.8455 -[2026-08-06 11:26:24,457][__main__][INFO] - Conformal 90% interval coverage: 0.8862 -[2026-08-06 11:26:30,806][__main__][INFO] - test R2=0.9978 RMSE=5.02 MAE=1.86 MSE=25.23 Bias=-0.17 Median APE=2.09 Log10 MSE=0.00 -[2026-08-06 11:26:35,601][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.004142181192612314 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:26:35,800][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:26:35,944][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:26:36,613][__main__][INFO] - Raw 90% interval coverage: 0.8875 -[2026-08-06 11:26:36,614][__main__][INFO] - Conformal 90% interval coverage: 0.8817 -[2026-08-06 11:26:37,277][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:26:37,293][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:26:37,300][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:26:37,435][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:26:37,435][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:26:42,746][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M -[2026-08-06 11:26:46,107][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00015152485169716946 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:26:46,299][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:26:46,442][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:26:47,568][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:26:47,585][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:26:47,592][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:26:47,726][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:26:47,727][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:26:52,950][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M -[2026-08-06 11:27:54,086][__main__][INFO] - test R2=0.9995 RMSE=39533.89 MAE=13716.68 MSE=1562928128.00 Bias=-2480.86 Median APE=0.91 Log10 MSE=0.00 -[2026-08-06 11:27:59,536][__main__][INFO] - Raw 90% interval coverage: 0.8313 -[2026-08-06 11:27:59,536][__main__][INFO] - Conformal 90% interval coverage: 0.8985 -[2026-08-06 11:28:13,174][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0001051415908692829 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:28:13,400][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:28:13,537][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:28:14,693][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:28:14,709][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:28:14,716][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:28:14,851][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:28:14,852][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:28:20,340][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-06 11:29:48,504][__main__][INFO] - test R2=nan RMSE=nan MAE=nan MSE=nan Bias=nan Median APE=nan Log10 MSE=nan -[2026-08-06 11:29:54,097][__main__][INFO] - Raw 90% interval coverage: 0.8255 -[2026-08-06 11:29:54,097][__main__][INFO] - Conformal 90% interval coverage: 0.8920 -[2026-08-06 11:30:06,787][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0021352300854995776 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:30:06,987][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:30:07,135][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:30:08,513][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:30:08,529][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:30:08,537][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:30:08,688][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:30:08,689][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:30:14,264][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 11:30:44,736][__main__][INFO] - test R2=0.9879 RMSE=11.91 MAE=4.34 MSE=141.84 Bias=-0.77 Median APE=5.22 Log10 MSE=0.00 -[2026-08-06 11:30:50,260][__main__][INFO] - Raw 90% interval coverage: 0.8035 -[2026-08-06 11:30:50,260][__main__][INFO] - Conformal 90% interval coverage: 0.8824 -[2026-08-06 11:30:58,646][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.001609653077733546 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:30:58,852][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:30:58,988][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:31:00,243][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:31:00,259][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:31:00,266][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:31:00,394][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:31:00,395][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:31:05,582][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M -[2026-08-06 11:31:28,133][__main__][INFO] - test R2=0.9643 RMSE=334384.84 MAE=125499.48 MSE=111813222400.00 Bias=24924.13 Median APE=8.01 Log10 MSE=0.00 -[2026-08-06 11:31:33,865][__main__][INFO] - Raw 90% interval coverage: 0.8209 -[2026-08-06 11:31:33,866][__main__][INFO] - Conformal 90% interval coverage: 0.9043 -[2026-08-06 11:31:42,245][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.002420132028142598 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:31:42,502][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:31:42,645][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:31:44,237][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:31:44,254][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:31:44,261][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:31:44,399][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:31:44,400][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:31:49,781][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 11:33:26,303][__main__][INFO] - test R2=0.9949 RMSE=7.76 MAE=3.04 MSE=60.27 Bias=-2.92 Median APE=2.59 Log10 MSE=0.00 -[2026-08-06 11:33:32,050][__main__][INFO] - Raw 90% interval coverage: 0.9644 -[2026-08-06 11:33:32,050][__main__][INFO] - Conformal 90% interval coverage: 0.9198 -[2026-08-06 11:33:42,880][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0017334768951539853 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:33:43,075][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:33:43,210][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:33:44,488][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:33:44,507][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:33:44,514][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:33:44,560][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:33:44,560][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:33:50,029][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 11:34:03,519][__main__][INFO] - test R2=0.9879 RMSE=11.91 MAE=3.88 MSE=141.83 Bias=-3.09 Median APE=2.55 Log10 MSE=0.00 -[2026-08-06 11:34:07,794][__main__][INFO] - Raw 90% interval coverage: 0.9735 -[2026-08-06 11:34:07,794][__main__][INFO] - Conformal 90% interval coverage: 0.9198 -[2026-08-06 11:34:14,409][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.000981759635374673 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:34:14,596][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:34:14,727][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:34:15,850][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:34:15,866][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:34:15,874][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:34:15,909][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:34:15,910][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:34:21,256][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 11:35:26,381][__main__][INFO] - test R2=0.9936 RMSE=142045.89 MAE=49623.05 MSE=20177033216.00 Bias=-46813.19 Median APE=1.60 Log10 MSE=0.00 -[2026-08-06 11:35:30,493][__main__][INFO] - Raw 90% interval coverage: 0.9871 -[2026-08-06 11:35:30,493][__main__][INFO] - Conformal 90% interval coverage: 0.9166 -[2026-08-06 11:35:38,828][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00014112059169343874 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:35:39,020][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:35:39,157][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:35:40,339][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:35:40,356][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:35:40,363][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:35:40,497][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:35:40,497][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:35:46,034][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 11:37:00,905][__main__][INFO] - test R2=0.9995 RMSE=2.52 MAE=0.96 MSE=6.35 Bias=-0.13 Median APE=1.45 Log10 MSE=0.00 -[2026-08-06 11:37:06,488][__main__][INFO] - Raw 90% interval coverage: 0.9897 -[2026-08-06 11:37:06,488][__main__][INFO] - Conformal 90% interval coverage: 0.9005 -[2026-08-06 11:37:19,312][__main__][INFO] - test R2=0.9905 RMSE=10.54 MAE=3.47 MSE=111.04 Bias=-2.58 Median APE=2.72 Log10 MSE=0.00 -[2026-08-06 11:37:19,656][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.002851269615028461 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:37:19,881][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:37:20,037][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:37:21,315][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:37:21,339][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:37:21,350][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:37:21,391][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:37:21,392][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:37:23,481][__main__][INFO] - Raw 90% interval coverage: 0.9438 -[2026-08-06 11:37:23,481][__main__][INFO] - Conformal 90% interval coverage: 0.8959 -[2026-08-06 11:37:27,088][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 11:37:30,080][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0034210310888261024 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:37:30,282][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:37:30,422][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:37:31,567][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:37:31,583][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:37:31,591][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:37:31,621][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:37:31,622][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:37:36,931][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 11:39:18,199][__main__][INFO] - test R2=0.9996 RMSE=36263.48 MAE=12020.02 MSE=1315039616.00 Bias=-1048.68 Median APE=0.58 Log10 MSE=0.00 -[2026-08-06 11:39:22,629][__main__][INFO] - Raw 90% interval coverage: 0.8242 -[2026-08-06 11:39:22,629][__main__][INFO] - Conformal 90% interval coverage: 0.8571 -[2026-08-06 11:39:32,278][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.002422704101096793 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:39:32,480][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:39:32,623][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:39:34,301][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:39:34,318][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:39:34,326][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:39:34,361][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:39:34,362][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:39:39,860][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 11:40:26,641][__main__][INFO] - test R2=0.9828 RMSE=14.18 MAE=4.77 MSE=201.20 Bias=-4.30 Median APE=1.69 Log10 MSE=0.00 -[2026-08-06 11:40:30,780][__main__][INFO] - Raw 90% interval coverage: 0.9929 -[2026-08-06 11:40:30,781][__main__][INFO] - Conformal 90% interval coverage: 0.9179 -[2026-08-06 11:40:38,130][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00031827554540004807 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:40:38,329][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:40:38,469][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:40:39,955][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:40:39,971][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:40:39,978][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:40:40,017][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:40:40,018][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:40:45,328][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M -[2026-08-06 11:40:45,822][__main__][INFO] - test R2=0.9974 RMSE=5.53 MAE=2.06 MSE=30.58 Bias=0.25 Median APE=2.29 Log10 MSE=0.00 -[2026-08-06 11:40:51,458][__main__][INFO] - Raw 90% interval coverage: 0.9224 -[2026-08-06 11:40:51,458][__main__][INFO] - Conformal 90% interval coverage: 0.9030 -[2026-08-06 11:40:59,075][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00953693007551666 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:40:59,261][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:40:59,394][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:41:00,610][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:41:00,626][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:41:00,633][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:41:00,656][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:41:00,657][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:41:05,763][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 11:42:33,975][__main__][INFO] - test R2=0.9963 RMSE=107001.98 MAE=31046.33 MSE=11449424896.00 Bias=-28197.83 Median APE=0.77 Log10 MSE=0.00 -[2026-08-06 11:42:38,074][__main__][INFO] - Raw 90% interval coverage: 0.9858 -[2026-08-06 11:42:38,075][__main__][INFO] - Conformal 90% interval coverage: 0.8959 -[2026-08-06 11:42:48,947][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00012488033688135447 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:42:49,175][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:42:49,317][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:42:50,841][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:42:50,858][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:42:50,865][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:42:50,884][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:42:50,885][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:42:56,412][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 11:43:45,403][__main__][INFO] - test R2=0.9968 RMSE=6.12 MAE=1.93 MSE=37.49 Bias=-1.58 Median APE=1.01 Log10 MSE=0.00 -[2026-08-06 11:43:49,567][__main__][INFO] - Raw 90% interval coverage: 0.9974 -[2026-08-06 11:43:49,568][__main__][INFO] - Conformal 90% interval coverage: 0.9205 -[2026-08-06 11:43:57,833][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00021884075795472067 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:43:58,025][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:43:58,168][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:43:59,289][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:43:59,304][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:43:59,312][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:43:59,338][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:43:59,338][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:44:04,608][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 11:44:14,076][__main__][INFO] - test R2=0.9881 RMSE=11.80 MAE=4.55 MSE=139.30 Bias=3.18 Median APE=4.36 Log10 MSE=0.00 -[2026-08-06 11:44:19,636][__main__][INFO] - Raw 90% interval coverage: 0.9392 -[2026-08-06 11:44:19,637][__main__][INFO] - Conformal 90% interval coverage: 0.8778 -[2026-08-06 11:44:27,788][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.001391965685384743 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:44:27,973][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:44:28,115][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:44:29,298][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:44:29,314][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:44:29,322][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:44:29,360][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:44:29,361][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:44:34,529][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 11:45:49,586][__main__][INFO] - test R2=0.9989 RMSE=58364.02 MAE=21582.39 MSE=3406359296.00 Bias=-5236.52 Median APE=0.93 Log10 MSE=0.00 -[2026-08-06 11:45:53,719][__main__][INFO] - Raw 90% interval coverage: 0.8500 -[2026-08-06 11:45:53,720][__main__][INFO] - Conformal 90% interval coverage: 0.8694 -[2026-08-06 11:46:00,985][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0003975362216761093 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:46:01,186][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:46:01,318][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:46:02,458][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:46:02,474][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:46:02,481][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:46:02,505][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:46:02,506][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:46:07,758][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 11:47:53,498][__main__][INFO] - test R2=0.9991 RMSE=3.33 MAE=0.99 MSE=11.08 Bias=-0.16 Median APE=1.07 Log10 MSE=0.00 -[2026-08-06 11:47:59,039][__main__][INFO] - Raw 90% interval coverage: 0.9761 -[2026-08-06 11:47:59,039][__main__][INFO] - Conformal 90% interval coverage: 0.9211 -[2026-08-06 11:48:07,249][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0010587985021800752 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:48:07,452][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:48:07,597][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:48:08,903][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:48:08,919][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:48:08,926][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:48:08,974][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:48:08,975][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:48:10,520][__main__][INFO] - test R2=0.9940 RMSE=8.39 MAE=2.85 MSE=70.38 Bias=-1.85 Median APE=2.45 Log10 MSE=0.00 -[2026-08-06 11:48:14,557][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M -[2026-08-06 11:48:14,616][__main__][INFO] - Raw 90% interval coverage: 0.8940 -[2026-08-06 11:48:14,616][__main__][INFO] - Conformal 90% interval coverage: 0.8765 -[2026-08-06 11:48:19,518][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.002976262270399795 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:48:19,700][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:48:19,839][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:48:20,965][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:48:20,982][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:48:20,990][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:48:21,013][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:48:21,014][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:48:26,236][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M -[2026-08-06 11:49:55,271][__main__][INFO] - test R2=0.9979 RMSE=81573.70 MAE=24968.82 MSE=6654267392.00 Bias=-10578.96 Median APE=1.04 Log10 MSE=0.00 -[2026-08-06 11:50:00,970][__main__][INFO] - Raw 90% interval coverage: 0.7944 -[2026-08-06 11:50:00,971][__main__][INFO] - Conformal 90% interval coverage: 0.9218 -[2026-08-06 11:50:11,007][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0016868031484292073 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:50:11,203][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:50:11,346][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:50:12,586][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:50:12,604][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:50:12,611][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:50:12,638][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:50:12,639][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:50:18,197][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M -[2026-08-06 11:51:34,815][__main__][INFO] - test R2=0.9913 RMSE=10.07 MAE=3.79 MSE=101.36 Bias=0.90 Median APE=4.17 Log10 MSE=0.00 -[2026-08-06 11:51:40,387][__main__][INFO] - Raw 90% interval coverage: 0.9586 -[2026-08-06 11:51:40,387][__main__][INFO] - Conformal 90% interval coverage: 0.8946 -[2026-08-06 11:51:50,041][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0021503405830990575 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:51:50,239][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:51:50,377][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:51:51,694][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:51:51,710][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:51:51,717][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:51:51,742][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:51:51,742][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:51:54,589][__main__][INFO] - test R2=0.9926 RMSE=9.33 MAE=3.05 MSE=86.98 Bias=-2.91 Median APE=1.05 Log10 MSE=0.00 -[2026-08-06 11:51:57,143][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 11:51:58,860][__main__][INFO] - Raw 90% interval coverage: 0.9683 -[2026-08-06 11:51:58,860][__main__][INFO] - Conformal 90% interval coverage: 0.9198 -[2026-08-06 11:52:06,172][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.000288450940611043 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:52:06,386][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:52:06,523][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:52:07,754][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:52:07,770][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:52:07,778][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:52:07,821][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:52:07,821][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:52:13,260][estimint.v2.training.train_step][INFO] - Total parameters: 2.15M -[2026-08-06 11:53:24,257][__main__][INFO] - test R2=0.9832 RMSE=229491.88 MAE=98780.10 MSE=52666519552.00 Bias=-77796.16 Median APE=9.65 Log10 MSE=0.00 -[2026-08-06 11:53:29,954][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 11:53:29,954][__main__][INFO] - Conformal 90% interval coverage: 0.9069 -[2026-08-06 11:53:41,404][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0008321860870387337 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:53:41,602][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:53:41,737][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:53:43,149][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:53:43,167][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:53:43,175][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:53:43,196][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:53:43,197][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:53:48,523][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 11:54:57,685][__main__][INFO] - test R2=0.9801 RMSE=15.26 MAE=5.13 MSE=233.01 Bias=-4.56 Median APE=2.87 Log10 MSE=0.00 -[2026-08-06 11:55:01,989][__main__][INFO] - Raw 90% interval coverage: 0.9573 -[2026-08-06 11:55:01,989][__main__][INFO] - Conformal 90% interval coverage: 0.9024 -[2026-08-06 11:55:12,738][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.002345828089515989 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:55:12,934][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:55:13,074][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:55:14,362][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:55:14,378][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:55:14,386][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:55:14,410][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:55:14,411][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:55:19,596][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M -[2026-08-06 11:56:07,492][__main__][INFO] - test R2=0.9667 RMSE=19.75 MAE=7.19 MSE=389.97 Bias=-3.94 Median APE=3.69 Log10 MSE=0.00 -[2026-08-06 11:56:13,049][__main__][INFO] - Raw 90% interval coverage: 0.9948 -[2026-08-06 11:56:13,050][__main__][INFO] - Conformal 90% interval coverage: 0.9050 -[2026-08-06 11:56:20,055][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0015352941130162617 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:56:20,264][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:56:20,404][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:56:21,703][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:56:21,719][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:56:21,726][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:56:21,759][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:56:21,759][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:56:26,925][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 11:57:39,487][__main__][INFO] - test R2=0.9996 RMSE=33670.55 MAE=12060.33 MSE=1133705856.00 Bias=-7904.70 Median APE=0.79 Log10 MSE=0.00 -[2026-08-06 11:57:45,096][__main__][INFO] - Raw 90% interval coverage: 0.9825 -[2026-08-06 11:57:45,097][__main__][INFO] - Conformal 90% interval coverage: 0.8578 -[2026-08-06 11:57:56,064][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0019659022506878896 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:57:56,288][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:57:56,425][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:57:57,823][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:57:57,840][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:57:57,848][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:57:57,868][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 11:57:57,869][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:58:03,460][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 11:58:54,066][__main__][INFO] - test R2=0.9881 RMSE=11.81 MAE=4.03 MSE=139.56 Bias=-3.45 Median APE=2.52 Log10 MSE=0.00 -[2026-08-06 11:58:58,279][__main__][INFO] - Raw 90% interval coverage: 0.9095 -[2026-08-06 11:58:58,279][__main__][INFO] - Conformal 90% interval coverage: 0.8836 -[2026-08-06 11:59:06,411][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0003995439774577304 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:59:06,607][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:59:06,744][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:59:07,944][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:59:07,960][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:59:07,968][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 11:59:08,002][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 11:59:08,003][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:59:13,203][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 11:59:27,212][__main__][INFO] - test R2=0.9956 RMSE=7.14 MAE=2.14 MSE=50.95 Bias=-1.94 Median APE=1.00 Log10 MSE=0.00 -[2026-08-06 11:59:31,314][__main__][INFO] - Raw 90% interval coverage: 0.9910 -[2026-08-06 11:59:31,314][__main__][INFO] - Conformal 90% interval coverage: 0.9076 -[2026-08-06 11:59:39,832][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00013140853946132288 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 11:59:40,031][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 11:59:40,175][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 11:59:41,325][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 11:59:41,341][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 11:59:41,348][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:59:41,372][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 11:59:41,373][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 11:59:46,703][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 12:01:34,262][__main__][INFO] - test R2=0.9917 RMSE=161390.00 MAE=57528.61 MSE=26046732288.00 Bias=-55794.23 Median APE=1.02 Log10 MSE=0.00 -[2026-08-06 12:01:38,504][__main__][INFO] - Raw 90% interval coverage: 0.8824 -[2026-08-06 12:01:38,505][__main__][INFO] - Conformal 90% interval coverage: 0.8824 -[2026-08-06 12:01:48,092][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0021894429089891966 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:01:48,288][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:01:48,426][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:01:49,710][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:01:49,727][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:01:49,734][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:01:49,763][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:01:49,763][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:01:55,280][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 12:03:04,485][__main__][INFO] - test R2=0.9967 RMSE=6.23 MAE=2.28 MSE=38.80 Bias=-0.45 Median APE=2.24 Log10 MSE=0.00 -[2026-08-06 12:03:10,033][__main__][INFO] - Raw 90% interval coverage: 0.9205 -[2026-08-06 12:03:10,033][__main__][INFO] - Conformal 90% interval coverage: 0.8765 -[2026-08-06 12:03:18,571][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0016422055369937766 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:03:18,770][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:03:18,916][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:03:20,167][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:03:20,183][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:03:20,190][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:03:20,214][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:03:20,214][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:03:25,532][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M -[2026-08-06 12:03:37,046][__main__][INFO] - test R2=0.9964 RMSE=6.51 MAE=2.15 MSE=42.44 Bias=0.02 Median APE=2.29 Log10 MSE=0.00 -[2026-08-06 12:03:42,511][__main__][INFO] - Raw 90% interval coverage: 0.7369 -[2026-08-06 12:03:42,511][__main__][INFO] - Conformal 90% interval coverage: 0.8571 -[2026-08-06 12:03:52,078][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004150462995383971 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:03:52,267][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:03:52,401][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:03:53,519][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:03:53,535][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:03:53,543][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:03:53,573][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:03:53,574][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:03:59,104][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M -[2026-08-06 12:05:44,418][__main__][INFO] - test R2=0.9942 RMSE=134547.95 MAE=47341.89 MSE=18103150592.00 Bias=28817.83 Median APE=2.60 Log10 MSE=0.00 -[2026-08-06 12:05:49,920][__main__][INFO] - Raw 90% interval coverage: 0.9948 -[2026-08-06 12:05:49,921][__main__][INFO] - Conformal 90% interval coverage: 0.8869 -[2026-08-06 12:06:00,806][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0029566952482200557 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:06:01,028][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:06:01,168][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:06:02,491][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:06:02,508][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:06:02,516][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:06:02,561][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:06:02,563][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:06:07,937][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M -[2026-08-06 12:07:00,098][__main__][INFO] - test R2=0.9971 RMSE=5.82 MAE=1.77 MSE=33.91 Bias=-1.55 Median APE=0.85 Log10 MSE=0.00 -[2026-08-06 12:07:04,248][__main__][INFO] - Raw 90% interval coverage: 0.9897 -[2026-08-06 12:07:04,248][__main__][INFO] - Conformal 90% interval coverage: 0.9095 -[2026-08-06 12:07:15,001][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004094909932097586 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:07:15,194][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:07:15,340][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:07:16,379][__main__][INFO] - test R2=0.9739 RMSE=17.49 MAE=7.38 MSE=305.81 Bias=-5.28 Median APE=11.48 Log10 MSE=0.01 -[2026-08-06 12:07:16,494][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:07:16,510][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:07:16,517][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:07:16,537][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:07:16,537][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:07:21,871][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 12:07:21,871][__main__][INFO] - Conformal 90% interval coverage: 0.9082 -[2026-08-06 12:07:22,076][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 12:07:29,111][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.000914560671627941 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:07:29,301][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:07:29,444][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:07:30,707][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:07:30,723][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:07:30,731][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:07:30,774][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:07:30,774][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:07:35,975][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 12:09:05,096][__main__][INFO] - test R2=0.9997 RMSE=31221.91 MAE=10062.96 MSE=974807808.00 Bias=-4314.28 Median APE=0.56 Log10 MSE=0.00 -[2026-08-06 12:09:09,468][__main__][INFO] - Raw 90% interval coverage: 0.8649 -[2026-08-06 12:09:09,468][__main__][INFO] - Conformal 90% interval coverage: 0.9270 -[2026-08-06 12:09:21,936][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00027831097550714824 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:09:22,173][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:09:22,333][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:09:24,023][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:09:24,041][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:09:24,049][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:09:24,080][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:09:24,081][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:09:29,560][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 12:10:33,257][__main__][INFO] - test R2=0.9987 RMSE=3.88 MAE=1.14 MSE=15.08 Bias=-0.48 Median APE=0.84 Log10 MSE=0.00 -[2026-08-06 12:10:38,680][__main__][INFO] - Raw 90% interval coverage: 0.9922 -[2026-08-06 12:10:38,680][__main__][INFO] - Conformal 90% interval coverage: 0.9186 -[2026-08-06 12:10:47,366][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0025579008467657574 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:10:47,558][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:10:47,693][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:10:48,867][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:10:48,883][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:10:48,890][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:10:48,921][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:10:48,921][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:10:54,236][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M -[2026-08-06 12:11:26,440][__main__][INFO] - test R2=0.9979 RMSE=4.99 MAE=2.01 MSE=24.94 Bias=0.21 Median APE=2.32 Log10 MSE=0.00 -[2026-08-06 12:11:32,125][__main__][INFO] - Raw 90% interval coverage: 0.9211 -[2026-08-06 12:11:32,125][__main__][INFO] - Conformal 90% interval coverage: 0.8843 -[2026-08-06 12:11:41,444][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004774559957942644 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:11:41,638][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:11:41,784][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:11:42,935][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:11:42,951][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:11:42,959][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:11:42,982][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:11:42,982][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:11:48,141][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 12:12:26,756][__main__][INFO] - test R2=0.9993 RMSE=47000.61 MAE=15584.15 MSE=2209057024.00 Bias=-3803.94 Median APE=0.87 Log10 MSE=0.00 -[2026-08-06 12:12:30,885][__main__][INFO] - Raw 90% interval coverage: 0.8591 -[2026-08-06 12:12:30,885][__main__][INFO] - Conformal 90% interval coverage: 0.8694 -[2026-08-06 12:12:40,303][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00010399086654302044 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:12:40,501][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:12:40,642][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:12:41,750][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:12:41,767][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:12:41,775][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:12:41,804][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:12:41,804][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:12:47,208][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 12:14:34,146][__main__][INFO] - test R2=0.9942 RMSE=8.24 MAE=2.83 MSE=67.93 Bias=-2.64 Median APE=1.70 Log10 MSE=0.00 -[2026-08-06 12:14:38,393][__main__][INFO] - Raw 90% interval coverage: 0.9489 -[2026-08-06 12:14:38,393][__main__][INFO] - Conformal 90% interval coverage: 0.8824 -[2026-08-06 12:14:46,110][__main__][INFO] - test R2=0.9947 RMSE=7.87 MAE=2.75 MSE=61.93 Bias=-1.89 Median APE=2.46 Log10 MSE=0.00 -[2026-08-06 12:14:50,213][__main__][INFO] - Raw 90% interval coverage: 0.9586 -[2026-08-06 12:14:50,213][__main__][INFO] - Conformal 90% interval coverage: 0.8985 -[2026-08-06 12:14:52,177][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.002257300877040622 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:14:52,378][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:14:52,516][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:14:53,942][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:14:53,958][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:14:53,966][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:14:53,997][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:14:53,997][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:14:58,049][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0007855011465892996 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:14:58,246][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:14:58,383][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:14:59,161][estimint.v2.training.train_step][INFO] - Total parameters: 0.16M -[2026-08-06 12:14:59,456][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:14:59,471][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:14:59,479][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:14:59,519][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:14:59,520][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:15:04,966][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 12:15:53,046][__main__][INFO] - test R2=0.9953 RMSE=121374.04 MAE=40694.46 MSE=14731658240.00 Bias=-6468.00 Median APE=2.25 Log10 MSE=0.00 -[2026-08-06 12:15:58,590][__main__][INFO] - Raw 90% interval coverage: 0.9948 -[2026-08-06 12:15:58,590][__main__][INFO] - Conformal 90% interval coverage: 0.9282 -[2026-08-06 12:16:10,440][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.009403451162532304 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:16:10,673][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:16:10,817][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:16:12,067][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:16:12,086][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:16:12,093][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:16:12,113][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:16:12,113][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:16:17,601][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 12:17:57,692][__main__][INFO] - test R2=0.9964 RMSE=6.52 MAE=2.12 MSE=42.48 Bias=-1.97 Median APE=1.02 Log10 MSE=0.00 -[2026-08-06 12:18:01,840][__main__][INFO] - Raw 90% interval coverage: 0.9890 -[2026-08-06 12:18:01,840][__main__][INFO] - Conformal 90% interval coverage: 0.9056 -[2026-08-06 12:18:03,298][__main__][INFO] - test R2=0.9932 RMSE=8.90 MAE=2.99 MSE=79.22 Bias=-1.88 Median APE=2.53 Log10 MSE=0.00 -[2026-08-06 12:18:07,394][__main__][INFO] - Raw 90% interval coverage: 0.9444 -[2026-08-06 12:18:07,394][__main__][INFO] - Conformal 90% interval coverage: 0.8785 -[2026-08-06 12:18:15,091][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0008278119239003903 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:18:15,091][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.001340227449947289 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:18:15,337][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:18:15,412][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:18:15,565][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:18:15,580][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:18:17,022][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:18:17,027][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:18:17,038][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:18:17,043][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:18:17,045][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:18:17,051][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:18:17,090][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:18:17,091][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:18:17,092][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:18:17,092][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:18:22,299][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 12:18:22,481][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M -[2026-08-06 12:19:52,260][__main__][INFO] - test R2=0.8026 RMSE=786719.12 MAE=292020.72 MSE=618926964736.00 Bias=-254070.38 Median APE=22.36 Log10 MSE=0.02 -[2026-08-06 12:19:56,535][__main__][INFO] - Raw 90% interval coverage: 0.9974 -[2026-08-06 12:19:56,536][__main__][INFO] - Conformal 90% interval coverage: 0.9198 -[2026-08-06 12:20:03,596][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00011081662038556644 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:20:03,823][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:20:03,963][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:20:05,623][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:20:05,641][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:20:05,648][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:20:05,694][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:20:05,695][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:20:11,081][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 12:21:55,139][__main__][INFO] - test R2=0.9922 RMSE=9.53 MAE=3.25 MSE=90.86 Bias=-3.15 Median APE=1.52 Log10 MSE=0.00 -[2026-08-06 12:21:57,427][__main__][INFO] - test R2=0.9935 RMSE=8.74 MAE=2.89 MSE=76.42 Bias=-1.58 Median APE=2.63 Log10 MSE=0.00 -[2026-08-06 12:21:59,311][__main__][INFO] - Raw 90% interval coverage: 0.9922 -[2026-08-06 12:21:59,312][__main__][INFO] - Conformal 90% interval coverage: 0.9211 -[2026-08-06 12:22:01,560][__main__][INFO] - Raw 90% interval coverage: 0.9276 -[2026-08-06 12:22:01,561][__main__][INFO] - Conformal 90% interval coverage: 0.8836 -[2026-08-06 12:22:12,008][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005311123681289737 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:22:12,008][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0003324545641539456 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:22:12,246][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:22:12,318][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:22:12,490][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:22:12,495][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:22:13,907][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:22:13,911][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:22:13,931][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:22:13,936][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:22:13,942][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:22:13,946][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:22:13,991][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:22:13,993][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:22:13,993][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:22:13,994][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:22:19,643][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M -[2026-08-06 12:22:19,889][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M -[2026-08-06 12:23:19,984][__main__][INFO] - test R2=0.9992 RMSE=48815.74 MAE=16803.50 MSE=2382976768.00 Bias=-6537.09 Median APE=0.85 Log10 MSE=0.00 -[2026-08-06 12:23:25,716][__main__][INFO] - Raw 90% interval coverage: 0.9955 -[2026-08-06 12:23:25,716][__main__][INFO] - Conformal 90% interval coverage: 0.9308 -[2026-08-06 12:23:35,657][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00031886584522886974 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:23:35,860][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:23:35,996][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:23:37,223][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:23:37,240][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:23:37,248][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:23:37,270][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:23:37,270][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:23:42,542][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 12:25:54,561][__main__][INFO] - test R2=0.9912 RMSE=10.17 MAE=3.42 MSE=103.34 Bias=-2.49 Median APE=2.50 Log10 MSE=0.00 -[2026-08-06 12:25:57,807][__main__][INFO] - test R2=0.9845 RMSE=13.46 MAE=4.19 MSE=181.18 Bias=-4.04 Median APE=1.34 Log10 MSE=0.00 -[2026-08-06 12:25:58,733][__main__][INFO] - Raw 90% interval coverage: 0.9780 -[2026-08-06 12:25:58,733][__main__][INFO] - Conformal 90% interval coverage: 0.9114 -[2026-08-06 12:26:01,968][__main__][INFO] - Raw 90% interval coverage: 0.9955 -[2026-08-06 12:26:01,968][__main__][INFO] - Conformal 90% interval coverage: 0.8869 -[2026-08-06 12:26:09,041][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005119118786535208 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:26:09,073][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0012751270294813473 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:26:09,307][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:26:09,383][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:26:09,544][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:26:09,563][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:26:11,028][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:26:11,044][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:26:11,052][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:26:11,063][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:26:11,078][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:26:11,086][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:26:11,089][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:26:11,089][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:26:11,108][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:26:11,108][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:26:16,293][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 12:26:16,595][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 12:26:40,986][__main__][INFO] - test R2=0.9996 RMSE=33182.84 MAE=10937.21 MSE=1101100672.00 Bias=4399.64 Median APE=0.61 Log10 MSE=0.00 -[2026-08-06 12:26:45,035][__main__][INFO] - Raw 90% interval coverage: 0.8500 -[2026-08-06 12:26:45,035][__main__][INFO] - Conformal 90% interval coverage: 0.8824 -[2026-08-06 12:26:50,575][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005564287212555498 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:26:50,763][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:26:50,898][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:26:52,046][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:26:52,062][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:26:52,070][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:26:52,092][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:26:52,093][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:26:57,488][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-06 12:29:51,347][__main__][INFO] - test R2=0.9961 RMSE=6.74 MAE=2.03 MSE=45.41 Bias=-1.86 Median APE=0.92 Log10 MSE=0.00 -[2026-08-06 12:29:55,611][__main__][INFO] - Raw 90% interval coverage: 0.9716 -[2026-08-06 12:29:55,611][__main__][INFO] - Conformal 90% interval coverage: 0.9134 -[2026-08-06 12:30:05,198][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0011122922481898575 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:30:05,396][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:30:05,535][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:30:06,207][__main__][INFO] - test R2=0.9968 RMSE=6.07 MAE=2.27 MSE=36.89 Bias=-0.15 Median APE=2.33 Log10 MSE=0.00 -[2026-08-06 12:30:06,824][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:30:06,840][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:30:06,856][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:30:06,899][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:30:06,900][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:30:07,100][__main__][INFO] - test R2=0.9991 RMSE=53163.04 MAE=17488.08 MSE=2826308864.00 Bias=-9027.60 Median APE=0.77 Log10 MSE=0.00 -[2026-08-06 12:30:11,813][__main__][INFO] - Raw 90% interval coverage: 0.9522 -[2026-08-06 12:30:11,814][__main__][INFO] - Conformal 90% interval coverage: 0.8979 -[2026-08-06 12:30:12,444][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 12:30:12,851][__main__][INFO] - Raw 90% interval coverage: 0.9974 -[2026-08-06 12:30:12,851][__main__][INFO] - Conformal 90% interval coverage: 0.9063 -[2026-08-06 12:30:21,722][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00034558352846492026 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:30:21,794][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0018197790445993248 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:30:21,950][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:30:22,035][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:30:22,199][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:30:22,214][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:30:23,630][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:30:23,648][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:30:23,655][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:30:23,680][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:30:23,680][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:30:23,762][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:30:23,778][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:30:23,786][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:30:23,804][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:30:23,805][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:30:28,996][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 12:30:29,203][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-06 12:33:47,825][__main__][INFO] - test R2=0.9956 RMSE=7.22 MAE=2.32 MSE=52.06 Bias=-2.19 Median APE=0.84 Log10 MSE=0.00 -[2026-08-06 12:33:51,919][__main__][INFO] - Raw 90% interval coverage: 0.9787 -[2026-08-06 12:33:51,919][__main__][INFO] - Conformal 90% interval coverage: 0.9147 -[2026-08-06 12:34:01,971][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00012361631937720185 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:34:02,178][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:34:02,318][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:34:03,551][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:34:03,566][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:34:03,574][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:34:03,706][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:34:03,706][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:34:09,177][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 12:34:18,003][__main__][INFO] - test R2=0.9997 RMSE=30708.52 MAE=9173.88 MSE=943013120.00 Bias=-2294.55 Median APE=0.43 Log10 MSE=0.00 -[2026-08-06 12:34:19,366][__main__][INFO] - test R2=0.9970 RMSE=5.90 MAE=2.12 MSE=34.80 Bias=0.05 Median APE=2.14 Log10 MSE=0.00 -[2026-08-06 12:34:23,698][__main__][INFO] - Raw 90% interval coverage: 0.8688 -[2026-08-06 12:34:23,698][__main__][INFO] - Conformal 90% interval coverage: 0.9005 -[2026-08-06 12:34:25,096][__main__][INFO] - Raw 90% interval coverage: 0.8992 -[2026-08-06 12:34:25,097][__main__][INFO] - Conformal 90% interval coverage: 0.8559 -[2026-08-06 12:34:29,124][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0015772020238424458 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:34:29,320][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:34:29,455][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:34:30,611][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:34:30,630][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:34:30,637][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:34:30,778][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:34:30,778][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:34:34,024][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0016644815855968455 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:34:34,206][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:34:34,347][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:34:35,565][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:34:35,581][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:34:35,589][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:34:35,715][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:34:35,716][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:34:36,171][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 12:34:40,944][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 12:37:40,850][__main__][INFO] - test R2=0.9908 RMSE=10.37 MAE=3.37 MSE=107.48 Bias=-1.83 Median APE=2.76 Log10 MSE=0.00 -[2026-08-06 12:37:45,039][__main__][INFO] - Raw 90% interval coverage: 0.9392 -[2026-08-06 12:37:45,039][__main__][INFO] - Conformal 90% interval coverage: 0.8901 -[2026-08-06 12:37:53,818][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0003381934932484014 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:37:54,039][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:37:54,174][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:37:55,414][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:37:55,432][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:37:55,440][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:37:55,468][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:37:55,469][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:38:00,851][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 12:38:03,363][__main__][INFO] - test R2=0.9996 RMSE=2.13 MAE=0.78 MSE=4.55 Bias=0.06 Median APE=0.92 Log10 MSE=0.00 -[2026-08-06 12:38:09,043][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 12:38:09,044][__main__][INFO] - Conformal 90% interval coverage: 0.9140 -[2026-08-06 12:38:15,649][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005707859318296529 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:38:15,832][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:38:15,972][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:38:17,118][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:38:17,134][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:38:17,141][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:38:17,169][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:38:17,169][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:38:22,391][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M -[2026-08-06 12:38:27,052][__main__][INFO] - test R2=0.9903 RMSE=174041.92 MAE=56375.89 MSE=30290591744.00 Bias=-34114.22 Median APE=3.12 Log10 MSE=0.00 -[2026-08-06 12:38:32,805][__main__][INFO] - Raw 90% interval coverage: 0.9502 -[2026-08-06 12:38:32,806][__main__][INFO] - Conformal 90% interval coverage: 0.9392 -[2026-08-06 12:38:41,858][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006841928318514862 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:38:42,051][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:38:42,194][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:38:43,322][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:38:43,339][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:38:43,346][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:38:43,366][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:38:43,366][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:38:48,610][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 12:41:09,363][__main__][INFO] - test R2=0.9966 RMSE=6.31 MAE=2.30 MSE=39.76 Bias=-0.43 Median APE=2.42 Log10 MSE=0.00 -[2026-08-06 12:41:14,975][__main__][INFO] - Raw 90% interval coverage: 0.9334 -[2026-08-06 12:41:14,975][__main__][INFO] - Conformal 90% interval coverage: 0.8817 -[2026-08-06 12:41:26,013][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0008085430940180454 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:41:26,230][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:41:26,366][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:41:27,618][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:41:27,633][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:41:27,641][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:41:27,674][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:41:27,675][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:41:32,908][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 12:42:04,495][__main__][INFO] - test R2=0.9962 RMSE=6.66 MAE=2.02 MSE=44.34 Bias=-1.79 Median APE=0.78 Log10 MSE=0.00 -[2026-08-06 12:42:08,732][__main__][INFO] - Raw 90% interval coverage: 0.9864 -[2026-08-06 12:42:08,732][__main__][INFO] - Conformal 90% interval coverage: 0.9367 -[2026-08-06 12:42:17,690][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00023828923146847417 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:42:17,918][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:42:18,063][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:42:19,697][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:42:19,713][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:42:19,721][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:42:19,750][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:42:19,750][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:42:22,267][__main__][INFO] - test R2=0.9996 RMSE=33458.53 MAE=10436.27 MSE=1119473152.00 Bias=1899.59 Median APE=0.42 Log10 MSE=0.00 -[2026-08-06 12:42:25,279][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 12:42:26,322][__main__][INFO] - Raw 90% interval coverage: 0.7763 -[2026-08-06 12:42:26,322][__main__][INFO] - Conformal 90% interval coverage: 0.8565 -[2026-08-06 12:42:37,817][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00012296532147675816 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:42:38,019][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:42:38,160][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:42:39,440][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:42:39,457][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:42:39,464][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:42:39,483][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:42:39,484][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:42:45,093][estimint.v2.training.train_step][INFO] - Total parameters: 2.15M -[2026-08-06 12:45:22,361][__main__][INFO] - test R2=0.9976 RMSE=5.31 MAE=1.58 MSE=28.23 Bias=-1.26 Median APE=0.76 Log10 MSE=0.00 -[2026-08-06 12:45:22,867][__main__][INFO] - test R2=0.9939 RMSE=8.42 MAE=3.24 MSE=70.87 Bias=0.91 Median APE=3.22 Log10 MSE=0.00 -[2026-08-06 12:45:26,416][__main__][INFO] - Raw 90% interval coverage: 0.9974 -[2026-08-06 12:45:26,417][__main__][INFO] - Conformal 90% interval coverage: 0.9257 -[2026-08-06 12:45:28,587][__main__][INFO] - Raw 90% interval coverage: 0.9670 -[2026-08-06 12:45:28,587][__main__][INFO] - Conformal 90% interval coverage: 0.9263 -[2026-08-06 12:45:37,571][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.001401565434879452 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:45:37,571][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0068869413443323245 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:45:37,817][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:45:37,896][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:45:38,055][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:45:38,071][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:45:39,740][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:45:39,740][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:45:39,756][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:45:39,756][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:45:39,763][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:45:39,764][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:45:39,919][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:45:39,920][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:45:39,925][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:45:39,926][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:45:45,113][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 12:45:45,366][estimint.v2.training.train_step][INFO] - Total parameters: 0.16M -[2026-08-06 12:46:36,909][__main__][INFO] - test R2=0.9991 RMSE=53218.92 MAE=16948.54 MSE=2832253440.00 Bias=-8382.37 Median APE=1.04 Log10 MSE=0.00 -[2026-08-06 12:46:42,462][__main__][INFO] - Raw 90% interval coverage: 0.9916 -[2026-08-06 12:46:42,462][__main__][INFO] - Conformal 90% interval coverage: 0.9224 -[2026-08-06 12:46:53,939][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00044162112717022574 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:46:54,150][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:46:54,291][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:46:55,603][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:46:55,619][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:46:55,627][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:46:55,670][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:46:55,671][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:47:01,058][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M -[2026-08-06 12:48:43,370][__main__][INFO] - test R2=0.9918 RMSE=9.80 MAE=3.80 MSE=96.09 Bias=-3.65 Median APE=2.47 Log10 MSE=0.00 -[2026-08-06 12:48:47,603][__main__][INFO] - Raw 90% interval coverage: 0.8468 -[2026-08-06 12:48:47,603][__main__][INFO] - Conformal 90% interval coverage: 0.8500 -[2026-08-06 12:48:58,590][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006918459319611338 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:48:58,798][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:48:58,936][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:49:00,404][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:49:00,420][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:49:00,428][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:49:00,561][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:49:00,562][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:49:05,844][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 12:49:23,773][__main__][INFO] - test R2=0.9886 RMSE=11.55 MAE=3.69 MSE=133.38 Bias=-2.87 Median APE=2.91 Log10 MSE=0.00 -[2026-08-06 12:49:27,806][__main__][INFO] - Raw 90% interval coverage: 0.9218 -[2026-08-06 12:49:27,806][__main__][INFO] - Conformal 90% interval coverage: 0.9030 -[2026-08-06 12:49:36,076][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0015385529815639203 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:49:36,278][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:49:36,413][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:49:37,573][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:49:37,589][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:49:37,596][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:49:37,736][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:49:37,736][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:49:42,884][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M -[2026-08-06 12:50:07,338][__main__][INFO] - test R2=0.9864 RMSE=206582.00 MAE=74531.34 MSE=42676125696.00 Bias=25726.84 Median APE=4.60 Log10 MSE=0.00 -[2026-08-06 12:50:12,912][__main__][INFO] - Raw 90% interval coverage: 0.8054 -[2026-08-06 12:50:12,912][__main__][INFO] - Conformal 90% interval coverage: 0.9270 -[2026-08-06 12:50:24,167][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004456498789591352 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:50:24,364][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:50:24,504][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:50:25,769][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:50:25,786][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:50:25,793][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:50:25,934][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:50:25,934][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:50:31,245][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 12:52:14,906][__main__][INFO] - test R2=0.9975 RMSE=5.44 MAE=1.59 MSE=29.54 Bias=-1.07 Median APE=1.04 Log10 MSE=0.00 -[2026-08-06 12:52:20,442][__main__][INFO] - Raw 90% interval coverage: 0.9897 -[2026-08-06 12:52:20,442][__main__][INFO] - Conformal 90% interval coverage: 0.9315 -[2026-08-06 12:52:30,880][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0015860935764615135 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:52:31,104][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:52:31,250][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:52:32,782][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:52:32,806][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:52:32,817][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:52:32,954][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:52:32,954][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:52:39,071][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 12:53:22,210][__main__][INFO] - test R2=0.9906 RMSE=10.51 MAE=3.50 MSE=110.55 Bias=-2.74 Median APE=3.03 Log10 MSE=0.00 -[2026-08-06 12:53:26,463][__main__][INFO] - Raw 90% interval coverage: 0.8849 -[2026-08-06 12:53:26,464][__main__][INFO] - Conformal 90% interval coverage: 0.8946 -[2026-08-06 12:53:34,039][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0012227070939002825 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:53:34,238][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:53:34,376][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:53:35,614][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:53:35,630][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:53:35,637][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:53:35,671][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:53:35,672][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:53:39,293][__main__][INFO] - test R2=0.9992 RMSE=49331.25 MAE=15908.62 MSE=2433572608.00 Bias=-2465.85 Median APE=0.76 Log10 MSE=0.00 -[2026-08-06 12:53:41,024][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 12:53:44,976][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 12:53:44,976][__main__][INFO] - Conformal 90% interval coverage: 0.9063 -[2026-08-06 12:53:54,319][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.008044769213400573 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:53:54,517][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:53:54,656][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:53:55,800][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:53:55,818][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:53:55,825][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:53:55,852][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:53:55,853][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:54:01,261][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 12:56:29,592][__main__][INFO] - test R2=0.9997 RMSE=1.77 MAE=0.63 MSE=3.13 Bias=-0.08 Median APE=0.92 Log10 MSE=0.00 -[2026-08-06 12:56:35,187][__main__][INFO] - Raw 90% interval coverage: 0.9703 -[2026-08-06 12:56:35,187][__main__][INFO] - Conformal 90% interval coverage: 0.9043 -[2026-08-06 12:56:49,112][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0034521181240971645 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:56:49,312][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:56:49,461][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:56:50,842][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:56:50,866][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:56:50,877][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:56:51,018][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 12:56:51,019][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:56:56,732][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 12:56:57,542][__main__][INFO] - test R2=0.9997 RMSE=32002.67 MAE=10739.77 MSE=1024171008.00 Bias=-594.21 Median APE=0.62 Log10 MSE=0.00 -[2026-08-06 12:57:01,647][__main__][INFO] - Raw 90% interval coverage: 0.8436 -[2026-08-06 12:57:01,647][__main__][INFO] - Conformal 90% interval coverage: 0.8985 -[2026-08-06 12:57:10,142][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0007216741007139319 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:57:10,338][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:57:10,479][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:57:11,677][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:57:11,694][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:57:11,702][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:57:11,837][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 12:57:11,838][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:57:16,270][__main__][INFO] - test R2=0.9937 RMSE=8.57 MAE=2.86 MSE=73.48 Bias=-1.63 Median APE=2.55 Log10 MSE=0.00 -[2026-08-06 12:57:17,141][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 12:57:20,424][__main__][INFO] - Raw 90% interval coverage: 0.9276 -[2026-08-06 12:57:20,424][__main__][INFO] - Conformal 90% interval coverage: 0.8733 -[2026-08-06 12:57:30,100][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.004972159712322502 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 12:57:30,290][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 12:57:30,426][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 12:57:32,005][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 12:57:32,021][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 12:57:32,029][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 12:57:32,158][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 12:57:32,158][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 12:57:37,476][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M -[2026-08-06 13:00:22,077][__main__][INFO] - test R2=0.9996 RMSE=35938.88 MAE=12287.98 MSE=1291602816.00 Bias=154.39 Median APE=0.57 Log10 MSE=0.00 -[2026-08-06 13:00:27,692][__main__][INFO] - Raw 90% interval coverage: 0.9819 -[2026-08-06 13:00:27,693][__main__][INFO] - Conformal 90% interval coverage: 0.9153 -[2026-08-06 13:00:35,645][__main__][INFO] - test R2=0.9916 RMSE=9.91 MAE=3.37 MSE=98.16 Bias=-3.23 Median APE=1.62 Log10 MSE=0.00 -[2026-08-06 13:00:39,900][__main__][INFO] - Raw 90% interval coverage: 0.9405 -[2026-08-06 13:00:39,900][__main__][INFO] - Conformal 90% interval coverage: 0.8914 -[2026-08-06 13:00:47,103][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0007573352022218117 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:00:47,127][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00017255999075871934 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:00:47,365][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:00:47,454][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:00:47,602][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:00:47,634][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:00:49,081][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:00:49,097][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:00:49,104][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:00:49,126][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:00:49,126][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:00:49,159][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:00:49,177][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:00:49,184][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:00:49,204][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:00:49,204][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:00:54,647][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 13:00:54,660][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 13:01:17,003][__main__][INFO] - test R2=0.1586 RMSE=99.25 MAE=39.40 MSE=9851.27 Bias=32.80 Median APE=37.62 Log10 MSE=0.05 -[2026-08-06 13:01:21,457][__main__][INFO] - Raw 90% interval coverage: 0.9916 -[2026-08-06 13:01:21,457][__main__][INFO] - Conformal 90% interval coverage: 0.9237 -[2026-08-06 13:01:28,784][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0011367210562812302 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:01:28,983][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:01:29,127][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:01:30,623][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:01:30,639][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:01:30,647][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:01:30,672][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:01:30,672][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:01:35,898][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 13:03:53,636][__main__][INFO] - test R2=0.9979 RMSE=4.91 MAE=1.64 MSE=24.13 Bias=-1.35 Median APE=0.91 Log10 MSE=0.00 -[2026-08-06 13:03:57,693][__main__][INFO] - Raw 90% interval coverage: 0.9981 -[2026-08-06 13:03:57,694][__main__][INFO] - Conformal 90% interval coverage: 0.8959 -[2026-08-06 13:04:21,864][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00010410261076516482 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:04:22,101][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:04:22,266][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:04:23,650][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:04:23,674][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:04:23,685][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:04:23,718][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:04:23,719][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:04:29,586][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 13:04:40,067][__main__][INFO] - test R2=0.9998 RMSE=24999.36 MAE=9045.38 MSE=624967872.00 Bias=2284.69 Median APE=0.50 Log10 MSE=0.00 -[2026-08-06 13:04:45,692][__main__][INFO] - Raw 90% interval coverage: 0.9851 -[2026-08-06 13:04:45,692][__main__][INFO] - Conformal 90% interval coverage: 0.9037 -[2026-08-06 13:04:45,698][__main__][INFO] - test R2=0.9975 RMSE=5.45 MAE=2.04 MSE=29.65 Bias=-0.48 Median APE=2.24 Log10 MSE=0.00 -[2026-08-06 13:04:51,310][__main__][INFO] - Raw 90% interval coverage: 0.9308 -[2026-08-06 13:04:51,311][__main__][INFO] - Conformal 90% interval coverage: 0.8914 -[2026-08-06 13:05:04,248][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0010853414413184834 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:05:04,269][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0002479414126085863 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:05:04,492][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:05:04,587][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:05:04,738][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:05:04,762][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:05:06,412][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:05:06,436][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:05:06,447][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:05:06,487][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:05:06,512][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:05:06,523][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:05:06,589][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:05:06,590][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:05:06,657][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:05:06,657][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:05:12,426][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 13:05:12,722][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 13:08:07,714][__main__][INFO] - test R2=0.9967 RMSE=101880.53 MAE=30604.88 MSE=10379641856.00 Bias=-26904.51 Median APE=0.58 Log10 MSE=0.00 -[2026-08-06 13:08:11,122][__main__][INFO] - test R2=0.9920 RMSE=9.69 MAE=3.28 MSE=93.86 Bias=-3.17 Median APE=1.37 Log10 MSE=0.00 -[2026-08-06 13:08:11,855][__main__][INFO] - Raw 90% interval coverage: 0.9974 -[2026-08-06 13:08:11,855][__main__][INFO] - Conformal 90% interval coverage: 0.8946 -[2026-08-06 13:08:15,308][__main__][INFO] - Raw 90% interval coverage: 0.9987 -[2026-08-06 13:08:15,308][__main__][INFO] - Conformal 90% interval coverage: 0.8901 -[2026-08-06 13:08:24,032][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.007653113812336395 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:08:24,268][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:08:24,411][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:08:25,138][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.006591502639757018 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:08:25,326][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:08:25,473][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:08:25,978][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:08:26,000][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:08:26,008][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:08:26,050][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:08:26,051][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:08:27,418][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:08:27,434][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:08:27,441][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:08:27,482][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:08:27,482][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:08:31,589][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M -[2026-08-06 13:08:32,998][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 13:08:48,220][__main__][INFO] - test R2=0.9907 RMSE=10.45 MAE=3.49 MSE=109.11 Bias=-2.55 Median APE=2.65 Log10 MSE=0.00 -[2026-08-06 13:08:52,569][__main__][INFO] - Raw 90% interval coverage: 0.9263 -[2026-08-06 13:08:52,569][__main__][INFO] - Conformal 90% interval coverage: 0.8946 -[2026-08-06 13:09:03,228][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005690408715532371 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:09:03,419][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:09:03,560][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:09:04,758][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:09:04,774][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:09:04,781][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:09:04,816][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:09:04,817][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:09:10,052][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 13:11:26,722][__main__][INFO] - test R2=0.9934 RMSE=143366.91 MAE=44347.31 MSE=20554070016.00 Bias=-26047.40 Median APE=1.97 Log10 MSE=0.00 -[2026-08-06 13:11:30,833][__main__][INFO] - Raw 90% interval coverage: 0.9819 -[2026-08-06 13:11:30,833][__main__][INFO] - Conformal 90% interval coverage: 0.8946 -[2026-08-06 13:11:38,760][__main__][INFO] - test R2=-0.1579 RMSE=116.43 MAE=45.27 MSE=13556.86 Bias=19.51 Median APE=53.57 Log10 MSE=0.26 -[2026-08-06 13:11:40,586][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.001083035708129713 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:11:40,785][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:11:40,925][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:11:42,187][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:11:42,204][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:11:42,212][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:11:42,244][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:11:42,245][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:11:44,251][__main__][INFO] - Raw 90% interval coverage: 0.8455 -[2026-08-06 13:11:44,252][__main__][INFO] - Conformal 90% interval coverage: 0.9612 -[2026-08-06 13:11:47,620][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 13:11:51,373][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00033486006506612103 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:11:51,562][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:11:51,709][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:11:53,208][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:11:53,225][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:11:53,233][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:11:53,261][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:11:53,261][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:11:58,742][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 13:12:46,398][__main__][INFO] - test R2=0.9956 RMSE=7.20 MAE=2.41 MSE=51.80 Bias=-1.46 Median APE=2.17 Log10 MSE=0.00 -[2026-08-06 13:12:50,470][__main__][INFO] - Raw 90% interval coverage: 0.9173 -[2026-08-06 13:12:50,470][__main__][INFO] - Conformal 90% interval coverage: 0.8824 -[2026-08-06 13:13:05,782][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0020535268676319936 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:13:05,989][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:13:06,136][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:13:07,433][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:13:07,458][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:13:07,468][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:13:07,502][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:13:07,502][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:13:13,379][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 13:15:37,210][__main__][INFO] - test R2=0.9997 RMSE=31545.30 MAE=11906.04 MSE=995106112.00 Bias=1568.53 Median APE=0.59 Log10 MSE=0.00 -[2026-08-06 13:15:42,837][__main__][INFO] - Raw 90% interval coverage: 0.8824 -[2026-08-06 13:15:42,838][__main__][INFO] - Conformal 90% interval coverage: 0.9263 -[2026-08-06 13:15:52,089][__main__][INFO] - test R2=0.9995 RMSE=2.34 MAE=0.74 MSE=5.49 Bias=0.11 Median APE=0.64 Log10 MSE=0.00 -[2026-08-06 13:15:57,581][__main__][INFO] - Raw 90% interval coverage: 0.9922 -[2026-08-06 13:15:57,582][__main__][INFO] - Conformal 90% interval coverage: 0.9024 -[2026-08-06 13:16:06,537][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.000996807147985872 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:16:06,572][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00014925341954107255 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:16:06,775][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:16:06,871][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:16:07,028][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:16:07,063][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:16:08,792][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:16:08,808][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:16:08,816][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:16:08,851][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:16:08,851][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:16:09,041][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:16:09,069][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:16:09,080][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:16:09,112][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:16:09,112][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:16:11,937][__main__][INFO] - test R2=0.9927 RMSE=9.26 MAE=2.96 MSE=85.75 Bias=-1.54 Median APE=2.70 Log10 MSE=0.00 -[2026-08-06 13:16:14,238][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 13:16:15,191][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M -[2026-08-06 13:16:15,990][__main__][INFO] - Raw 90% interval coverage: 0.8979 -[2026-08-06 13:16:15,990][__main__][INFO] - Conformal 90% interval coverage: 0.8901 -[2026-08-06 13:16:39,208][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0010871103558841126 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:16:39,448][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:16:39,604][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:16:41,458][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:16:41,483][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:16:41,494][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:16:41,521][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:16:41,522][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:16:47,606][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 13:19:50,607][__main__][INFO] - test R2=0.9834 RMSE=13.94 MAE=4.43 MSE=194.44 Bias=-4.29 Median APE=1.05 Log10 MSE=0.00 -[2026-08-06 13:19:54,792][__main__][INFO] - Raw 90% interval coverage: 0.9625 -[2026-08-06 13:19:54,793][__main__][INFO] - Conformal 90% interval coverage: 0.9231 -[2026-08-06 13:20:07,741][__main__][INFO] - test R2=0.9985 RMSE=67729.95 MAE=24522.62 MSE=4587346432.00 Bias=119.51 Median APE=1.30 Log10 MSE=0.00 -[2026-08-06 13:20:13,376][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 13:20:13,377][__main__][INFO] - Conformal 90% interval coverage: 0.9341 -[2026-08-06 13:20:19,562][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0014063572827480218 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:20:19,829][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:20:19,989][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:20:21,713][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:20:21,738][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:20:21,749][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:20:21,799][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:20:21,800][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:20:24,404][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.004342113526542186 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:20:24,596][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:20:24,733][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:20:25,395][__main__][INFO] - test R2=0.9838 RMSE=13.77 MAE=4.47 MSE=189.52 Bias=-3.78 Median APE=3.09 Log10 MSE=0.00 -[2026-08-06 13:20:26,092][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:20:26,108][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:20:26,116][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:20:26,190][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:20:26,191][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:20:27,746][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-06 13:20:29,551][__main__][INFO] - Raw 90% interval coverage: 0.8979 -[2026-08-06 13:20:29,551][__main__][INFO] - Conformal 90% interval coverage: 0.8765 -[2026-08-06 13:20:31,633][estimint.v2.training.train_step][INFO] - Total parameters: 0.16M -[2026-08-06 13:20:37,435][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0025802765387868782 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:20:37,631][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:20:37,787][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:20:39,139][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:20:39,155][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:20:39,165][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:20:39,198][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:20:39,198][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:20:44,507][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M -[2026-08-06 13:23:25,852][__main__][INFO] - test R2=0.9997 RMSE=31568.84 MAE=11074.45 MSE=996591808.00 Bias=3837.75 Median APE=0.55 Log10 MSE=0.00 -[2026-08-06 13:23:29,941][__main__][INFO] - Raw 90% interval coverage: 0.8778 -[2026-08-06 13:23:29,941][__main__][INFO] - Conformal 90% interval coverage: 0.8836 -[2026-08-06 13:23:36,492][__main__][INFO] - test R2=0.9988 RMSE=3.70 MAE=1.23 MSE=13.69 Bias=-0.38 Median APE=1.32 Log10 MSE=0.00 -[2026-08-06 13:23:42,105][__main__][INFO] - Raw 90% interval coverage: 0.8720 -[2026-08-06 13:23:42,105][__main__][INFO] - Conformal 90% interval coverage: 0.9334 -[2026-08-06 13:23:43,069][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004592012577393376 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:23:43,283][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:23:43,430][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:23:44,983][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:23:45,000][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:23:45,008][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:23:45,028][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:23:45,028][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:23:48,251][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.002621237443071434 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:23:48,432][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:23:48,565][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:23:49,734][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:23:49,749][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:23:49,759][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:23:49,792][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:23:49,793][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:23:50,402][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 13:23:55,213][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 13:24:22,896][__main__][INFO] - test R2=0.9930 RMSE=9.05 MAE=3.35 MSE=81.93 Bias=-2.16 Median APE=3.27 Log10 MSE=0.00 -[2026-08-06 13:24:27,010][__main__][INFO] - Raw 90% interval coverage: 0.9108 -[2026-08-06 13:24:27,010][__main__][INFO] - Conformal 90% interval coverage: 0.9205 -[2026-08-06 13:24:38,723][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006247096965471033 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:24:38,921][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:24:39,069][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:24:40,548][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:24:40,572][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:24:40,582][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:24:40,611][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:24:40,611][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:24:46,235][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 13:27:31,855][__main__][INFO] - test R2=0.9913 RMSE=10.07 MAE=3.19 MSE=101.42 Bias=-2.87 Median APE=1.74 Log10 MSE=0.00 -[2026-08-06 13:27:35,881][__main__][INFO] - Raw 90% interval coverage: 0.9974 -[2026-08-06 13:27:35,881][__main__][INFO] - Conformal 90% interval coverage: 0.9263 -[2026-08-06 13:27:37,346][__main__][INFO] - test R2=0.9996 RMSE=33809.06 MAE=10844.56 MSE=1143052800.00 Bias=-1314.28 Median APE=0.54 Log10 MSE=0.00 -[2026-08-06 13:27:42,886][__main__][INFO] - Raw 90% interval coverage: 0.9806 -[2026-08-06 13:27:42,887][__main__][INFO] - Conformal 90% interval coverage: 0.9095 -[2026-08-06 13:27:46,138][__main__][INFO] - test R2=0.9914 RMSE=10.05 MAE=3.24 MSE=101.02 Bias=-2.10 Median APE=2.73 Log10 MSE=0.00 -[2026-08-06 13:27:50,292][__main__][INFO] - Raw 90% interval coverage: 0.9560 -[2026-08-06 13:27:50,293][__main__][INFO] - Conformal 90% interval coverage: 0.9127 -[2026-08-06 13:27:50,581][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0048552503653020865 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:27:50,787][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:27:50,790][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.006827421948458927 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:27:50,985][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:27:50,987][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:27:51,130][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:27:52,277][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:27:52,290][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:27:52,302][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:27:52,308][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:27:52,312][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:27:52,315][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:27:52,356][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:27:52,356][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:27:52,367][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:27:52,368][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:27:55,735][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00027461690583477897 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:27:55,926][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:27:56,063][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:27:57,212][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:27:57,231][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:27:57,238][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:27:57,263][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:27:57,265][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:27:57,789][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M -[2026-08-06 13:27:58,348][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 13:28:02,669][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 13:31:03,034][__main__][INFO] - test R2=0.9951 RMSE=124422.89 MAE=40858.76 MSE=15481056256.00 Bias=-36888.13 Median APE=0.99 Log10 MSE=0.00 -[2026-08-06 13:31:08,599][__main__][INFO] - Raw 90% interval coverage: 0.9690 -[2026-08-06 13:31:08,599][__main__][INFO] - Conformal 90% interval coverage: 0.9011 -[2026-08-06 13:31:21,380][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0001840656957687508 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:31:21,606][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:31:21,743][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:31:23,382][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:31:23,400][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:31:23,407][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:31:23,426][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:31:23,427][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:31:28,910][estimint.v2.training.train_step][INFO] - Total parameters: 2.15M -[2026-08-06 13:31:34,461][__main__][INFO] - test R2=0.9868 RMSE=12.43 MAE=4.71 MSE=154.55 Bias=-4.50 Median APE=2.02 Log10 MSE=0.00 -[2026-08-06 13:31:38,674][__main__][INFO] - Raw 90% interval coverage: 0.9470 -[2026-08-06 13:31:38,674][__main__][INFO] - Conformal 90% interval coverage: 0.8778 -[2026-08-06 13:31:49,859][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004559114855870667 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:31:50,077][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:31:50,214][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:31:51,548][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:31:51,564][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:31:51,572][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:31:51,619][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:31:51,620][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:31:52,017][__main__][INFO] - test R2=0.9972 RMSE=5.77 MAE=2.09 MSE=33.31 Bias=-0.28 Median APE=2.12 Log10 MSE=0.00 -[2026-08-06 13:31:57,044][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 13:31:57,677][__main__][INFO] - Raw 90% interval coverage: 0.9089 -[2026-08-06 13:31:57,677][__main__][INFO] - Conformal 90% interval coverage: 0.8681 -[2026-08-06 13:32:03,140][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.002008121480368435 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:32:03,322][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:32:03,454][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:32:04,844][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:32:04,860][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:32:04,868][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:32:04,895][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:32:04,896][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:32:10,060][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 13:35:20,527][__main__][INFO] - test R2=0.9993 RMSE=45790.55 MAE=15163.95 MSE=2096774144.00 Bias=-3326.87 Median APE=0.77 Log10 MSE=0.00 -[2026-08-06 13:35:20,804][__main__][INFO] - test R2=0.8530 RMSE=41.49 MAE=16.88 MSE=1721.07 Bias=-4.15 Median APE=23.99 Log10 MSE=0.03 -[2026-08-06 13:35:26,067][__main__][INFO] - Raw 90% interval coverage: 0.9922 -[2026-08-06 13:35:26,067][__main__][INFO] - Conformal 90% interval coverage: 0.9392 -[2026-08-06 13:35:26,432][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 13:35:26,432][__main__][INFO] - Conformal 90% interval coverage: 0.9114 -[2026-08-06 13:35:32,141][__main__][INFO] - test R2=0.9986 RMSE=4.03 MAE=1.23 MSE=16.23 Bias=-1.07 Median APE=0.60 Log10 MSE=0.00 -[2026-08-06 13:35:36,395][__main__][INFO] - Raw 90% interval coverage: 0.9832 -[2026-08-06 13:35:36,396][__main__][INFO] - Conformal 90% interval coverage: 0.9050 -[2026-08-06 13:35:40,379][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.000627386652472972 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:35:40,380][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0027042112911568276 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:35:45,147][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:35:45,205][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0001803512579806097 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:35:46,892][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:35:47,033][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:35:47,155][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:35:47,167][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:35:47,195][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:35:49,177][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:35:49,193][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:35:49,196][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:35:49,200][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:35:49,201][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:35:49,217][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:35:49,218][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:35:49,224][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:35:49,227][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:35:49,262][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:35:49,264][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:35:49,269][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:35:49,270][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:35:49,276][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:35:49,277][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:35:54,667][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 13:35:54,764][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M -[2026-08-06 13:35:54,842][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 13:39:01,943][__main__][INFO] - test R2=0.9997 RMSE=32097.78 MAE=10584.25 MSE=1030267200.00 Bias=1599.34 Median APE=0.60 Log10 MSE=0.00 -[2026-08-06 13:39:07,426][__main__][INFO] - Raw 90% interval coverage: 0.9974 -[2026-08-06 13:39:07,426][__main__][INFO] - Conformal 90% interval coverage: 0.9334 -[2026-08-06 13:39:20,874][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.004980276626111767 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:39:21,072][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:39:21,208][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:39:22,591][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:39:22,616][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:39:22,625][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:39:22,650][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:39:22,650][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:39:28,194][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 13:39:31,435][__main__][INFO] - test R2=0.9977 RMSE=5.18 MAE=1.51 MSE=26.80 Bias=-1.31 Median APE=0.66 Log10 MSE=0.00 -[2026-08-06 13:39:35,641][__main__][INFO] - Raw 90% interval coverage: 0.9890 -[2026-08-06 13:39:35,641][__main__][INFO] - Conformal 90% interval coverage: 0.8985 -[2026-08-06 13:39:42,014][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.003606127754483304 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:39:42,208][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:39:42,340][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:39:43,430][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:39:43,446][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:39:43,473][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:39:43,513][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:39:43,514][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:39:44,072][__main__][INFO] - test R2=0.9917 RMSE=9.88 MAE=3.39 MSE=97.59 Bias=-1.83 Median APE=3.75 Log10 MSE=0.00 -[2026-08-06 13:39:49,100][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M -[2026-08-06 13:39:49,958][__main__][INFO] - Raw 90% interval coverage: 0.8533 -[2026-08-06 13:39:49,959][__main__][INFO] - Conformal 90% interval coverage: 0.9108 -[2026-08-06 13:39:57,526][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004945106791946531 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:39:57,722][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:39:57,867][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:39:58,939][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:39:58,956][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:39:58,963][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:39:58,995][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:39:58,996][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:40:04,380][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 13:43:03,739][__main__][INFO] - test R2=0.9898 RMSE=10.92 MAE=3.62 MSE=119.25 Bias=-2.85 Median APE=2.78 Log10 MSE=0.00 -[2026-08-06 13:43:08,009][__main__][INFO] - Raw 90% interval coverage: 0.9496 -[2026-08-06 13:43:08,010][__main__][INFO] - Conformal 90% interval coverage: 0.8946 -[2026-08-06 13:43:15,625][__main__][INFO] - test R2=0.9996 RMSE=33898.52 MAE=12217.49 MSE=1149109760.00 Bias=-2954.37 Median APE=0.61 Log10 MSE=0.00 -[2026-08-06 13:43:17,373][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0008378819322413172 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:43:17,581][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:43:17,725][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:43:18,981][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:43:18,997][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:43:19,005][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:43:19,044][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:43:19,045][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:43:21,192][__main__][INFO] - Raw 90% interval coverage: 0.9153 -[2026-08-06 13:43:21,192][__main__][INFO] - Conformal 90% interval coverage: 0.9140 -[2026-08-06 13:43:24,241][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 13:43:25,829][__main__][INFO] - test R2=0.9996 RMSE=2.24 MAE=0.75 MSE=5.00 Bias=0.10 Median APE=0.70 Log10 MSE=0.00 -[2026-08-06 13:43:29,817][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0009979567345089358 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:43:29,893][__main__][INFO] - Raw 90% interval coverage: 0.8229 -[2026-08-06 13:43:29,894][__main__][INFO] - Conformal 90% interval coverage: 0.9127 -[2026-08-06 13:43:30,017][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:43:30,153][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:43:31,308][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:43:31,326][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:43:31,334][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:43:31,361][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:43:31,361][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:43:36,831][estimint.v2.training.train_step][INFO] - Total parameters: 0.15M -[2026-08-06 13:43:39,215][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.005032481569035229 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:43:39,413][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:43:39,555][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:43:40,759][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:43:40,775][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:43:40,782][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:43:40,815][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:43:40,816][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:43:46,215][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 13:46:32,181][__main__][INFO] - test R2=0.9980 RMSE=78980.30 MAE=21891.33 MSE=6237888000.00 Bias=-17807.34 Median APE=0.56 Log10 MSE=0.00 -[2026-08-06 13:46:34,110][__main__][INFO] - test R2=0.9960 RMSE=6.81 MAE=2.42 MSE=46.37 Bias=-0.38 Median APE=2.29 Log10 MSE=0.00 -[2026-08-06 13:46:36,292][__main__][INFO] - Raw 90% interval coverage: 0.9929 -[2026-08-06 13:46:36,293][__main__][INFO] - Conformal 90% interval coverage: 0.9114 -[2026-08-06 13:46:39,734][__main__][INFO] - Raw 90% interval coverage: 0.9483 -[2026-08-06 13:46:39,734][__main__][INFO] - Conformal 90% interval coverage: 0.8882 -[2026-08-06 13:46:50,129][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0008642439205382613 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:46:50,129][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00037519856189651975 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:46:50,370][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:46:50,452][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:46:50,617][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:46:50,637][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:46:52,253][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:46:52,267][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:46:52,271][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:46:52,278][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:46:52,285][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:46:52,292][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:46:52,325][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:46:52,325][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:46:52,340][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:46:52,341][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:46:52,586][__main__][INFO] - test R2=0.9998 RMSE=1.59 MAE=0.57 MSE=2.53 Bias=0.00 Median APE=0.68 Log10 MSE=0.00 -[2026-08-06 13:46:57,741][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 13:46:57,859][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 13:46:58,102][__main__][INFO] - Raw 90% interval coverage: 0.9606 -[2026-08-06 13:46:58,102][__main__][INFO] - Conformal 90% interval coverage: 0.9192 -[2026-08-06 13:47:05,552][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.005810331460325178 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:47:05,755][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:47:05,899][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:47:07,082][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:47:07,099][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:47:07,107][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:47:07,137][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:47:07,138][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:47:12,466][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-06 13:50:07,741][__main__][INFO] - test R2=0.9452 RMSE=25.33 MAE=10.32 MSE=641.61 Bias=-9.41 Median APE=15.27 Log10 MSE=0.01 -[2026-08-06 13:50:13,507][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 13:50:13,507][__main__][INFO] - Conformal 90% interval coverage: 0.9095 -[2026-08-06 13:50:27,317][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0010925375954413412 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:50:27,515][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:50:27,652][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:50:29,008][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:50:29,032][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:50:29,043][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:50:29,075][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:50:29,077][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:50:29,315][__main__][INFO] - test R2=0.9967 RMSE=101713.94 MAE=31573.80 MSE=10345724928.00 Bias=-29299.00 Median APE=0.56 Log10 MSE=0.00 -[2026-08-06 13:50:33,530][__main__][INFO] - Raw 90% interval coverage: 0.9903 -[2026-08-06 13:50:33,530][__main__][INFO] - Conformal 90% interval coverage: 0.9308 -[2026-08-06 13:50:34,725][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 13:50:44,264][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0009628075512895328 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:50:44,461][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:50:44,599][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:50:45,741][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:50:45,758][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:50:45,766][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:50:45,785][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:50:45,786][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:50:51,293][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 13:51:06,952][__main__][INFO] - test R2=0.9999 RMSE=1.20 MAE=0.47 MSE=1.45 Bias=0.09 Median APE=0.55 Log10 MSE=0.00 -[2026-08-06 13:51:12,453][__main__][INFO] - Raw 90% interval coverage: 0.9612 -[2026-08-06 13:51:12,453][__main__][INFO] - Conformal 90% interval coverage: 0.8804 -[2026-08-06 13:51:18,337][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.005127564142088664 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:51:18,519][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:51:18,654][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:51:19,818][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:51:19,834][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:51:19,841][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:51:19,866][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:51:19,866][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:51:25,051][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 13:53:34,788][__main__][INFO] - test R2=0.9794 RMSE=15.52 MAE=5.03 MSE=240.80 Bias=-4.49 Median APE=3.03 Log10 MSE=0.00 -[2026-08-06 13:53:38,907][__main__][INFO] - Raw 90% interval coverage: 0.9360 -[2026-08-06 13:53:38,908][__main__][INFO] - Conformal 90% interval coverage: 0.8946 -[2026-08-06 13:53:45,766][__main__][INFO] - test R2=0.9997 RMSE=32436.72 MAE=9909.56 MSE=1052141056.00 Bias=-886.27 Median APE=0.41 Log10 MSE=0.00 -[2026-08-06 13:53:49,977][__main__][INFO] - Raw 90% interval coverage: 0.8610 -[2026-08-06 13:53:49,978][__main__][INFO] - Conformal 90% interval coverage: 0.8992 -[2026-08-06 13:53:52,975][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004874378574875727 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:53:53,207][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:53:53,347][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:53:54,859][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:53:54,875][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:53:54,883][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:53:54,920][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:53:54,920][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:53:59,296][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.009798613646994673 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:53:59,481][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:53:59,627][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:54:00,167][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 13:54:00,774][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:54:00,790][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:54:00,798][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:54:00,825][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:54:00,825][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:54:06,168][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 13:55:03,794][__main__][INFO] - test R2=0.9796 RMSE=15.47 MAE=5.74 MSE=239.41 Bias=-5.60 Median APE=2.96 Log10 MSE=0.00 -[2026-08-06 13:55:07,924][__main__][INFO] - Raw 90% interval coverage: 0.9405 -[2026-08-06 13:55:07,925][__main__][INFO] - Conformal 90% interval coverage: 0.9173 -[2026-08-06 13:55:19,783][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.006806457002246565 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:55:19,977][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:55:20,120][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:55:21,464][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:55:21,480][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:55:21,487][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:55:21,529][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:55:21,529][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:55:26,906][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 13:56:59,145][__main__][INFO] - test R2=0.9953 RMSE=7.44 MAE=2.64 MSE=55.41 Bias=-1.47 Median APE=2.55 Log10 MSE=0.00 -[2026-08-06 13:57:03,298][__main__][INFO] - Raw 90% interval coverage: 0.9586 -[2026-08-06 13:57:03,298][__main__][INFO] - Conformal 90% interval coverage: 0.9005 -[2026-08-06 13:57:11,500][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00024767484042759457 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:57:11,709][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:57:11,853][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:57:12,413][__main__][INFO] - test R2=-16990.1816 RMSE=230793888.00 MAE=22622312.00 MSE=53265819332771840.00 Bias=21255230.00 Median APE=78.59 Log10 MSE=0.52 -[2026-08-06 13:57:13,057][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:57:13,073][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:57:13,081][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 13:57:13,100][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 13:57:13,106][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:57:18,013][__main__][INFO] - Raw 90% interval coverage: 0.7912 -[2026-08-06 13:57:18,013][__main__][INFO] - Conformal 90% interval coverage: 0.8759 -[2026-08-06 13:57:18,303][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 13:57:25,684][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00025318422689582336 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:57:25,892][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:57:26,028][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:57:27,179][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:57:27,196][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:57:27,204][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:57:27,232][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 13:57:27,233][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:57:32,549][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 13:59:19,567][__main__][INFO] - test R2=-460704.0938 RMSE=73443.60 MAE=9050.17 MSE=5393962496.00 Bias=9013.00 Median APE=71.90 Log10 MSE=1.09 -[2026-08-06 13:59:25,168][__main__][INFO] - Raw 90% interval coverage: 0.8119 -[2026-08-06 13:59:25,169][__main__][INFO] - Conformal 90% interval coverage: 0.9328 -[2026-08-06 13:59:38,011][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.008367079214005202 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 13:59:38,255][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 13:59:38,411][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 13:59:39,844][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 13:59:39,860][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 13:59:39,867][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:59:39,896][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 13:59:39,896][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 13:59:45,353][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M -[2026-08-06 14:00:26,397][__main__][INFO] - test R2=0.9961 RMSE=6.79 MAE=2.44 MSE=46.15 Bias=-0.39 Median APE=2.37 Log10 MSE=0.00 -[2026-08-06 14:00:32,056][__main__][INFO] - Raw 90% interval coverage: 0.9470 -[2026-08-06 14:00:32,056][__main__][INFO] - Conformal 90% interval coverage: 0.9076 -[2026-08-06 14:00:44,345][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005938786782539121 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:00:44,540][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:00:44,677][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:00:46,073][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:00:46,088][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:00:46,096][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:00:46,120][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:00:46,120][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:00:51,185][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 14:01:06,755][__main__][INFO] - test R2=0.9997 RMSE=30342.02 MAE=10838.88 MSE=920638272.00 Bias=424.59 Median APE=0.64 Log10 MSE=0.00 -[2026-08-06 14:01:10,843][__main__][INFO] - Raw 90% interval coverage: 0.8462 -[2026-08-06 14:01:10,844][__main__][INFO] - Conformal 90% interval coverage: 0.8856 -[2026-08-06 14:01:17,947][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0018058357557578892 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:01:18,143][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:01:18,287][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:01:19,770][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:01:19,790][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:01:19,797][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:01:19,816][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:01:19,817][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:01:25,342][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M -[2026-08-06 14:03:36,961][__main__][INFO] - test R2=-238395.4219 RMSE=52831.42 MAE=2943.89 MSE=2791159296.00 Bias=2862.74 Median APE=85.32 Log10 MSE=2.25 -[2026-08-06 14:03:42,430][__main__][INFO] - Raw 90% interval coverage: 0.6904 -[2026-08-06 14:03:42,430][__main__][INFO] - Conformal 90% interval coverage: 0.8830 -[2026-08-06 14:03:54,657][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0012983890263373937 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:03:54,863][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:03:55,005][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:03:57,180][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:03:57,196][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:03:57,207][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:03:57,235][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:03:57,236][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:04:02,520][__main__][INFO] - test R2=0.9971 RMSE=5.83 MAE=2.34 MSE=33.98 Bias=0.29 Median APE=2.56 Log10 MSE=0.00 -[2026-08-06 14:04:02,810][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 14:04:08,168][__main__][INFO] - Raw 90% interval coverage: 0.9567 -[2026-08-06 14:04:08,168][__main__][INFO] - Conformal 90% interval coverage: 0.8979 -[2026-08-06 14:04:23,465][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0070489575441455045 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:04:23,669][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:04:23,819][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:04:26,064][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:04:26,088][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:04:26,099][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:04:26,139][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:04:26,141][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:04:32,031][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 14:04:32,926][__main__][INFO] - test R2=0.9995 RMSE=40651.08 MAE=15093.87 MSE=1652510592.00 Bias=-10272.41 Median APE=0.81 Log10 MSE=0.00 -[2026-08-06 14:04:38,423][__main__][INFO] - Raw 90% interval coverage: 0.9910 -[2026-08-06 14:04:38,423][__main__][INFO] - Conformal 90% interval coverage: 0.9173 -[2026-08-06 14:05:12,559][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0007676672664785771 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:05:13,320][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:05:13,482][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:05:16,162][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:05:16,189][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:05:16,200][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:05:16,251][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:05:16,252][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:05:22,441][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M -[2026-08-06 14:07:38,066][__main__][INFO] - test R2=0.9964 RMSE=6.53 MAE=1.99 MSE=42.61 Bias=-1.88 Median APE=0.76 Log10 MSE=0.00 -[2026-08-06 14:07:42,178][__main__][INFO] - Raw 90% interval coverage: 0.9729 -[2026-08-06 14:07:42,178][__main__][INFO] - Conformal 90% interval coverage: 0.8953 -[2026-08-06 14:07:42,446][__main__][INFO] - test R2=0.9978 RMSE=5.08 MAE=1.94 MSE=25.77 Bias=0.52 Median APE=2.22 Log10 MSE=0.00 -[2026-08-06 14:07:48,138][__main__][INFO] - Raw 90% interval coverage: 0.9050 -[2026-08-06 14:07:48,138][__main__][INFO] - Conformal 90% interval coverage: 0.8953 -[2026-08-06 14:07:52,709][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00035989511084242405 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:07:52,914][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:07:53,053][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:07:54,517][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:07:54,533][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:07:54,540][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:07:54,572][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:07:54,574][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:08:00,144][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 14:08:00,498][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0053960480459402625 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:08:00,703][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:08:00,855][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:08:02,330][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:08:02,346][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:08:02,353][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:08:02,406][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:08:02,407][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:08:07,758][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M -[2026-08-06 14:08:21,156][__main__][INFO] - test R2=0.9996 RMSE=33171.28 MAE=10102.22 MSE=1100333952.00 Bias=734.01 Median APE=0.48 Log10 MSE=0.00 -[2026-08-06 14:08:25,236][__main__][INFO] - Raw 90% interval coverage: 0.8164 -[2026-08-06 14:08:25,237][__main__][INFO] - Conformal 90% interval coverage: 0.8746 -[2026-08-06 14:08:36,016][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006289446520767339 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:08:36,229][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:08:36,370][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:08:37,749][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:08:37,766][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:08:37,773][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:08:37,815][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:08:37,816][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:08:43,216][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M -[2026-08-06 14:11:19,002][__main__][INFO] - test R2=0.9951 RMSE=7.61 MAE=2.76 MSE=57.95 Bias=-1.82 Median APE=2.74 Log10 MSE=0.00 -[2026-08-06 14:11:24,707][__main__][INFO] - Raw 90% interval coverage: 0.8882 -[2026-08-06 14:11:24,707][__main__][INFO] - Conformal 90% interval coverage: 0.8765 -[2026-08-06 14:11:38,691][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.005205181698841106 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:11:38,897][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:11:39,030][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:11:40,478][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:11:40,502][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:11:40,513][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:11:40,546][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:11:40,547][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:11:46,583][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-06 14:11:52,756][__main__][INFO] - test R2=0.9997 RMSE=1.88 MAE=0.68 MSE=3.52 Bias=-0.20 Median APE=0.60 Log10 MSE=0.00 -[2026-08-06 14:11:58,336][__main__][INFO] - Raw 90% interval coverage: 0.9858 -[2026-08-06 14:11:58,337][__main__][INFO] - Conformal 90% interval coverage: 0.9069 -[2026-08-06 14:12:09,208][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00739313713113594 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:12:09,407][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:12:09,550][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:12:11,195][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:12:11,211][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:12:11,219][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:12:11,248][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:12:11,248][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:12:16,700][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 14:12:18,955][__main__][INFO] - test R2=0.9797 RMSE=252365.69 MAE=80068.08 MSE=63688441856.00 Bias=-78119.90 Median APE=1.17 Log10 MSE=0.00 -[2026-08-06 14:12:23,016][__main__][INFO] - Raw 90% interval coverage: 0.9476 -[2026-08-06 14:12:23,016][__main__][INFO] - Conformal 90% interval coverage: 0.9121 -[2026-08-06 14:12:32,769][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0026443727657188515 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:12:32,968][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:12:33,103][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:12:34,798][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:12:34,815][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:12:34,823][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:12:34,872][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:12:34,873][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:12:40,232][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-06 14:14:56,592][__main__][INFO] - test R2=0.9438 RMSE=25.65 MAE=9.95 MSE=657.93 Bias=-7.53 Median APE=11.73 Log10 MSE=0.01 -[2026-08-06 14:15:02,333][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 14:15:02,334][__main__][INFO] - Conformal 90% interval coverage: 0.9095 -[2026-08-06 14:15:34,615][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005878976603352423 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:15:34,868][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:15:35,032][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:15:37,476][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:15:37,500][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:15:37,512][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:15:37,565][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:15:37,566][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:15:43,702][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 14:15:49,353][__main__][INFO] - test R2=0.9987 RMSE=62622.17 MAE=23360.23 MSE=3921535744.00 Bias=-17915.79 Median APE=1.37 Log10 MSE=0.00 -[2026-08-06 14:15:52,100][__main__][INFO] - test R2=0.9996 RMSE=2.18 MAE=0.78 MSE=4.77 Bias=-0.38 Median APE=0.60 Log10 MSE=0.00 -[2026-08-06 14:15:55,126][__main__][INFO] - Raw 90% interval coverage: 0.9942 -[2026-08-06 14:15:55,126][__main__][INFO] - Conformal 90% interval coverage: 0.8979 -[2026-08-06 14:15:56,281][__main__][INFO] - Raw 90% interval coverage: 0.8429 -[2026-08-06 14:15:56,281][__main__][INFO] - Conformal 90% interval coverage: 0.8733 -[2026-08-06 14:16:27,343][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0019800915758169135 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:16:27,345][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0014135083006375536 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:16:27,660][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:16:27,741][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:16:27,914][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:16:27,932][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:16:29,786][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:16:29,788][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:16:29,811][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:16:29,814][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:16:29,821][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:16:29,825][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:16:29,864][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:16:29,865][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:16:29,875][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:16:29,876][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:16:35,811][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 14:16:35,926][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 14:18:44,403][__main__][INFO] - test R2=0.9888 RMSE=11.44 MAE=3.77 MSE=130.92 Bias=-2.98 Median APE=2.75 Log10 MSE=0.00 -[2026-08-06 14:18:48,575][__main__][INFO] - Raw 90% interval coverage: 0.9560 -[2026-08-06 14:18:48,576][__main__][INFO] - Conformal 90% interval coverage: 0.9082 -[2026-08-06 14:19:01,976][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005611273332084451 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:19:02,184][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:19:02,328][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:19:03,932][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:19:03,948][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:19:03,956][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:19:03,982][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:19:03,983][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:19:09,235][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 14:19:45,272][__main__][INFO] - test R2=0.9534 RMSE=23.37 MAE=9.32 MSE=546.03 Bias=-8.45 Median APE=10.86 Log10 MSE=0.01 -[2026-08-06 14:19:50,778][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 14:19:50,778][__main__][INFO] - Conformal 90% interval coverage: 0.9095 -[2026-08-06 14:19:58,459][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.000963304013380037 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:19:58,675][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:19:58,821][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:20:00,879][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:20:00,895][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:20:00,902][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:20:00,946][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:20:00,947][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:20:06,440][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M -[2026-08-06 14:20:08,007][__main__][INFO] - test R2=0.9939 RMSE=137789.91 MAE=44693.94 MSE=18986059776.00 Bias=-42966.38 Median APE=0.73 Log10 MSE=0.00 -[2026-08-06 14:20:12,164][__main__][INFO] - Raw 90% interval coverage: 0.9735 -[2026-08-06 14:20:12,164][__main__][INFO] - Conformal 90% interval coverage: 0.9037 -[2026-08-06 14:20:39,005][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004306352647695792 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:20:39,401][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:20:39,570][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:20:43,158][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:20:43,184][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:20:43,195][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:20:43,243][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:20:43,244][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:20:49,877][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 14:23:01,728][__main__][INFO] - test R2=0.9971 RMSE=5.80 MAE=2.30 MSE=33.60 Bias=0.96 Median APE=2.38 Log10 MSE=0.00 -[2026-08-06 14:23:07,443][__main__][INFO] - Raw 90% interval coverage: 0.9476 -[2026-08-06 14:23:07,444][__main__][INFO] - Conformal 90% interval coverage: 0.9063 -[2026-08-06 14:23:19,409][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.001959920797553164 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:23:19,625][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:23:19,771][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:23:21,068][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:23:21,084][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:23:21,092][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:23:21,116][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:23:21,116][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:23:26,271][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 14:23:45,510][__main__][INFO] - test R2=0.9934 RMSE=8.82 MAE=2.77 MSE=77.74 Bias=-2.61 Median APE=0.93 Log10 MSE=0.00 -[2026-08-06 14:23:49,624][__main__][INFO] - Raw 90% interval coverage: 0.9780 -[2026-08-06 14:23:49,624][__main__][INFO] - Conformal 90% interval coverage: 0.9076 -[2026-08-06 14:24:02,457][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.005989485339101165 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:24:02,665][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:24:02,806][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:24:04,869][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:24:04,885][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:24:04,892][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:24:04,957][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:24:04,958][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:24:10,985][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 14:24:21,014][__main__][INFO] - test R2=0.9998 RMSE=24550.53 MAE=8803.23 MSE=602728256.00 Bias=-2379.38 Median APE=0.48 Log10 MSE=0.00 -[2026-08-06 14:24:25,012][__main__][INFO] - Raw 90% interval coverage: 0.8752 -[2026-08-06 14:24:25,012][__main__][INFO] - Conformal 90% interval coverage: 0.9153 -[2026-08-06 14:24:58,530][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0003175346856304151 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:24:58,801][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:24:58,970][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:25:01,025][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:25:01,051][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:25:01,062][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:25:01,111][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:25:01,112][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:25:07,025][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 14:27:11,008][__main__][INFO] - test R2=0.8385 RMSE=43.49 MAE=17.18 MSE=1891.09 Bias=-16.59 Median APE=16.46 Log10 MSE=0.01 -[2026-08-06 14:27:15,247][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 14:27:15,247][__main__][INFO] - Conformal 90% interval coverage: 0.9043 -[2026-08-06 14:27:19,828][__main__][INFO] - test R2=0.9965 RMSE=6.39 MAE=2.43 MSE=40.88 Bias=-0.92 Median APE=2.56 Log10 MSE=0.00 -[2026-08-06 14:27:25,525][__main__][INFO] - Raw 90% interval coverage: 0.9263 -[2026-08-06 14:27:25,526][__main__][INFO] - Conformal 90% interval coverage: 0.8979 -[2026-08-06 14:27:31,809][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00032468152529926763 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:27:32,106][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:27:32,268][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:27:34,545][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:27:34,569][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:27:34,580][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:27:34,615][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:27:34,616][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:27:40,486][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M -[2026-08-06 14:27:40,600][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0007829096128396415 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:27:40,823][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:27:40,965][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:27:42,749][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:27:42,765][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:27:42,789][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:27:42,820][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:27:42,820][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:27:48,292][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 14:28:03,638][__main__][INFO] - test R2=0.9996 RMSE=37176.55 MAE=12185.79 MSE=1382095744.00 Bias=3291.75 Median APE=0.65 Log10 MSE=0.00 -[2026-08-06 14:28:07,749][__main__][INFO] - Raw 90% interval coverage: 0.8462 -[2026-08-06 14:28:07,749][__main__][INFO] - Conformal 90% interval coverage: 0.8765 -[2026-08-06 14:28:25,915][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.008407327215464526 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:28:26,307][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:28:26,450][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:28:28,654][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:28:28,680][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:28:28,690][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:28:28,723][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:28:28,723][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:28:34,658][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 14:30:47,917][__main__][INFO] - test R2=0.9924 RMSE=9.45 MAE=3.11 MSE=89.25 Bias=-1.71 Median APE=2.58 Log10 MSE=0.00 -[2026-08-06 14:30:52,021][__main__][INFO] - Raw 90% interval coverage: 0.9489 -[2026-08-06 14:30:52,021][__main__][INFO] - Conformal 90% interval coverage: 0.8946 -[2026-08-06 14:31:11,340][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.003992068632036663 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:31:11,691][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:31:11,838][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:31:13,951][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:31:13,967][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:31:13,974][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:31:14,168][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:31:14,169][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:31:18,800][__main__][INFO] - test R2=0.9996 RMSE=2.06 MAE=0.73 MSE=4.26 Bias=-0.08 Median APE=0.61 Log10 MSE=0.00 -[2026-08-06 14:31:19,557][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 14:31:22,861][__main__][INFO] - Raw 90% interval coverage: 0.8662 -[2026-08-06 14:31:22,861][__main__][INFO] - Conformal 90% interval coverage: 0.9005 -[2026-08-06 14:31:36,078][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0009705004419454208 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:31:36,316][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:31:36,471][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:31:38,521][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:31:38,544][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:31:38,555][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:31:38,721][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:31:38,722][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:31:44,690][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 14:32:07,618][__main__][INFO] - test R2=0.9719 RMSE=297028.28 MAE=117746.87 MSE=88225792000.00 Bias=-116104.90 Median APE=3.20 Log10 MSE=0.00 -[2026-08-06 14:32:11,828][__main__][INFO] - Raw 90% interval coverage: 0.8151 -[2026-08-06 14:32:11,829][__main__][INFO] - Conformal 90% interval coverage: 0.8662 -[2026-08-06 14:32:31,978][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005065722752137629 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:32:32,272][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:32:32,426][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:32:35,058][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:32:35,076][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:32:35,083][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:32:35,152][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:32:35,153][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:32:41,115][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 14:34:30,787][__main__][INFO] - test R2=0.9933 RMSE=8.88 MAE=3.45 MSE=78.81 Bias=-0.52 Median APE=4.40 Log10 MSE=0.00 -[2026-08-06 14:34:36,405][__main__][INFO] - Raw 90% interval coverage: 0.9586 -[2026-08-06 14:34:36,406][__main__][INFO] - Conformal 90% interval coverage: 0.9347 -[2026-08-06 14:34:44,764][__main__][INFO] - test R2=0.9962 RMSE=6.64 MAE=2.08 MSE=44.07 Bias=-1.89 Median APE=0.84 Log10 MSE=0.00 -[2026-08-06 14:34:48,894][__main__][INFO] - Raw 90% interval coverage: 0.9942 -[2026-08-06 14:34:48,894][__main__][INFO] - Conformal 90% interval coverage: 0.9134 -[2026-08-06 14:34:59,070][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0031763381446113406 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:34:59,393][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:34:59,553][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:35:01,918][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:35:01,942][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:35:01,953][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:35:02,007][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:35:02,008][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:35:05,812][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00794635758898536 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:35:06,085][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:35:06,236][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:35:08,035][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M -[2026-08-06 14:35:08,523][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:35:08,539][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:35:08,547][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:35:08,575][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:35:08,576][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:35:14,258][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 14:36:18,370][__main__][INFO] - test R2=0.9883 RMSE=191131.64 MAE=61764.43 MSE=36531306496.00 Bias=-59741.81 Median APE=0.70 Log10 MSE=0.00 -[2026-08-06 14:36:22,384][__main__][INFO] - Raw 90% interval coverage: 0.9787 -[2026-08-06 14:36:22,384][__main__][INFO] - Conformal 90% interval coverage: 0.8959 -[2026-08-06 14:36:39,461][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.000928401150517254 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:36:39,704][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:36:39,865][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:36:42,233][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:36:42,259][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:36:42,269][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:36:42,300][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:36:42,301][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:36:48,283][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 14:38:18,059][__main__][INFO] - test R2=-44778.6602 RMSE=22897.22 MAE=782.67 MSE=524282880.00 Bias=706.27 Median APE=67.14 Log10 MSE=0.60 -[2026-08-06 14:38:23,695][__main__][INFO] - Raw 90% interval coverage: 0.8080 -[2026-08-06 14:38:23,695][__main__][INFO] - Conformal 90% interval coverage: 0.9341 -[2026-08-06 14:38:41,307][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004945454545049356 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:38:41,588][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:38:41,749][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:38:43,937][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:38:43,960][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:38:43,971][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:38:44,010][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:38:44,010][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:38:50,091][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 14:39:05,646][__main__][INFO] - test R2=-79541184.0000 RMSE=965024.81 MAE=75828.48 MSE=931272851456.00 Bias=75739.50 Median APE=65.25 Log10 MSE=0.76 -[2026-08-06 14:39:11,412][__main__][INFO] - Raw 90% interval coverage: 0.8326 -[2026-08-06 14:39:11,412][__main__][INFO] - Conformal 90% interval coverage: 0.8869 -[2026-08-06 14:39:26,163][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00031301703594982066 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:39:26,365][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:39:26,505][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:39:28,537][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:39:28,561][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:39:28,572][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:39:28,616][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:39:28,618][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:39:34,707][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M -[2026-08-06 14:39:56,831][__main__][INFO] - test R2=0.9417 RMSE=427606.38 MAE=154949.14 MSE=182847209472.00 Bias=-50363.64 Median APE=14.30 Log10 MSE=0.01 -[2026-08-06 14:40:02,393][__main__][INFO] - Raw 90% interval coverage: 0.9696 -[2026-08-06 14:40:02,393][__main__][INFO] - Conformal 90% interval coverage: 0.8836 -[2026-08-06 14:40:22,959][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0007807120791233418 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:40:23,358][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:40:23,519][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:40:26,199][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:40:26,226][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:40:26,237][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:40:26,287][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:40:26,288][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:40:32,184][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M -[2026-08-06 14:42:28,691][__main__][INFO] - test R2=0.9878 RMSE=11.93 MAE=3.89 MSE=142.26 Bias=-3.16 Median APE=2.76 Log10 MSE=0.00 -[2026-08-06 14:42:32,876][__main__][INFO] - Raw 90% interval coverage: 0.9399 -[2026-08-06 14:42:32,876][__main__][INFO] - Conformal 90% interval coverage: 0.9017 -[2026-08-06 14:42:53,768][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005608201619727719 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:42:54,001][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:42:54,158][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:42:56,146][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:42:56,170][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:42:56,181][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:42:56,228][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:42:56,229][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:43:02,052][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 14:43:28,270][__main__][INFO] - test R2=0.9993 RMSE=2.79 MAE=0.84 MSE=7.77 Bias=-0.36 Median APE=0.73 Log10 MSE=0.00 -[2026-08-06 14:43:34,031][__main__][INFO] - Raw 90% interval coverage: 0.9948 -[2026-08-06 14:43:34,032][__main__][INFO] - Conformal 90% interval coverage: 0.9101 -[2026-08-06 14:43:35,867][__main__][INFO] - test R2=0.9996 RMSE=33812.29 MAE=12368.58 MSE=1143270784.00 Bias=-4983.61 Median APE=0.79 Log10 MSE=0.00 -[2026-08-06 14:43:41,438][__main__][INFO] - Raw 90% interval coverage: 0.8306 -[2026-08-06 14:43:41,439][__main__][INFO] - Conformal 90% interval coverage: 0.9341 -[2026-08-06 14:43:51,405][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0020953978814026164 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:43:51,753][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:43:51,906][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:43:53,714][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:43:53,738][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:43:53,748][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:43:53,785][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:43:53,785][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:43:57,015][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0001773202552539171 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:43:57,399][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:43:57,552][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:43:59,875][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 14:43:59,954][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:43:59,980][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:43:59,990][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:44:00,039][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:44:00,040][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:44:05,854][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 14:46:12,502][__main__][INFO] - test R2=0.9966 RMSE=6.27 MAE=2.30 MSE=39.37 Bias=-0.44 Median APE=2.28 Log10 MSE=0.00 -[2026-08-06 14:46:18,195][__main__][INFO] - Raw 90% interval coverage: 0.9606 -[2026-08-06 14:46:18,195][__main__][INFO] - Conformal 90% interval coverage: 0.8972 -[2026-08-06 14:46:40,988][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006299910994120604 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:46:41,416][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:46:41,578][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:46:44,022][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:46:44,046][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:46:44,057][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:46:44,104][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:46:44,104][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:46:49,984][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M -[2026-08-06 14:47:02,503][__main__][INFO] - test R2=0.9965 RMSE=104772.45 MAE=28594.06 MSE=10977266688.00 Bias=-23978.31 Median APE=0.76 Log10 MSE=0.00 -[2026-08-06 14:47:06,666][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 14:47:06,666][__main__][INFO] - Conformal 90% interval coverage: 0.9218 -[2026-08-06 14:47:22,471][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0014106363074070452 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:47:22,805][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:47:22,966][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:47:25,472][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:47:25,497][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:47:25,508][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:47:25,587][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:47:25,587][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:47:31,987][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M -[2026-08-06 14:47:45,888][__main__][INFO] - test R2=0.9998 RMSE=1.39 MAE=0.51 MSE=1.93 Bias=0.12 Median APE=0.43 Log10 MSE=0.00 -[2026-08-06 14:47:51,384][__main__][INFO] - Raw 90% interval coverage: 0.8875 -[2026-08-06 14:47:51,385][__main__][INFO] - Conformal 90% interval coverage: 0.8998 -[2026-08-06 14:48:12,095][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00034085263159978863 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:48:12,513][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:48:12,670][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:48:14,915][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:48:14,939][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:48:14,950][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:48:14,985][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:48:14,986][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:48:21,136][estimint.v2.training.train_step][INFO] - Total parameters: 2.16M -[2026-08-06 14:50:00,425][__main__][INFO] - test R2=0.9963 RMSE=6.62 MAE=2.57 MSE=43.78 Bias=0.43 Median APE=2.64 Log10 MSE=0.00 -[2026-08-06 14:50:05,902][__main__][INFO] - Raw 90% interval coverage: 0.9593 -[2026-08-06 14:50:05,902][__main__][INFO] - Conformal 90% interval coverage: 0.9108 -[2026-08-06 14:50:23,953][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0009004122036440726 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:50:24,199][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:50:24,359][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:50:26,576][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:50:26,602][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:50:26,613][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:50:26,691][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:50:26,693][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:50:32,251][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 14:50:35,351][__main__][INFO] - test R2=0.9996 RMSE=36004.70 MAE=13914.90 MSE=1296338304.00 Bias=-5233.16 Median APE=0.80 Log10 MSE=0.00 -[2026-08-06 14:50:40,859][__main__][INFO] - Raw 90% interval coverage: 0.8688 -[2026-08-06 14:50:40,859][__main__][INFO] - Conformal 90% interval coverage: 0.9063 -[2026-08-06 14:50:57,898][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.005409525320780131 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:50:58,169][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:50:58,327][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:51:00,130][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:51:00,147][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:51:00,155][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:51:00,190][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:51:00,190][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:51:06,137][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 14:51:32,020][__main__][INFO] - test R2=0.9947 RMSE=7.89 MAE=2.19 MSE=62.26 Bias=-0.98 Median APE=1.72 Log10 MSE=0.00 -[2026-08-06 14:51:37,538][__main__][INFO] - Raw 90% interval coverage: 0.9955 -[2026-08-06 14:51:37,538][__main__][INFO] - Conformal 90% interval coverage: 0.9276 -[2026-08-06 14:51:49,906][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006638009634874219 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:51:50,142][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:51:50,284][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:51:51,880][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:51:51,895][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:51:51,903][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:51:51,968][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:51:51,969][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:51:57,426][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 14:54:10,269][__main__][INFO] - test R2=0.9893 RMSE=11.19 MAE=3.68 MSE=125.19 Bias=-2.93 Median APE=2.49 Log10 MSE=0.00 -[2026-08-06 14:54:12,170][__main__][INFO] - test R2=0.9935 RMSE=142221.70 MAE=52701.77 MSE=20227014656.00 Bias=-46953.99 Median APE=2.06 Log10 MSE=0.00 -[2026-08-06 14:54:14,447][__main__][INFO] - Raw 90% interval coverage: 0.9373 -[2026-08-06 14:54:14,448][__main__][INFO] - Conformal 90% interval coverage: 0.8953 -[2026-08-06 14:54:17,726][__main__][INFO] - Raw 90% interval coverage: 0.9767 -[2026-08-06 14:54:17,727][__main__][INFO] - Conformal 90% interval coverage: 0.9173 -[2026-08-06 14:54:24,388][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.001677933116395654 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:54:24,609][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:54:24,747][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:54:26,414][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:54:26,432][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:54:26,439][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:54:26,482][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:54:26,483][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:54:26,991][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.007497978926040672 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:54:27,179][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:54:27,315][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:54:28,684][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:54:28,701][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:54:28,708][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:54:28,759][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:54:28,760][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:54:31,842][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 14:54:34,155][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 14:55:47,681][__main__][INFO] - test R2=0.9996 RMSE=2.23 MAE=0.80 MSE=4.97 Bias=0.20 Median APE=0.69 Log10 MSE=0.00 -[2026-08-06 14:55:53,374][__main__][INFO] - Raw 90% interval coverage: 0.7666 -[2026-08-06 14:55:53,374][__main__][INFO] - Conformal 90% interval coverage: 0.8985 -[2026-08-06 14:56:03,317][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00017060635463242747 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:56:03,521][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:56:03,663][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:56:05,206][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:56:05,221][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:56:05,229][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:56:05,266][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:56:05,267][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:56:10,709][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 14:57:40,692][__main__][INFO] - test R2=0.9992 RMSE=49757.59 MAE=18989.88 MSE=2475818240.00 Bias=-15217.43 Median APE=1.72 Log10 MSE=0.00 -[2026-08-06 14:57:42,886][__main__][INFO] - test R2=0.9969 RMSE=5.98 MAE=2.28 MSE=35.81 Bias=-0.54 Median APE=2.41 Log10 MSE=0.00 -[2026-08-06 14:57:46,414][__main__][INFO] - Raw 90% interval coverage: 0.9502 -[2026-08-06 14:57:46,414][__main__][INFO] - Conformal 90% interval coverage: 0.9056 -[2026-08-06 14:57:48,568][__main__][INFO] - Raw 90% interval coverage: 0.9386 -[2026-08-06 14:57:48,569][__main__][INFO] - Conformal 90% interval coverage: 0.8869 -[2026-08-06 14:57:56,614][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006665560746576976 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:57:56,761][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.000439958170912193 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:57:56,826][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:57:56,996][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:57:57,100][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:57:57,153][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:57:58,416][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:57:58,432][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:57:58,434][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:57:58,442][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:57:58,448][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:57:58,455][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 14:57:58,474][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 14:57:58,474][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:57:58,504][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 14:57:58,505][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:58:03,621][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-06 14:58:03,939][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 14:59:09,910][__main__][INFO] - test R2=0.9986 RMSE=4.00 MAE=1.57 MSE=15.99 Bias=-0.07 Median APE=1.58 Log10 MSE=0.00 -[2026-08-06 14:59:14,148][__main__][INFO] - Raw 90% interval coverage: 0.8811 -[2026-08-06 14:59:14,149][__main__][INFO] - Conformal 90% interval coverage: 0.9211 -[2026-08-06 14:59:21,923][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0013638728911172903 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 14:59:22,108][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 14:59:22,241][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 14:59:23,431][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 14:59:23,446][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 14:59:23,454][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:59:23,472][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 14:59:23,473][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 14:59:28,709][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 15:01:13,122][__main__][INFO] - test R2=0.9994 RMSE=42741.98 MAE=13964.16 MSE=1826877312.00 Bias=-133.82 Median APE=0.64 Log10 MSE=0.00 -[2026-08-06 15:01:15,789][__main__][INFO] - test R2=0.9967 RMSE=6.17 MAE=2.51 MSE=38.07 Bias=0.60 Median APE=2.62 Log10 MSE=0.00 -[2026-08-06 15:01:18,839][__main__][INFO] - Raw 90% interval coverage: 0.9955 -[2026-08-06 15:01:18,840][__main__][INFO] - Conformal 90% interval coverage: 0.9244 -[2026-08-06 15:01:21,452][__main__][INFO] - Raw 90% interval coverage: 0.9800 -[2026-08-06 15:01:21,453][__main__][INFO] - Conformal 90% interval coverage: 0.8985 -[2026-08-06 15:01:27,570][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004120846762862936 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:01:27,787][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:01:27,924][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:01:28,139][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0013483856201908803 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:01:28,324][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:01:28,461][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:01:29,232][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:01:29,250][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:01:29,258][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:01:29,289][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:01:29,290][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:01:29,568][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:01:29,584][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:01:29,592][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:01:29,627][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:01:29,628][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:01:34,705][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 15:01:34,939][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 15:02:25,717][__main__][INFO] - test R2=0.9905 RMSE=10.52 MAE=3.32 MSE=110.65 Bias=-3.17 Median APE=1.02 Log10 MSE=0.00 -[2026-08-06 15:02:29,824][__main__][INFO] - Raw 90% interval coverage: 0.9942 -[2026-08-06 15:02:29,824][__main__][INFO] - Conformal 90% interval coverage: 0.9250 -[2026-08-06 15:02:39,051][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00025279934620848934 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:02:39,261][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:02:39,400][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:02:40,554][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:02:40,570][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:02:40,578][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:02:40,599][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:02:40,600][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:02:46,026][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M -[2026-08-06 15:04:32,828][__main__][INFO] - test R2=0.9923 RMSE=9.46 MAE=3.10 MSE=89.59 Bias=-1.76 Median APE=2.78 Log10 MSE=0.00 -[2026-08-06 15:04:36,945][__main__][INFO] - Raw 90% interval coverage: 0.9425 -[2026-08-06 15:04:36,945][__main__][INFO] - Conformal 90% interval coverage: 0.8824 -[2026-08-06 15:04:46,389][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0011339706004154422 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:04:46,584][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:04:46,726][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:04:48,200][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:04:48,216][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:04:48,224][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:04:48,249][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:04:48,249][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:04:53,614][estimint.v2.training.train_step][INFO] - Total parameters: 0.83M -[2026-08-06 15:05:10,240][__main__][INFO] - test R2=0.9925 RMSE=153427.06 MAE=48789.07 MSE=23539865600.00 Bias=-44672.62 Median APE=0.69 Log10 MSE=0.00 -[2026-08-06 15:05:14,281][__main__][INFO] - Raw 90% interval coverage: 0.9845 -[2026-08-06 15:05:14,281][__main__][INFO] - Conformal 90% interval coverage: 0.9095 -[2026-08-06 15:05:22,467][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.005444773088433371 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:05:22,660][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:05:22,801][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:05:23,880][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:05:23,898][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:05:23,905][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:05:23,938][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:05:23,939][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:05:29,250][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 15:05:57,062][__main__][INFO] - test R2=0.9977 RMSE=5.24 MAE=1.83 MSE=27.42 Bias=-0.36 Median APE=1.66 Log10 MSE=0.00 -[2026-08-06 15:06:02,630][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 15:06:02,631][__main__][INFO] - Conformal 90% interval coverage: 0.9263 -[2026-08-06 15:06:09,912][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00025733578698090305 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:06:10,111][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:06:10,254][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:06:11,715][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:06:11,731][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:06:11,739][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:06:11,765][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:06:11,765][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:06:17,209][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M -[2026-08-06 15:08:31,460][__main__][INFO] - test R2=0.9880 RMSE=11.87 MAE=3.59 MSE=140.88 Bias=-2.72 Median APE=2.68 Log10 MSE=0.00 -[2026-08-06 15:08:35,619][__main__][INFO] - Raw 90% interval coverage: 0.9153 -[2026-08-06 15:08:35,619][__main__][INFO] - Conformal 90% interval coverage: 0.8920 -[2026-08-06 15:08:44,398][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0008424246968696935 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:08:44,591][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:08:44,735][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:08:46,263][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:08:46,279][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:08:46,300][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:08:46,329][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:08:46,330][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:08:51,637][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M -[2026-08-06 15:09:16,219][__main__][INFO] - test R2=0.9999 RMSE=17178.40 MAE=6237.03 MSE=295097376.00 Bias=2183.35 Median APE=0.35 Log10 MSE=0.00 -[2026-08-06 15:09:17,678][__main__][INFO] - test R2=0.9952 RMSE=7.46 MAE=2.28 MSE=55.71 Bias=-1.99 Median APE=1.00 Log10 MSE=0.00 -[2026-08-06 15:09:21,775][__main__][INFO] - Raw 90% interval coverage: 0.9373 -[2026-08-06 15:09:21,776][__main__][INFO] - Conformal 90% interval coverage: 0.8765 -[2026-08-06 15:09:21,827][__main__][INFO] - Raw 90% interval coverage: 0.9981 -[2026-08-06 15:09:21,827][__main__][INFO] - Conformal 90% interval coverage: 0.8830 -[2026-08-06 15:09:29,821][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0002120981397925171 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:09:30,025][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:09:30,164][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:09:30,732][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0007321301665149796 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:09:30,922][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:09:31,062][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:09:31,357][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:09:31,373][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:09:31,381][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:09:31,413][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:09:31,413][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:09:32,248][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:09:32,264][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:09:32,272][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:09:32,295][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:09:32,295][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:09:36,820][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 15:09:37,556][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 15:12:00,076][__main__][INFO] - test R2=0.9976 RMSE=5.33 MAE=2.02 MSE=28.45 Bias=-0.46 Median APE=2.31 Log10 MSE=0.00 -[2026-08-06 15:12:05,720][__main__][INFO] - Raw 90% interval coverage: 0.9347 -[2026-08-06 15:12:05,720][__main__][INFO] - Conformal 90% interval coverage: 0.9037 -[2026-08-06 15:12:16,176][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0007198800797122557 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:12:16,394][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:12:16,536][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:12:17,789][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:12:17,805][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:12:17,813][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:12:17,856][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:12:17,858][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:12:22,942][estimint.v2.training.train_step][INFO] - Total parameters: 0.58M -[2026-08-06 15:13:13,514][__main__][INFO] - test R2=0.9925 RMSE=152941.02 MAE=45334.33 MSE=23390953472.00 Bias=-41234.25 Median APE=1.30 Log10 MSE=0.00 -[2026-08-06 15:13:17,845][__main__][INFO] - Raw 90% interval coverage: 0.9871 -[2026-08-06 15:13:17,845][__main__][INFO] - Conformal 90% interval coverage: 0.9192 -[2026-08-06 15:13:23,758][__main__][INFO] - test R2=0.9782 RMSE=15.99 MAE=4.84 MSE=255.55 Bias=-1.58 Median APE=3.41 Log10 MSE=0.00 -[2026-08-06 15:13:23,968][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.001011616367927375 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:13:24,174][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:13:24,312][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:13:25,558][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:13:25,574][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:13:25,582][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:13:25,600][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:13:25,601][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:13:29,549][__main__][INFO] - Raw 90% interval coverage: 0.8003 -[2026-08-06 15:13:29,549][__main__][INFO] - Conformal 90% interval coverage: 0.8468 -[2026-08-06 15:13:31,117][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-06 15:13:36,829][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004946628310052123 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:13:37,012][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:13:37,154][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:13:38,292][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:13:38,308][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:13:38,316][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:13:38,335][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:13:38,335][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:13:43,630][estimint.v2.training.train_step][INFO] - Total parameters: 1.10M -[2026-08-06 15:15:21,342][__main__][INFO] - test R2=0.9936 RMSE=8.66 MAE=2.91 MSE=74.96 Bias=-1.99 Median APE=2.39 Log10 MSE=0.00 -[2026-08-06 15:15:25,476][__main__][INFO] - Raw 90% interval coverage: 0.9502 -[2026-08-06 15:15:25,476][__main__][INFO] - Conformal 90% interval coverage: 0.8714 -[2026-08-06 15:15:37,354][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0012164537994387564 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:15:37,552][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:15:37,690][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:15:39,073][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:15:39,089][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:15:39,097][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:15:39,118][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:15:39,118][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:15:44,424][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 15:17:23,650][__main__][INFO] - test R2=0.9955 RMSE=7.25 MAE=2.17 MSE=52.62 Bias=-1.97 Median APE=0.72 Log10 MSE=0.00 -[2026-08-06 15:17:24,394][__main__][INFO] - test R2=0.9989 RMSE=59410.11 MAE=19392.91 MSE=3529560832.00 Bias=-11595.28 Median APE=1.03 Log10 MSE=0.00 -[2026-08-06 15:17:27,872][__main__][INFO] - Raw 90% interval coverage: 0.9806 -[2026-08-06 15:17:27,872][__main__][INFO] - Conformal 90% interval coverage: 0.9231 -[2026-08-06 15:17:30,231][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 15:17:30,232][__main__][INFO] - Conformal 90% interval coverage: 0.9108 -[2026-08-06 15:17:39,180][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00037559511763267 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:17:39,181][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004377063305232232 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:17:39,447][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:17:39,529][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:17:39,689][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:17:39,708][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:17:41,153][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:17:41,153][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:17:41,170][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:17:41,172][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:17:41,177][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:17:41,180][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:17:41,214][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:17:41,215][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:17:41,219][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:17:41,221][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:17:46,625][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 15:17:46,765][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 15:19:36,845][__main__][INFO] - test R2=0.9972 RMSE=5.68 MAE=2.24 MSE=32.28 Bias=0.11 Median APE=2.81 Log10 MSE=0.00 -[2026-08-06 15:19:42,434][__main__][INFO] - Raw 90% interval coverage: 0.9379 -[2026-08-06 15:19:42,434][__main__][INFO] - Conformal 90% interval coverage: 0.8959 -[2026-08-06 15:19:58,533][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.000479518230201964 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:19:58,760][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:19:58,905][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:20:00,402][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:20:00,426][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:20:00,437][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:20:00,471][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:20:00,472][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:20:06,188][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M -[2026-08-06 15:21:24,485][__main__][INFO] - test R2=0.9999 RMSE=21661.26 MAE=7835.85 MSE=469210112.00 Bias=-58.64 Median APE=0.38 Log10 MSE=0.00 -[2026-08-06 15:21:28,437][__main__][INFO] - test R2=0.9858 RMSE=12.91 MAE=4.32 MSE=166.55 Bias=-4.22 Median APE=1.21 Log10 MSE=0.00 -[2026-08-06 15:21:28,665][__main__][INFO] - Raw 90% interval coverage: 0.8028 -[2026-08-06 15:21:28,665][__main__][INFO] - Conformal 90% interval coverage: 0.9101 -[2026-08-06 15:21:32,600][__main__][INFO] - Raw 90% interval coverage: 0.9845 -[2026-08-06 15:21:32,600][__main__][INFO] - Conformal 90% interval coverage: 0.8791 -[2026-08-06 15:21:42,376][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00011659772097651203 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:21:42,376][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.005095670695681824 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:21:42,625][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:21:42,704][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:21:42,860][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:21:42,879][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:21:44,384][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:21:44,385][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:21:44,401][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:21:44,402][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:21:44,409][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:21:44,411][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:21:44,437][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:21:44,438][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:21:44,448][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:21:44,449][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:21:49,733][estimint.v2.training.train_step][INFO] - Total parameters: 0.22M -[2026-08-06 15:21:49,866][estimint.v2.training.train_step][INFO] - Total parameters: 0.55M -[2026-08-06 15:23:59,092][__main__][INFO] - test R2=0.9978 RMSE=5.07 MAE=2.04 MSE=25.67 Bias=0.35 Median APE=2.36 Log10 MSE=0.00 -[2026-08-06 15:24:04,649][__main__][INFO] - Raw 90% interval coverage: 0.9328 -[2026-08-06 15:24:04,650][__main__][INFO] - Conformal 90% interval coverage: 0.8940 -[2026-08-06 15:24:14,837][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006960763833740912 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:24:15,032][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:24:15,168][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:24:16,518][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:24:16,534][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:24:16,541][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:24:16,574][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:24:16,575][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:24:21,998][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M -[2026-08-06 15:24:47,413][__main__][INFO] - test R2=0.9992 RMSE=49203.78 MAE=16129.74 MSE=2421011712.00 Bias=1949.51 Median APE=0.58 Log10 MSE=0.00 -[2026-08-06 15:24:51,522][__main__][INFO] - Raw 90% interval coverage: 0.8765 -[2026-08-06 15:24:51,523][__main__][INFO] - Conformal 90% interval coverage: 0.8901 -[2026-08-06 15:24:59,854][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005214189665141573 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:25:00,070][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:25:00,214][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:25:01,449][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:25:01,465][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:25:01,473][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:25:01,502][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:25:01,502][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:25:06,818][estimint.v2.training.train_step][INFO] - Total parameters: 0.56M -[2026-08-06 15:25:40,126][__main__][INFO] - test R2=0.9388 RMSE=26.76 MAE=8.76 MSE=716.07 Bias=2.57 Median APE=6.93 Log10 MSE=0.00 -[2026-08-06 15:25:45,677][__main__][INFO] - Raw 90% interval coverage: 0.7602 -[2026-08-06 15:25:45,677][__main__][INFO] - Conformal 90% interval coverage: 0.9043 -[2026-08-06 15:25:56,496][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0005062651456405674 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:25:56,704][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:25:56,843][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:25:58,110][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:25:58,125][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:25:58,133][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:25:58,151][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:25:58,152][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:26:03,579][estimint.v2.training.train_step][INFO] - Total parameters: 0.57M -[2026-08-06 15:27:59,771][__main__][INFO] - test R2=0.9846 RMSE=13.42 MAE=4.40 MSE=179.98 Bias=-3.82 Median APE=2.73 Log10 MSE=0.00 -[2026-08-06 15:28:03,866][__main__][INFO] - Raw 90% interval coverage: 0.9257 -[2026-08-06 15:28:03,866][__main__][INFO] - Conformal 90% interval coverage: 0.8785 -[2026-08-06 15:28:13,146][__main__][INFO] - test R2=0.9963 RMSE=107421.96 MAE=38417.21 MSE=11539477504.00 Bias=-27930.07 Median APE=2.10 Log10 MSE=0.00 -[2026-08-06 15:28:18,079][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00020567483023273297 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:28:18,296][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:28:18,445][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:28:18,824][__main__][INFO] - Raw 90% interval coverage: 0.8500 -[2026-08-06 15:28:18,824][__main__][INFO] - Conformal 90% interval coverage: 0.9011 -[2026-08-06 15:28:19,675][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:28:19,691][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:28:19,699][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:28:19,732][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:28:19,733][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:28:25,128][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M -[2026-08-06 15:28:26,429][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0002904032403744138 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:28:26,621][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:28:26,759][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:28:27,857][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:28:27,874][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:28:27,882][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:28:27,903][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:28:27,904][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:28:33,290][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 15:29:00,914][__main__][INFO] - test R2=0.9995 RMSE=2.35 MAE=0.75 MSE=5.52 Bias=-0.30 Median APE=0.62 Log10 MSE=0.00 -[2026-08-06 15:29:05,013][__main__][INFO] - Raw 90% interval coverage: 0.8630 -[2026-08-06 15:29:05,013][__main__][INFO] - Conformal 90% interval coverage: 0.9037 -[2026-08-06 15:29:11,751][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 2 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0010691674228170127 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:29:11,932][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:29:12,064][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:29:13,331][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:29:13,346][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:29:13,354][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:29:13,374][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:29:13,374][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:29:18,670][estimint.v2.training.train_step][INFO] - Total parameters: 0.29M -[2026-08-06 15:31:40,237][__main__][INFO] - test R2=0.9988 RMSE=61917.42 MAE=21403.18 MSE=3833766656.00 Bias=-8243.08 Median APE=1.32 Log10 MSE=0.00 -[2026-08-06 15:31:45,948][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 15:31:45,949][__main__][INFO] - Conformal 90% interval coverage: 0.9289 -[2026-08-06 15:31:57,817][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00010858418001539352 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:31:58,022][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:31:58,163][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:31:59,436][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:31:59,454][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:31:59,461][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:31:59,498][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:31:59,499][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:32:05,451][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 15:32:14,643][__main__][INFO] - test R2=0.9966 RMSE=6.28 MAE=2.16 MSE=39.42 Bias=-0.48 Median APE=2.33 Log10 MSE=0.00 -[2026-08-06 15:32:20,079][__main__][INFO] - Raw 90% interval coverage: 0.9173 -[2026-08-06 15:32:20,079][__main__][INFO] - Conformal 90% interval coverage: 0.8830 -[2026-08-06 15:32:23,666][__main__][INFO] - test R2=0.9987 RMSE=3.84 MAE=1.06 MSE=14.73 Bias=-0.62 Median APE=0.82 Log10 MSE=0.00 -[2026-08-06 15:32:25,686][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: false -dropout_rate: 0.05 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0011700604384657263 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:32:25,871][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:32:26,013][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:32:27,137][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:32:27,152][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:32:27,160][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:32:27,184][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:32:27,184][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:32:29,267][__main__][INFO] - Raw 90% interval coverage: 0.8365 -[2026-08-06 15:32:29,268][__main__][INFO] - Conformal 90% interval coverage: 0.8849 -[2026-08-06 15:32:32,399][estimint.v2.training.train_step][INFO] - Total parameters: 1.09M -[2026-08-06 15:32:37,762][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006437539196626359 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:32:37,952][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:32:38,096][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:32:39,379][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:32:39,395][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:32:39,403][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:32:39,433][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:32:39,434][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:32:44,967][estimint.v2.training.train_step][INFO] - Total parameters: 1.62M -[2026-08-06 15:35:51,768][__main__][INFO] - test R2=0.9759 RMSE=274810.97 MAE=85500.74 MSE=75521073152.00 Bias=-1483.02 Median APE=4.59 Log10 MSE=0.00 -[2026-08-06 15:35:51,895][__main__][INFO] - test R2=0.9993 RMSE=2.80 MAE=0.97 MSE=7.85 Bias=-0.13 Median APE=1.00 Log10 MSE=0.00 -[2026-08-06 15:35:57,357][__main__][INFO] - Raw 90% interval coverage: 0.7692 -[2026-08-06 15:35:57,357][__main__][INFO] - Conformal 90% interval coverage: 0.9192 -[2026-08-06 15:35:57,399][__main__][INFO] - Raw 90% interval coverage: 0.8222 -[2026-08-06 15:35:57,399][__main__][INFO] - Conformal 90% interval coverage: 0.9282 -[2026-08-06 15:36:08,875][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 4 -mlp_residual: true -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.001365567655358299 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:36:08,876][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 4 -mlp_residual: false -dropout_rate: 0 -n_bins: 24 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0019399093796720367 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:36:09,139][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:36:09,221][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:36:09,373][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:36:09,392][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:36:10,709][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:36:10,713][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:36:10,726][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:36:10,728][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:36:10,733][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:36:10,736][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:36:10,766][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:36:10,766][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:36:10,768][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:36:10,768][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:36:12,620][__main__][INFO] - test R2=0.9943 RMSE=8.20 MAE=2.72 MSE=67.21 Bias=-1.47 Median APE=2.34 Log10 MSE=0.00 -[2026-08-06 15:36:16,201][estimint.v2.training.train_step][INFO] - Total parameters: 0.28M -[2026-08-06 15:36:16,265][estimint.v2.training.train_step][INFO] - Total parameters: 2.15M -[2026-08-06 15:36:16,915][__main__][INFO] - Raw 90% interval coverage: 0.8966 -[2026-08-06 15:36:16,915][__main__][INFO] - Conformal 90% interval coverage: 0.8817 -[2026-08-06 15:36:22,823][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0004120706509314787 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:36:23,012][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:36:23,157][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:36:24,369][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:36:24,385][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:36:24,393][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:36:24,416][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:36:24,416][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:36:29,650][estimint.v2.training.train_step][INFO] - Total parameters: 1.63M -[2026-08-06 15:39:13,474][__main__][INFO] - test R2=0.9996 RMSE=37129.04 MAE=11586.69 MSE=1378565632.00 Bias=1380.95 Median APE=0.51 Log10 MSE=0.00 -[2026-08-06 15:39:17,634][__main__][INFO] - Raw 90% interval coverage: 0.8662 -[2026-08-06 15:39:17,635][__main__][INFO] - Conformal 90% interval coverage: 0.8992 -[2026-08-06 15:39:32,596][__main__][INFO] - predictor: eir -target: hbr_y9 -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006244780161786682 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:39:32,795][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:39:32,955][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:39:34,201][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:39:34,218][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:39:34,225][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:39:34,257][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_eir-hbr_y9.csv -[2026-08-06 15:39:34,257][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:39:39,665][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M -[2026-08-06 15:39:39,758][__main__][INFO] - test R2=0.9964 RMSE=6.54 MAE=2.47 MSE=42.73 Bias=-0.30 Median APE=2.53 Log10 MSE=0.00 -[2026-08-06 15:39:45,373][__main__][INFO] - Raw 90% interval coverage: 0.9580 -[2026-08-06 15:39:45,374][__main__][INFO] - Conformal 90% interval coverage: 0.9037 -[2026-08-06 15:39:54,093][__main__][INFO] - predictor: prev_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 256 -depth: 3 -mlp_residual: true -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.0006494400653788419 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:39:54,286][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:39:54,430][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:39:55,552][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:39:55,568][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:39:55,576][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_prev_y9-eir.csv -[2026-08-06 15:39:55,602][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_prev_y9-eir.csv -[2026-08-06 15:39:55,602][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:40:00,730][estimint.v2.training.train_step][INFO] - Total parameters: 0.42M -[2026-08-06 15:40:08,901][__main__][INFO] - test R2=0.9785 RMSE=15.85 MAE=6.63 MSE=251.21 Bias=-5.84 Median APE=11.91 Log10 MSE=0.00 -[2026-08-06 15:40:14,576][__main__][INFO] - Raw 90% interval coverage: 1.0000 -[2026-08-06 15:40:14,577][__main__][INFO] - Conformal 90% interval coverage: 0.9095 -[2026-08-06 15:40:21,822][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 3 -mlp_residual: false -dropout_rate: 0.1 -n_bins: 32 -rqs_bounds: 8 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00015320249295013158 -batch_size: 256 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:40:22,012][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:40:22,155][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:40:23,355][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:40:23,371][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:40:23,378][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:40:23,401][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:40:23,402][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:40:28,785][estimint.v2.training.train_step][INFO] - Total parameters: 0.84M -[2026-08-06 15:43:12,024][__main__][INFO] - test R2=0.9964 RMSE=6.52 MAE=2.38 MSE=42.47 Bias=-0.57 Median APE=2.37 Log10 MSE=0.00 -[2026-08-06 15:43:17,639][__main__][INFO] - Raw 90% interval coverage: 0.9586 -[2026-08-06 15:43:17,640][__main__][INFO] - Conformal 90% interval coverage: 0.9179 -[2026-08-06 15:43:24,984][__main__][INFO] - test R2=0.9998 RMSE=23429.46 MAE=9156.10 MSE=548939712.00 Bias=105.12 Median APE=0.62 Log10 MSE=0.00 -[2026-08-06 15:43:30,746][__main__][INFO] - Raw 90% interval coverage: 0.9845 -[2026-08-06 15:43:30,747][__main__][INFO] - Conformal 90% interval coverage: 0.9186 -[2026-08-06 15:44:06,509][__main__][INFO] - test R2=0.9925 RMSE=9.37 MAE=2.87 MSE=87.81 Bias=-2.75 Median APE=0.96 Log10 MSE=0.00 -[2026-08-06 15:44:10,755][__main__][INFO] - Raw 90% interval coverage: 0.9942 -[2026-08-06 15:44:10,755][__main__][INFO] - Conformal 90% interval coverage: 0.8811 -[2026-08-06 15:44:25,322][__main__][INFO] - predictor: hbr_y9 -target: eir -name: ${predictor}-${target} -data_file: datasets/estimint_simulations_y9.parquet -split_file: datasets/split_${name}.csv -num_workers: 0 -use_existing_split: false -stratify: false -calib_frac: 0.06 -width: 512 -depth: 2 -mlp_residual: true -dropout_rate: 0.05 -n_bins: 32 -rqs_bounds: 6 -num_epochs: 120 -min_epochs: 120 -patience: 30 -lr: 0.00035203356591147314 -batch_size: 512 -weight_decay: 0.0001 -checkpoint_dir: ${output_dir}/ckpts-${cur_time} -cur_time: ${now:%Y-%m-%dT%H:%M:%S} -seed: 42 -use_wandb: true -output_dir: train_outputs/${name} -wandb: - project: estimint-training-${name} - name: train-${cur_time} - -[2026-08-06 15:44:30,268][jax._src.xla_bridge][INFO] - Unable to initialize backend 'tpu': INTERNAL: Failed to open libtpu.so: libtpu.so: cannot open shared object file: No such file or directory -[2026-08-06 15:44:32,719][__main__][INFO] - JAX devices: [CudaDevice(id=0)] -[2026-08-06 15:44:34,517][estimint.v2.data.preprocess][INFO] - Filtering with prev_threshold 0.01 on prevalence: 12874 valid parameter-simulation pairs out of 16384 -[2026-08-06 15:44:34,536][estimint.v2.data.preprocess][INFO] - Creating new train/val/calib/test split -[2026-08-06 15:44:34,544][estimint.v2.data.preprocess][INFO] - Saving split to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:44:34,570][estimint.v2.data.preprocess][INFO] - Split saved to datasets/split_hbr_y9-eir.csv -[2026-08-06 15:44:34,570][estimint.v2.data.preprocess][INFO] - Split — train: 9009, val: 1543, calib: 775, test: 1547 -[2026-08-06 15:44:40,072][estimint.v2.training.train_step][INFO] - Total parameters: 1.11M -[2026-08-06 15:47:45,961][__main__][INFO] - test R2=0.9995 RMSE=2.48 MAE=0.83 MSE=6.17 Bias=0.13 Median APE=0.67 Log10 MSE=0.00 -[2026-08-06 15:47:51,488][__main__][INFO] - Raw 90% interval coverage: 0.9780 -[2026-08-06 15:47:51,488][__main__][INFO] - Conformal 90% interval coverage: 0.9308 From cc8f23ced32a0e907ecd418be0f4a107c9b75c44 Mon Sep 17 00:00:00 2001 From: Anmol Date: Thu, 13 Aug 2026 14:42:05 +0000 Subject: [PATCH 25/32] Bump version to 1.6.4 and update dependencies - Updated version in pyproject.toml from 1.5.4 to 1.6.4. - Added 'gpu' extra dependency to the 'all' group in pyproject.toml. - Introduced new module `eir_models.py` for loading and inference of EIR models. - Refactored `hbr.py` to utilize the new EIR models for predictions. - Updated `scenarios.py` to integrate with the new EIR models and streamline predictions. - Modified type hints and internal functions to support the new model structure. - Enhanced tests to cover the new EIR model functionality and ensure correctness. --- README.md | 455 +++++++++++++++++++++++-------------- pyproject.toml | 4 +- src/estimint/eir_models.py | 85 +++++++ src/estimint/hbr.py | 155 ++++++------- src/estimint/scenarios.py | 81 ++----- src/estimint/types.py | 14 +- tests/test_flows.py | 39 +++- tests/test_scenarios.py | 6 +- uv.lock | 5 +- 9 files changed, 502 insertions(+), 342 deletions(-) create mode 100644 src/estimint/eir_models.py diff --git a/README.md b/README.md index d6425d0..8f46897 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,35 @@ # estiMINT -Package for EIR (Entomological Inoculation Rate) estimation using machine learning. +estiMINT estimates malaria transmission intensity from malaria prevalence or +human biting rate (HBR), accounting for intervention coverage. Its pretrained +models are conditional rational-quadratic spline (RQS) flows: they provide a +median prediction, arbitrary quantiles, and prediction intervals with optional +conformal calibration. -It estimates EIR from prevalence, converts between EIR and human biting rate (including the effect of changes in mosquito density), and turns a bednet specification (net type and resistance level) into the `dn0` killing parameter. +The package also provides: -## Installation +- EIR estimation from year-9 prevalence or HBR +- EIR-to-HBR conversion and projected EIR changes from mosquito-density changes +- Bednet resistance and coverage conversion to the `dn0` transmission covariate +- A `run_scenarios` pipeline that combines estiMINT estimates with the stateMINT + prevalence and case-burden emulator -```bash -pip install estimint # core: inference only (numpy, pandas, xgboost, scipy) -``` +## Installation -Optional extras, by use case: +estiMINT requires Python 3.12 or newer. ```bash -pip install "estimint[train]" # data prep + model training (duckdb, scikit-learn, pyarrow) -pip install "estimint[viz]" # plotting (matplotlib) -pip install "estimint[scenarios]" # run_scenarios pipeline (stateMINT emulator) -pip install "estimint[all]" -pip install "estimint[dev]" # test/lint/type-check toolchain +pip install estimint ``` -The `run_scenarios` pipeline also needs the stateMINT emulator (Python 3.12+). For now it -comes from the `mamba2-train` branch. With uv this is handled for you: +Optional extras are available for specific workflows: ```bash -uv sync --extra scenarios -``` - -With plain pip, install stateMINT from the branch yourself, then estiMINT: - -```bash -pip install "git+https://github.com/mrc-ide/stateMINT.git@mamba2-train" -pip install estimint +pip install "estimint[train]" # training and data preparation +pip install "estimint[gpu]" # CUDA-enabled JAX +pip install "estimint[viz]" # plotting +pip install "estimint[scenarios]" # stateMINT scenario emulator +pip install "estimint[all]" # train, viz, download, scenarios. gpu ``` For local development with [uv](https://docs.astral.sh/uv/): @@ -40,207 +38,334 @@ For local development with [uv](https://docs.astral.sh/uv/): uv sync --all-extras --dev ``` -## Data & retraining pipeline - -All training data lives in `datasets/estimint_simulations_y9.parquet`. Two model folders -derive their views from it and train: - -``` -datasets/ # training data (see datasets/README.md) -models/ - prevalence/ # prev_y9 -> EIR (estiMINT_model.pkl) - hbr/ # HBR<->EIR sub-models (estiMINT_HBR_model.pkl, estiMINT_EIR_to_HBR_model.pkl) -``` +The RQS weights are downloaded from Hugging Face when first requested and are +cached by `huggingface_hub`. The high-level scenario pipeline additionally +loads stateMINT only when `run_scenarios` is called. -Retrain a model end-to-end, e.g. the prevalence model: +## Pretrained RQS models -```bash -python models/prevalence/prepare.py # derive the training view from the parquet -python models/prevalence/train.py # train -> estiMINT_model.pkl + metrics/ + plots/ -``` +The default artifacts are hosted in [`dide-ic/estiMINT`](https://huggingface.co/dide-ic/estiMINT). -The deployed models shipped with the package live in `src/estimint/data/` and are loaded by -name (`prevalence`, `hbr`, `eir_to_hbr`). This is independent of the training pipeline above. +| Artifact | Input | Output | +| --- | --- | --- | +| `prev_y9-eir` | year-9 prevalence (`prev_y9`) | EIR (`eir`) | +| `hbr_y9-eir` | year-9 HBR (`hbr_y9`) | EIR (`eir`) | +| `eir-hbr_y9` | EIR (`eir`) | year-9 HBR (`hbr_y9`) | -## API Reference +All artifacts use the supplied transmission measure plus these intervention +covariates: `dn0_use`, `Q0`, `phi_bednets`, `seasonal`, `itn_use`, and +`irs_use`. Pass raw values; feature scaling and any required log transforms +are applied by the artifact. -### Inference +### Direct inference ```python -from estimint import load_xgb_model, run_xgb_model -import pandas as pd - -# Load a bundled model by name: "prevalence", "hbr", or "eir_to_hbr" -model = load_xgb_model("prevalence") +from estimint.v2.models.rqs import ConditionalRQS -# Prepare input data -new_data = pd.DataFrame({ - "dn0_use": [0.5], - "Q0": [0.3], - "phi_bednets": [0.6], - "seasonal": [1], - "itn_use": [0.7], - "irs_use": [0.2], - "prev_y9": [0.15] # or "prevalence" -}) +artifact = ConditionalRQS.from_pretrained( + "dide-ic/estiMINT", + predictor="prev_y9", + target="eir", +) -# Run prediction -eir_predictions = run_xgb_model(new_data, model) -print(f"Predicted EIR: {eir_predictions[0]:.2f}") +inputs = { + "prev_y9": 0.30, + "dn0_use": 0.33, + "Q0": 0.87, + "phi_bednets": 0.82, + "seasonal": 0.0, + "itn_use": 0.60, + "irs_use": 0.0, +} + +median_eir = artifact.predict(inputs)[0] +upper_quantile_eir = artifact.quantile(inputs, 0.90)[0] +lower_eir, upper_eir = artifact.interval(inputs, alpha=0.10) # arrays, one entry per row ``` -### Using Global Model +`predict()` returns the median. `quantile()` evaluates a requested probability +level, and `interval(alpha=0.10)` returns the lower and upper bounds of a 90% +prediction interval. All three return one value per input row. +Inputs may be a single feature dictionary, a list of dictionaries, or a NumPy +array whose columns are already in `artifact.feature_names` order. Dictionary +rows must contain exactly the artifact's expected features; this prevents +accidental feature-order or feature-name mismatches. -```python -from estimint import load_xgb_model, run_xgb_model, set_global_model +`interval()` widens the raw quantile band by the conformal offset stored in +`artifact.conformal`, which training calibrates for `alpha=0.10` only. If an +artifact carries no offset for the requested `alpha` the offset is zero and the +returned band is the uncorrected model quantile band. Inspect +`artifact.conformal` to see which levels a given artifact has calibrated; the +artifacts currently published on the Hub carry none. -# Set global model once -model = load_xgb_model("prevalence") -set_global_model(model) +To load an exported local artifact instead, pass its directory to +`from_pretrained`: -# Run predictions without passing model -predictions = run_xgb_model(new_data) # Uses global model +```python +artifact = ConditionalRQS.from_pretrained( + "artifacts/prev_y9-eir", + predictor="prev_y9", + target="eir", +) ``` -### Bednet to dn0 +## Bednet covariates -Turn a bednet specification (a mix of net types and an insecticide resistance level) into -the `dn0` covariate, the probability a mosquito dies on contact, along with total ITN usage. +`calculate_dn0` converts an insecticide-resistance level and a bednet-usage +mix into the `dn0` killing parameter and total ITN use. ```python from estimint import calculate_dn0, net_types -net_types() # ['pyrethroid_only', 'pyrethroid_pbo', 'pyrethroid_ppf', 'pyrethroid_pyrrole'] -res = calculate_dn0(0.5, py_only=0.4, py_pbo=0.3, py_pyrrole=0.2, py_ppf=0.1) -res.dn0, res.itn_use # weighted dn0, total net usage +net_types() +result = calculate_dn0(0.5, py_only=0.4, py_pbo=0.3, py_pyrrole=0.2, py_ppf=0.1) + +print(result.dn0, result.itn_use) ``` -### Run scenarios +The short names `py_only`, `py_pbo`, `py_pyrrole`, and `py_ppf` are accepted, +as are their canonical `pyrethroid_*` names. -`run_scenarios` runs the whole pipeline in one call. You give it a list of scenarios and -get back a DataFrame. For each scenario it works out the bednet killing effect, estimates -the EIR (from prevalence, from biting rate, or taken directly), optionally adjusts for a -change in mosquito density, then runs the stateMINT emulator forward to the prevalence and -cases trajectories. +## Run scenarios -This needs the [stateMINT](https://github.com/mrc-ide/stateMINT) package installed as well -as estiMINT. estiMINT only loads it when you call `run_scenarios`, and the model weights -download from HuggingFace. +`run_scenarios` estimates EIR and then runs the stateMINT emulator. A scenario +can start from prevalence, HBR, or a supplied EIR. A mosquito-density change is +applied only for prevalence inputs: estiMINT estimates baseline HBR, scales it +by `1 + mosquito_delta`, converts it back to EIR, and preserves the baseline +EIR estimate through that relative change. ```python -from estimint import run_scenarios -from estimint.scenarios import Scenario, EirTarget +from estimint import EirTarget, Scenario, run_scenarios scenarios = [ - Scenario(name="PBO nets, prevalence input, 60% more mosquitoes", - eir_target=EirTarget(0.30, "prevalence"), - res_use=0.55, py_pbo=0.85, - Q0=0.90, phi=0.85, seasonal=1, irs=0.40, lsm=0.0, - mosquito_delta=0.60), - Scenario(name="Biting rate input, mixed nets", - eir_target=EirTarget(250000.0, "hbr"), - res_use=0.45, py_only=0.30, py_ppf=0.20, - Q0=0.80, phi=0.82, seasonal=0, irs=0.0), - Scenario(name="EIR supplied directly, no nets", - eir_target=EirTarget(20.0, "eir"), - res_use=0.0, - Q0=0.88, phi=0.78, seasonal=1, irs=0.60), + Scenario( + name="PBO campaign with higher mosquito density", + eir_target=EirTarget(0.30, "prevalence"), + res_use=0.55, + py_pbo=0.85, + Q0=0.90, + phi=0.85, + seasonal=1.0, + irs=0.40, + mosquito_delta=0.60, + net_type_future="pyrethroid_pbo", + itn_future=0.85, + irs_future=0.40, + ), + Scenario( + name="HBR input", + eir_target=EirTarget(250000.0, "hbr"), + res_use=0.45, + py_only=0.30, + py_ppf=0.20, + Q0=0.80, + phi=0.82, + seasonal=0.0, + irs=0.0, + ), + Scenario( + name="Supplied EIR", + eir_target=EirTarget(20.0, "eir"), + res_use=0.0, + Q0=0.88, + phi=0.78, + seasonal=1.0, + irs=0.60, + ), ] -df = run_scenarios(scenarios) -print(df[["name", "eir_baseline", "eir_final", "prev_y9", "cases_endline"]]) +results = run_scenarios(scenarios) +print(results[["name", "eir_baseline", "eir_final", "prev_y9", "cases_endline"]]) ``` -Every scenario is a `Scenario` and needs `name`, `res_use`, `eir_target`, `Q0`, -`phi`, `seasonal` and `irs`. `lsm`, `routine` and `irs_future` default to 0 (note -`irs_future` does **not** default to `irs` — set it explicitly if you want IRS to -continue). **Current nets:** give a net-type usage mix (`py_only`, `py_pbo`, -`py_pyrrole`, `py_ppf` shares), or leave the net keys out for none; current and -future legs share the same `res_use`. **Future nets:** give `net_type_future` + -`itn_future` to switch net type; omit `net_type_future` and the future leg is zeroed -(it does **not** carry the current mix forward), or set `itn_future=0` to remove -nets explicitly. `mosquito_delta` only applies when `eir_target.input_mode` is `"prevalence"`. +Each `Scenario` requires `name`, `res_use`, `Q0`, `phi`, `seasonal`, `irs`, and +an `EirTarget`. Current bednet coverage is represented by a mix of `py_only`, +`py_pbo`, `py_pyrrole`, and `py_ppf`. The optional future leg is separate: +set both `net_type_future` and `itn_future` to specify future nets. It does not +inherit the current net mix. `irs_future`, `routine`, and `lsm` each default to +zero. PPF coverage additionally contributes to the emulator's LSM covariate. -The returned DataFrame has one row per scenario. Alongside the inputs it gives the -estimated EIR (`eir_baseline`, and `eir_final` after any mosquito-density change) and the -stateMINT output. That output is year-9 prevalence (`prev_y9`), endline prevalence and -cases, and the full 157-step `prevalence` and `cases` series. What you do with it is up to -you. +The returned DataFrame has one row per scenario and includes: -The `estimint.scenarios` module is also where the simulation-based inference and experiment -code will go. +- scenario and intervention covariates, including `dn0_use` and `dn0_future` +- `eir_baseline` and `eir_final` +- `hbr_baseline` and `hbr_new` for prevalence scenarios with a mosquito change +- `prev_y9`, `prev_endline`, and `cases_endline` +- 157-step `prevalence` and non-negative `cases` NumPy arrays -## Utility Functions +Call `preload_models()` before repeated scenario runs to download and cache the +estiMINT and stateMINT models explicitly. -```python -from estimint import ( - r2, rmse, mse, mae, median_ae, mae_rel, rmsle, smape, - fit_qmap_w, predict_qmap_w, scale_pos -) +## Training workflow + +> These commands require the training extra or a development installation: +> `pip install "estimint[train]"` or `uv sync --all-extras --dev`. -# Calculate metrics -y_true = [1, 2, 3, 4, 5] -y_pred = [1.1, 2.2, 2.9, 4.1, 4.8] +RQS training and artifact export code lives in `estimint.v2`. The standard +workflow is: -print(f"R²: {r2(y_true, y_pred):.4f}") -print(f"RMSE: {rmse(y_true, y_pred):.4f}") -print(f"MAE: {mae(y_true, y_pred):.4f}") +1. Prepare a simulation parquet dataset and train one of the three mappings. +2. Evaluate the generated test metrics and prediction-interval coverage. +3. Export the checkpoint and fitted preprocessing metadata as an inference + artifact. +4. Upload the artifact to Hugging Face. -# Quantile mapping calibration -cal = fit_qmap_w(y_pred, y_true) -y_calibrated = predict_qmap_w(y_pred, cal) +### 1. Train a model + +The default configuration in `estimint.v2.conf.train_config` trains the +`prev_y9 -> eir` model from `datasets/estimint_simulations_y9.parquet`. +It expects simulation identifiers (`parameter_index`, `simulation_index`), the +model's predictor and target columns, and the six intervention covariates +listed in [Pretrained RQS models](#pretrained-rqs-models). + +```bash +uv run python -m estimint.v2.train_base \ + predictor=prev_y9 \ + target=eir \ + output_dir=train_outputs/prev_y9-eir \ + use_wandb=false ``` -## Data Processing +Train the remaining deployed mappings by changing `predictor` and `target`: + +```bash +uv run python -m estimint.v2.train_base predictor=hbr_y9 target=eir +uv run python -m estimint.v2.train_base predictor=eir target=hbr_y9 +``` -These functions need the training extras. Install them with `pip install "estimint[train]"`, -which adds duckdb and scikit-learn. +Useful overrides include `data_file`, `split_file`, `use_existing_split`, +`stratify`, `num_epochs`, `batch_size`, `lr`, and the RQS architecture settings +`width`, `depth`, `n_bins`, `rqs_bounds`, `mlp_residual`, and `dropout_rate`. +Hydra prints the resolved configuration before training begins. + +Training creates or reuses the configured split CSV, writes fitted scalers to +the output directory, calculates the conformal offset, and saves the Orbax +checkpoint. With the default time-based run ID, the important outputs are: + +```text +train_outputs/prev_y9-eir/ +|-- features_scaler.pkl +|-- target_scaler.pkl +|-- conformal-.json +`-- ckpts-/ + `-- RQS/ +``` -```python -from estimint import load_and_filter, make_value_weights, strata_and_split +Use the same `` when exporting. The architecture arguments given to +export must exactly match the checkpoint's training configuration. -# Load and filter parquet data -result = load_and_filter("data.parquet", thr_lo=0.02, thr_hi=0.95) -df = result["DT"] -df_excluded = result["DT_excluded"] +### 2. Export an inference artifact -# Create inverse-frequency weights -weights = make_value_weights(df["eir"].values, digits=3) +Set the predictor, target, and training run ID. The default architecture values +already match the default training configuration; pass explicit architecture +overrides when the model was trained with non-default values. -# Stratified split -df["eir_log10"] = np.log10(df["eir"]) -df = strata_and_split(df, k_strata=16, seed=42) +```bash +RUN_ID=2026-08-13T12:00:00 + +uv run python -m estimint.v2.model_export \ + predictor=prev_y9 \ + target=eir \ + timestamp="$RUN_ID" \ + output_dir=train_outputs/prev_y9-eir \ + artifact_dir=artifacts/prev_y9-eir ``` -## Testing +The exporter restores the selected checkpoint, embeds the feature and target +scalers plus conformal offsets in `config.json`, and writes a portable artifact: + +```text +artifacts/prev_y9-eir/ +|-- config.json +`-- checkpoint/ + `-- RQS/ +``` + +Load this directory locally with `ConditionalRQS.from_pretrained`, as shown in +[Direct inference](#direct-inference). The artifact contains all inference +preprocessing metadata, so the training dataset and pickle scaler files are not +needed at prediction time. + +### 3. Upload to Hugging Face + +Authenticate with an account that can write to the target model repository: + +```bash +hf auth login +``` + +Upload the artifact under a subdirectory named exactly +`-`. This layout is required by +`ConditionalRQS.from_pretrained` when it downloads an artifact from the Hub. + +```bash +hf upload dide-ic/estiMINT \ + artifacts/prev_y9-eir \ + prev_y9-eir/ \ + --commit-message "Add prev_y9 to EIR RQS artifact" +``` + +Repeat this for `hbr_y9-eir` and `eir-hbr_y9` when publishing the complete +model set. To pin a set of Hub artifacts for reproducible inference, create a +repository tag and pass it as the `revision` argument to `from_pretrained`: + +```bash +hf repos tag create dide-ic/estiMINT v1.0.0 \ + --revision main \ + --message "Release RQS model set v1.0.0" +``` + +```python +artifact = ConditionalRQS.from_pretrained( + "dide-ic/estiMINT", + predictor="prev_y9", + target="eir", + revision="v1.0.0", +) +``` + +### 4. W&B sweeps + +`estimint.v2.conf.sweeps.sweep.yaml` defines a Bayesian sweep over learning +rate, batch size, dropout, and the RQS architecture (`width`, `depth`, +`n_bins`, `rqs_bounds`, `mlp_residual`), minimising `val/loss`. Create a sweep, +then run agents using the ID returned by Weights & Biases: ```bash -uv sync --extra dev # or: pip install -e ".[dev]" -uv run pytest # or: pytest +uv run wandb sweep src/estimint/v2/conf/sweeps/sweep.yaml +uv run wandb agent /estimint-sweep/ ``` -This covers the metric and utility helpers, the EIR estimators (prevalence, HBR and direct -EIR), the mosquito-density HBR pipeline, and the bednet calculation. +The sweep configuration currently targets `eir -> hbr_y9`; edit its final +Hydra overrides to sweep a different mapping. -## CI and releases +### Configuration reference -The test suite runs on every push and pull request across Python 3.10 to 3.14, defined in -[`.github/workflows/tests.yml`](.github/workflows/tests.yml). +- `src/estimint/v2/conf/train_config.yaml` defines data paths, split behavior, + model architecture, optimization, checkpoint location, and W&B settings. +- `src/estimint/v2/conf/export_config.yaml` maps a training run's timestamp, + checkpoint, scalers, and conformal JSON to an artifact directory. +- `src/estimint/v2/conf/sweeps/sweep.yaml` defines the W&B hyperparameter + search space. -Releases publish to PyPI from [`.github/workflows/publish.yml`](.github/workflows/publish.yml). -It builds with `uv build` and uploads with `uv publish` using -[PyPI trusted publishing](https://docs.astral.sh/uv/guides/integration/github/#publishing-to-pypi), -so no token is stored. To cut a release, bump `version` in `pyproject.toml` and publish a -GitHub Release. The first time, register this repository as a trusted publisher in the PyPI -project settings. +Run either entry point with `--help` to see the available Hydra options: -## Key Differences from R Version +```bash +uv run python -m estimint.v2.train_base --help +uv run python -m estimint.v2.model_export --help +``` + +## Testing + +```bash +uv sync --all-extras --dev +uv run pytest +``` -1. **File format**: Models saved as `.pkl` (pickle) instead of `.rds` -2. **Data handling**: Uses pandas instead of data.table -3. **Plotting**: Uses matplotlib instead of ggplot2 -4. **Global model**: Use `set_global_model()` / `get_global_model()` instead of `.GlobalEnv` +The EIR-estimation and mosquito-delta tests download the published estiMINT +artifacts on first run. The full `run_scenarios` test is skipped unless the +`scenarios` extra is installed. ## License -MIT License +MIT License \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 213b854..f5cca4b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "estimint" -version = "1.5.4" +version = "1.6.4" description = "EIR Estimation using Machine learning interventions " readme = "README.md" license = "MIT" @@ -56,7 +56,7 @@ download = [ scenarios = [ "mintstate>=0.3.0" ] -all = ["estimint[train,viz,download,scenarios]"] +all = ["estimint[train,viz,download,scenarios,gpu]"] [dependency-groups] dev = [ diff --git a/src/estimint/eir_models.py b/src/estimint/eir_models.py new file mode 100644 index 0000000..4448c05 --- /dev/null +++ b/src/estimint/eir_models.py @@ -0,0 +1,85 @@ +"""Loading and inference for the estiMINT EIR models. + +Three conditional RQS flows are published on the Hugging Face hub. Each takes the +shared intervention covariates plus one measurement, and is keyed here by the name +of that measurement: + + prev_y9 -> eir baseline prevalence to EIR + hbr_y9 -> eir human biting rate to EIR + eir -> hbr_y9 EIR to human biting rate +""" + +from __future__ import annotations + +from typing import Sequence + +import numpy as np + +from estimint.v2.common.types import PredictorType, TargetType +from estimint.v2.models.rqs import ConditionalRQS, RQSArtifact + +from .types import Input_Mode, PreparedScenario + +ESTIMINT_HF_REPO = "dide-ic/estiMINT" + +# What each model predicts from the measurement it is named after. +EIR_MODEL_TARGETS: dict[PredictorType, TargetType] = { + "prev_y9": "eir", + "hbr_y9": "eir", + "eir": "hbr_y9", +} + +# The measurement a scenario supplies, per input mode. +INPUT_MODE_TO_PREDICTOR: dict[Input_Mode, PredictorType] = { + "prevalence": "prev_y9", + "hbr": "hbr_y9", + "eir": "eir", +} + +EirModels = dict[PredictorType, RQSArtifact] + +_MODEL_CACHE: dict[str, EirModels] = {} + + +def load_eir_models(hf_repo: str = ESTIMINT_HF_REPO) -> EirModels: + """Load the three estiMINT RQS artifacts, caching them per repo. + + Args: + hf_repo: HuggingFace repo ID (or local folder) holding the model artifacts. + + Returns: + The artifacts keyed by the measurement each one takes as input. + """ + if hf_repo not in _MODEL_CACHE: + _MODEL_CACHE[hf_repo] = { + predictor: ConditionalRQS.from_pretrained(hf_repo, predictor, target) + for predictor, target in EIR_MODEL_TARGETS.items() + } + return _MODEL_CACHE[hf_repo] + + +def predict_from_measurements( + eir_models: EirModels, + predictor: PredictorType, + prepared_scenarios: Sequence[PreparedScenario], + values: Sequence[float] | np.ndarray, +) -> np.ndarray: + """Predict ``EIR_MODEL_TARGETS[predictor]`` for a batch of scenarios. + + Each model row is the scenario's intervention covariates plus the supplied + measurement; the artifact reorders them into the training feature order. + + Args: + eir_models: Artifacts from :func:`load_eir_models`. + predictor: The measurement carried by *values*, e.g. ``"prev_y9"``. + prepared_scenarios: Scenarios supplying the intervention covariates. + values: One *predictor* measurement per scenario, in the same order. + + Returns: + Median predictions, one per scenario, in input order. + """ + records = [ + {**prepared_scenario.eir_model_features, predictor: float(value)} + for prepared_scenario, value in zip(prepared_scenarios, values, strict=True) + ] + return eir_models[predictor].predict(records) diff --git a/src/estimint/hbr.py b/src/estimint/hbr.py index f7878c7..efe20d5 100644 --- a/src/estimint/hbr.py +++ b/src/estimint/hbr.py @@ -4,123 +4,96 @@ Answers the question: "What happens to EIR if mosquito density changes by X%?" Pipeline: -1. prev_y9 + interventions -> EIR_baseline (prevalence model) -2. EIR_baseline + interventions -> HBR_baseline (EIR-to-HBR model) -3. HBR_new = HBR_baseline * (1 + mosquito_delta) (user's mosquito change, pos or neg) -4. HBR model predicts EIR at both HBR values (ratio approach) -5. EIR_new = EIR_baseline * (EIR_scaled / EIR_roundtrip) +1. prev_y9 + interventions -> EIR_baseline (prev_y9 -> eir model) +2. EIR_baseline + interventions -> HBR_baseline (eir -> hbr_y9 model) +3. HBR_new = HBR_baseline * (1 + mosquito_delta) (user's mosquito change, pos or neg) +4. EIR predicted at both HBR values (hbr_y9 -> eir model) +5. EIR_new = EIR_baseline * (EIR_new_raw / EIR_roundtrip) + +Step 5 applies the *ratio* of the two step-4 predictions rather than using EIR_new_raw +directly, so the result stays anchored to the cleaner step-1 baseline and any bias in +the EIR -> HBR -> EIR round trip cancels out. """ + import numpy as np -from estimint.types import PreparedScenario, INPUT_MODE_TO_REPO_IDS -from estimint.v2.models.rqs import RQSArtifact +from .eir_models import EirModels, predict_from_measurements +from .types import PreparedScenario -def estimate_eir_with_mosquito_delta(prepared_scenarios: list[PreparedScenario], *, eir_models: dict[str, RQSArtifact]) -> list[dict[str, float]]: - """ - Estimate new EIR after a change in mosquito density for multiple scenarios. - The HBR model predicts EIR at both the - baseline and scaled HBR, then applies the relative multiplier to the clean - baseline EIR from the prevalence model. +def estimate_eir_with_mosquito_delta( + prepared_scenarios: list[PreparedScenario], *, eir_models: EirModels +) -> list[dict[str, float]]: + """ + Estimate the new EIR after a change in mosquito density, for a batch of scenarios. Parameters ---------- - inputs : pd.DataFrame - One row per scenario. Required columns: - - - ``prevalence`` : baseline malaria prevalence (prev_y9), e.g. 0.30 for 30%. - - ``mosquito_delta`` : fractional change in mosquito density, e.g. 0.10 - for +10%, -0.50 for -50%. Must be > -1 per row. - - ``dn0_use`` : bednet contact reduction parameter. - - ``Q0`` : human blood index. - - ``phi_bednets`` : proportion of bites on humans while in bed. - - ``seasonal`` : seasonality flag (0.0 or 1.0). - - ``itn_use`` : ITN coverage (0-1). - - ``irs_use`` : IRS coverage (0-1). - - models : dict - Pre-loaded model dictionary with keys ``"prevalence"``, ``"hbr"``, - and ``"eir_to_hbr"``. + prepared_scenarios : list[PreparedScenario] + Scenarios with ``input_mode == "prevalence"``. Each supplies: + + - ``eir_target.input_value`` : baseline malaria prevalence (prev_y9), e.g. 0.30 for 30%. + - ``mosquito_density_change`` : fractional change in mosquito density, e.g. 0.10 + for +10%, -0.50 for -50%. Must be > -1. + - ``eir_model_features`` : the intervention covariates shared by all three models + (``dn0_use``, ``Q0``, ``phi_bednets``, ``seasonal``, ``itn_use``, ``irs_use``). + + eir_models : EirModels + Artifacts from :func:`estimint.eir_models.load_eir_models`. Returns ------- - pd.DataFrame - Same index as *inputs*, with columns: + list[dict[str, float]] + One entry per scenario, in input order, with keys: - ``eir_baseline`` : baseline EIR from prevalence. - - ``eir_new`` : new EIR after mosquito density change. + - ``eir_new`` : new EIR after the mosquito density change. - ``eir_multiplier`` : ratio of new EIR to baseline. - ``hbr_baseline`` : estimated baseline HBR. - - ``hbr_new`` : HBR after mosquito density change. + - ``hbr_new`` : HBR after the mosquito density change. Examples -------- - >>> import pandas as pd - >>> from estimint import estimate_eir_with_mosquito_delta - >>> inputs = pd.DataFrame([ - ... {"prevalence": 0.30, "mosquito_delta": 0.25, - ... "dn0_use": 0.33, "Q0": 0.87, "phi_bednets": 0.82, - ... "seasonal": 0.0, "itn_use": 0.6, "irs_use": 0.0}, - ... ]) - >>> result = estimate_eir_with_mosquito_delta(inputs, models=models) - >>> print(result[["eir_baseline", "eir_new"]]) + >>> from estimint.eir_models import load_eir_models + >>> from estimint.hbr import estimate_eir_with_mosquito_delta + >>> results = estimate_eir_with_mosquito_delta(prepared_scenarios, eir_models=load_eir_models()) + >>> results[0]["eir_new"] """ # Step 1: prevalence -> EIR baseline - prev_eir_artifact = eir_models[INPUT_MODE_TO_REPO_IDS["prevalence"]] - prev_eir_records = [ - { - **prepared_scenario.eir_model_features, - "prev_y9": prepared_scenario.eir_target.input_value, - } - for prepared_scenario in prepared_scenarios - ] - eir_baselines = prev_eir_artifact.predict(prev_eir_records) + prevalences = [prepared_scenario.eir_target.input_value for prepared_scenario in prepared_scenarios] + eir_baselines = predict_from_measurements(eir_models, "prev_y9", prepared_scenarios, prevalences) - # 2: EIR -> HBR baseline - eir_hbr_artifact = eir_models[INPUT_MODE_TO_REPO_IDS["eir"]] - eir_hbr_records = [ - { - **prepared_scenario.eir_model_features, - "eir": eir_value, - } - for prepared_scenario, eir_value in zip(prepared_scenarios, eir_baselines) - ] - hbr_baselines = eir_hbr_artifact.predict(eir_hbr_records) + # Step 2: EIR -> HBR baseline + hbr_baselines = predict_from_measurements(eir_models, "eir", prepared_scenarios, eir_baselines) # Step 3: apply mosquito delta (positive or negative) - mosquito_deltas = [prepared_scenario.mosquito_density_change for prepared_scenario in prepared_scenarios] - hbr_adjusted = hbr_baselines * (1 + np.array(mosquito_deltas)) - - # Step 4: ratio approach — batch both HBR values in one call so they - # share the same smooth PCHIP curve - hbr_eir_artifact = eir_models[INPUT_MODE_TO_REPO_IDS["hbr"]] - hbr_eir_records = [ - { - **prepared_scenario.eir_model_features, - "hbr_y9": hbr_value, - } - for hbr_values in (hbr_baselines, hbr_adjusted) - for prepared_scenario, hbr_value in zip(prepared_scenarios, hbr_values) - ] - eir_from_hbr = hbr_eir_artifact.predict(hbr_eir_records) - - count = len(prepared_scenarios) - eir_rt = eir_from_hbr[:count] - eir_new_raw = eir_from_hbr[count:] - - # Step 5: multiplier applied to clean baseline - multiplier = eir_new_raw / eir_rt - eir_new = eir_baselines * multiplier + mosquito_deltas = np.array( + [prepared_scenario.mosquito_density_change for prepared_scenario in prepared_scenarios] + ) + hbr_new = hbr_baselines * (1 + mosquito_deltas) + + # Step 4: both HBR values go back through the HBR -> EIR model in one batched call + eir_from_hbr = predict_from_measurements( + eir_models, + "hbr_y9", + [*prepared_scenarios, *prepared_scenarios], + np.concatenate([hbr_baselines, hbr_new]), + ) + eir_roundtrip, eir_new_raw = np.split(eir_from_hbr, 2) + + # Step 5: multiplier applied to the clean baseline + eir_multipliers = eir_new_raw / eir_roundtrip + eir_news = eir_baselines * eir_multipliers return [ { - "eir_baseline": eir_baseline, - "eir_new": eir_new, - "eir_multiplier": multiplier, - "hbr_baseline": hbr_baseline, - "hbr_new": hbr_adjusted, + "eir_baseline": float(eir_baseline), + "eir_new": float(eir_new), + "eir_multiplier": float(eir_multiplier), + "hbr_baseline": float(hbr_baseline), + "hbr_new": float(hbr_adjusted), } - for eir_baseline, eir_new, multiplier, hbr_baseline, hbr_adjusted in zip( - eir_baselines, eir_new, multiplier, hbr_baselines, hbr_adjusted + for eir_baseline, eir_new, eir_multiplier, hbr_baseline, hbr_adjusted in zip( + eir_baselines, eir_news, eir_multipliers, hbr_baselines, hbr_new, strict=True ) ] diff --git a/src/estimint/scenarios.py b/src/estimint/scenarios.py index 6119b5d..059772c 100644 --- a/src/estimint/scenarios.py +++ b/src/estimint/scenarios.py @@ -1,29 +1,30 @@ from __future__ import annotations from dataclasses import dataclass -from typing import Any, Dict +from typing import Any import numpy as np import pandas as pd -from estimint.v2.common.types import TargetType, PredictorType - from .bednet import DN0Result, calculate_dn0 +from .eir_models import ( + ESTIMINT_HF_REPO, + INPUT_MODE_TO_PREDICTOR, + EirModels, + load_eir_models, + predict_from_measurements, +) from .hbr import estimate_eir_with_mosquito_delta -from estimint.v2.models.rqs import ConditionalRQS, RQSArtifact -from estimint.v2.models.hub import repo_id -from .types import Scenario, Input_Mode, PreparedScenario, INPUT_MODE_TO_REPO_IDS +from .types import Input_Mode, PreparedScenario, Scenario from collections import defaultdict ####################### Constants and global storage ################### STATEMINT_HF_REPO = "dide-ic/stateMINT" -ESTIMINT_HF_REPO = "dide-ic/estiMINT" # 157 windows of 14 days from day 2190; intervention at day 3285. _ABS_TIME = 2190 + 14 * np.arange(157) _IDX_Y9 = int(np.argmin(np.abs(_ABS_TIME - 3285))) -_EIR_MODEL_CACHE: Dict[str, Any] = {} -_EMULATOR_MODEL_CACHE: Dict[str, Dict[str, Any]] = {} +_EMULATOR_MODEL_CACHE: dict[str, dict[str, Any]] = {} _NET_KEYS = ( "py_only", @@ -32,36 +33,11 @@ "py_ppf", ) -ESTIMINT_MODEL_MAPS: Dict[PredictorType, TargetType] = { - "prev_y9": "eir", - "hbr_y9": "eir", - "eir": "hbr_y9", -} - -INPUT_MODE_TO_PREDICTOR: Dict[Input_Mode, PredictorType] = { - "prevalence": "prev_y9", - "hbr": "hbr_y9", - "eir": "eir", -} - -@dataclass(frozen=True) -class _EirInputModelConfig: - feature_column: str - model_name: str - # TODO: need to update all docs and type hints etc. readme as well ######################## Internal helpers ######################## -def _load_estimint_models(hf_repo: str) -> Dict[str, RQSArtifact]: - if hf_repo not in _EIR_MODEL_CACHE: - _EIR_MODEL_CACHE[hf_repo] = { - repo_id(predictor, target): ConditionalRQS.from_pretrained(hf_repo, predictor, target) - for predictor, target in ESTIMINT_MODEL_MAPS.items() - } - return _EIR_MODEL_CACHE[hf_repo] - -def _load_emulators(hf_repo: str) -> Dict[str, Any]: +def _load_emulators(hf_repo: str) -> dict[str, Any]: if hf_repo not in _EMULATOR_MODEL_CACHE: try: from stateMINT.model import Mamba2Regressor @@ -69,7 +45,7 @@ def _load_emulators(hf_repo: str) -> Dict[str, Any]: raise ImportError( "run_scenarios needs stateMINT. Install it with: " "uv sync --extra scenarios (or pip install " - '"git+https://github.com/mrc-ide/stateMINT.git@mamba2-train").' + '"mintstate>=0.3.0")' ) from error _EMULATOR_MODEL_CACHE[hf_repo] = { outcome_name: Mamba2Regressor.from_pretrained(hf_repo, predictor=outcome_name) @@ -184,22 +160,16 @@ def _record_eir_estimate( prepared_scenario.emulator_covariates["eir"] = float(eir_final) -# TODO: sort types out and string conversions etc def _predict_eir_from_measurements( - prepared_scenarios: list[PreparedScenario], *, input_mode: Input_Mode, eir_models: Dict[str, RQSArtifact] + prepared_scenarios: list[PreparedScenario], *, input_mode: Input_Mode, eir_models: EirModels ) -> None: """Predict EIR from baseline prevalence or HBR measurements.""" - model_artifact = eir_models[INPUT_MODE_TO_REPO_IDS[input_mode]] - - model_input_records = [ - { - **prepared_scenario.eir_model_features, - INPUT_MODE_TO_PREDICTOR[input_mode]: prepared_scenario.eir_target.input_value, - } - for prepared_scenario in prepared_scenarios - ] - - eir_predictions = model_artifact.predict(model_input_records) + eir_predictions = predict_from_measurements( + eir_models, + INPUT_MODE_TO_PREDICTOR[input_mode], + prepared_scenarios, + [prepared_scenario.eir_target.input_value for prepared_scenario in prepared_scenarios], + ) for prepared_scenario, eir_prediction in zip(prepared_scenarios, eir_predictions): _record_eir_estimate( @@ -218,7 +188,7 @@ def _classify_prepared_scenario(prepared_scenario: PreparedScenario) -> str: return prepared_scenario.eir_target.input_mode # "prevalence" or "hbr" -def _apply_mosquito_delta_batch(prepared_scenarios: list[PreparedScenario], eir_models: Dict[str, RQSArtifact]) -> None: +def _apply_mosquito_delta_batch(prepared_scenarios: list[PreparedScenario], eir_models: EirModels) -> None: """Estimate EIR for a batch of scenarios with prevalence input and a mosquito-density change.""" estimates = estimate_eir_with_mosquito_delta(prepared_scenarios, eir_models=eir_models) @@ -232,10 +202,10 @@ def _apply_mosquito_delta_batch(prepared_scenarios: list[PreparedScenario], eir_ ) -def _estimate_eir(scenarios: list[Scenario], eir_models: Dict[str, RQSArtifact]) -> list[PreparedScenario]: +def _estimate_eir(scenarios: list[Scenario], eir_models: EirModels) -> list[PreparedScenario]: """Estimate EIR for many scenarios, dispatching each to one of three paths: - "eir": supplied directly, passed through unchanged - - "prevalence" / "hbr": predicted from baseline measurements via XGBoost + - "prevalence" / "hbr": predicted from baseline measurements by the matching RQS model - "mosquito_delta": prevalence input with a projected mosquito-density change """ if any(scenario.eir_target.input_mode not in {"prevalence", "eir", "hbr"} for scenario in scenarios): @@ -262,12 +232,9 @@ def _estimate_eir(scenarios: list[Scenario], eir_models: Dict[str, RQSArtifact]) ######################### Public API ######################## -def preload_models(*, statemint_hf_repo: str = STATEMINT_HF_REPO, estimint_hf_repo: str = ESTIMINT_HF_REPO) -> tuple[Dict[str, RQSArtifact], Dict[str, Any]]: +def preload_models(*, statemint_hf_repo: str = STATEMINT_HF_REPO, estimint_hf_repo: str = ESTIMINT_HF_REPO) -> tuple[EirModels, dict[str, Any]]: """Preload the models used by run_scenarios.""" - eir_models = _load_estimint_models(estimint_hf_repo) - emulator_models = _load_emulators(statemint_hf_repo) - - return eir_models, emulator_models + return load_eir_models(estimint_hf_repo), _load_emulators(statemint_hf_repo) def run_scenarios( diff --git a/src/estimint/types.py b/src/estimint/types.py index b8e2e52..80b01f6 100644 --- a/src/estimint/types.py +++ b/src/estimint/types.py @@ -1,8 +1,6 @@ -from typing import Any, Literal, Dict +from typing import Any, Literal from dataclasses import dataclass -from estimint.v2.models.hub import repo_id - Input_Mode = Literal["prevalence", "eir", "hbr"] @@ -34,14 +32,10 @@ class Scenario: @dataclass class PreparedScenario: + """A ``Scenario`` resolved into the inputs each downstream model needs.""" + eir_target: EirTarget mosquito_density_change: float - eir_model_features: Dict[str, float] + eir_model_features: dict[str, float] summary_values: dict[str, Any] emulator_covariates: dict[str, float] - -INPUT_MODE_TO_REPO_IDS: Dict[Input_Mode, str] = { - "prevalence": repo_id("prev_y9", "eir"), - "hbr": repo_id("hbr_y9", "eir"), - "eir": repo_id("eir", "hbr_y9"), -} \ No newline at end of file diff --git a/tests/test_flows.py b/tests/test_flows.py index 903a48a..3f8ec1b 100644 --- a/tests/test_flows.py +++ b/tests/test_flows.py @@ -1,6 +1,8 @@ """End-to-end flow tests: prevalence -> EIR, and the mosquito-delta HBR pipeline. -These exercise the bundled models in src/estimint/data, so they run offline. +The prevalence -> EIR flow exercises the bundled XGBoost models in src/estimint/data, +so it runs offline. The mosquito-delta pipeline uses the published RQS models, which +are downloaded (and then cached) from the estiMINT HuggingFace repo. """ import pandas as pd @@ -11,6 +13,8 @@ run_xgb_model, estimate_eir_with_mosquito_delta, ) +from estimint.eir_models import load_eir_models +from estimint.types import EirTarget, PreparedScenario INTERVENTIONS = dict( dn0_use=0.33, Q0=0.87, phi_bednets=0.82, @@ -33,25 +37,36 @@ def test_higher_prevalence_gives_higher_eir(self): assert eir[1] > eir[0] +def _prepared(delta: float, prevalence: float = 0.30) -> PreparedScenario: + """A prevalence-input scenario carrying a mosquito-density change.""" + return PreparedScenario( + eir_target=EirTarget(prevalence, "prevalence"), + mosquito_density_change=delta, + eir_model_features=dict(INTERVENTIONS), + summary_values={}, + emulator_covariates={}, + ) + + class TestMosquitoDelta: @pytest.fixture(scope="class") def models(self): - return {name: load_xgb_model(name) for name in ("prevalence", "hbr", "eir_to_hbr")} + return load_eir_models() def _run(self, models, delta): - inputs = pd.DataFrame([{"prevalence": 0.30, "mosquito_delta": delta, **INTERVENTIONS}]) - return estimate_eir_with_mosquito_delta(inputs, eir_models=models).iloc[0] + return estimate_eir_with_mosquito_delta([_prepared(delta)], eir_models=models)[0] - def test_returns_expected_columns(self, models): + def test_returns_expected_keys(self, models): res = self._run(models, 0.25) - assert set(res.index) == { + assert set(res) == { "eir_baseline", "eir_new", "eir_multiplier", "hbr_baseline", "hbr_new", } + assert all(isinstance(value, float) for value in res.values()) def test_zero_delta_is_identity(self, models): res = self._run(models, 0.0) - assert res["eir_new"] == res["eir_baseline"] - assert res["eir_multiplier"] == 1.0 + assert res["eir_new"] == pytest.approx(res["eir_baseline"]) + assert res["eir_multiplier"] == pytest.approx(1.0) def test_more_mosquitoes_raises_eir(self, models): res = self._run(models, 0.25) @@ -67,7 +82,7 @@ def test_fewer_mosquitoes_lowers_eir(self, models): def test_batch_is_monotonic_in_delta(self, models): # a single batched call handles every row and preserves input order deltas = [-0.5, -0.25, 0.0, 0.25, 0.5, 1.0] - inputs = pd.DataFrame([{"prevalence": 0.30, "mosquito_delta": d, **INTERVENTIONS} for d in deltas]) - res = estimate_eir_with_mosquito_delta(inputs, eir_models=models) - assert list(res.index) == list(range(len(deltas))) - assert list(res["eir_new"]) == sorted(res["eir_new"]) + results = estimate_eir_with_mosquito_delta([_prepared(d) for d in deltas], eir_models=models) + assert len(results) == len(deltas) + eir_new = [result["eir_new"] for result in results] + assert eir_new == sorted(eir_new) diff --git a/tests/test_scenarios.py b/tests/test_scenarios.py index ff03ab2..00222d1 100644 --- a/tests/test_scenarios.py +++ b/tests/test_scenarios.py @@ -10,12 +10,12 @@ import numpy as np import pytest +from estimint.eir_models import EirModels, load_eir_models from estimint.scenarios import ( PreparedScenario, _apply_mosquito_delta_batch, _classify_prepared_scenario, _estimate_eir, - _load_estimint_models, _prepare_scenario_inputs, run_scenarios, ) @@ -32,14 +32,14 @@ def mk(**kwargs: Any) -> Scenario: return Scenario(eir_target=EirTarget(input_value, input_mode), **defaults) -def _estimate_eir_single(scenario: Scenario, eir_models: dict[str, Any]) -> PreparedScenario: +def _estimate_eir_single(scenario: Scenario, eir_models: EirModels) -> PreparedScenario: """Estimate EIR for a single scenario via the batch estimator.""" return _estimate_eir([scenario], eir_models)[0] @pytest.fixture(scope="module") def est(): - return _load_estimint_models() + return load_eir_models() class TestEstimateEir: diff --git a/uv.lock b/uv.lock index c748155..4b53756 100644 --- a/uv.lock +++ b/uv.lock @@ -399,7 +399,7 @@ wheels = [ [[package]] name = "estimint" -version = "1.5.4" +version = "1.6.4" source = { editable = "." } dependencies = [ { name = "flax" }, @@ -421,6 +421,7 @@ all = [ { name = "duckdb" }, { name = "grain" }, { name = "hydra-core" }, + { name = "jax", extra = ["cuda12"] }, { name = "matplotlib" }, { name = "mintstate" }, { name = "optax" }, @@ -466,7 +467,7 @@ dev = [ requires-dist = [ { name = "appdirs", marker = "extra == 'download'", specifier = ">=1.4.0" }, { name = "duckdb", marker = "extra == 'train'", specifier = ">=0.8.0" }, - { name = "estimint", extras = ["train", "viz", "download", "scenarios"], marker = "extra == 'all'" }, + { name = "estimint", extras = ["train", "viz", "download", "scenarios", "gpu"], marker = "extra == 'all'" }, { name = "flax", specifier = ">=0.12.7" }, { name = "grain", marker = "extra == 'train'", specifier = ">=0.2.16" }, { name = "huggingface-hub", specifier = ">=0.24.0" }, From f6a0f54198d7a494500ff914a844e299e7294920 Mon Sep 17 00:00:00 2001 From: Anmol Date: Thu, 13 Aug 2026 14:45:18 +0000 Subject: [PATCH 26/32] Remove outdated metric CSV files for HBR and prevalence models, including OOF and test metrics for both EIR and HBR. These files contained performance metrics that are no longer relevant to the current model evaluations. --- datasets/split_eir-hbr_y9.csv | 12875 ---------------- datasets/split_hbr_y9-eir.csv | 12875 ---------------- datasets/split_prev_y9-eir.csv | 12875 ---------------- models/hbr/metrics/eir_OOF_metrics_K10CV.csv | 3 - models/hbr/metrics/eir_test_metrics.csv | 2 - models/hbr/metrics/hbr_OOF_metrics_K10CV.csv | 3 - models/hbr/metrics/hbr_test_metrics.csv | 2 - .../metrics/eir_OOF_metrics_K10CV.csv | 3 - .../prevalence/metrics/eir_test_metrics.csv | 2 - 9 files changed, 38640 deletions(-) delete mode 100644 datasets/split_eir-hbr_y9.csv delete mode 100644 datasets/split_hbr_y9-eir.csv delete mode 100644 datasets/split_prev_y9-eir.csv delete mode 100644 models/hbr/metrics/eir_OOF_metrics_K10CV.csv delete mode 100644 models/hbr/metrics/eir_test_metrics.csv delete mode 100644 models/hbr/metrics/hbr_OOF_metrics_K10CV.csv delete mode 100644 models/hbr/metrics/hbr_test_metrics.csv delete mode 100644 models/prevalence/metrics/eir_OOF_metrics_K10CV.csv delete mode 100644 models/prevalence/metrics/eir_test_metrics.csv diff --git a/datasets/split_eir-hbr_y9.csv b/datasets/split_eir-hbr_y9.csv deleted file mode 100644 index 49a4fd7..0000000 --- a/datasets/split_eir-hbr_y9.csv +++ /dev/null @@ -1,12875 +0,0 @@ -parameter_index,simulation_index,split -1128,4,train -2344,2,train -2478,2,train -1820,2,train -1999,4,train -1603,4,train -2295,2,train -1899,2,train -2033,2,train -1637,2,train -2508,2,train -2112,2,train -2945,3,train -2246,2,train -1850,2,train -2029,4,train -1767,4,train -2845,1,train -2325,2,train -2063,2,train -3058,1,train -64,2,train -3271,1,train -277,2,train -3009,1,train -3484,1,train -3088,1,train -3222,1,train -2826,1,train -3005,3,train -3046,4,train -2347,3,train -2784,4,train -2481,3,train -3301,1,train -307,2,train -348,3,train -744,3,train -2643,1,train -45,2,train -482,3,train -3039,1,train -3259,4,train -3655,4,train -2694,3,train -778,1,train -3514,1,train -3555,2,train -957,3,train -2856,1,train -299,3,train -2990,1,train -3076,4,train -2773,3,train -857,1,train -991,1,train -3768,2,train -3902,2,train -3506,2,train -512,3,train -3289,4,train -3027,4,train -2765,4,train -1070,1,train -3981,2,train -3585,2,train -1028,4,train -3282,1,train -766,4,train -3061,2,train -67,3,train -2844,4,train -3240,4,train -2978,4,train -625,1,train -1241,4,train -1375,4,train -979,4,train -3274,2,train -3670,2,train -676,3,train -1496,1,train -1275,2,train -1454,4,train -576,1,train -3353,2,train -3749,2,train -3790,3,train -796,4,train -3487,2,train -1051,1,train -1488,2,train -1185,1,train -3962,2,train -3566,2,train -4003,3,train -1009,4,train -706,3,train -1567,2,train -1701,2,train -1305,2,train -1484,4,train -606,1,train -1043,2,train -3820,3,train -3954,3,train -564,4,train -1914,2,train -1652,2,train -1256,2,train -4033,3,train -1435,4,train -3771,3,train -777,4,train -1731,2,train -1772,3,train -1032,1,train -1073,2,train -1944,2,train -1723,3,train -4018,1,train -1420,2,train -1203,4,train -2198,3,train -1802,3,train -1936,3,train -1103,2,train -2494,1,train -2015,3,train -2452,4,train -1712,2,train -1316,2,train -2149,3,train -1491,3,train -2311,1,train -2665,4,train -1966,3,train -2262,1,train -2699,2,train -2441,3,train -2878,4,train -2179,3,train -2616,4,train -2737,1,train -2912,2,train -2079,1,train -2609,1,train -2213,1,train -2695,4,train -3091,4,train -2829,4,train -2688,1,train -2292,1,train -131,3,train -2426,1,train -2030,1,train -2512,4,train -2646,4,train -2250,4,train -293,1,train -2639,1,train -2243,1,train -2680,2,train -3121,4,train -2201,4,train -244,1,train -3417,2,train -2759,2,train -202,4,train -2456,1,train -2893,2,train -2676,4,train -2280,4,train -719,1,train -457,1,train -61,1,train -591,1,train -3409,3,train -811,4,train -415,4,train -2710,2,train -2669,1,train -2493,4,train -3705,1,train -670,1,train -711,2,train -3488,3,train -12,1,train -232,4,train -621,1,train -662,2,train -3398,2,train -2740,2,train -142,3,train -183,4,train -741,2,train -3869,1,train -438,1,train -479,2,train -3256,3,train -4089,4,train -176,1,train -658,4,train -2953,2,train -396,4,train -3948,1,train -1350,2,train -3686,1,train -1088,2,train -692,2,train -3469,3,train -3865,3,train -389,1,train -3906,4,train -213,4,train -3765,1,train -1167,2,train -1208,3,train -468,1,train -509,2,train -3682,3,train -643,2,train -3420,3,train -3816,3,train -3554,3,train -560,4,train -1421,3,train -3716,1,train -1118,2,train -722,2,train -1159,3,train -1555,3,train -856,2,train -3633,3,train -4070,4,train -3454,1,train -3237,3,train -3936,4,train -1851,1,train -1768,3,train -935,2,train -539,2,train -3667,1,train -3846,3,train -3450,3,train -1668,1,train -1847,3,train -1451,3,train -3746,1,train -1189,3,train -1626,4,train -3704,4,train -3838,4,train -2143,1,train -1747,1,train -1881,1,train -1798,3,train -1839,4,train -3917,4,train -4051,4,train -2094,1,train -2135,2,train -1832,1,train -1436,1,train -1353,3,train -2045,1,train -2131,4,train -2265,4,train -1432,3,train -1869,4,train -2124,1,train -2561,2,train -1862,1,train -1466,1,train -2344,4,train -1820,4,train -2640,2,train -2378,2,train -2075,1,train -1679,1,train -2116,2,train -1813,1,train -1899,4,train -2295,4,train -2033,4,train -1637,4,train -2853,2,train -2591,2,train -2195,2,train -1892,1,train -2112,4,train -1850,4,train -27,1,train -2408,2,train -2845,3,train -2105,1,train -2146,2,train -2542,2,train -2325,4,train -1884,2,train -2063,4,train -106,1,train -147,2,train -2621,2,train -3058,3,train -64,4,train -2359,2,train -2097,2,train -3092,1,train -57,1,train -98,2,train -3271,3,train -277,4,train -2572,2,train -2176,2,train -2613,3,train -3009,3,train -3567,1,train -3305,1,train -311,2,train -3088,3,train -3222,3,train -2826,3,train -3780,1,train -3384,1,train -786,2,train -3518,1,train -87,1,train -128,2,train -2860,1,train -3301,3,train -307,4,train -2602,2,train -2643,3,train -3039,3,train -45,4,train -3080,4,train -3342,4,train -644,3,train -3335,1,train -341,2,train -778,3,train -3073,1,train -3555,4,train -2856,3,train -2990,3,train -1074,1,train -3851,2,train -857,3,train -3548,1,train -991,3,train -158,2,train -3372,4,train -3768,4,train -292,2,train -3506,4,train -4064,2,train -1070,3,train -3802,2,train -371,2,train -3103,1,train -3499,1,train -3585,4,train -3282,3,train -3981,4,train -3061,4,train -3881,2,train -842,1,train -3619,2,train -4015,2,train -625,3,train -3753,2,train -363,3,train -3140,4,train -3670,4,train -3274,4,train -1055,1,train -3832,2,train -1275,4,train -3570,2,train -576,3,train -3353,4,train -3749,4,train -3487,4,train -1571,2,train -872,1,train -4045,2,train -1051,3,train -1488,4,train -3783,2,train -393,3,train -3566,4,train -1481,1,train -1085,1,train -1567,4,train -3862,2,train -1701,4,train -823,1,train -1305,4,train -4037,3,train -606,3,train -1043,4,train -1560,1,train -1298,1,train -902,1,train -1735,2,train -1122,4,train -3813,2,train -1256,4,train -1814,2,train -1115,1,train -1249,1,train -1731,4,train -4026,2,train -4067,3,train -1032,3,train -1073,4,train -3805,3,train -2027,2,train -1765,2,train -1369,2,train -4018,3,train -1420,4,train -2240,2,train -1978,2,train -2019,3,train -1716,2,train -1103,4,train -2494,3,train -1399,2,train -1533,2,train -1316,4,train -2924,1,train -2528,1,train -2311,3,train -2049,3,train -1787,3,train -2607,1,train -3137,1,train -2741,1,train -2262,3,train -2699,4,train -2820,1,train -222,2,train -2954,1,train -1,3,train -2296,1,train -2737,3,train -2778,4,train -2912,4,train -2079,3,train -2213,3,train -3033,1,train -3208,2,train -2509,1,train -2688,3,train -2292,3,train -2426,3,train -2030,3,train -293,3,train -3025,2,train -3421,2,train -2722,1,train -2546,4,train -2243,3,train -2680,4,train -2801,1,train -3238,2,train -244,3,train -2539,1,train -2976,2,train -3417,4,train -2759,4,train -2456,3,train -2893,4,train -540,1,train -719,3,train -3451,2,train -3055,2,train -457,3,train -61,3,train -498,4,train -3189,2,train -2576,4,train -2710,4,train -753,1,train -491,1,train -3664,2,train -3705,3,train -670,3,train -711,4,train -2965,1,train -3006,2,train -12,3,train -2744,2,train -966,1,train -308,1,train -3481,2,train -662,4,train -2957,2,train -2740,4,train -917,1,train -521,1,train -958,2,train -655,1,train -741,4,train -3432,2,train -3473,3,train -438,3,train -479,4,train -3869,3,train -176,3,train -2953,4,train -338,1,train -3948,3,train -558,4,train -3686,3,train -1088,4,train -692,4,train -3383,2,train -1250,2,train -3982,1,train -947,1,train -551,1,train -988,2,train -3765,3,train -1167,4,train -3503,3,train -468,3,train -509,4,train -3241,3,train -643,4,train -1201,2,train -805,2,train -3716,3,train -722,4,train -3454,3,train -856,4,train -1676,2,train -1414,2,train -1018,2,train -1851,3,train -3750,1,train -1152,2,train -935,4,train -539,4,train -3667,3,train -1231,2,train -1668,3,train -3963,1,train -969,2,train -3746,3,train -3921,4,train -2143,3,train -1747,3,train -4042,1,train -1881,3,train -1182,2,train -1223,3,train -1915,1,train -2094,3,train -2135,4,train -1395,2,train -1436,3,train -1832,3,train -2390,1,train -2128,1,train -1732,1,train -2214,4,train -1253,3,train -2341,1,train -1945,1,train -2124,3,train -2561,4,train -1862,3,train -1466,3,train -1903,4,train -2420,1,train -2158,1,train -1762,1,train -2640,4,train -2378,4,train -1679,3,train -2116,4,train -2371,1,train -2412,2,train -2853,4,train -2591,4,train -2195,4,train -1892,3,train -110,1,train -2887,2,train -2491,2,train -2188,1,train -1792,1,train -2408,4,train -2542,4,train -2146,4,train -1884,4,train -189,1,train -323,1,train -106,3,train -147,4,train -2401,1,train -2442,2,train -2879,3,train -2621,4,train -2180,2,train -2359,4,train -2097,4,train -2917,2,train -2655,2,train -3092,3,train -98,4,train -2572,4,train -2176,4,train -3388,1,train -353,1,train -394,2,train -3567,3,train -3305,3,train -2909,3,train -311,4,train -2606,2,train -473,2,train -3601,1,train -170,1,train -607,2,train -3384,3,train -3780,3,train -3518,3,train -128,4,train -2819,2,train -2860,3,train -3814,1,train -820,2,train -861,3,train -3156,1,train -3335,3,train -341,4,train -3073,3,train -3893,1,train -4027,1,train -3631,1,train -1074,3,train -3851,4,train -771,2,train -3548,3,train -158,4,train -292,4,train -3448,1,train -3885,2,train -891,3,train -3186,1,train -3582,1,train -588,2,train -3802,4,train -4064,4,train -371,4,train -3103,3,train -667,2,train -3399,1,train -3795,1,train -3881,4,train -4015,4,train -842,3,train -3619,4,train -3753,4,train -3357,4,train -1138,1,train -3874,1,train -3915,2,train -921,3,train -3612,1,train -618,2,train -1055,3,train -3832,4,train -3570,4,train -1351,1,train -1571,4,train -3429,1,train -3866,2,train -872,3,train -4045,4,train -3783,4,train -1564,1,train -1085,3,train -689,3,train -3862,4,train -823,3,train -2039,1,train -1777,1,train -1381,1,train -1560,3,train -1119,1,train -3896,2,train -1298,3,train -902,3,train -1735,4,train -4030,2,train -3813,4,train -1856,1,train -2031,2,train -1198,1,train -1814,4,train -1418,4,train -1115,3,train -1249,3,train -4026,4,train -2110,2,train -1807,1,train -1411,1,train -1545,1,train -2027,4,train -3926,2,train -1765,4,train -1369,4,train -1107,4,train -1927,2,train -1624,1,train -1978,4,train -1716,4,train -1878,2,train -2315,3,train -1575,1,train -1616,2,train -1399,4,train -1533,4,train -2924,3,train -2528,3,train -2225,2,train -1829,2,train -2607,3,train -2304,2,train -2345,3,train -2741,3,train -2042,2,train -1646,2,train -3037,1,train -43,2,train -2820,3,train -2954,3,train -2255,2,train -2296,3,train -3250,1,train -2854,1,train -3033,3,train -2592,1,train -3208,4,train -2375,3,train -2509,3,train -73,2,train -2805,1,train -3201,1,train -3421,4,train -3025,4,train -2722,3,train -286,2,train -327,3,train -2622,1,train -24,2,train -2801,3,train -3238,4,train -2539,3,train -2976,4,train -3493,1,train -3097,1,train -3534,2,train -540,3,train -2835,1,train -237,2,train -2969,1,train -2573,1,train -3055,4,train -3451,4,train -3189,4,train -836,1,train -970,1,train -574,1,train -753,3,train -357,3,train -54,2,train -2786,1,train -95,3,train -491,3,train -3006,4,train -2744,4,train -1049,1,train -1183,1,train -787,1,train -3960,2,train -966,3,train -3302,2,train -308,3,train -2999,1,train -3481,4,train -2823,4,train -2957,4,train -866,1,train -604,1,train -3911,2,train -3515,2,train -521,3,train -958,4,train -3253,2,train -655,3,train -3432,4,train -1475,1,train -1213,1,train -1254,2,train -3990,2,train -4031,3,train -951,1,train -555,1,train -3728,2,train -3769,3,train -338,3,train -775,4,train -3466,2,train -1333,2,train -1030,1,train -1250,4,train -3545,2,train -3982,3,train -551,3,train -988,4,train -1546,2,train -1680,2,train -1284,2,train -585,1,train -3758,2,train -1201,4,train -805,4,train -1893,2,train -1497,2,train -798,1,train -1235,2,train -1414,4,train -1018,4,train -3750,3,train -1152,4,train -1972,2,train -1710,2,train -1314,2,train -1231,4,train -3963,3,train -969,4,train -1661,2,train -1265,2,train -4042,3,train -1182,4,train -2260,1,train -4076,1,train -1478,2,train -1915,3,train -2390,3,train -1691,2,train -1295,2,train -1732,3,train -2128,3,train -2686,1,train -2424,1,train -1945,3,train -2503,1,train -2637,1,train -2420,3,train -1721,2,train -1762,3,train -2158,3,train -2716,1,train -2454,1,train -2192,1,train -2412,4,train -1579,3,train -193,1,train -2929,1,train -2667,1,train -2271,1,train -110,3,train -2405,1,train -2491,4,train -2887,4,train -2188,3,train -1792,3,train -2229,4,train -1967,4,train -406,1,train -10,1,train -2787,2,train -189,3,train -2484,1,train -2088,1,train -3317,2,train -2222,1,train -2442,4,train -2180,4,train -223,1,train -3396,2,train -2697,1,train -2738,2,train -181,4,train -2917,4,train -2655,4,train -2259,4,train -40,1,train -174,1,train -2951,2,train -3388,3,train -394,4,train -2689,2,train -3085,2,train -2606,4,train -649,1,train -253,1,train -690,2,train -3467,3,train -473,4,train -2768,2,train -3164,2,train -170,3,train -607,4,train -2902,2,train -3205,3,train -3601,3,train -70,1,train -204,1,train -2981,2,train -3377,2,train -820,4,train -3814,3,train -3156,3,train -679,1,train -720,2,train -3893,3,train -417,1,train -458,2,train -3631,3,train -2932,2,train -1329,2,train -3665,1,train -3448,3,train -3885,4,train -368,1,train -3145,2,train -3186,3,train -3582,3,train -588,4,train -3744,1,train -1146,2,train -750,2,train -1187,3,train -3964,4,train -667,4,train -3399,3,train -3957,1,train -4091,1,train -1138,3,train -3874,3,train -3915,4,train -3612,3,train -3653,4,train -618,4,train -3512,1,train -1351,3,train -3646,1,train -3429,3,train -3866,4,train -1647,1,train -1127,2,train -1564,3,train -865,2,train -1726,1,train -1860,1,train -1464,1,train -1381,3,train -1119,3,train -3896,4,train -4030,4,train -2073,1,train -1677,1,train -1856,3,train -1415,1,train -2031,4,train -1198,3,train -936,3,train -2152,1,train -1890,1,train -1494,1,train -1628,1,train -2110,4,train -1411,3,train -1545,3,train -3926,4,train -2144,2,train -1841,1,train -1445,1,train -1927,4,train -1624,3,train -1665,4,train -2753,2,train -1658,1,train -1878,4,train -1575,3,train -1616,4,train -2012,4,train -2133,1,train -2308,2,train -1912,2,train -1829,4,train -6,1,train -2125,2,train -2304,4,train -2042,4,train -1646,4,train -85,1,train -126,2,train -3037,3,train -2641,3,train -43,4,train -1942,2,train -339,2,train -77,2,train -2854,3,train -3250,3,train -2155,2,train -2592,3,train -2289,2,train -3284,1,train -290,2,train -73,4,train -2805,3,train -3201,3,train -3363,1,train -765,2,train -369,2,train -3497,1,train -503,2,train -3321,4,train -286,4,train -2581,2,train -2622,3,train -3059,4,train -24,4,train -3180,1,train -582,2,train -623,3,train -320,2,train -3097,3,train -3534,4,train -2835,3,train -2969,3,train -2573,3,train -3789,1,train -836,3,train -3527,1,train -533,2,train -137,2,train -574,3,train -970,3,train -54,4,train -2786,3,train -1266,1,train -1049,3,train -653,3,train -2948,1,train -1183,3,train -3478,1,train -350,2,train -787,3,train -3344,1,train -88,2,train -3302,4,train -3960,4,train -2999,3,train -866,3,train -3161,1,train -3994,2,train -563,2,train -604,3,train -1041,4,train -3336,2,train -342,3,train -3515,4,train -3253,4,train -1296,1,train -900,1,train -4073,2,train -3990,4,train -1254,4,train -3549,2,train -951,3,train -555,3,train -3728,4,train -3466,4,train -1333,4,train -3628,2,train -4024,2,train -1030,3,train -3366,2,train -3545,4,train -1326,1,train -930,1,train -1460,1,train -1546,4,train -3841,2,train -1064,1,train -1680,4,train -1284,4,train -3579,2,train -3975,2,train -585,3,train -3758,4,train -1539,1,train -1580,2,train -1497,4,train -1101,4,train -3792,2,train -798,3,train -1235,4,train -2189,2,train -1793,2,train -1490,1,train -1094,1,train -1228,1,train -1314,4,train -1710,4,train -4005,2,train -1610,2,train -1307,1,train -911,1,train -1348,2,train -1744,2,train -1265,4,train -869,4,train -2219,2,train -1823,2,train -2260,3,train -1957,2,train -1561,2,train -4076,3,train -1478,4,train -1774,2,train -1378,2,train -1295,4,train -2507,1,train -2686,3,train -1987,2,train -2424,3,train -2720,1,train -2503,3,train -2107,3,train -2637,3,train -2799,1,train -2716,3,train -2275,1,train -2757,4,train -2454,3,train -2192,3,train -1796,3,train -3012,1,train -193,3,train -2488,1,train -2667,3,train -2271,3,train -2405,3,train -3225,1,train -3400,2,train -2567,1,train -3004,2,train -406,3,train -10,3,train -2305,1,train -2787,4,train -2701,1,train -2484,3,train -2088,3,train -2525,4,train -2222,3,train -89,3,train -2780,1,train -223,3,train -2518,1,train -3396,4,train -2738,4,train -519,1,train -3296,2,train -257,1,train -2993,1,train -3034,2,train -3430,2,train -40,3,train -3168,2,train -2772,2,train -174,3,train -2951,4,train -2689,4,train -732,1,train -3247,2,train -253,3,train -690,4,train -2548,1,train -2985,2,train -3164,4,train -2768,4,train -2902,4,train -549,1,train -287,1,train -3064,2,train -3460,2,train -70,3,train -507,4,train -2761,1,train -204,3,train -2981,4,train -896,1,train -500,1,train -238,1,train -720,4,train -3411,2,train -417,3,train -458,4,train -2932,4,train -975,1,train -1016,2,train -713,1,train -1150,2,train -451,1,train -3665,3,train -3961,1,train -926,1,train -1363,2,train -3744,3,train -664,1,train -750,4,train -1146,4,train -3441,2,train -4040,1,train -1046,2,train -784,2,train -3957,3,train -4091,3,train -1655,2,train -1259,2,train -997,2,train -1434,3,train -3729,1,train -1131,2,train -735,2,train -3512,3,train -3949,4,train -3646,3,train -1210,2,train -814,2,train -1647,3,train -1344,2,train -3942,1,train -865,4,train -1943,1,train -1726,3,train -4021,1,train -1860,3,train -1027,2,train -1464,3,train -3759,1,train -1161,2,train -1202,3,train -2156,1,train -2073,3,train -1677,3,train -1415,3,train -2152,3,train -1711,1,train -1890,3,train -1494,3,train -1931,4,train -1628,3,train -1232,3,train -4009,4,train -2448,1,train -2144,4,train -1841,3,train -1445,3,train -2399,1,train -2440,2,train -1741,1,train -2223,4,train -1961,4,train -1658,3,train -2653,2,train -2391,2,train -2308,4,train -1912,4,train -2866,2,train -2470,2,train -2167,1,train -1771,1,train -1991,4,train -2125,4,train -168,1,train -302,1,train -3079,2,train -126,4,train -2380,1,train -2421,2,train -2159,2,train -1942,4,train -381,1,train -339,4,train -2634,2,train -2238,2,train -77,4,train -2372,2,train -2155,4,train -2289,4,train -198,1,train -332,1,train -373,2,train -2847,2,train -2888,3,train -3284,3,train -290,4,train -452,2,train -3580,1,train -149,1,train -3363,3,train -369,4,train -2664,2,train -3497,3,train -3659,1,train -665,2,train -3793,1,train -799,2,train -3180,3,train -582,4,train -141,2,train -2877,2,train -2918,3,train -320,4,train -2656,3,train -3872,1,train -3476,1,train -878,2,train -4006,1,train -616,2,train -220,2,train -3348,1,train -3527,3,train -137,4,train -4085,1,train -1091,2,train -829,2,train -1266,3,train -3561,1,train -130,1,train -171,2,train -567,2,train -2948,3,train -350,4,train -3344,3,train -3385,4,train -88,4,train -4036,1,train -646,2,train -3378,1,train -3774,1,train -780,2,train -3994,4,train -3161,3,train -3336,4,train -1379,1,train -3894,2,train -859,2,train -900,3,train -1296,3,train -3195,1,train -597,2,train -638,3,train -3415,4,train -3811,4,train -4073,4,train -3549,4,train -1592,1,train -3804,1,train -3845,2,train -4024,4,train -3628,4,train -3366,4,train -1805,1,train -1409,1,train -1543,1,train -1326,3,train -930,3,train -1367,4,train -627,2,train -668,3,train -1064,3,train -3841,4,train -3975,4,train -3579,4,train -1360,1,train -1539,3,train -1580,4,train -3792,4,train -1835,1,train -1876,2,train -1793,4,train -915,1,train -1094,3,train -698,3,train -4005,4,train -2089,2,train -1786,1,train -1390,1,train -1827,2,train -1524,1,train -1128,1,train -1610,4,train -1307,3,train -911,3,train -1348,4,train -1744,4,train -2302,2,train -1906,2,train -1603,1,train -1207,1,train -2040,2,train -1823,4,train -1957,4,train -1561,4,train -2515,2,train -2119,2,train -2253,2,train -2294,3,train -1774,4,train -1378,4,train -2332,2,train -2070,2,train -2507,3,train -2803,1,train -2720,3,train -1887,2,train -2324,3,train -2021,2,train -1625,2,train -22,2,train -2799,3,train -2100,2,train -1838,2,train -2275,3,train -101,2,train -235,2,train -3012,3,train -2313,2,train -2051,2,train -2092,3,train -2488,3,train -314,2,train -3046,1,train -2784,1,train -3400,4,train -2567,3,train -3004,4,train -2264,2,train -2305,3,train -2701,3,train -3259,1,train -306,3,train -3,2,train -2780,3,train -2518,3,train -2122,3,train -3076,1,train -3513,2,train -519,3,train -3296,4,train -257,3,train -2552,1,train -2993,3,train -3034,4,train -3168,4,train -2772,4,train -3430,4,train -3289,1,train -3726,2,train -295,2,train -732,3,train -3027,1,train -74,3,train -2765,1,train -2851,4,train -3247,4,train -2548,3,train -2985,4,train -1028,1,train -766,1,train -3939,2,train -549,3,train -2844,1,train -3240,1,train -3677,2,train -287,3,train -2978,1,train -3064,4,train -3460,4,train -2761,3,train -1241,1,train -845,1,train -979,1,train -803,4,train -3494,2,train -500,3,train -104,3,train -238,3,train -3411,4,train -796,1,train -975,3,train -534,1,train -1016,4,train -3311,2,train -713,3,train -1150,4,train -3445,2,train -3707,2,train -451,3,train -3748,3,train -1009,1,train -1446,2,train -833,4,train -3961,3,train -1363,4,train -3262,2,train -3441,4,train -1659,2,train -4040,3,train -564,1,train -1046,4,train -3778,3,train -784,4,train -522,4,train -1738,2,train -1342,2,train -1476,2,train -777,1,train -1259,4,train -997,4,train -3688,2,train -3729,3,train -1131,4,train -735,4,train -1951,2,train -1689,2,train -1293,2,train -4025,1,train -1427,2,train -1210,4,train -814,4,train -3942,3,train -1943,3,train -1640,2,train -1244,2,train -4021,3,train -1027,4,train -3759,3,train -1161,4,train -1719,2,train -1323,2,train -2156,3,train -4055,1,train -1457,2,train -1061,2,train -2452,1,train -1670,2,train -1274,2,train -1711,3,train -2665,1,train -2269,1,train -2448,3,train -2007,1,train -1790,3,train -1487,2,train -2878,1,train -2616,1,train -2399,3,train -2440,4,train -1700,2,train -1741,3,train -2695,1,train -2299,1,train -2653,4,train -2391,4,train -2512,1,train -2646,1,train -2250,1,train -2687,2,train -2866,4,train -2470,4,train -2167,3,train -1771,3,train -2766,2,train -168,3,train -2900,2,train -2201,1,train -2287,4,train -2421,4,train -2159,4,train -202,1,train -381,3,train -2676,1,train -2280,1,train -2717,2,train -2455,2,train -2634,4,train -2238,4,train -2372,4,train -281,1,train -415,1,train -198,3,train -2493,1,train -2930,2,train -3326,2,train -373,4,train -2668,2,train -2847,4,train -232,1,train -669,2,train -3405,2,train -452,4,train -3580,3,train -149,3,train -2485,2,train -2664,4,train -882,2,train -3659,3,train -183,1,train -269,4,train -665,4,train -799,4,train -3793,3,train -2698,2,train -141,4,train -2877,4,train -4089,1,train -3693,1,train -658,1,train -699,2,train -1095,2,train -3872,3,train -396,1,train -437,2,train -878,4,train -3173,2,train -616,4,train -220,4,train -3348,3,train -3476,3,train -3906,1,train -912,2,train -4085,3,train -213,1,train -650,2,train -829,4,train -3124,2,train -3561,3,train -567,4,train -171,4,train -3723,1,train -729,2,train -3461,1,train -863,2,train -467,2,train -3244,3,train -646,4,train -3378,3,train -3936,1,train -942,2,train -1379,3,train -4070,1,train -3894,4,train -3195,3,train -3632,4,train -597,4,train -1592,3,train -893,2,train -497,2,train -3845,4,train -1626,1,train -1805,3,train -1409,3,train -3704,1,train -1543,3,train -3838,1,train -844,2,train -3662,4,train -627,4,train -1839,1,train -1443,1,train -1226,3,train -3917,1,train -923,2,train -1360,3,train -1835,3,train -1876,4,train -915,3,train -2131,1,train -1869,1,train -1473,1,train -2089,4,train -1390,3,train -1827,4,train -1524,3,train -1128,3,train -2344,1,train -1820,1,train -1424,1,train -1906,4,train -2302,4,train -1603,3,train -1207,3,train -2040,4,train -2202,2,train -1899,1,train -1503,1,train -1637,1,train -2119,4,train -2253,4,train -2112,1,train -2153,2,train -2590,3,train -1850,1,train -2332,4,train -2070,4,train -1412,4,train -2803,3,train -2104,2,train -1887,4,train -2021,4,train -1625,4,train -64,1,train -22,4,train -1921,2,train -2100,4,train -1838,4,train -101,4,train -235,4,train -2134,2,train -2313,4,train -2051,4,train -3129,1,train -2867,1,train -314,4,train -3046,3,train -2347,2,train -2784,3,train -3342,1,train -348,2,train -3080,1,train -482,2,train -86,2,train -3259,3,train -3,4,train -3555,1,train -2897,1,train -299,2,train -3076,3,train -3513,4,train -2552,3,train -3768,1,train -3372,1,train -3506,1,train -512,2,train -3726,4,train -2848,1,train -3289,3,train -295,4,train -3027,3,train -3068,4,train -2765,3,train -849,1,train -3585,1,train -1028,3,train -632,3,train -2927,1,train -766,3,train -3061,1,train -3939,4,train -67,2,train -2844,3,train -3677,4,train -2978,3,train -3839,2,train -1241,3,train -845,3,train -3140,1,train -3577,2,train -979,3,train -3274,1,train -3494,4,train -3098,4,train -2836,4,train -1275,1,train -3353,1,train -3790,2,train -796,3,train -534,3,train -3311,4,train -3707,4,train -3445,4,train -1488,1,train -4003,2,train -3566,1,train -3607,2,train -1009,3,train -1446,4,train -4044,3,train -3128,4,train -3262,4,train -1567,1,train -1305,1,train -909,1,train -1043,1,train -3820,2,train -1659,4,train -3954,2,train -430,3,train -3558,2,train -564,3,train -1122,1,train -1559,2,train -1256,1,train -1342,4,train -1738,4,train -4033,2,train -1476,4,train -3771,2,train -4074,3,train -777,3,train -1638,2,train -1772,2,train -1073,1,train -1689,4,train -1293,4,train -4025,3,train -1427,4,train -1723,2,train -890,1,train -1327,2,train -1110,4,train -1244,4,train -2198,2,train -1802,2,train -1936,2,train -1103,1,train -1719,4,train -1323,4,train -4055,3,train -1457,4,train -1061,4,train -2015,2,train -2056,3,train -2452,3,train -1316,1,train -1357,2,train -1491,2,train -1274,4,train -2665,3,train -2269,3,train -1966,2,train -1570,2,train -2007,3,train -1487,4,train -2565,1,train -2699,1,train -1387,2,train -2778,1,train -2912,1,train -2516,1,train -2695,3,train -2299,3,train -1775,3,train -2595,1,train -2512,3,train -2250,3,train -2687,4,train -2546,1,train -2983,2,train -2680,1,train -2284,1,train -2766,4,train -2900,4,train -2201,3,train -285,1,train -68,3,train -2363,1,train -2759,1,train -202,3,train -2893,1,train -3196,2,train -2280,3,train -2717,4,train -2455,4,train -498,1,train -281,3,train -2576,1,train -3013,2,train -415,3,train -2710,1,train -3409,2,train -2493,3,train -2534,4,train -2930,4,train -2668,4,train -577,1,train -711,1,train -3488,2,train -3226,2,train -232,3,train -669,4,train -2485,4,train -662,1,train -3043,2,train -3480,3,train -882,4,train -2740,1,train -2781,2,train -183,3,train -2698,4,train -741,1,train -479,1,train -3256,2,train -3693,3,train -1095,4,train -699,4,train -4089,3,train -396,3,train -437,4,train -3173,4,train -558,1,train -995,2,train -3772,3,train -692,1,train -296,1,train -3510,3,train -3469,2,train -912,4,train -34,1,train -2811,2,train -3906,3,train -213,3,train -650,4,train -1208,2,train -3940,1,train -509,1,train -946,2,train -3682,2,train -643,1,train -729,4,train -3420,2,train -3461,3,train -863,4,train -467,4,train -3723,3,train -1421,2,train -722,1,train -326,1,train -1159,2,train -3936,3,train -942,4,train -3237,2,train -4070,3,train -284,4,train -3970,1,train -539,1,train -714,2,train -3450,2,train -3928,4,train -893,4,train -497,4,train -1451,2,train -1189,2,train -793,2,train -1626,3,train -3921,1,train -3704,3,train -3838,3,train -844,4,train -1922,1,train -4000,1,train -1839,3,train -1006,2,train -1443,3,train -3738,1,train -3917,3,train -3958,4,train -923,4,train -2135,1,train -1522,3,train -3817,1,train -2214,1,train -2131,3,train -1690,1,train -1432,2,train -1473,3,train -1869,3,train -1910,4,train -1211,3,train -3988,4,train -1903,1,train -1820,3,train -1424,3,train -2640,1,train -2378,1,train -2419,2,train -2116,1,train -2202,4,train -1899,3,train -1503,3,train -1940,4,train -1637,3,train -2195,1,train -2153,4,train -1850,3,train -2711,2,train -2408,1,train -2449,2,train -2845,2,train -2146,1,train -1884,1,train -2104,4,train -147,1,train -3058,2,train -2359,1,train -2400,2,train -2097,1,train -2183,4,train -1921,4,train -98,1,train -2176,1,train -2613,2,train -2134,4,train -311,1,train -3088,2,train -3129,3,train -2826,2,train -2430,2,train -2867,3,train -2347,4,train -431,2,train -128,1,train -169,2,train -3342,3,train -348,4,train -2643,2,train -2247,2,train -3080,3,train -86,4,train -644,2,train -3376,1,train -778,2,train -3555,3,train -2856,2,train -2460,2,train -2897,3,train -299,4,train -2635,3,train -3851,1,train -857,2,train -158,1,train -3372,3,train -3506,3,train -2848,3,train -4064,1,train -1070,2,train -3802,1,train -412,2,train -849,3,train -3585,3,train -3626,4,train -2927,3,train -3364,4,train -3061,3,train -67,4,train -3881,1,train -3619,1,train -625,2,train -3357,1,train -3753,1,train -3839,4,train -363,2,train -3140,3,train -3577,4,train -3274,3,train -3832,1,train -3436,1,train -1275,3,train -442,2,train -3174,1,train -3570,1,train -576,2,train -180,2,train -617,3,train -3353,3,train -3790,4,train -1571,1,train -4086,2,train -1488,3,train -3783,1,train -3824,2,train -393,2,train -3607,4,train -4003,4,train -1567,3,train -1126,1,train -3862,1,train -3903,2,train -1305,3,train -909,3,train -3641,2,train -4037,2,train -606,2,train -1043,3,train -3820,4,train -3558,4,train -1735,1,train -1122,3,train -1559,4,train -3813,1,train -1256,3,train -3854,2,train -4033,4,train -3771,4,train -1814,1,train -1418,1,train -1156,1,train -1638,4,train -1772,4,train -894,1,train -1376,4,train -4067,2,train -1073,3,train -677,3,train -3805,2,train -2068,2,train -1765,1,train -1369,1,train -1806,2,train -1107,1,train -1723,4,train -890,3,train -1327,4,train -4018,2,train -1885,2,train -2019,2,train -1186,1,train -1802,4,train -1406,4,train -1103,3,train -2494,2,train -2098,2,train -1399,1,train -1836,2,train -1533,1,train -2015,4,train -1316,3,train -1357,4,train -1491,4,train -2311,2,train -2049,2,train -1653,2,train -1787,2,train -1570,4,train -1174,4,train -2565,3,train -2262,2,train -1866,2,train -2699,3,train -1604,2,train -1387,4,train -1,2,train -2778,3,train -2912,3,train -2079,2,train -2516,3,train -2213,2,train -80,2,train -2812,1,train -3208,1,train -2595,3,train -2292,2,train -2770,4,train -2030,2,train -2071,3,train -2891,1,train -293,2,train -3025,1,train -3421,1,train -2546,3,train -2983,4,train -2680,3,train -2284,3,train -3238,1,train -3279,2,train -244,2,train -285,3,train -2580,1,train -2976,1,train -2759,3,train -2363,3,train -2800,4,train -3196,4,train -3055,1,train -3492,2,train -61,2,train -498,3,train -3189,1,train -3409,4,train -2576,3,train -3013,4,train -2710,3,train -3705,2,train -577,3,train -2872,1,train -711,3,train -3006,1,train -3309,2,train -3488,4,train -12,2,train -53,3,train -2744,1,train -3226,4,train -3522,2,train -2823,1,train -3260,2,train -662,3,train -2957,1,train -3043,4,train -2740,3,train -2781,4,train -824,1,train -958,1,train -3339,2,train -741,3,train -3473,2,train -479,3,train -3256,4,train -775,1,train -3948,2,train -3686,2,train -558,3,train -995,4,train -3290,2,train -692,3,train -296,3,train -3028,2,train -3469,4,train -34,3,train -2811,4,train -1250,1,train -854,1,train -988,1,train -592,1,train -3765,2,train -1208,4,train -330,1,train -812,4,train -3503,2,train -509,3,train -946,4,train -3241,2,train -3940,3,train -1201,1,train -805,1,train -1421,4,train -3716,2,train -3320,2,train -3757,3,train -722,3,train -326,3,train -1159,4,train -3454,2,train -3237,4,train -1321,2,train -1018,1,train -622,1,train -1059,2,train -3970,3,train -539,3,train -3667,2,train -714,4,train -1534,2,train -1231,1,train -1668,2,train -4004,1,train -969,1,train -1010,2,train -1451,4,train -3746,2,train -1189,4,train -793,4,train -3787,3,train -3921,3,train -531,4,train -1747,2,train -1922,3,train -1089,2,train -1223,2,train -4000,3,train -1006,4,train -3738,3,train -2135,3,train -1302,2,train -1436,2,train -3817,3,train -2214,3,train -1253,2,train -1690,3,train -2248,1,train -1986,1,train -1466,2,train -1507,3,train -1903,3,train -2378,3,train -2419,4,train -2116,3,train -2278,1,train -2412,1,train -2195,3,train -2236,4,train -2491,1,train -2229,1,train -2711,4,train -2408,3,train -1967,1,train -2449,4,train -2845,4,train -2146,3,train -1884,3,train -147,3,train -2442,1,train -2046,1,train -2879,2,train -2180,1,train -2266,4,train -2400,4,train -181,1,train -2958,2,train -2655,1,train -2259,1,train -3092,2,train -98,3,train -2176,3,train -2613,4,train -260,1,train -394,1,train -218,4,train -2909,2,train -2826,4,train -2430,4,train -473,1,train -607,1,train -3384,2,train -431,4,train -2726,2,train -3163,3,train -128,3,train -169,4,train -2860,2,train -2643,4,train -2247,4,train -861,2,train -644,4,train -248,4,train -2543,2,train -778,4,train -3073,2,train -3376,3,train -2460,4,train -3672,1,train -1074,2,train -3851,3,train -857,4,train -2756,2,train -158,3,train -2931,3,train -3751,1,train -3885,1,train -891,2,train -3802,3,train -412,4,train -3103,2,train -3964,1,train -3702,1,train -667,1,train -708,2,train -3922,4,train -1145,3,train -842,2,train -3619,3,train -3223,3,train -3440,1,train -625,4,train -3357,3,train -3881,3,train -363,4,train -3915,1,train -921,2,train -3653,1,train -1055,2,train -3832,3,train -3436,3,train -442,4,train -3174,3,train -3570,3,train -576,4,train -180,4,train -1571,3,train -738,2,train -1175,3,train -3866,1,train -872,2,train -4086,4,train -3824,4,train -393,4,train -1085,2,train -689,2,train -1126,3,train -3862,3,train -823,2,train -4037,4,train -3641,4,train -3903,4,train -606,4,train -1684,1,train -1422,1,train -1205,3,train -3500,1,train -3896,1,train -902,2,train -3854,4,train -2031,1,train -1814,3,train -1418,3,train -1156,3,train -894,3,train -4067,4,train -3805,4,train -2110,1,train -1714,1,train -1452,1,train -2068,4,train -3926,1,train -1369,3,train -1806,4,train -1107,3,train -4018,4,train -1927,1,train -1665,1,train -2102,2,train -1885,4,train -2019,4,train -1186,3,train -2181,2,train -1878,1,train -2315,2,train -1616,1,train -1220,1,train -2098,4,train -1399,3,train -1836,4,train -2528,2,train -1829,1,train -1870,2,train -2311,4,train -2049,4,train -1653,4,train -1787,4,train -1391,4,train -2607,2,train -2345,2,train -1646,1,train -2083,2,train -2262,4,train -1866,4,train -1604,4,train -43,1,train -2820,2,train -1,4,train -2296,2,train -2079,4,train -80,4,train -2375,2,train -2812,3,train -3208,3,train -2509,2,train -2113,2,train -2030,4,train -3108,1,train -73,1,train -114,2,train -2891,3,train -293,4,train -3025,3,train -2629,3,train -2367,3,train -3187,1,train -3321,1,train -327,2,train -3059,1,train -65,2,train -3238,3,train -3279,4,train -2539,2,train -2580,3,train -2976,3,train -3534,1,train -3138,1,train -540,2,train -144,2,train -2876,1,train -3055,3,train -2659,3,train -3492,4,train -61,4,train -2397,3,train -357,2,train -491,2,train -95,2,train -2872,3,train -3309,4,train -3705,4,train -3006,3,train -3047,4,train -12,4,train -2744,3,train -3605,2,train -3302,1,train -308,2,train -349,3,train -3522,4,train -2823,3,train -3260,4,train -2957,3,train -1041,1,train -824,3,train -3515,1,train -521,2,train -958,3,train -3253,1,train -3339,4,train -3473,4,train -3077,4,train -2815,4,train -1120,1,train -1254,1,train -4031,2,train -3635,2,train -3769,2,train -2936,1,train -338,2,train -775,3,train -3686,4,train -3290,4,train -3028,4,train -1333,1,train -1250,3,train -854,3,train -3545,1,train -3586,2,train -551,2,train -592,3,train -988,3,train -3765,4,train -3982,2,train -330,3,train -3503,4,train -3241,4,train -1546,1,train -1284,1,train -1108,4,train -805,3,train -409,3,train -3716,4,train -3320,4,train -3454,4,train -1497,1,train -1101,1,train -1235,1,train -839,1,train -1321,4,train -1018,3,train -622,3,train -1059,4,train -3750,2,train -1617,2,train -1314,1,train -1534,4,train -656,1,train -1668,4,train -3963,2,train -4004,3,train -1010,4,train -3746,4,train -1830,2,train -1568,2,train -1265,1,train -869,1,train -1747,4,train -4042,2,train -1089,4,train -1223,4,train -1915,2,train -1519,2,train -1302,4,train -1436,4,train -1598,2,train -1295,1,train -1732,2,train -1253,4,train -2248,3,train -1945,2,train -1549,2,train -1986,3,train -1466,4,train -2065,3,train -1762,2,train -2757,1,train -2278,3,train -2412,3,train -1579,2,train -2574,1,train -2312,1,train -2491,3,train -1792,2,train -2229,3,train -1967,3,train -2787,1,train -2525,1,train -2263,1,train -2442,3,train -2046,3,train -2879,4,train -2180,3,train -2738,1,train -2342,1,train -181,3,train -2958,4,train -3092,4,train -2259,3,train -1863,3,train -260,3,train -2951,1,train -2992,2,train -394,3,train -2689,1,train -3388,2,train -2909,4,train -2513,4,train -690,1,train -3467,2,train -473,3,train -2768,1,train -3205,2,train -3601,2,train -2726,4,train -2860,4,train -507,1,train -245,1,train -2981,1,train -861,4,train -465,4,train -2760,2,train -3156,2,train -2543,4,train -720,1,train -458,1,train -3631,2,train -3672,3,train -1074,4,train -2756,4,train -3968,1,train -3751,3,train -3448,2,train -3052,2,train -3489,3,train -891,4,train -3186,2,train -2790,2,train -3885,3,train -233,4,train -750,1,train -1187,2,train -3964,3,train -3702,3,train -708,4,train -3003,2,train -3399,2,train -842,4,train -3440,3,train -1004,2,train -3736,1,train -1138,2,train -742,2,train -3915,3,train -921,4,train -3653,3,train -263,4,train -3949,1,train -1351,2,train -955,2,train -738,4,train -3429,2,train -3866,3,train -872,4,train -4028,1,train -1034,2,train -1471,3,train -772,2,train -510,2,train -689,4,train -1684,3,train -1381,2,train -1422,3,train -3717,1,train -1119,2,train -723,2,train -3500,3,train -3896,3,train -902,4,train -3937,4,train -1718,1,train -1501,3,train -3796,1,train -1198,2,train -802,2,train -936,2,train -1931,1,train -2110,3,train -1714,3,train -4009,1,train -1411,2,train -1452,3,train -1190,3,train -3926,3,train -3967,4,train -2144,1,train -1748,1,train -1927,3,train -2102,4,train -1665,3,train -1269,3,train -2223,1,train -1961,1,train -2398,2,train -2181,4,train -1878,3,train -1919,4,train -2315,4,train -1616,3,train -1220,3,train -2308,1,train -1912,1,train -2528,4,train -1829,3,train -1870,4,train -1991,1,train -2428,2,train -2125,1,train -2166,2,train -2607,4,train -2345,4,train -1646,3,train -2083,4,train -126,1,train -3037,2,train -2641,2,train -1942,1,train -2379,2,train -2296,4,train -339,1,train -77,1,train -2854,2,train -2458,2,train -2895,3,train -2155,1,train -2592,2,train -2375,4,train -2113,4,train -1717,4,train -3108,3,train -114,4,train -2805,2,train -2147,2,train -369,1,train -3187,3,train -148,2,train -3321,3,train -327,4,train -2622,2,train -3059,3,train -65,4,train -623,2,train -361,2,train -3138,3,train -3534,3,train -540,4,train -144,4,train -2835,2,train -2876,3,train -2573,2,train -836,2,train -137,1,train -178,2,train -574,2,train -357,4,train -95,4,train -653,2,train -3385,1,train -787,2,train -391,2,train -3605,4,train -88,1,train -129,2,train -3302,3,train -3343,4,train -308,4,train -2644,3,train -866,2,train -3202,1,train -604,2,train -1041,3,train -3336,1,train -342,2,train -3253,3,train -1337,1,train -4073,1,train -1120,3,train -3415,1,train -1254,3,train -3549,1,train -4031,4,train -421,2,train -555,2,train -3635,4,train -2936,3,train -3373,4,train -338,4,train -3769,4,train -1333,3,train -937,3,train -3628,1,train -4065,2,train -3366,1,train -3982,4,train -3586,4,train -1367,1,train -1546,3,train -3841,1,train -3882,2,train -847,2,train -1284,3,train -1325,4,train -3579,1,train -585,2,train -626,3,train -3403,4,train -1580,1,train -1184,1,train -4095,2,train -1101,3,train -3792,1,train -1235,3,train -839,3,train -3750,4,train -1793,1,train -1834,2,train -1135,1,train -1617,4,train -3912,2,train -1314,3,train -1355,4,train -656,3,train -1610,1,train -1214,1,train -2047,2,train -1744,1,train -1348,1,train -1830,4,train -1568,4,train -1265,3,train -869,3,train -4042,4,train -1823,1,train -1864,2,train -2260,2,train -1561,1,train -1602,2,train -4076,2,train -1519,4,train -1123,4,train -1378,1,train -1598,4,train -1295,3,train -1732,4,train -2331,3,train -1632,2,train -1549,4,train -2503,2,train -2107,2,train -1845,2,train -1762,4,train -2757,3,train -1796,2,train -1579,4,train -193,2,train -2574,3,train -2271,2,train -1875,2,train -2312,3,train -1792,4,train -2870,1,train -3004,1,train -10,2,train -2787,3,train -2088,2,train -2525,3,train -2263,3,train -89,2,train -3258,2,train -223,2,train -2738,3,train -2342,3,train -3296,1,train -3034,1,train -3471,2,train -40,2,train -2772,1,train -3168,1,train -3388,4,train -2992,4,train -2689,3,train -3247,1,train -253,2,train -690,3,train -2985,1,train -3467,4,train -32,3,train -2768,3,train -2809,4,train -3205,4,train -3064,1,train -70,2,train -507,3,train -3239,2,train -245,3,train -3156,4,train -2760,4,train -803,1,train -541,1,train -720,3,train -761,4,train -2619,1,train -3056,2,train -458,3,train -2839,4,train -1016,1,train -620,1,train -1150,1,train -3531,2,train -3968,3,train -3665,2,train -3269,2,train -3448,4,train -3052,4,train -3186,4,train -2790,4,train -833,1,train -3744,2,train -750,3,train -791,4,train -1187,4,train -3003,4,train -1046,1,train -784,1,train -3957,2,train -522,1,train -3736,3,train -1004,4,train -3299,2,train -1138,4,train -742,4,train -1259,1,train -1300,2,train -997,1,train -1038,2,train -1434,2,train -735,1,train -821,4,train -3512,2,train -3949,3,train -955,4,train -1647,2,train -814,1,train -1251,2,train -4028,3,train -1034,4,train -772,4,train -3504,3,train -510,4,train -1726,2,train -1027,1,train -1068,2,train -1464,2,train -1202,2,train -589,4,train -3717,3,train -1119,4,train -723,4,train -1677,2,train -1718,3,train -4013,1,train -1415,2,train -3796,3,train -1198,4,train -802,4,train -936,4,train -1494,2,train -1098,2,train -1931,3,train -1232,2,train -4009,3,train -2227,1,train -2144,3,train -1748,3,train -2185,4,train -1445,2,train -1486,3,train -2306,1,train -2440,1,train -2223,3,train -1961,3,train -2398,4,train -2653,1,train -2391,1,train -2215,4,train -1912,3,train -1516,3,train -2470,1,train -1991,3,train -2428,4,train -2125,3,train -2166,4,train -2287,1,train -126,3,train -2421,1,train -2025,1,train -2159,1,train -2641,4,train -1942,3,train -2379,4,train -2937,2,train -2634,1,train -2238,1,train -77,3,train -2372,1,train -2458,4,train -2854,4,train -2155,3,train -2592,4,train -1934,4,train -373,1,train -197,4,train -2055,1,train -2888,2,train -2147,4,train -452,1,train -3363,2,train -2967,2,train -2664,1,train -2705,2,train -148,4,train -2622,4,train -665,1,train -269,1,train -444,2,train -3180,2,train -141,1,train -227,4,train -623,4,train -2522,2,train -361,4,train -2656,2,train -2918,2,train -2573,4,train -3651,1,train -616,1,train -220,1,train -836,4,train -137,3,train -178,4,train -574,4,train -3730,1,train -736,2,train -171,1,train -653,4,train -2948,2,train -3385,3,train -391,4,train -129,4,train -3681,1,train -646,1,train -687,2,train -866,4,train -3161,2,train -3202,3,train -604,4,train -3336,3,train -342,4,train -3894,1,train -900,2,train -504,2,train -1337,3,train -3632,1,train -638,2,train -3415,3,train -421,4,train -25,4,train -3549,3,train -555,4,train -717,2,train -3845,1,train -3931,4,train -3628,3,train -4065,4,train -3366,3,train -930,2,train -1367,3,train -3662,1,train -668,2,train -3882,4,train -3841,3,train -3579,3,train -585,4,train -1401,1,train -1580,3,train -1184,3,train -485,2,train -3699,4,train -4095,4,train -1876,1,train -1793,3,train -1834,4,train -698,2,train -1135,3,train -3912,4,train -2089,1,train -1827,1,train -1610,3,train -1214,3,train -2047,4,train -911,2,train -1348,3,train -1906,1,train -2040,1,train -2260,4,train -1864,4,train -1561,3,train -1602,4,train -4076,4,train -2119,1,train -2294,2,train -1378,3,train -982,3,train -2070,1,train -2507,2,train -1412,1,train -1632,4,train -1370,4,train -1887,1,train -1928,2,train -2324,2,train -1625,1,train -2107,4,train -1845,4,train -22,1,train -2799,2,train -2100,1,train -2141,2,train -1838,1,train -2275,2,train -1796,4,train -101,1,train -2488,2,train -2092,2,train -1875,4,train -3087,1,train -93,2,train -2870,3,train -2567,2,train -2171,2,train -2608,3,train -10,4,train -2305,2,train -1909,2,train -2346,3,train -3004,3,train -2088,4,train -172,2,train -306,2,train -89,4,train -3258,4,train -2518,2,train -2122,2,train -3513,1,train -3117,1,train -519,2,train -3296,3,train -257,2,train -3034,3,train -3471,4,train -40,4,train -2772,3,train -2376,3,train -3726,1,train -3068,1,train -74,2,train -2851,3,train -3247,3,train -2985,3,train -549,2,train -2885,1,train -3367,4,train -287,2,train -3064,3,train -2623,1,train -3105,4,train -70,4,train -3239,4,train -2406,3,train -3797,2,train -803,3,train -3098,1,train -3494,1,train -104,2,train -541,3,train -2836,1,train -238,2,train -2619,3,train -3056,4,train -3614,2,train -1016,3,train -620,3,train -2915,1,train -3311,1,train -3748,2,train -358,3,train -3531,4,train -3665,4,train -3269,4,train -1446,1,train -833,3,train -3128,1,train -3961,2,train -3262,1,train -3303,2,train -3744,4,train -4040,2,train -1046,3,train -605,1,train -1087,4,train -3778,2,train -784,3,train -3516,2,train -522,3,train -3299,4,train -1342,1,train -1476,1,train -1517,2,train -1259,3,train -1300,4,train -997,3,train -1038,4,train -1434,4,train -3729,2,train -735,3,train -3512,4,train -1596,2,train -1293,1,train -897,1,train -635,1,train -1117,4,train -1647,4,train -814,3,train -1251,4,train -3942,2,train -1809,2,train -1943,2,train -1110,1,train -1547,2,train -1244,1,train -1726,4,train -4021,2,train -4062,3,train -1027,3,train -1068,4,train -1464,4,train -3759,2,train -1202,4,train -806,4,train -3800,3,train -1323,1,train -1364,2,train -1061,1,train -4013,3,train -1415,4,train -1274,1,train -1315,2,train -1711,2,train -4092,3,train -1494,4,train -1098,4,train -1232,4,train -1790,2,train -2227,3,train -1445,4,train -2523,1,train -2306,3,train -2440,3,train -2044,3,train -1741,2,train -1782,3,train -2653,3,train -2391,3,train -2553,1,train -2687,1,train -2291,1,train -2470,3,train -1771,2,train -2766,1,train -2900,1,train -2287,3,train -2421,3,train -2025,3,train -2159,3,train -2583,1,train -3020,2,train -26,3,train -2321,1,train -2717,1,train -2937,4,train -2455,1,train -2541,4,train -2238,3,train -1842,3,train -3233,2,train -2930,1,train -2534,1,train -373,3,train -2668,1,train -2888,4,train -2055,3,train -669,1,train -452,3,train -2351,1,train -2485,1,train -2967,4,train -2705,4,train -882,1,train -3659,2,train -665,3,train -269,3,train -3438,3,train -444,4,train -2698,1,train -2739,2,train -141,3,train -2918,4,train -2522,4,train -3180,4,train -2656,4,train -699,1,train -303,1,train -3476,2,train -437,1,train -41,1,train -3651,3,train -220,3,train -3348,2,train -912,1,train -953,2,train -3730,3,train -650,1,train -736,4,train -3031,2,train -2769,2,train -171,3,train -2948,4,train -729,1,train -467,1,train -3244,2,train -3681,3,train -687,4,train -3378,2,train -3977,1,train -942,1,train -983,2,train -1379,2,train -284,1,train -3498,3,train -3894,3,train -900,4,train -504,4,train -3195,2,train -3236,3,train -638,4,train -242,4,train -3632,3,train -3928,1,train -497,1,train -934,2,train -717,4,train -3845,3,train -4007,1,train -1409,2,train -1013,2,train -3745,1,train -751,2,train -930,4,train -489,2,train -3662,3,train -668,4,train -1226,2,train -3958,1,train -1360,2,train -1401,3,train -3696,1,train -702,2,train -485,4,train -1697,1,train -1876,3,train -781,2,train -915,2,train -698,4,train -1910,1,train -2089,3,train -3988,1,train -1390,2,train -1827,3,train -1128,2,train -3946,4,train -911,4,train -1989,1,train -1727,1,train -1906,3,train -1207,2,train -1248,3,train -2202,1,train -1940,1,train -2119,3,train -1678,1,train -2294,4,train -2153,1,train -1757,1,train -2590,2,train -2507,4,train -1412,3,train -2803,2,train -2104,1,train -1708,1,train -1887,3,train -1928,4,train -2324,4,train -1625,3,train -1666,4,train -2486,2,train -1921,1,train -2141,4,train -2275,4,train -101,3,train -2437,2,train -2874,3,train -2134,1,train -2175,2,train -2092,4,train -1696,4,train -3087,3,train -93,4,train -2388,2,train -2784,2,train -2567,4,train -2171,4,train -2305,4,train -1909,4,train -348,1,train -86,1,train -172,4,train -2904,3,train -306,4,train -2122,4,train -3513,3,train -3117,3,train -519,4,train -257,4,train -2552,2,train -419,2,train -3151,1,train -3068,3,train -74,4,train -3626,1,train -632,2,train -3364,1,train -766,2,train -370,2,train -67,1,train -2844,2,train -2885,3,train -287,4,train -2623,3,train -3839,1,train -845,2,train -449,2,train -3577,1,train -187,2,train -3797,4,train -3098,3,train -2702,3,train -104,4,train -2836,3,train -3790,1,train -3831,2,train -796,2,train -3132,1,train -3614,4,train -534,2,train -138,2,train -2915,3,train -3311,3,train -3352,4,train -3748,4,train -916,3,train -3211,1,train -3607,1,train -4044,2,train -3961,4,train -3128,3,train -3262,3,train -3303,4,train -3820,1,train -3861,2,train -4040,4,train -430,2,train -3558,1,train -564,2,train -605,3,train -3778,4,train -3516,4,train -1425,1,train -1559,1,train -1342,3,train -4074,2,train -1517,4,train -3812,2,train -3729,4,train -1638,1,train -1772,1,train -1376,1,train -1114,1,train -1596,4,train -1293,3,train -897,3,train -4025,2,train -635,3,train -1193,1,train -1327,1,train -1809,4,train -1943,4,train -1110,3,train -1547,4,train -1244,3,train -1285,4,train -4021,4,train -3759,4,train -1802,1,train -1406,1,train -1843,2,train -1323,3,train -1364,4,train -4055,2,train -1061,3,train -1102,4,train -2452,2,train -2056,2,train -1357,1,train -961,1,train -1491,1,train -1711,4,train -1315,4,train -2269,2,train -1873,2,train -1570,1,train -1174,1,train -2007,2,train -1790,4,train -2523,3,train -1387,1,train -1824,2,train -1741,4,train -2299,2,train -2340,3,train -1641,2,train -1775,2,train -2770,1,train -2553,3,train -2250,2,train -2291,3,train -2687,3,train -1771,4,train -2983,1,train -2766,3,train -2370,3,train -68,2,train -2800,1,train -3196,1,train -202,2,train -2583,3,train -3020,4,train -2280,2,train -2321,3,train -2717,3,train -2455,3,train -2059,3,train -281,2,train -3013,1,train -2617,1,train -3233,4,train -2534,3,train -2668,3,train -3488,1,train -3226,1,train -232,2,train -669,3,train -2568,1,train -2351,3,train -2788,4,train -2485,3,train -569,1,train -352,3,train -3043,1,train -3480,2,train -90,3,train -2781,1,train -2698,3,train -2739,4,train -3559,2,train -3693,2,train -3256,1,train -3297,2,train -699,3,train -303,3,train -3476,4,train -437,3,train -41,3,train -2818,4,train -995,1,train -599,1,train -3772,2,train -3906,2,train -3510,2,train -953,4,train -2811,1,train -650,3,train -3031,4,train -2769,4,train -1208,1,train -812,1,train -946,1,train -550,1,train -3327,2,train -3723,2,train -729,3,train -770,4,train -3065,2,train -3461,2,train -467,3,train -508,4,train -3244,4,train -3936,2,train -3977,3,train -1379,4,train -983,4,train -3278,2,train -284,3,train -3195,4,train -1279,2,train -1017,2,train -3794,3,train -714,1,train -318,1,train -3095,2,train -3928,3,train -497,3,train -934,4,train -1626,2,train -793,1,train -4007,3,train -1409,4,train -531,1,train -1013,4,train -3308,2,train -3704,2,train -751,4,train -3745,3,train -489,4,train -1006,1,train -1047,2,train -1443,2,train -1226,4,train -3958,3,train -568,4,train -3696,3,train -702,4,train -1522,2,train -1697,3,train -3992,1,train -781,4,train -915,4,train -4071,1,train -1473,2,train -1077,2,train -1910,3,train -1211,2,train -3988,3,train -1989,3,train -1727,3,train -4022,1,train -1424,2,train -1465,3,train -1207,4,train -2285,1,train -2419,1,train -2202,3,train -1503,2,train -1940,3,train -1678,3,train -2236,1,train -1974,1,train -2153,3,train -1757,3,train -2590,4,train -1495,3,train -2711,1,train -2449,1,train -2053,1,train -2803,4,train -2104,3,train -1708,3,train -2266,1,train -2703,2,train -2400,1,train -2004,1,train -2486,4,train -2224,4,train -1921,3,train -5,1,train -2782,2,train -2613,1,train -2437,4,train -2134,3,train -2175,4,train -218,1,train -3129,2,train -2733,2,train -2430,1,train -2034,1,train -2471,2,train -2867,2,train -2254,4,train -2388,4,train -431,1,train -35,1,train -169,1,train -3342,2,train -3080,2,train -2247,1,train -2684,2,train -86,3,train -644,1,train -248,1,train -2763,2,train -3200,3,train -2460,1,train -2501,2,train -2897,2,train -2635,2,train -2552,4,train -636,2,train -3372,2,train -419,4,train -3151,3,train -2848,2,train -3709,1,train -412,1,train -3626,3,train -16,1,train -453,2,train -849,2,train -236,4,train -632,4,train -2927,2,train -370,4,train -3230,3,train -3364,3,train -3922,1,train -666,2,train -3839,3,train -363,1,train -449,4,train -845,4,train -3140,2,train -3618,4,train -187,4,train -2919,3,train -3577,3,train -442,1,train -180,1,train -617,2,train -3831,4,train -4,4,train -3132,3,train -534,4,train -138,4,train -4086,1,train -3824,1,train -3428,1,train -393,1,train -434,2,train -3211,3,train -3607,3,train -3648,4,train -4044,4,train -1212,3,train -3507,1,train -3903,1,train -909,2,train -3641,1,train -4037,1,train -251,2,train -3861,4,train -430,4,train -3558,3,train -1642,1,train -1425,3,train -1122,2,train -1559,3,train -3458,1,train -3854,1,train -3895,2,train -901,3,train -4074,4,train -3812,4,train -1638,3,train -1376,3,train -4067,1,train -677,2,train -1114,3,train -3805,1,train -4025,4,train -2068,1,train -1806,1,train -1193,3,train -890,2,train -1327,3,train -1885,1,train -1489,1,train -2019,1,train -1406,3,train -1843,4,train -3876,2,train -4055,4,train -2098,1,train -2139,2,train -1836,1,train -2056,4,train -1178,1,train -3955,2,train -1357,3,train -961,3,train -2352,2,train -2049,1,train -1653,1,train -2269,4,train -1391,1,train -1873,4,train -1787,1,train -1570,3,train -1174,3,train -2007,4,train -2565,2,train -2169,2,train -1866,1,train -1470,1,train -1907,2,train -1604,1,train -1387,3,train -1824,4,train -1,1,train -2778,2,train -2516,2,train -2299,4,train -1858,2,train -1641,4,train -1775,4,train -80,1,train -2595,2,train -2770,3,train -2071,2,train -1458,4,train -72,2,train -2546,2,train -2983,3,train -2284,2,train -1888,2,train -151,2,train -3279,1,train -285,2,train -68,4,train -2363,2,train -2800,3,train -3196,3,train -3492,1,train -3096,1,train -498,2,train -2834,1,train -281,4,train -2576,2,train -2617,3,train -3013,3,train -3054,4,train -577,2,train -3309,1,train -3047,1,train -53,2,train -3226,3,train -2568,3,train -3522,1,train -132,2,train -569,3,train -2864,1,train -3260,1,train -3043,3,train -3084,4,train -3480,4,train -2781,3,train -3339,1,train -2943,1,train -3776,2,train -3473,1,train -3077,1,train -3559,4,train -3693,4,train -2815,1,train -3297,4,train -3593,2,train -558,2,train -599,3,train -995,3,train -3290,1,train -296,2,train -3510,4,train -3028,1,train -3114,4,train -34,2,train -2811,3,train -3772,4,train -3806,2,train -3940,2,train -812,3,train -3503,1,train -3544,2,train -3723,4,train -946,3,train -550,3,train -3241,1,train -3327,4,train -3461,4,train -3065,4,train -1108,1,train -846,1,train -3757,2,train -3320,1,train -3361,2,train -326,2,train -367,3,train -105,3,train -3278,4,train -1321,1,train -1059,1,train -1279,4,train -4011,3,train -3970,2,train -1017,4,train -714,3,train -318,3,train -3095,4,train -1534,1,train -876,1,train -1313,2,train -1010,1,train -614,1,train -1096,4,train -3391,2,train -793,3,train -397,3,train -3787,2,train -3921,2,train -531,3,train -3308,4,train -1788,2,train -1922,2,train -1089,1,train -1526,2,train -1223,1,train -4000,2,train -3604,2,train -1006,3,train -1047,4,train -1443,4,train -3738,2,train -785,4,train -1302,1,train -1343,2,train -1522,4,train -3817,2,train -3992,3,train -2214,2,train -1253,1,train -1690,2,train -4071,3,train -1473,4,train -1077,4,train -1211,4,train -1903,2,train -1507,2,train -4022,3,train -1424,4,train -2285,3,train -2419,3,train -1586,2,train -1503,4,train -2236,3,train -1974,3,train -2711,3,train -2449,3,train -2053,3,train -2490,4,train -1791,3,train -2879,1,train -2266,3,train -2703,4,train -2400,3,train -2004,3,train -2958,1,train -5,3,train -2300,1,train -2782,4,train -2038,1,train -2520,4,train -218,3,train -2513,1,train -2909,1,train -2950,2,train -3129,4,train -2733,4,train -2867,4,train -2471,4,train -2430,3,train -2034,3,train -252,1,train -3029,2,train -431,3,train -35,3,train -2726,1,train -3163,2,train -169,3,train -2247,3,train -2684,4,train -861,1,train -465,1,train -248,3,train -2543,1,train -3376,2,train -2763,4,train -2460,3,train -2501,4,train -2897,4,train -2635,4,train -2239,4,train -544,1,train -282,1,train -20,1,train -2756,1,train -2797,2,train -636,4,train -2931,2,train -2848,4,train -891,1,train -932,2,train -3709,3,train -233,1,train -3010,2,train -412,3,train -16,3,train -453,4,train -849,4,train -2748,2,train -2927,4,train -708,1,train -312,1,train -1145,2,train -3922,3,train -532,4,train -2827,2,train -3223,2,train -666,4,train -3357,2,train -3956,1,train -921,1,train -962,2,train -263,1,train -700,2,train -3436,2,train -442,3,train -3174,2,train -3215,3,train -3477,3,train -180,3,train -617,4,train -4035,1,train -738,1,train -779,2,train -1175,2,train -4086,3,train -3824,3,train -3428,3,train -434,4,train -3986,1,train -992,2,train -1429,3,train -689,1,train -730,2,train -1126,2,train -3507,3,train -909,4,train -3641,3,train -3245,3,train -3903,3,train -251,4,train -1205,2,train -1642,3,train -3937,1,train -681,2,train -3458,3,train -3854,3,train -3895,4,train -4016,1,train -1418,2,train -3754,1,train -1156,2,train -760,2,train -894,2,train -677,4,train -2068,3,train -3967,1,train -1806,3,train -1107,2,train -890,4,train -3663,4,train -2102,1,train -1706,1,train -1885,3,train -1489,3,train -3784,1,train -1186,2,train -1227,3,train -3876,4,train -2181,1,train -2315,1,train -1919,1,train -2098,3,train -2139,4,train -1836,3,train -1178,3,train -3955,4,train -1870,1,train -2352,4,train -1653,3,train -1257,3,train -1391,3,train -2345,1,train -2386,2,train -2565,4,train -2083,1,train -2169,4,train -1866,3,train -1470,3,train -1907,4,train -1604,3,train -2465,2,train -1504,1,train -2516,4,train -1858,4,train -2678,2,train -80,3,train -2375,1,train -2812,2,train -2113,1,train -1717,1,train -2154,2,train -2595,4,train -2071,4,train -1675,4,train -114,1,train -2891,2,train -2629,2,train -72,4,train -2367,2,train -2284,4,train -1888,4,train -327,1,train -65,1,train -151,4,train -2446,2,train -3279,3,train -285,4,train -2580,2,train -2363,4,train -144,1,train -3492,3,train -2659,2,train -3096,3,train -2397,2,train -2834,3,train -3392,1,train -357,1,train -398,2,train -95,1,train -136,2,train -577,4,train -2872,2,train -2913,3,train -3047,3,train -2651,3,train -3309,3,train -53,4,train -3605,1,train -215,2,train -3343,1,train -349,2,train -3522,3,train -132,4,train -2823,2,train -2864,3,train -3260,3,train -3422,1,train -824,2,train -166,2,train -2943,3,train -3339,3,train -3776,4,train -3077,3,train -2815,3,train -4031,1,train -3635,1,train -3769,1,train -3373,1,train -775,2,train -3111,1,train -3593,4,train -117,2,train -3290,3,train -296,4,train -3028,3,train -34,4,train -3889,2,train -854,2,train -895,3,train -3586,1,train -592,2,train -196,2,train -633,3,train -3410,4,train -330,2,train -3544,4,train -3806,4,train -3940,4,train -1325,1,train -1108,3,train -3403,1,train -3840,2,train -409,2,train -846,3,train -3320,3,train -3361,4,train -3757,4,train -326,4,train -3919,2,train -1321,3,train -622,2,train -1059,3,train -3970,4,train -1617,1,train -1355,1,train -1534,3,train -3870,2,train -876,3,train -1313,4,train -4004,2,train -1010,3,train -614,3,train -3391,4,train -3787,4,train -1830,1,train -1568,1,train -1172,1,train -1788,4,train -910,1,train -1392,4,train -1922,4,train -1089,3,train -1526,4,train -3821,2,train -4000,4,train -3604,4,train -3738,4,train -1519,1,train -1123,1,train -3900,2,train -1302,3,train -1343,4,train -1081,4,train -3817,4,train -1598,1,train -1690,4,train -2248,2,train -1549,1,train -1986,2,train -1507,4,train -2065,2,train -1803,2,train -1586,4,train -2278,2,train -1882,2,train -2319,3,train -1579,1,train -1620,2,train -2057,3,train -2229,2,train -1967,2,train -2349,3,train -2046,2,train -1650,2,train -181,2,train -2958,3,train -2259,2,train -1863,2,train -2300,3,train -2038,3,train -2858,1,train -260,2,train -2992,1,train -2596,1,train -39,3,train -2513,3,train -2950,4,train -3467,1,train -3205,1,train -2809,1,train -252,3,train -3029,4,train -2726,3,train -2767,4,train -3163,4,train -548,1,train -3325,2,train -2626,1,train -465,3,train -2760,1,train -2846,4,train -3376,4,train -2543,3,train -761,1,train -544,3,train -3276,2,train -2839,1,train -3672,2,train -282,3,train -2577,1,train -20,3,train -2756,3,train -2797,4,train -2931,4,train -578,1,train -3751,2,train -3052,1,train -3489,2,train -932,4,train -3227,2,train -99,3,train -2790,1,train -233,3,train -3010,4,train -2748,4,train -1187,1,train -791,1,train -3964,2,train -529,1,train -3306,2,train -3702,2,train -708,3,train -3440,2,train -312,3,train -1145,4,train -3003,1,train -3044,2,train -2827,4,train -3223,4,train -1004,1,train -742,1,train -346,1,train -3956,3,train -962,4,train -3653,2,train -263,3,train -700,4,train -3436,4,train -3174,4,train -821,1,train -4035,3,train -955,1,train -738,3,train -779,4,train -1175,4,train -517,4,train -1034,1,train -1471,2,train -772,1,train -3986,3,train -376,1,train -1209,2,train -510,1,train -992,4,train -3287,2,train -1126,4,train -730,4,train -1684,2,train -1288,2,train -1422,2,train -589,1,train -3803,3,train -723,1,train -1205,4,train -3500,2,train -3937,3,train -547,4,train -681,4,train -1501,2,train -802,1,train -1239,2,train -4016,3,train -936,1,train -977,2,train -3754,3,train -1156,4,train -760,4,train -894,4,train -1714,2,train -1755,3,train -1452,2,train -1056,2,train -1190,2,train -794,2,train -3571,3,train -3967,3,train -2185,1,train -2102,3,train -1706,3,train -1665,2,train -1269,2,train -1007,2,train -3784,3,train -1186,4,train -3959,4,train -2398,1,train -2002,1,train -2181,3,train -1785,3,train -1919,3,train -1220,2,train -2215,1,train -1870,3,train -2428,1,train -2166,1,train -2386,4,train -2083,3,train -2641,1,train -2682,2,train -2379,1,train -1983,1,train -2465,4,train -2203,4,train -1504,3,train -2458,1,train -2062,1,train -2895,2,train -2678,4,train -2812,4,train -1934,1,train -2113,3,train -1717,3,train -2154,4,train -197,1,train -2974,2,train -3108,2,train -2712,2,train -114,3,train -2891,4,train -2013,1,train -2450,2,train -2147,1,train -2629,4,train -2367,4,train -1971,4,train -3187,2,train -148,1,train -3321,2,train -3059,2,train -65,3,train -2446,4,train -2580,4,train -623,1,train -227,1,train -361,1,train -3138,2,train -3179,3,train -144,3,train -2876,2,train -2659,4,train -2218,2,train -2397,4,train -44,1,train -178,1,train -3392,3,train -398,4,train -2693,2,train -136,4,train -2872,4,train -653,1,train -391,1,train -3605,3,train -3209,3,train -129,1,train -215,4,train -2510,2,train -3343,3,train -349,4,train -2644,2,train -1041,2,train -3422,3,train -342,1,train -824,4,train -2723,2,train -166,4,train -3718,1,train -1120,2,train -421,1,train -25,1,train -462,2,train -3635,3,train -2936,2,train -3373,3,train -3111,3,train -117,4,train -3931,1,train -937,2,train -4065,1,train -675,2,train -3407,1,train -3889,4,train -854,4,train -413,2,train -3586,3,train -592,4,train -196,4,train -330,4,train -1408,1,train -3882,1,train -3486,1,train -1325,3,train -492,2,train -626,2,train -3403,3,train -3840,4,train -230,2,train -409,4,train -4095,1,train -3699,1,train -1101,2,train -3919,4,train -839,2,train -3657,4,train -622,4,train -1834,1,train -1438,1,train -1617,3,train -3912,1,train -1355,3,train -959,3,train -656,2,train -3870,4,train -4004,4,train -2047,1,train -1830,3,train -1568,3,train -1172,3,train -1609,4,train -3904,2,train -869,2,train -910,3,train -3821,4,train -1864,1,train -1468,1,train -1602,1,train -989,3,train -1519,3,train -1123,3,train -3900,4,train -2118,2,train -1419,1,train -1598,3,train -1157,1,train -1639,4,train -1377,4,train -2331,2,train -1632,1,train -2248,4,train -1370,1,train -1549,3,train -1986,4,train -2107,1,train -1845,1,train -2065,4,train -1803,4,train -2757,2,train -1796,1,train -2278,4,train -1882,4,train -1620,4,train -2574,2,train -2178,2,train -2615,3,train -1875,1,train -1916,2,train -2312,2,train -51,2,train -2525,2,train -2129,2,train -2263,2,train -1867,2,train -2046,4,train -1650,4,train -89,1,train -3258,1,train -2645,3,train -2342,2,train -1946,2,train -1863,4,train -3471,1,train -2858,3,train -260,4,train -2992,3,train -2596,3,train -2334,3,train -3154,1,train -32,2,train -2809,3,train -3367,1,train -3105,1,train -3542,2,train -507,2,train -111,2,train -548,3,train -2843,1,train -245,2,train -3239,1,train -2626,3,train -3325,4,train -2760,3,train -3755,2,train -2922,1,train -761,3,train -3056,1,train -3672,4,train -2839,3,train -3276,4,train -2577,3,train -3531,1,train -3968,2,train -578,3,train -2873,1,train -3269,1,train -3310,2,train -316,3,train -3052,3,train -3489,4,train -3751,4,train -2790,3,train -2831,4,train -3227,4,train -874,1,train -791,3,train -529,3,train -3306,4,train -3702,4,train -3003,3,train -3440,4,train -3044,4,train -1087,1,train -3602,2,train -4039,3,train -1004,3,train -1045,4,train -2903,1,train -3299,1,train -742,3,train -346,3,train -3340,2,train -3736,2,train -1300,1,train -904,1,train -1434,1,train -1038,1,train -821,3,train -3553,2,train -3949,2,train -955,3,train -3291,2,train -1117,1,train -1251,1,train -855,1,train -1292,2,train -4028,2,train -1034,3,train -1075,4,train -1471,4,train -772,3,train -376,3,train -813,4,train -3504,2,train -510,3,train -3287,4,train -1209,4,train -1068,1,train -1505,2,train -1202,1,train -806,1,train -1288,4,train -1684,4,train -1422,4,train -589,3,train -3717,2,train -3583,2,train -723,3,train -3500,4,train -1718,2,train -885,1,train -1322,2,train -1501,4,train -3796,2,train -802,3,train -1239,4,train -843,4,train -977,4,train -1931,2,train -1098,1,train -1714,4,train -1232,1,train -4009,2,train -1452,4,train -1056,4,train -3788,3,train -1190,4,train -794,4,train -1748,2,train -2185,3,train -1486,2,train -1269,4,train -873,4,train -1007,4,train -2223,2,train -1961,2,train -2002,3,train -2398,3,train -1303,2,train -1220,4,train -2215,3,train -1516,2,train -2511,1,train -2249,1,train -1991,2,train -2428,3,train -2469,4,train -2166,3,train -1770,3,train -2682,4,train -2379,3,train -1983,3,train -2937,1,train -2541,1,train -2458,3,train -2062,3,train -2895,4,train -1800,3,train -1934,3,train -197,3,train -2888,1,train -2974,4,train -3108,4,train -2712,4,train -2013,3,train -2450,4,train -2147,3,train -2967,1,train -3008,2,train -2705,1,train -2309,1,train -2746,2,train -148,3,train -3187,4,train -2529,4,train -310,1,train -444,1,train -227,3,train -2522,1,train -2918,1,train -361,3,train -2656,1,train -2959,2,train -3138,4,train -2876,4,train -2218,4,train -261,1,train -3038,2,train -44,3,train -178,3,train -2693,4,train -736,1,train -3385,2,train -2989,2,train -3426,3,train -391,3,train -129,3,train -2510,4,train -2644,4,train -687,1,train -291,1,train -29,1,train -3202,2,train -2723,4,train -3935,1,train -1337,2,train -504,1,train -941,2,train -3718,3,train -638,1,train -242,1,train -1120,4,train -3019,2,train -421,3,train -25,3,train -462,4,train -3194,3,train -3415,2,train -2936,4,train -4014,1,train -1020,2,train -717,1,train -758,2,train -3931,3,train -937,4,train -59,1,train -4065,3,train -675,4,train -3407,3,train -413,4,train -3965,1,train -1367,2,train -971,2,train -1408,3,train -3703,1,train -668,1,train -709,2,train -3486,3,train -3882,3,train -492,4,train -3224,3,train -626,4,train -230,4,train -1184,2,train -788,2,train -485,1,train -3699,3,train -4095,3,train -839,4,train -1834,3,train -1438,3,train -698,1,train -1135,2,train -1176,3,train -3912,3,train -3953,4,train -656,4,train -2047,3,train -1214,2,train -3946,1,train -556,2,train -3904,4,train -1864,3,train -1468,3,train -1905,4,train -3763,1,train -1602,3,train -2294,1,train -2118,4,train -982,2,train -1419,3,train -1157,3,train -2331,4,train -1453,1,train -1935,4,train -1632,3,train -1236,3,train -1370,3,train -2324,1,train -1928,1,train -2365,2,train -1666,1,train -1845,3,train -2444,2,train -2141,1,train -2182,2,train -1483,1,train -1965,4,train -2657,2,train -2395,2,train -2092,1,train -1696,1,train -2178,4,train -2574,4,train -1875,3,train -1916,4,train -2312,4,train -1654,4,train -93,1,train -2870,2,train -2171,1,train -2212,2,train -2608,2,train -51,4,train -1909,1,train -2346,2,train -2129,4,train -1733,4,train -2263,4,train -1867,4,train -172,1,train -306,1,train -3258,3,train -2425,2,train -2122,1,train -2163,2,train -2342,4,train -1946,4,train -164,2,train -3471,3,train -2242,2,train -2376,2,train -3371,1,train -377,2,train -3154,3,train -74,1,train -2851,2,train -3329,4,train -2193,2,train -32,4,train -194,2,train -3367,3,train -3105,3,train -3542,4,train -111,4,train -2406,2,train -2843,3,train -245,4,train -3239,3,train -3797,1,train -803,2,train -407,2,train -104,1,train -145,2,train -541,2,train -2922,3,train -3755,4,train -2619,2,train -2660,3,train -3056,3,train -3614,1,train -620,2,train -224,2,train -3352,1,train -3748,1,train -358,2,train -3531,3,train -3968,4,train -3269,3,train -2873,3,train -3310,4,train -3431,1,train -833,2,train -874,3,train -175,2,train -612,3,train -2907,1,train -3303,1,train -4081,2,train -1087,3,train -3778,1,train -3819,2,train -3516,1,train -3602,4,train -522,2,train -3299,3,train -2903,3,train -3340,4,train -3736,4,train -1517,1,train -1121,1,train -1300,3,train -904,3,train -1038,3,train -3553,4,train -3291,4,train -1596,1,train -1117,3,train -1251,3,train -855,3,train -1292,4,train -3587,2,train -4028,4,train -3504,4,train -1809,1,train -1547,1,train -1285,1,train -889,1,train -1371,4,train -4062,2,train -1068,3,train -1505,4,train -3800,2,train -806,3,train -3583,4,train -3717,4,train -1364,1,train -1801,2,train -1102,1,train -3879,2,train -1718,4,train -885,3,train -1322,4,train -4013,2,train -3796,4,train -1880,2,train -1181,1,train -1618,2,train -1315,1,train -4092,2,train -1098,3,train -2093,2,train -1790,1,train -1831,2,train -2227,2,train -1569,2,train -1748,4,train -4084,3,train -1486,4,train -1090,4,train -2306,2,train -2044,2,train -1782,2,train -1169,4,train -1303,4,train -1861,2,train -1599,2,train -1516,4,train -2377,3,train -2511,3,train -2249,3,train -2807,1,train -2287,2,train -2025,2,train -1629,2,train -2066,3,train -3020,1,train -26,2,train -2937,3,train -2541,3,train -1842,2,train -3233,1,train -2575,1,train -2055,2,train -2096,3,train -2788,1,train -2967,3,train -3008,4,train -2705,3,train -2309,3,train -2746,4,train -527,1,train -3304,2,train -269,2,train -310,3,train -3438,2,train -444,3,train -48,3,train -2343,1,train -2739,1,train -2522,3,train -2126,3,train -2959,4,train -3651,2,train -2818,1,train -261,3,train -3038,4,train -2514,4,train -953,1,train -3730,2,train -736,3,train -3031,1,train -78,3,train -2769,1,train -2989,4,train -770,1,train -3547,2,train -508,1,train -3722,3,train -3244,1,train -3285,2,train -687,3,train -291,3,train -3023,2,train -3681,2,train -29,3,train -3202,4,train -2940,4,train -983,1,train -587,1,train -3498,2,train -3935,3,train -325,1,train -807,4,train -1337,4,train -504,3,train -941,4,train -3102,2,train -242,3,train -3019,4,train -3236,2,train -3632,2,train -1237,2,train -4014,3,train -934,1,train -1020,4,train -3752,3,train -717,3,train -758,4,train -59,3,train -1013,1,train -751,1,train -3965,3,train -489,1,train -971,4,train -3662,2,train -3703,3,train -709,4,train -1226,1,train -1401,2,train -568,1,train -3782,3,train -702,1,train -788,4,train -1184,4,train -3520,3,train -485,3,train -781,1,train -1135,4,train -1035,2,train -1472,3,train -1214,4,train -773,2,train -3550,3,train -3946,3,train -556,4,train -1248,2,train -3980,1,train -986,2,train -3763,3,train -1502,3,train -982,4,train -2590,1,train -1412,2,train -1453,3,train -2273,1,train -1928,3,train -1532,3,train -2365,4,train -2486,1,train -2224,1,train -2661,2,train -2444,4,train -2141,3,train -2182,4,train -1483,3,train -2437,1,train -2041,1,train -2874,2,train -2175,1,train -1779,1,train -2261,4,train -2657,4,train -2395,4,train -1696,3,train -3087,2,train -2254,1,train -2691,2,train -93,3,train -2388,1,train -2429,2,train -2870,4,train -2171,3,train -2212,4,train -2608,4,train -1909,3,train -2346,4,train -172,3,train -2904,2,train -2642,2,train -2425,4,train -2163,4,train -3117,2,train -2721,2,train -164,4,train -2242,4,train -2376,4,train -419,1,train -23,1,train -3371,3,train -2538,2,train -377,4,train -2672,2,train -3068,2,train -2193,4,train -632,1,train -236,1,train -673,2,train -370,1,train -194,4,train -2489,2,train -2885,2,train -2926,3,train -2623,2,train -2406,4,train -449,1,train -3618,1,train -3797,3,train -187,1,train -407,4,train -2702,2,train -3098,2,train -541,4,train -145,4,train -2836,2,train -2619,4,train -3697,1,train -3831,1,train -3435,1,train -3614,3,train -4,1,train -441,2,train -3218,3,train -138,1,train -224,4,train -620,4,train -2915,2,train -358,4,train -2956,3,train -3352,3,train -916,2,train -520,2,train -3648,1,train -4044,1,train -3431,3,train -3128,2,train -3606,4,train -175,4,train -2907,3,train -3303,3,train -3727,1,train -3861,1,train -430,1,train -471,2,train -908,3,train -4081,4,train -605,2,train -3819,4,train -2986,3,train -3516,3,train -4074,1,train -1517,3,train -1121,3,train -3416,1,train -3812,1,train -3636,4,train -3374,4,train -1417,1,train -1596,3,train -1200,3,train -897,2,train -635,2,train -3587,4,train -1809,3,train -1110,2,train -1547,3,train -1588,4,train -3883,2,train -889,3,train -4062,4,train -3800,4,train -1709,1,train -1843,1,train -1364,3,train -1801,4,train -4096,2,train -1102,3,train -3879,4,train -4013,4,train -2056,1,train -1398,1,train -1880,4,train -1181,3,train -1618,4,train -3913,2,train -1315,3,train -1356,4,train -4092,4,train -1873,1,train -1477,1,train -2093,4,train -1215,1,train -2227,4,train -1831,4,train -1569,4,train -2523,2,train -1824,1,train -2306,4,train -2044,4,train -1782,4,train -2340,2,train -1641,1,train -1775,1,train -1861,4,train -1599,4,train -2553,2,train -2291,2,train -1458,1,train -1895,2,train -1416,4,train -2370,2,train -2807,3,train -2108,2,train -1846,2,train -2025,4,train -1629,4,train -68,1,train -2841,1,train -2583,2,train -2624,3,train -3020,3,train -26,4,train -2321,2,train -2059,2,train -1842,4,train -3054,1,train -3233,3,train -2534,2,train -2575,3,train -2055,4,train -3133,1,train -139,2,train -2871,1,train -2351,2,train -2392,3,train -2788,3,train -352,2,train -3084,1,train -3480,1,train -90,2,train -527,3,train -2822,1,train -3304,4,train -3438,4,train -3042,4,train -2739,3,train -2343,3,train -3559,1,train -3297,1,train -2901,1,train -303,2,train -41,2,train -2818,3,train -2422,3,train -3651,4,train -3772,1,train -3510,1,train -3114,1,train -3551,2,train -953,3,train -3730,4,train -3031,3,train -2769,3,train -853,1,train -3327,1,train -770,3,train -3065,1,train -3547,4,train -508,3,train -3285,4,train -3681,4,train -3023,4,train -804,1,train -3581,2,train -3977,2,train -983,3,train -587,3,train -3278,1,train -284,2,train -325,3,train -3102,4,train -3498,4,train -3236,4,train -1279,1,train -1017,1,train -3794,2,train -1237,4,train -404,3,train -3095,1,train -934,3,train -3928,2,train -1096,1,train -834,1,train -4007,2,train -4048,3,train -1013,3,train -3308,1,train -3745,2,train -751,3,train -792,4,train -489,3,train -1047,1,train -785,1,train -3562,2,train -3958,2,train -1401,4,train -568,3,train -3696,2,train -702,3,train -1522,1,train -1697,2,train -4078,3,train -3379,2,train -781,3,train -822,4,train -1910,2,train -1077,1,train -1211,1,train -3988,2,train -3592,2,train -1035,4,train -3767,3,train -773,4,train -1989,2,train -1727,2,train -1331,2,train -1465,2,train -1248,4,train -3980,3,train -986,4,train -1940,2,train -1678,2,train -1282,2,train -2277,1,train -1757,2,train -1361,2,train -1495,2,train -2490,1,train -2273,3,train -1708,2,train -2569,1,train -2703,1,train -2486,3,train -2224,3,train -2661,4,train -2782,1,train -2520,1,train -2258,1,train -2437,3,train -2041,3,train -2478,4,train -2874,4,train -2175,3,train -1779,3,train -2733,1,train -2337,1,train -2471,1,train -3087,4,train -2254,3,train -2691,4,train -2388,3,train -2429,4,train -2684,1,train -2288,1,train -2725,2,train -2904,4,train -2026,1,train -2508,4,train -2642,4,train -2246,4,train -289,1,train -2763,1,train -3200,2,train -2501,1,train -2635,1,train -2239,1,train -2721,4,train -3117,4,train -636,1,train -3017,2,train -419,3,train -23,3,train -2755,2,train -3151,2,train -2538,4,train -2672,4,train -319,1,train -453,1,train -3230,2,train -3626,2,train -236,3,train -673,4,train -2968,2,train -370,3,train -3364,2,train -2706,2,train -2885,4,train -2489,4,train -2623,4,train -532,1,train -666,1,train -707,2,train -3484,3,train -449,3,train -8,1,train -2785,2,train -3618,3,train -187,3,train -2919,2,train -2702,4,train -920,2,train -3697,3,train -617,1,train -3831,3,train -2998,2,train -3435,3,train -4,3,train -441,4,train -3132,2,train -138,3,train -2915,4,train -3993,1,train -300,1,train -737,2,train -3514,3,train -434,1,train -38,1,train -520,4,train -916,4,train -3211,2,train -3648,3,train -1212,2,train -3727,3,train -251,1,train -3861,3,train -3902,4,train -471,4,train -605,4,train -1425,2,train -767,2,train -3895,1,train -901,2,train -3812,3,train -3416,3,train -1376,2,train -1417,3,train -677,1,train -718,2,train -1114,2,train -897,4,train -635,4,train -1713,1,train -1496,3,train -3791,1,train -1193,2,train -535,2,train -3663,1,train -3883,4,train -1709,3,train -1406,2,train -1843,3,train -1185,3,train -3876,1,train -3962,4,train -4096,4,train -2139,1,train -1743,1,train -3955,1,train -961,2,train -1398,3,train -3913,4,train -2352,1,train -1873,3,train -1477,3,train -1914,4,train -1174,2,train -1215,3,train -1652,4,train -2169,1,train -1907,1,train -2523,4,train -1824,3,train -2161,2,train -1858,1,train -1944,4,train -2340,4,train -1641,3,train -2770,2,train -2374,2,train -2071,1,train -1675,1,train -2553,4,train -2291,4,train -1458,3,train -1895,4,train -72,1,train -2191,2,train -1888,1,train -2370,4,train -2108,4,train -1712,4,train -1846,4,train -151,1,train -2800,2,train -2404,2,train -2841,3,train -2583,4,train -2321,4,train -2059,4,train -2617,2,train -3054,3,train -3133,3,train -53,1,train -139,4,train -2434,2,train -2871,3,train -2568,2,train -2172,2,train -2609,3,train -2351,4,train -435,2,train -132,1,train -173,2,train -569,2,train -352,4,train -3084,3,train -90,4,train -2822,3,train -3776,1,train -386,2,train -3559,3,train -124,2,train -2901,3,train -3297,3,train -303,4,train -2639,3,train -41,4,train -3593,1,train -3197,1,train -599,2,train -203,2,train -3114,3,train -3551,4,train -3806,1,train -3410,1,train -812,2,train -3544,1,train -853,3,train -550,2,train -154,2,train -591,3,train -2886,1,train -3327,3,train -3065,3,train -2669,3,train -4060,2,train -3757,1,train -3361,1,train -367,2,train -804,3,train -3581,4,train -3977,4,train -105,2,train -3278,3,train -1100,1,train -3877,2,train -1279,3,train -4011,2,train -3615,2,train -1017,3,train -184,2,train -621,3,train -3398,4,train -318,2,train -3095,3,train -3794,4,train -1313,1,train -4090,2,train -1096,3,train -3391,1,train -3787,1,train -3828,2,train -397,2,train -834,3,train -4007,4,train -531,2,train -3308,3,train -3745,4,train -1788,1,train -1392,1,train -1526,1,train -3907,2,train -868,1,train -1350,4,train -3604,1,train -1047,3,train -3645,2,train -785,3,train -389,3,train -3562,4,train -3696,4,train -1343,1,train -1081,1,train -1697,4,train -3992,2,train -3596,2,train -3379,4,train -1859,2,train -1160,1,train -898,1,train -3675,2,train -4071,2,train -1077,3,train -1118,4,train -3592,4,train -1507,1,train -1989,4,train -1727,4,train -1331,4,train -4022,2,train -1465,4,train -2285,2,train -1586,1,train -1678,4,train -1282,4,train -2236,2,train -2277,3,train -1974,2,train -1757,4,train -1361,4,train -1495,4,train -2053,2,train -2490,3,train -1791,2,train -1708,4,train -2569,3,train -2266,2,train -2703,3,train -2004,2,train -2045,3,train -5,2,train -2782,3,train -2520,3,train -2258,3,train -218,2,train -2950,1,train -2554,1,train -2733,3,train -2337,3,train -2034,2,train -2075,3,train -2471,3,train -1813,3,train -3029,1,train -35,2,train -2767,1,train -3163,1,train -2684,3,train -2288,3,train -2725,4,train -2026,3,train -2846,1,train -248,2,train -289,3,train -2584,1,train -3021,2,train -27,3,train -2763,3,train -3200,4,train -2501,3,train -2105,3,train -2239,3,train -3496,2,train -2797,1,train -3234,2,train -636,3,train -2931,1,train -3017,4,train -3151,4,train -2755,4,train -932,1,train -536,1,train -3709,2,train -319,3,train -3010,1,train -3051,2,train -16,2,train -57,3,train -453,3,train -2748,1,train -3230,4,train -2968,4,train -2706,4,train -615,1,train -1145,1,train -3922,2,train -532,3,train -2827,1,train -3223,1,train -666,3,train -707,4,train -3264,2,train -8,3,train -2785,4,train -2919,4,train -962,1,train -566,1,train -1003,2,train -700,1,train -304,1,train -786,4,train -3477,2,train -920,4,train -87,3,train -3215,2,train -2998,4,train -2602,4,train -3132,4,train -1175,1,train -779,1,train -3993,3,train -517,1,train -300,3,train -737,4,train -3428,2,train -434,3,train -38,3,train -3211,4,train -992,1,train -1429,2,train -730,1,train -1212,4,train -3507,2,train -3245,2,train -251,3,train -1205,1,train -1246,2,train -1642,2,train -3978,1,train -1425,4,train -547,1,train -681,1,train -767,4,train -3458,2,train -3499,3,train -901,4,train -3895,3,train -760,1,train -1114,4,train -718,4,train -1713,3,train -1014,2,train -3791,3,train -1193,4,train -752,2,train -535,4,train -3663,3,train -1489,2,train -1227,2,train -3959,1,train -965,2,train -3876,3,train -2139,3,train -1743,3,train -4038,1,train -1481,3,train -1178,2,train -3955,3,train -961,4,train -2352,3,train -1257,2,train -1391,2,train -2252,1,train -2386,1,train -1990,1,train -2169,3,train -1470,2,train -1907,3,train -2465,1,train -2203,1,train -2161,4,train -1858,3,train -2678,1,train -2020,1,train -2154,1,train -2240,4,train -2374,4,train -1675,3,train -2629,1,train -2670,2,train -72,3,train -2367,1,train -1971,1,train -2191,4,train -1888,3,train -151,3,train -2446,1,train -2487,2,train -2404,4,train -2962,2,train -2659,1,train -2700,2,train -3096,2,train -3137,3,train -2397,1,train -2438,2,train -2834,2,train -2617,4,train -398,1,train -136,1,train -222,4,train -2517,2,train -2913,2,train -3047,2,train -2651,2,train -2434,4,train -2568,4,train -2172,4,train -215,1,train -349,1,train -435,4,train -2730,2,train -132,3,train -173,4,train -569,4,train -2468,2,train -2864,2,train -469,2,train -166,1,train -2943,2,train -3776,3,train -386,4,train -3077,2,train -124,4,train -2815,2,train -682,2,train -3593,3,train -3197,3,train -117,1,train -203,4,train -599,4,train -3889,1,train -895,2,train -499,2,train -196,1,train -633,2,train -3410,3,train -3806,3,train -3544,3,train -550,4,train -154,4,train -2886,3,train -1108,2,train -712,2,train -3444,1,train -3840,1,train -409,1,train -4060,4,train -846,2,train -3664,4,train -188,2,train -2965,3,train -3361,3,train -367,4,train -105,4,train -3919,1,train -3657,1,train -1100,3,train -3877,4,train -401,2,train -3615,4,train -4011,4,train -184,4,train -318,4,train -1396,1,train -3870,1,train -3474,1,train -876,2,train -480,2,train -917,3,train -1313,3,train -614,2,train -3212,1,train -3391,3,train -3828,4,train -397,4,train -4090,4,train -1609,1,train -1788,3,train -1392,3,train -1526,3,train -3821,1,train -3907,4,train -868,3,train -3604,3,train -3645,4,train -3383,4,train -1164,1,train -3900,1,train -1343,3,train -947,3,train -4075,2,train -1081,3,train -3992,4,train -3596,4,train -1639,1,train -1377,1,train -1859,4,train -1160,3,train -898,3,train -3675,4,train -4071,4,train -1676,4,train -4022,4,train -2065,1,train -1803,1,train -1844,2,train -2285,4,train -1586,3,train -1882,1,train -1923,2,train -2319,2,train -1620,1,train -1224,1,train -2057,2,train -1974,4,train -2136,2,train -2053,4,train -1791,4,train -1395,4,train -2349,2,train -1953,2,train -1650,1,train -1825,2,train -2004,4,train -5,4,train -1863,1,train -1904,2,train -2300,2,train -2341,3,train -2038,2,train -39,2,train -2513,2,train -2554,3,train -2950,3,train -2034,4,train -118,2,train -252,2,train -3029,3,train -35,4,train -2767,3,train -2371,3,train -3325,1,train -465,2,train -2846,3,train -2584,3,train -3021,4,train -3142,1,train -544,2,train -3276,1,train -2880,1,train -282,2,train -323,3,train -3496,4,train -20,2,train -2797,3,train -2401,3,train -3234,4,train -3489,1,train -3530,2,train -932,3,train -99,2,train -536,3,train -2831,1,train -233,2,train -3010,3,train -3051,4,train -3227,1,train -16,4,train -2748,3,train -3709,4,train -615,3,train -2910,1,train -3306,1,train -312,2,train -353,3,train -2648,1,train -3044,1,train -3743,2,train -2827,3,train -3264,4,train -1045,1,train -3822,2,train -3956,2,train -962,3,train -566,3,train -1003,4,train -263,2,train -304,3,train -700,3,train -3477,4,train -3215,4,train -2819,4,train -4035,2,train -779,3,train -3511,2,train -517,3,train -3428,4,train -1471,1,train -1075,1,train -1209,1,train -813,1,train -4027,3,train -3986,2,train -992,3,train -1429,4,train -3287,1,train -3328,2,train -730,3,train -771,4,train -3507,4,train -3245,4,train -1288,1,train -3803,2,train -1642,4,train -1246,4,train -3937,2,train -3978,3,train -547,3,train -681,3,train -3458,4,train -1501,1,train -1542,2,train -1239,1,train -843,1,train -4016,2,train -977,1,train -1459,4,train -3358,2,train -3754,2,train -760,3,train -3795,3,train -1755,2,train -1359,2,train -1056,1,train -660,1,train -1493,2,train -1190,1,train -794,1,train -3571,2,train -3967,2,train -1014,4,train -752,4,train -1572,2,train -1269,1,train -873,1,train -1706,2,train -1007,1,train -1489,4,train -3784,2,train -1227,4,train -3959,3,train -965,4,train -1785,2,train -1919,2,train -4038,3,train -1178,4,train -2256,1,train -2039,3,train -1340,2,train -1777,3,train -1257,4,train -2469,1,train -2252,3,train -2386,3,train -1990,3,train -1470,4,train -2682,1,train -2286,1,train -2465,3,train -2203,3,train -1807,3,train -1504,2,train -2895,1,train -2678,3,train -2237,1,train -2020,3,train -1717,2,train -2154,3,train -2974,1,train -2712,1,train -2316,1,train -2450,1,train -2670,4,train -1971,3,train -2529,1,train -2966,2,train -2267,1,train -2446,3,train -2487,4,train -2225,4,train -268,1,train -3045,2,train -3179,2,train -2962,4,train -2084,1,train -3096,4,train -2218,1,train -2700,4,train -2834,4,train -2438,4,train -219,1,train -2996,2,train -3392,2,train -398,3,train -2693,1,train -136,3,train -2913,4,train -2517,4,train -2651,4,train -2255,4,train -3209,2,train -215,3,train -2510,1,train -2947,2,train -3343,2,train -2644,1,train -2730,4,train -2864,4,train -2468,4,train -3422,2,train -3026,2,train -469,4,train -2723,1,train -166,3,train -2943,4,train -2502,2,train -462,1,train -682,4,train -3373,2,train -3111,2,train -2715,2,train -117,3,train -937,1,train -978,2,train -675,1,train -3889,3,train -3493,3,train -413,1,train -17,1,train -499,4,train -895,4,train -196,3,train -237,4,train -633,4,train -2794,2,train -1325,2,train -492,1,train -626,1,train -230,1,train -712,4,train -3403,2,train -846,4,train -3444,3,train -3840,3,train -188,4,train -4002,1,train -1008,2,train -746,2,train -3919,3,train -3657,3,train -401,4,train -3953,1,train -1355,2,train -959,2,train -1396,3,train -3691,1,train -3870,3,train -3474,3,train -3911,4,train -876,4,train -480,4,train -3212,3,train -614,4,train -1475,3,train -1172,2,train -1213,3,train -1609,3,train -3904,1,train -910,2,train -514,2,train -3821,3,train -1905,1,train -989,2,train -3721,1,train -1123,2,train -1164,3,train -3900,3,train -4075,4,train -2118,1,train -1722,1,train -1639,3,train -1377,3,train -2331,1,train -1935,1,train -1893,4,train -1752,1,train -1972,4,train -1803,3,train -1844,4,train -1965,1,train -1703,1,train -1882,3,train -1441,1,train -1923,4,train -2319,4,train -1620,3,train -1224,3,train -1661,4,train -2057,4,train -2178,1,train -2615,2,train -1916,1,train -1520,1,train -2353,2,train -1654,1,train -2136,4,train -51,1,train -2432,2,train -2129,1,train -1733,1,train -2170,2,train -1867,1,train -1953,4,train -2349,4,train -1650,3,train -1691,4,train -1825,4,train -2645,2,train -1946,1,train -2300,4,train -1904,4,train -2038,4,train -2858,2,train -2596,2,train -39,4,train -2334,2,train -1721,4,train -3329,1,train -335,2,train -32,1,train -118,4,train -2413,2,train -2809,2,train -252,4,train -2151,2,train -3542,1,train -111,1,train -152,2,train -548,2,train -2929,3,train -3325,3,train -2626,2,train -3755,1,train -761,2,train -3142,3,train -544,4,train -2839,2,train -2880,3,train -3276,3,train -282,4,train -2577,2,train -3317,4,train -20,4,train -3176,1,train -578,2,train -182,2,train -3310,1,train -316,2,train -3530,4,train -2697,3,train -99,4,train -2831,3,train -3227,3,train -791,2,train -395,2,train -3127,1,train -529,2,train -133,2,train -2910,3,train -3306,3,train -312,4,train -3044,3,train -2648,3,train -3085,4,train -3743,4,train -1349,3,train -3602,1,train -4039,2,train -1045,3,train -649,3,train -3340,1,train -3822,4,train -346,2,train -3956,4,train -821,2,train -4035,4,train -3553,1,train -3594,2,train -3291,1,train -3377,4,train -3511,4,train -1292,1,train -1075,3,train -679,3,train -1209,3,train -376,2,train -813,3,train -3504,1,train -3986,4,train -3287,3,train -3328,4,train -1371,1,train -1505,1,train -1109,1,train -3886,2,train -1288,3,train -1329,4,train -3583,1,train -589,2,train -3803,4,train -368,3,train -3145,4,train -1188,1,train -1322,1,train -1542,4,train -3837,2,train -1239,3,train -843,3,train -3575,2,train -4016,4,train -977,3,train -3754,4,train -3358,4,train -1576,2,train -1755,4,train -877,1,train -1359,4,train -1056,3,train -660,3,train -1493,4,train -3788,2,train -794,3,train -3571,4,train -2185,2,train -1789,2,train -1486,1,train -1090,1,train -1572,4,train -3867,2,train -1706,4,train -873,3,train -1007,3,train -3784,4,train -1868,2,train -2002,2,train -1169,1,train -1303,1,train -1785,4,train -1127,4,train -2215,2,train -1819,2,train -2256,3,train -1516,1,train -1557,2,train -1340,4,train -2469,3,train -1636,2,train -1770,2,train -1374,2,train -2682,3,train -1849,2,train -2286,3,train -1983,2,train -1587,2,train -1504,4,train -2062,2,train -1800,2,train -2237,3,train -1934,2,train -197,2,train -2974,3,train -2533,1,train -2712,3,train -2316,3,train -2753,4,train -2013,2,train -2450,3,train -3008,1,train -2746,1,train -2529,3,train -2133,3,train -2966,4,train -2267,3,train -227,2,train -268,3,train -2563,1,train -2959,1,train -3045,4,train -6,3,train -2301,1,train -3179,4,train -2084,3,train -2218,3,train -3038,1,train -44,2,train -85,3,train -219,3,train -2514,1,train -2996,4,train -3392,4,train -2693,3,train -515,1,train -3292,2,train -2989,1,train -2593,1,train -3030,2,train -3426,2,train -3209,4,train -2510,3,train -2947,4,train -594,1,train -3243,2,train -3422,4,train -3026,4,train -2723,3,train -2502,4,train -807,1,train -941,1,train -545,1,train -3718,2,train -765,4,train -3019,1,train -3060,2,train -25,2,train -462,3,train -503,4,train -3194,2,train -2581,4,train -3111,4,train -2715,4,train -1020,1,train -758,1,train -1195,2,train -3931,2,train -978,4,train -3273,2,train -675,3,train -3407,2,train -413,3,train -17,3,train -2794,4,train -971,1,train -1408,2,train -3789,3,train -709,1,train -313,1,train -3486,2,train -492,3,train -533,4,train -3224,2,train -230,3,train -788,1,train -4002,3,train -1008,4,train -3699,2,train -746,4,train -3478,3,train -1438,2,train -1176,2,train -3953,3,train -959,4,train -563,4,train -3691,3,train -1255,2,train -3987,1,train -556,1,train -993,2,train -1172,4,train -3904,3,train -910,4,train -514,4,train -1468,2,train -1905,3,train -810,2,train -989,4,train -3721,3,train -2118,3,train -1722,3,train -4017,1,train -982,1,train -1023,2,train -1419,2,train -1460,3,train -1157,2,train -2018,1,train -1935,3,train -1236,2,train -1370,2,train -2365,1,train -1969,1,train -1752,3,train -2189,4,train -4047,1,train -1490,3,train -1228,3,train -2444,1,train -2048,1,train -2182,1,train -1965,3,train -1703,3,train -1441,3,train -2657,1,train -2261,1,train -2395,1,train -1999,1,train -2178,3,train -2219,4,train -2615,4,train -1916,3,train -1520,3,train -2353,4,train -1654,3,train -2608,1,train -2212,1,train -51,3,train -2346,1,train -2432,4,train -2129,3,train -1733,3,train -2170,4,train -1867,3,train -2728,2,train -2425,1,train -2029,1,train -2466,2,train -2163,1,train -1767,1,train -2645,4,train -1946,3,train -1987,4,train -164,1,train -2242,1,train -2679,2,train -2376,1,train -2858,4,train -2596,4,train -2334,4,train -377,1,train -3154,2,train -3329,3,train -2496,2,train -335,4,train -2193,1,train -2413,4,train -2151,4,train -194,1,train -3367,2,train -3542,3,train -3105,2,train -2709,2,train -111,3,train -152,4,train -548,4,train -2406,1,train -2447,2,train -2626,4,train -2843,2,train -407,1,train -3225,3,train -145,1,train -2922,2,train -3755,3,train -2660,2,train -2577,4,train -3655,1,train -224,1,train -661,2,train -358,1,train -3176,3,train -578,4,train -182,4,train -2873,2,train -3310,3,train -316,4,train -874,2,train -478,2,train -3606,1,train -612,2,train -175,1,train -395,4,train -3127,3,train -529,4,train -133,4,train -4081,1,train -1087,2,train -3819,1,train -3602,3,train -4039,4,train -167,2,train -2903,2,train -3340,3,train -346,4,train -904,2,train -3636,1,train -246,2,train -3374,1,train -380,2,train -3553,3,train -3594,4,train -3291,3,train -1375,1,train -1117,2,train -3890,2,train -855,2,train -896,3,train -1292,3,train -3587,1,train -376,4,train -1454,1,train -1588,1,train -1371,3,train -4062,1,train -1505,3,train -1109,3,train -3800,1,train -3886,4,train -806,2,train -3583,3,train -1801,1,train -1188,3,train -3879,1,train -3920,2,train -885,2,train -926,3,train -1322,3,train -664,3,train -3837,4,train -3575,4,train -1880,1,train -1484,1,train -1618,1,train -1356,1,train -4092,1,train -1576,4,train -3871,2,train -877,3,train -3788,4,train -2093,1,train -1831,1,train -1435,1,train -1872,2,train -1569,1,train -1655,4,train -1789,4,train -4084,2,train -1090,3,train -3867,4,train -2044,1,train -2085,2,train -1782,1,train -1868,4,train -2002,4,train -1169,3,train -3901,2,train -1303,3,train -1344,4,train -2164,2,train -1861,1,train -1599,1,train -1203,1,train -1819,4,train -1557,4,train -2377,2,train -2511,2,train -2249,2,train -1416,1,train -1636,4,train -1770,4,train -1374,4,train -1629,1,train -2066,2,train -1849,4,train -1983,4,train -1587,4,train -26,1,train -2541,2,train -2145,2,train -1842,1,train -1883,2,train -2062,4,train -1800,4,train -2096,2,train -2533,3,train -2013,4,train -3091,1,train -2829,1,train -3008,3,train -2309,2,train -2746,3,train -3304,1,train -310,2,train -3042,1,train -3438,1,train -48,2,train -2959,3,train -2126,2,train -2563,3,train -2301,3,train -3121,1,train -127,2,train -261,2,train -302,3,train -3038,3,train -3079,4,train -44,4,train -2380,3,train -2514,3,train -78,2,train -515,3,train -3292,4,train -2989,3,train -2593,3,train -3030,4,train -3426,4,train -811,1,train -3547,1,train -594,3,train -3285,1,train -3722,2,train -291,2,train -332,3,train -3023,1,train -29,2,train -3243,4,train -3801,2,train -807,3,train -3539,2,train -3102,1,train -3498,1,train -3718,4,train -941,3,train -545,3,train -242,2,train -3019,3,train -3060,4,train -3236,1,train -3194,4,train -1237,1,train -4014,2,train -1020,3,train -3752,2,train -758,3,train -1195,4,train -59,2,train -3273,4,train -3407,4,train -792,1,train -4006,3,train -3569,2,train -3965,2,train -971,3,train -1408,4,train -3307,2,train -709,3,train -313,3,train -3486,4,train -3703,2,train -3224,4,train -1091,4,train -3386,2,train -3782,2,train -788,3,train -3520,2,train -130,3,train -1521,2,train -822,1,train -4036,3,train -1438,4,train -560,1,train -3337,2,train -3774,3,train -1176,4,train -780,4,train -1338,2,train -1035,1,train -1472,2,train -773,1,train -859,4,train -1255,4,train -3550,2,train -556,3,train -993,4,train -3946,2,train -3987,3,train -1551,2,train -1248,1,train -1289,2,train -986,1,train -1468,4,train -3763,2,train -3804,3,train -810,4,train -1368,2,train -1502,2,train -4017,3,train -1419,4,train -1023,4,train -1157,4,train -2018,3,train -4051,1,train -1453,2,train -1057,2,train -1236,4,train -2365,3,train -1532,2,train -1969,3,train -1270,2,train -4047,3,train -2661,1,train -2265,1,train -2444,3,train -2048,3,train -2182,3,train -1349,2,train -1786,3,train -1483,2,train -2874,1,train -2478,1,train -2657,3,train -2261,3,train -2395,3,train -1999,3,train -1696,2,train -2691,1,train -2295,1,train -2429,1,train -2033,1,train -2515,4,train -2212,3,train -2904,1,train -2508,1,train -2945,2,train -2642,1,train -2246,1,train -2728,4,train -2425,3,train -2029,3,train -2466,4,train -2163,3,train -1767,3,train -2721,1,train -2325,1,train -164,3,train -2063,1,train -2242,3,train -2679,4,train -3371,2,train -2538,1,train -377,3,train -2672,1,train -3154,4,train -2496,4,train -2193,3,train -673,1,train -277,1,train -194,3,train -2489,1,train -2926,2,train -2709,4,train -2843,4,train -2447,4,train -3005,2,train -407,3,train -2702,1,train -145,3,train -2922,4,train -2481,2,train -2660,4,train -2264,4,train -307,1,train -744,2,train -441,1,train -45,1,train -3218,2,train -3655,3,train -224,3,train -661,4,train -2956,2,train -3352,2,train -2694,2,train -2873,4,train -916,1,train -520,1,train -957,2,train -3431,2,train -874,4,train -478,4,train -2773,2,train -3606,3,train -175,3,train -612,4,train -2907,2,train -3902,1,train -4081,3,train -471,1,train -908,2,train -3819,3,train -2986,2,train -167,4,train -2903,4,train -3981,1,train -1121,2,train -904,4,train -3636,3,train -3240,3,train -246,4,train -3374,3,train -380,4,train -1200,2,train -1375,3,train -3670,1,train -676,2,train -3890,4,train -855,4,train -3587,3,train -1454,3,train -3749,1,train -1588,3,train -3883,1,train -3487,1,train -889,2,train -3962,1,train -1801,3,train -4096,1,train -1102,2,train -706,2,train -3879,3,train -3920,4,train -885,4,train -1701,1,train -1880,3,train -1484,3,train -1181,2,train -1618,3,train -3913,1,train -1356,3,train -3871,4,train -1914,1,train -2093,3,train -1652,1,train -1831,3,train -1435,3,train -1872,4,train -1569,3,train -4084,4,train -3688,4,train -1731,1,train -1951,4,train -2085,4,train -3901,4,train -2340,1,train -1944,1,train -2164,4,train -1861,3,train -1420,1,train -1599,3,train -1203,3,train -1640,4,train -1895,1,train -2377,4,train -2511,4,train -2249,4,train -1416,3,train -2370,1,train -2807,2,train -2108,1,train -1712,1,train -2149,2,train -1846,1,train -1629,3,train -1670,4,train -2066,4,train -2624,2,train -2059,1,train -2145,4,train -1883,4,train -2441,2,train -2878,3,train -2575,2,train -2179,2,train -2616,3,train -2096,4,train -1700,4,train -139,1,train -3091,3,train -2788,2,train -2392,2,train -2829,3,train -2309,4,train -352,1,train -90,1,train -131,2,train -527,2,train -3304,3,train -310,4,train -3042,3,train -2646,3,train -48,4,train -2343,2,train -2126,4,train -3121,3,train -127,4,train -2422,2,train -2818,2,train -261,4,train -3417,1,train -3551,1,train -2676,3,train -78,4,train -770,2,train -811,3,train -3547,3,train -508,2,train -3285,3,train -3326,4,train -3722,4,train -291,4,train -3023,3,train -29,4,train -3581,1,train -587,2,train -3801,4,train -3405,4,train -325,2,train -3102,3,train -3539,4,train -3935,4,train -3794,1,train -3398,1,train -1237,3,train -404,2,train -4014,4,train -142,2,train -3752,4,train -59,4,train -4048,2,train -658,3,train -2953,1,train -792,3,train -3569,4,train -3965,4,train -3703,4,train -3307,4,train -1350,1,train -1088,1,train -3865,2,train -3562,1,train -568,2,train -3782,4,train -3386,4,train -3520,4,train -3124,4,train -1167,1,train -4078,2,train -1521,4,train -3379,1,train -3816,2,train -822,3,train -3554,2,train -560,3,train -3337,4,train -1118,1,train -1555,2,train -856,1,train -1338,4,train -3592,1,train -1035,3,train -1472,4,train -3633,2,train -3767,2,train -773,3,train -3550,4,train -1331,1,train -935,1,train -1768,2,train -1465,1,train -1551,4,train -3846,2,train -1289,4,train -3980,2,train -986,3,train -3763,4,train -1847,2,train -1282,1,train -1368,4,train -1502,4,train -1361,1,train -1798,2,train -1495,1,train -4051,3,train -1453,4,train -1057,4,train -2273,2,train -1353,2,train -1532,4,train -1270,4,train -2224,2,train -2265,3,train -2661,3,train -1349,4,train -1483,4,train -2561,1,train -2344,3,train -2041,2,train -2478,3,train -1779,2,train -2254,2,train -2295,3,train -2691,3,train -2429,3,train -2033,3,train -2853,1,train -2591,1,train -2725,1,train -2508,3,train -2112,3,train -2945,4,train -2642,3,train -2246,3,train -3200,1,train -2542,1,train -2721,3,train -2325,3,train -2063,3,train -3017,1,train -2621,1,train -23,2,train -64,3,train -2755,1,train -3371,4,train -2538,3,train -2672,3,train -3230,1,train -3271,2,train -236,2,train -277,3,train -673,3,train -2572,1,train -2968,1,train -2706,1,train -3009,2,train -2489,3,train -2926,4,train -707,1,train -3484,2,train -3618,2,train -2785,1,train -3222,2,train -2919,1,train -3005,4,train -2481,4,train -786,1,train -920,1,train -3697,2,train -3301,2,train -307,3,train -744,4,train -2602,1,train -4,2,train -45,3,train -441,3,train -482,4,train -2998,1,train -2956,4,train -3039,2,train -3218,4,train -2694,4,train -737,1,train -341,1,train -3514,2,train -520,3,train -957,4,train -3648,2,train -3431,4,train -2990,2,train -2773,4,train -2907,4,train -1212,1,train -991,2,train -3727,2,train -3768,3,train -292,1,train -3902,3,train -471,3,train -512,4,train -908,4,train -2986,4,train -767,1,train -371,1,train -3981,3,train -901,1,train -3282,2,train -1121,4,train -3416,2,train -4015,1,train -1417,2,train -718,1,train -1200,4,train -3670,3,train -676,4,train -1496,2,train -535,1,train -3749,3,train -3883,3,train -3487,3,train -889,4,train -1709,2,train -4045,1,train -1051,2,train -1185,2,train -3962,3,train -3566,3,train -4096,3,train -706,4,train -1701,3,train -1398,2,train -1181,4,train -3913,3,train -3954,4,train -1477,2,train -1914,3,train -1215,2,train -1652,3,train -3743,3,train -1731,3,train -4026,1,train -1032,2,train -2027,1,train -2161,1,train -1944,3,train -1420,3,train -2240,1,train -2374,1,train -1978,1,train -1716,1,train -2198,4,train -1458,2,train -1895,3,train -1936,4,train -2191,1,train -2807,4,train -2108,3,train -1712,3,train -2149,4,train -1846,3,train -2404,1,train -2841,2,train -2624,4,train -1966,4,train -3054,2,train -2441,4,train -2575,4,train -2179,4,train -222,1,train -3133,2,train -2737,2,train -139,3,train -2434,1,train -2871,2,train -2172,1,train -2609,2,train -2392,4,train -435,1,train -173,1,train -3084,2,train -2688,2,train -527,4,train -131,4,train -2426,2,train -2822,2,train -2343,4,train -386,1,train -124,1,train -2901,2,train -2639,2,train -2243,2,train -2422,4,train -203,1,train -3417,3,train -3114,2,train -3551,3,train -2456,2,train -2893,3,train -719,2,train -3451,1,train -853,2,train -457,2,train -154,1,train -591,2,train -2669,2,train -4060,1,train -3664,1,train -670,2,train -367,1,train -804,2,train -3581,3,train -105,1,train -587,4,train -325,4,train -3877,1,train -3481,1,train -4011,1,train -3615,1,train -184,1,train -621,2,train -3398,3,train -404,4,train -142,4,train -4090,1,train -1096,2,train -3828,1,train -3432,1,train -3869,2,train -397,1,train -4048,4,train -438,2,train -834,2,train -176,2,train -2953,3,train -3907,1,train -1350,3,train -3645,1,train -1088,3,train -3383,1,train -3865,4,train -785,2,train -389,2,train -3562,3,train -1167,3,train -468,2,train -3596,1,train -3682,4,train -4078,4,train -643,3,train -3379,3,train -3420,4,train -3816,4,train -3554,4,train -1859,1,train -3675,1,train -1118,3,train -1555,4,train -856,3,train -3592,3,train -3633,4,train -3767,4,train -1676,1,train -1414,1,train -1851,2,train -1152,1,train -1331,3,train -935,3,train -1768,4,train -3846,4,train -3450,4,train -3980,4,train -1847,4,train -1282,3,train -2143,2,train -2277,2,train -1881,2,train -1182,1,train -1361,3,train -1798,4,train -2490,2,train -2094,2,train -1791,1,train -1395,1,train -1832,2,train -2273,4,train -1353,4,train -2569,2,train -2045,2,train -1432,4,train -2520,2,train -2124,2,train -2561,3,train -2258,2,train -1862,2,train -2041,4,train -1779,4,train -2640,3,train -2337,2,train -2075,2,train -1679,2,train -1813,2,train -2853,3,train -2591,3,train -2288,2,train -1892,2,train -2725,3,train -2026,2,train -2887,1,train -289,2,train -3021,1,train -27,2,train -2105,2,train -2542,3,train -2239,2,train -3496,1,train -106,2,train -3234,1,train -3017,3,train -2621,3,train -3058,4,train -23,4,train -2755,3,train -2359,3,train -2097,3,train -2917,1,train -319,2,train -3051,1,train -57,2,train -3271,4,train -2968,3,train -2572,3,train -3009,4,train -2706,3,train -3567,2,train -532,2,train -3264,1,train -3305,2,train -707,3,train -311,3,train -2606,1,train -3088,4,train -8,2,train -2785,3,train -3222,4,train -3484,4,train -1003,1,train -3780,2,train -786,3,train -3518,2,train -3477,1,train -920,3,train -87,2,train -2819,1,train -3215,1,train -3301,4,train -2998,3,train -2602,3,train -3039,4,train -3435,4,train -3697,4,train -820,1,train -3993,2,train -3335,2,train -300,2,train -341,3,train -737,3,train -3514,4,train -38,2,train -2856,4,train -2990,4,train -1429,1,train -771,1,train -3548,2,train -991,4,train -3245,1,train -3727,4,train -292,3,train -1246,1,train -4064,3,train -588,1,train -1070,4,train -767,3,train -371,3,train -3499,2,train -3282,4,train -3416,4,train -4015,3,train -1417,4,train -3753,3,train -718,3,train -1713,2,train -1014,1,train -618,1,train -1496,4,train -3791,2,train -752,1,train -535,3,train -3663,2,train -1227,1,train -1709,4,train -4045,3,train -965,1,train -1051,4,train -3783,3,train -1185,4,train -1743,2,train -1481,2,train -1398,4,train -1560,2,train -1257,1,train -1298,2,train -1735,3,train -4030,1,train -1477,4,train -3813,3,train -1215,4,train -1115,2,train -1249,2,train -4026,3,train -1032,4,train -2027,3,train -2161,3,train -1765,3,train -2240,3,train -2374,3,train -1978,3,train -1675,2,train -1716,3,train -2670,1,train -2494,4,train -2191,3,train -1533,3,train -2487,1,train -2924,2,train -2225,1,train -2404,3,train -2841,4,train -2962,1,train -2700,1,train -2304,1,train -2741,2,train -3137,2,train -2438,1,train -2042,1,train -222,3,train -2517,1,train -2913,1,train -2954,2,train -2651,1,train -2255,1,train -2737,4,train -3133,4,train -2434,3,train -2871,4,train -2172,3,train -2213,4,train -2609,4,train -3033,2,train -435,3,train -2730,1,train -173,3,train -2468,1,train -2688,4,train -2292,4,train -2822,4,train -2426,4,train -469,1,train -3421,3,train -386,3,train -2722,2,train -124,3,train -2901,4,train -2639,4,train -2243,4,train -682,1,train -286,1,train -24,1,train -2801,2,train -3197,2,train -203,3,train -244,4,train -2456,4,train -895,1,train -499,1,train -633,1,train -237,1,train -3451,3,train -719,4,train -3410,2,train -457,4,train -853,4,train -3189,3,train -154,3,train -591,4,train -2886,2,train -2669,4,train -712,1,train -753,2,train -4060,3,train -54,1,train -3664,3,train -188,1,train -670,4,train -2965,2,train -804,4,train -3960,1,train -966,2,train -1100,2,train -3877,3,train -3481,3,train -401,1,train -3615,3,train -184,3,train -621,4,train -3911,1,train -480,1,train -917,2,train -4090,3,train -655,2,train -3432,3,train -3828,3,train -834,4,train -438,4,train -3869,4,train -176,4,train -3990,1,train -1392,2,train -3728,1,train -3907,3,train -3466,1,train -3948,4,train -868,2,train -3645,3,train -3383,3,train -389,4,train -947,2,train -4075,1,train -1081,2,train -468,4,train -3596,3,train -1680,1,train -1859,3,train -3758,1,train -1160,2,train -1201,3,train -898,2,train -3675,3,train -1893,1,train -1676,3,train -1414,3,train -1851,4,train -1152,3,train -3667,4,train -1972,1,train -1710,1,train -1844,1,train -1231,3,train -969,3,train -2319,1,train -1923,1,train -2057,1,train -1661,1,train -2143,4,train -2277,4,train -1881,4,train -1182,3,train -2136,1,train -1478,1,train -2094,4,train -1395,3,train -1832,4,train -2349,1,train -1953,1,train -2390,2,train -2569,4,train -1691,1,train -2128,2,train -1825,1,train -2045,4,train -1904,1,train -2341,2,train -2124,4,train -2258,4,train -1862,4,train -39,1,train -2420,2,train -2554,2,train -1721,1,train -2158,2,train -2337,4,train -2075,4,train -1679,4,train -1813,4,train -118,1,train -2767,2,train -2371,2,train -2288,4,train -1892,4,train -2026,4,train -110,2,train -2846,2,train -2887,3,train -289,4,train -2584,2,train -2188,2,train -3021,3,train -27,4,train -2105,4,train -3435,2,train -189,2,train -3317,1,train -323,2,train -3496,3,train -106,4,train -2401,2,train -3234,3,train -3396,1,train -3530,1,train -99,1,train -536,2,train -2917,3,train -319,4,train -3051,3,train -2655,3,train -57,4,train -615,2,train -3743,1,train -353,2,train -3085,1,train -3567,4,train -3264,3,train -3305,4,train -2606,3,train -8,4,train -3822,1,train -3164,1,train -566,2,train -170,2,train -607,3,train -1003,3,train -304,2,train -2902,1,train -3384,4,train -3518,4,train -87,4,train -2819,3,train -3780,4,train -3377,1,train -3814,2,train -3993,4,train -820,3,train -3511,1,train -517,2,train -3335,4,train -300,4,train -3073,4,train -38,4,train -3893,2,train -4027,2,train -3328,1,train -2932,1,train -771,3,train -3548,4,train -1329,1,train -3803,1,train -1246,3,train -3978,2,train -3145,1,train -3582,2,train -547,2,train -588,3,train -3499,4,train -3103,4,train -1542,1,train -1146,1,train -667,3,train -3358,1,train -3795,2,train -1755,1,train -1359,1,train -1493,1,train -3874,2,train -1713,4,train -3571,1,train -3612,2,train -1014,3,train -618,3,train -1055,4,train -3791,4,train -752,3,train -1572,1,train -3959,2,train -965,3,train -1785,1,train -1127,1,train -1564,2,train -1743,4,train -865,1,train -4038,2,train -1481,4,train -1085,4,train -823,4,train -2039,2,train -1340,1,train -1777,2,train -1560,4,train -1298,4,train -4030,3,train -2252,2,train -1856,2,train -1990,2,train -2031,3,train -1115,4,train -1249,4,train -2203,2,train -1807,2,train -1545,2,train -2020,2,train -1624,2,train -2753,1,train -2670,3,train -1837,2,train -1971,2,train -1575,2,train -2966,1,train -2487,3,train -2924,4,train -2225,3,train -3045,1,train -3179,1,train -2962,3,train -2700,3,train -2304,3,train -2741,4,train -3137,4,train -2438,3,train -2042,3,train -2996,1,train -43,3,train -2820,4,train -2517,3,train -2954,4,train -2255,3,train -3209,1,train -3250,2,train -2947,1,train -3033,4,train -2730,3,train -2289,1,train -2468,3,train -2509,4,train -290,1,train -3026,1,train -469,3,train -73,3,train -3201,2,train -2502,1,train -2722,4,train -765,1,train -503,1,train -682,3,train -286,3,train -2581,1,train -24,3,train -2715,1,train -2801,4,train -3197,4,train -2539,4,train -978,1,train -582,1,train -320,1,train -3097,2,train -3493,2,train -499,3,train -2794,1,train -237,3,train -2969,2,train -2886,4,train -533,1,train -970,2,train -712,3,train -753,4,train -3444,2,train -54,3,train -491,4,train -2786,2,train -188,3,train -2965,4,train -1008,1,train -1049,2,train -746,1,train -350,1,train -1183,2,train -3960,3,train -966,4,train -3657,2,train -1100,4,train -2999,2,train -401,3,train -3994,1,train -959,1,train -563,1,train -1396,2,train -3911,3,train -3474,2,train -3515,3,train -480,3,train -521,4,train -917,4,train -3212,2,train -655,4,train -1475,2,train -1609,2,train -1213,2,train -3990,3,train -514,1,train -951,2,train -3728,3,train -3466,3,train -868,4,train -4024,1,train -989,1,train -1030,2,train -1164,2,train -3545,3,train -947,4,train -551,4,train -4075,3,train -1639,2,train -1680,3,train -3975,1,train -1377,2,train -3758,3,train -1160,4,train -898,4,train -1893,3,train -1497,3,train -798,2,train -2189,1,train -1972,3,train -1710,3,train -4005,1,train -1844,3,train -3963,4,train -1923,3,train -1224,2,train -1661,3,train -2615,1,train -2219,1,train -2353,1,train -1957,1,train -2136,3,train -1478,3,train -1915,4,train -2432,1,train -2170,1,train -1774,1,train -1953,3,train -2390,4,train -1691,3,train -2128,4,train -1825,3,train -2645,1,train -2686,2,train -1987,1,train -2424,2,train -1904,3,train -1945,4,train -2341,4,train -2637,2,train -2334,1,train -2420,4,train -2554,4,train -1721,3,train -2158,4,train -335,1,train -2716,2,train -118,3,train -2413,1,train -2454,2,train -2151,1,train -2192,2,train -2371,4,train -152,1,train -2929,2,train -2667,2,train -110,4,train -2405,2,train -2584,4,train -2188,4,train -3400,1,train -406,2,train -3142,2,train -189,4,train -2484,2,train -2880,2,train -323,4,train -3317,3,train -2222,2,train -2401,4,train -182,1,train -3396,3,train -316,1,train -3530,3,train -2697,2,train -536,4,train -2831,2,train -3430,1,train -395,1,train -133,1,train -174,2,train -615,4,train -2910,2,train -353,4,train -2648,2,train -2951,3,train -3085,3,train -4039,1,train -1045,2,train -649,2,train -3822,3,train -3164,3,train -3601,4,train -566,4,train -170,4,train -2902,3,train -304,4,train -3460,1,train -3594,1,train -204,2,train -2981,3,train -3377,3,train -3511,3,train -3814,4,train -1075,2,train -679,2,train -3893,4,train -3411,1,train -813,2,train -417,2,train -3631,4,train -4027,4,train -3328,3,train -2932,3,train -3886,1,train -1329,3,train -368,2,train -3145,3,train -3582,4,train -3978,4,train -1363,1,train -1542,3,train -1146,3,train -3441,1,train -3837,1,train -843,2,train -3575,1,train -3358,3,train -3399,4,train -3795,4,train -1576,1,train -1359,3,train -4091,2,train -1493,3,train -660,2,train -3788,1,train -3874,4,train -3612,4,train -1655,1,train -1789,1,train -1572,3,train -1131,1,train -3867,1,train -873,2,train -1351,4,train -3646,2,train -3429,4,train -1868,1,train -1210,1,train -1344,1,train -1127,3,train -1564,4,train -865,3,train -4038,4,train -1819,1,train -1860,2,train -2256,2,train -1557,1,train -1161,1,train -2039,4,train -1340,3,train -1381,4,train -1777,4,train -2469,2,train -1636,1,train -2073,2,train -1770,1,train -1374,1,train -1856,4,train -2252,4,train -1990,4,train -2152,2,train -1849,1,train -1890,2,train -2286,2,train -1587,1,train -1628,2,train -1807,4,train -1411,4,train -1545,4,train -1800,1,train -1841,2,train -2237,2,train -2020,4,train -1624,4,train -2316,2,train -2753,3,train -1658,2,train -1575,4,train -2529,2,train -2133,2,train -2966,3,train -2267,2,train -2308,3,train -2866,1,train -268,2,train -3045,3,train -6,2,train -2084,2,train -3079,1,train -85,2,train -219,2,train -2996,3,train -3037,4,train -3292,1,train -339,3,train -3030,1,train -3250,4,train -2947,3,train -2289,3,train -3243,1,train -3284,2,train -2847,1,train -290,3,train -3026,3,train -3201,4,train -2805,4,train -2502,3,train -765,3,train -369,3,train -3060,1,train -3497,2,train -503,3,train -3194,1,train -2581,3,train -2715,3,train -1195,1,train -799,1,train -978,3,train -582,3,train -2877,1,train -3273,1,train -320,3,train -3097,4,train -3493,4,train -17,2,train -2794,3,train -2835,4,train -2969,4,train -878,1,train -3789,2,train -3527,2,train -533,3,train -970,4,train -3224,1,train -3444,4,train -2786,4,train -1091,1,train -829,1,train -1266,2,train -4002,2,train -1008,3,train -567,1,train -1049,4,train -3344,2,train -746,3,train -350,3,train -787,4,train -1183,4,train -3478,2,train -88,3,train -2999,4,train -1176,1,train -780,1,train -3953,2,train -3994,3,train -1396,4,train -563,3,train -3691,2,train -3474,4,train -3212,4,train -1255,1,train -859,1,train -1296,2,train -4073,3,train -993,1,train -597,1,train -1475,4,train -1213,4,train -514,3,train -951,4,train -1905,2,train -810,1,train -4024,3,train -1030,4,train -3721,2,train -1164,4,train -1722,2,train -1326,2,train -1023,1,train -627,1,train -1064,2,train -1460,2,train -847,4,train -3975,3,train -1935,2,train -1539,2,train -1236,1,train -3792,3,train -798,4,train -1752,2,train -2189,3,train -1490,2,train -1094,2,train -1228,2,train -4005,3,train -1965,2,train -1703,2,train -1307,2,train -1744,3,train -1441,2,train -1224,4,train -2302,1,train -2219,3,train -1823,3,train -2353,3,train -1520,2,train -1957,3,train -1654,2,train -2515,1,train -2253,1,train -2432,3,train -1733,2,train -1774,3,train -2170,3,train -2728,1,train -2332,1,train -2466,1,train -2686,4,train -1987,3,train -2424,4,train -2679,1,train -2720,2,train -2021,1,train -2503,4,train -2637,4,train -3329,2,train -2496,1,train -335,3,train -2716,4,train -2413,3,train -2454,4,train -2151,3,train -2192,4,train -235,1,train -3012,2,train -2709,1,train -2313,1,train -152,3,train -193,4,train -2051,1,train -2447,1,train -2929,4,train -2667,4,train -2271,4,train -2405,4,train -314,1,train -3225,2,train -3400,3,train -406,4,train -2264,1,train -2660,1,train -2701,2,train -2880,4,train -2484,4,train -3142,4,train -2222,4,train -661,1,train -3,1,train -2780,2,train -3176,2,train -182,3,train -223,4,train -2697,4,train -478,1,train -612,1,train -3430,3,train -2993,2,train -395,3,train -3127,2,train -3168,3,train -133,3,train -174,4,train -2910,4,train -2648,4,train -295,1,train -732,2,train -167,1,train -253,4,train -649,4,train -2548,2,train -3939,1,train -3677,1,train -246,1,train -3460,3,train -380,1,train -3594,3,train -2761,2,train -204,4,train -3890,1,train -896,2,train -500,2,train -679,4,train -3411,3,train -417,4,train -1371,2,train -975,2,train -3707,1,train -1109,2,train -713,2,train -1150,3,train -3445,1,train -3886,3,train -451,2,train -368,4,train -1188,2,train -3920,1,train -926,2,train -1363,3,train -664,2,train -3441,3,train -3837,3,train -3575,3,train -1659,1,train -3935,2,train -1576,3,train -3871,1,train -3957,4,train -877,2,train -4091,4,train -3695,4,train -660,4,train -1738,1,train -1872,1,train -1655,3,train -1789,3,train -4084,1,train -3688,1,train -1090,2,train -1131,3,train -3867,3,train -3646,4,train -1951,1,train -2085,1,train -1689,1,train -1868,3,train -1427,1,train -1169,2,train -1210,3,train -3901,1,train -1344,3,train -2164,1,train -1640,1,train -1819,3,train -1860,4,train -2256,4,train -1557,3,train -1161,3,train -2377,1,train -1719,1,train -2156,2,train -1457,1,train -1636,3,train -1677,4,train -2073,4,train -1374,3,train -2066,1,train -1670,1,train -2152,4,train -1849,3,train -1890,4,train -2286,4,train -1587,3,train -1628,4,train -2448,2,train -2145,1,train -1883,1,train -1487,1,train -2237,4,train -1841,4,train -2399,2,train -2096,1,train -1700,1,train -2533,2,train -2316,4,train -1658,4,train -2133,4,train -2267,4,train -48,1,train -2866,3,train -268,4,train -2126,1,train -2167,2,train -2563,2,train -6,4,train -2301,2,train -2084,4,train -127,1,train -168,2,train -302,2,train -3079,3,train -85,4,train -2380,2,train -219,4,train -2514,2,train -381,2,train -78,1,train -515,2,train -3292,3,train -2593,2,train -2634,3,train -3030,3,train -2372,3,train -594,2,train -198,2,train -3326,1,train -3722,1,train -332,2,train -3243,3,train -2847,3,train -3284,4,train -3801,1,train -3405,1,train -807,2,train -3539,1,train -3580,2,train -545,2,train -149,2,train -3363,4,train -3060,3,train -2664,3,train -3497,4,train -3752,1,train -3793,2,train -1195,3,train -799,3,train -3273,3,train -2877,3,train -17,4,train -1095,1,train -3872,2,train -4006,2,train -878,3,train -3173,1,train -616,3,train -3307,1,train -3789,4,train -313,2,train -3527,4,train -4085,2,train -1091,3,train -3386,1,train -3782,1,train -4002,4,train -829,3,train -1266,4,train -3124,1,train -130,2,train -567,3,train -3344,4,train -3520,1,train -3478,4,train -3561,2,train -1521,1,train -863,1,train -4036,2,train -646,3,train -3337,1,train -3774,2,train -780,3,train -3161,4,train -3691,4,train -1338,1,train -1472,1,train -1255,3,train -859,3,train -1296,4,train -3550,1,train -993,3,train -597,3,train -3987,2,train -1551,1,train -1592,2,train -1289,1,train -893,1,train -3804,2,train -810,3,train -3721,4,train -1368,1,train -1805,2,train -1502,1,train -1543,2,train -1722,4,train -844,1,train -1326,4,train -4017,2,train -1023,3,train -627,3,train -1064,4,train -1460,4,train -2018,2,train -923,1,train -1057,1,train -1539,4,train -1835,2,train -1532,1,train -1969,2,train -1270,1,train -1752,4,train -4047,2,train -1490,4,train -1094,4,train -1228,4,train -2048,2,train -1349,1,train -1786,2,train -1524,2,train -1703,4,train -1307,4,train -1441,4,train -2261,2,train -2302,3,train -1999,2,train -1603,2,train -2040,3,train -1520,4,train -2515,3,train -2253,3,train -2945,1,train -2728,3,train -2332,3,train -2029,2,train -2070,3,train -2466,3,train -1767,2,train -2679,3,train -2720,4,train -2021,3,train -22,3,train -2799,4,train -2496,3,train -2100,3,train -1838,3,train -235,3,train -2926,1,train -3012,4,train -2709,3,train -2313,3,train -2447,3,train -2051,3,train -2488,4,train -314,3,train -3005,1,train -3046,2,train -3225,4,train -2347,1,train -2481,1,train -2264,3,train -2701,4,train -744,1,train -3655,2,train -482,1,train -3218,1,train -3259,2,train -661,3,train -2956,1,train -3,3,train -2694,1,train -2780,4,train -3176,4,train -2518,4,train -957,1,train -299,1,train -3076,2,train -478,3,train -2773,1,train -3606,2,train -2993,4,train -3127,4,train -908,1,train -512,1,train -3289,2,train -3726,3,train -295,3,train -732,4,train -2986,1,train -3027,2,train -2765,2,train -167,3,train -2548,4,train -1028,2,train -3939,3,train -3636,2,train -3677,3,train -549,4,train -3240,2,train -246,3,train -2978,2,train -3374,2,train -380,3,train -2761,4,train -1200,1,train -1241,2,train -1375,2,train -979,2,train -676,1,train -3890,3,train -3494,3,train -896,4,train -500,4,train -238,4,train -1454,2,train -1588,2,train -975,4,train -3707,3,train -1109,4,train -713,4,train -3445,3,train -451,4,train -4003,1,train -1009,2,train -1446,3,train -706,1,train -1188,4,train -3920,3,train -926,4,train -664,4,train -1484,2,train -1659,3,train -3954,1,train -1356,2,train -3871,3,train -877,4,train -1738,3,train -4033,1,train -1435,2,train -1476,3,train -1872,3,train -3771,1,train -777,2,train -3688,3,train -1951,3,train -2085,3,train -1689,3,train -1427,3,train -3901,3,train -3942,4,train -2164,3,train -1723,1,train -1203,2,train -1640,3,train -2198,1,train -1936,1,train -1719,3,train -2156,4,train -1416,2,train -1457,3,train -2015,1,train -2149,1,train -1670,3,train -1274,3,train -2624,1,train -2665,2,train -1966,1,train -2448,4,train -2145,3,train -1883,3,train -1487,3,train -2441,1,train -2878,2,train -2179,1,train -2616,2,train -2399,4,train -2533,4,train -1700,3,train -3091,2,train -2695,2,train -2392,1,train -2829,2,train -131,1,train -2512,2,train -3042,2,train -2646,2,train -2563,4,train -2167,4,train -2301,4,train -3121,2,train -127,3,train -168,4,train -2422,1,train -2900,3,train -302,4,train -2201,2,train -2380,4,train -381,4,train -2676,2,train -515,4,train -2593,4,train -3409,1,train -811,2,train -415,2,train -594,4,train -198,4,train -2493,2,train -2930,3,train -332,4,train -3326,3,train -3801,3,train -3405,3,train -3539,3,train -3580,4,train -545,4,train -149,4,train -404,1,train -882,3,train -3659,4,train -142,1,train -183,2,train -3793,4,train -4048,1,train -4089,2,train -658,2,train -3872,4,train -1095,3,train -792,2,train -396,2,train -3173,3,train -4006,4,train -3307,3,train -3348,4,train -313,4,train -3865,1,train -3469,1,train -912,3,train -4085,4,train -213,2,train -3386,3,train -3124,3,train -3561,4,train -130,4,train -4078,1,train -3682,1,train -1521,3,train -3816,1,train -3420,1,train -822,2,train -863,3,train -3554,1,train -4036,4,train -560,2,train -3337,3,train -3378,4,train -3774,4,train -1421,1,train -1555,1,train -1159,1,train -1338,3,train -942,3,train -3237,1,train -3633,1,train -3767,1,train -4070,2,train -3987,4,train -1768,1,train -1551,3,train -1592,4,train -3450,1,train -3846,1,train -1289,3,train -893,3,train -3804,4,train -1847,1,train -1451,1,train -1189,1,train -1368,3,train -1805,4,train -1543,4,train -3838,2,train -844,3,train -4017,4,train -1798,1,train -1839,2,train -2018,4,train -3917,2,train -923,3,train -1360,4,train -4051,2,train -1057,3,train -1353,1,train -1835,4,train -1969,4,train -1270,3,train -4047,4,train -2131,2,train -2265,2,train -1432,1,train -1869,2,train -2048,4,train -1786,4,train -1390,4,train -1524,4,train -2132,3,validate -345,3,validate -83,3,validate -2082,2,validate -3685,1,validate -388,1,validate -3206,3,validate -2032,1,validate -2944,3,validate -3898,1,validate -3207,4,validate -3502,1,validate -205,1,validate -3856,4,validate -3157,3,validate -1766,3,validate -297,4,validate -247,3,validate -3673,4,validate -1242,2,validate -763,4,validate -2366,3,validate -4020,4,validate -1455,2,validate -756,1,validate -3533,2,validate -2796,1,validate -1405,1,validate -2713,3,validate -3617,1,validate -1060,3,validate -2226,1,validate -2842,4,validate -2742,2,validate -94,2,validate -2564,1,validate -11,4,validate -3130,3,validate -1219,4,validate -2560,3,validate -4080,4,validate -1515,2,validate -3689,2,validate -1902,2,validate -428,4,validate -3556,3,validate -1728,2,validate -3685,4,validate -1812,1,validate -724,2,validate -2032,4,validate -2461,1,validate -379,4,validate -808,1,validate -546,1,validate -3323,2,validate -3502,4,validate -3669,1,validate -4023,4,validate -3627,4,validate -1283,1,validate -3536,2,validate -3973,3,validate -1671,3,validate -2320,3,validate -3620,1,validate -3141,3,validate -4052,3,validate -972,1,validate -2358,2,validate -2795,3,validate -493,3,validate -1538,3,validate -705,2,validate -2704,1,validate -3833,1,validate -3616,3,validate -2796,4,validate -1963,3,validate -1405,4,validate -3700,2,validate -3687,4,validate -819,1,validate -2564,4,validate -211,1,validate -390,3,validate -3122,2,validate -3468,1,validate -3072,1,validate -3984,3,validate -2381,3,validate -2627,1,validate -2806,3,validate -1852,4,validate -678,2,validate -3152,2,validate -108,2,validate -2544,2,validate -1449,1,validate -1886,2,validate -495,2,validate -674,4,validate -3406,3,validate -2232,1,validate -3843,4,validate -2411,3,validate -3144,3,validate -546,4,validate -841,1,validate -100,3,validate -3011,4,validate -405,1,validate -9,1,validate -2445,1,validate -2228,3,validate -2961,3,validate -1833,4,validate -3873,4,validate -2000,1,validate -871,1,validate -3916,2,validate -3470,1,validate -476,2,validate -1480,1,validate -1304,4,validate -264,2,validate -47,4,validate -3125,2,validate -1734,2,validate -2384,4,validate -477,2,validate -2293,2,validate -427,1,validate -31,1,validate -210,3,validate -1947,2,validate -3288,1,validate -4066,3,validate -294,2,validate -2547,3,validate -2718,1,validate -3888,2,validate -1764,2,validate -1065,1,validate -1240,2,validate -973,3,validate -3106,2,validate -2627,4,validate -3538,4,validate -62,2,validate -840,4,validate -1403,1,validate -3572,2,validate -1449,4,validate -275,2,validate -487,1,validate -3701,3,validate -1702,4,validate -2232,4,validate -841,4,validate -3177,3,validate -2091,1,validate -2132,2,validate -875,2,validate -262,4,validate -3390,3,validate -1221,1,validate -3257,4,validate -4082,1,validate -255,1,validate -2000,4,validate -871,4,validate -475,4,validate -3207,3,validate -1950,3,validate -996,4,validate -297,3,validate -3470,4,validate -3857,4,validate -2459,1,validate -1980,3,validate -2417,4,validate -4020,3,validate -1026,4,validate -31,4,validate -2713,2,validate -1281,1,validate -2842,3,validate -1148,2,validate -1585,3,validate -411,1,validate -1664,3,validate -11,3,validate -3485,1,validate -1403,4,validate -1219,3,validate -399,4,validate -3564,1,validate -4080,3,validate -745,3,validate -3689,1,validate -3868,3,validate -1778,2,validate -3556,2,validate -1728,1,validate -259,2,validate -2082,4,validate -1686,4,validate -3685,3,validate -3120,2,validate -2032,3,validate -1729,2,validate -379,3,validate -684,1,validate -3898,3,validate -3502,3,validate -2462,1,validate -205,3,validate -4023,3,validate -938,2,validate -2675,1,validate -1022,1,validate -1242,4,validate -1413,2,validate -2358,1,validate -493,2,validate -1538,2,validate -3616,2,validate -1455,4,validate -756,3,validate -3533,4,validate -2796,3,validate -1963,2,validate -968,2,validate -1405,3,validate -3700,1,validate -3617,3,validate -2443,1,validate -2226,3,validate -3355,2,validate -1527,1,validate -2742,4,validate -94,4,validate -2564,3,validate -1082,1,validate -390,2,validate -3122,1,validate -1994,2,validate -1515,4,validate -2381,2,validate -3689,4,validate -2078,1,validate -1902,4,validate -425,1,validate -511,4,validate -2806,2,validate -3152,1,validate -3110,4,validate -1633,1,validate -2544,1,validate -724,4,validate -3153,2,validate -2461,3,validate -674,3,validate -808,3,validate -2411,2,validate -546,3,validate -3323,4,validate -3669,3,validate -1283,3,validate -1062,4,validate -2228,2,validate -322,2,validate -3536,4,validate -3923,4,validate -3620,3,validate -1833,3,validate -972,3,validate -2358,4,validate -3916,1,validate -2921,1,validate -705,4,validate -2704,3,validate -3833,3,validate -1092,4,validate -264,1,validate -47,3,validate -3175,2,validate -3125,1,validate -3734,2,validate -477,1,validate -952,2,validate -1997,2,validate -2293,1,validate -210,2,validate -1947,1,validate -819,3,validate -294,1,validate -211,3,validate -2506,1,validate -3122,4,validate -120,1,validate -557,2,validate -1764,1,validate -3072,3,validate -903,1,validate -2719,1,validate -3106,1,validate -2627,3,validate -678,4,validate -3152,4,validate -1541,1,validate -3319,1,validate -108,4,validate -2544,4,validate -1449,3,validate -275,1,validate -1886,4,validate -495,4,validate -2232,3,validate -800,2,validate -841,3,validate -276,2,validate -3094,4,validate -488,1,validate -9,3,validate -2445,3,validate -3216,2,validate -2000,3,validate -871,3,validate -3999,2,validate -3470,3,validate -476,4,validate -3083,2,validate -264,4,validate -1168,2,validate -3125,4,validate -1734,4,validate -4029,2,validate -2293,4,validate -427,3,validate -31,3,validate -1947,4,validate -3288,3,validate -294,4,validate -2718,3,validate -3888,4,validate -1148,1,validate -1585,2,validate -1764,4,validate -153,1,validate -1065,3,validate -2327,1,validate -1240,4,validate -1889,4,validate -2194,2,validate -3106,4,validate -62,4,validate -1403,3,validate -3572,4,validate -275,4,validate -487,3,validate -3219,2,validate -1828,2,validate -3868,2,validate -134,1,validate -1778,1,validate -783,1,validate -2132,4,validate -259,1,validate -875,4,validate -2082,3,validate -1221,3,validate -388,2,validate -3120,1,validate -1729,1,validate -4082,3,validate -255,3,validate -3898,2,validate -1992,2,validate -205,2,validate -2076,1,validate -247,4,validate -764,1,validate -2938,1,validate -1413,1,validate -2459,3,validate -3067,2,validate -1455,3,validate -756,2,validate -3533,3,validate -2713,4,validate -1281,3,validate -2884,2,validate -3617,2,validate -1060,4,validate -2226,2,validate -1365,2,validate -411,3,validate -1577,1,validate -3355,1,validate -94,3,validate -4043,2,validate -2177,1,validate -2560,4,validate -3781,1,validate -3564,3,validate -1994,1,validate -1515,3,validate -3689,3,validate -1995,2,validate -1778,4,validate -3556,4,validate -1728,3,validate -1812,2,validate -3153,1,validate -2461,2,validate -1729,4,validate -1896,1,validate -3678,2,validate -2462,3,validate -1283,2,validate -2109,1,validate -322,1,validate -1671,4,validate -938,4,validate -2675,3,validate -3620,2,validate -1022,3,validate -3141,4,validate -931,1,validate -972,2,validate -1413,4,validate -2358,3,validate -2795,4,validate -493,4,validate -1538,4,validate -3833,2,validate -2704,2,validate -3616,4,validate -1963,4,validate -968,4,validate -3700,3,validate -2443,3,validate -3734,1,validate -3355,4,validate -790,2,validate -1997,1,validate -91,1,validate -819,2,validate -1082,3,validate -390,4,validate -3122,3,validate -557,1,validate -3468,2,validate -3984,4,validate -1994,4,validate -2423,1,validate -1166,1,validate -2381,4,validate -2078,3,validate -425,3,validate -2806,4,validate -899,2,validate -2636,1,validate -3152,3,validate -1633,3,validate -108,3,validate -2544,3,validate -3153,4,validate -1979,2,validate -2453,1,validate -2411,4,validate -800,1,validate -276,1,validate -4057,1,validate -405,2,validate -2445,2,validate -2142,1,validate -2228,4,validate -322,4,validate -2791,1,validate -3216,1,validate -2355,1,validate -3999,1,validate -3916,3,validate -2921,3,validate -3825,1,validate -356,1,validate -831,2,validate -1480,2,validate -3083,1,validate -3217,1,validate -264,3,validate -3175,4,validate -1168,1,validate -3125,3,validate -2385,1,validate -1734,3,validate -3734,4,validate -4029,1,validate -477,3,validate -952,4,validate -1997,4,validate -2293,3,validate -427,2,validate -210,4,validate -1947,3,validate -3288,2,validate -294,3,validate -2506,3,validate -337,1,validate -2718,2,validate -557,4,validate -2852,2,validate -1764,3,validate -1065,2,validate -1199,2,validate -2802,1,validate -2244,2,validate -2719,3,validate -2194,1,validate -3106,3,validate -3015,1,validate -2323,2,validate -62,3,validate -1066,2,validate -3319,3,validate -754,1,validate -3228,1,validate -275,3,validate -487,2,validate -276,4,validate -488,3,validate -2091,2,validate -875,3,validate -572,2,validate -3390,4,validate -1221,2,validate -3216,4,validate -4041,1,validate -4082,2,validate -2650,1,validate -255,2,validate -3999,4,validate -1992,1,validate -1950,4,validate -1168,4,validate -1597,1,validate -4029,4,validate -2459,2,validate -3463,1,validate -3067,1,validate -1980,4,validate -1281,2,validate -3280,1,validate -2884,1,validate -1627,1,validate -1365,1,validate -1148,3,validate -411,2,validate -1585,4,validate -153,3,validate -2327,3,validate -3231,1,validate -1840,1,validate -1578,1,validate -1664,4,validate -321,1,validate -4043,1,validate -3485,2,validate -1099,2,validate -3564,2,validate -745,4,validate -3219,4,validate -1050,2,validate -1828,4,validate -3868,4,validate -1262,1,validate -1995,1,validate -1778,3,validate -783,3,validate -259,3,validate -1079,1,validate -388,4,validate -3120,3,validate -1729,3,validate -3678,1,validate -684,2,validate -3898,4,validate -818,2,validate -2462,2,validate -205,4,validate -938,3,validate -2675,2,validate -981,1,validate -1022,2,validate -764,3,validate -2938,3,validate -1413,3,validate -756,4,validate -1581,1,validate -968,3,validate -2884,4,validate -2443,2,validate -3617,4,validate -2226,4,validate -1577,3,validate -3355,3,validate -1527,2,validate -790,1,validate -270,2,validate -3002,1,validate -4043,4,validate -2177,3,validate -1082,2,validate -3914,2,validate -2086,1,validate -3781,3,validate -1994,3,validate -3294,1,validate -3032,1,validate -2078,2,validate -1995,4,validate -425,2,validate -899,1,validate -1033,1,validate -1854,1,validate -1162,2,validate -1633,2,validate -1812,4,validate -3153,3,validate -1979,1,validate -2461,4,validate -1896,3,validate -808,4,validate -3669,4,validate -1283,4,validate -2109,3,validate -3712,2,validate -322,3,validate -3620,4,validate -972,4,validate -1143,2,validate -2921,2,validate -3833,4,validate -2704,4,validate -831,1,validate -3175,3,validate -3734,3,validate -3347,2,validate -952,3,validate -790,4,validate -1997,3,validate -91,3,validate -3035,1,validate -819,4,validate -211,4,validate -2506,2,validate -120,2,validate -557,3,validate -2852,1,validate -3468,4,validate -3072,4,validate -903,2,validate -1199,1,validate -2244,1,validate -3115,2,validate -2719,2,validate -2423,3,validate -1462,2,validate -1674,1,validate -1808,1,validate -1116,2,validate -2323,1,validate -899,4,validate -1066,1,validate -1541,2,validate -3319,2,validate -1979,4,validate -2453,3,validate -800,3,validate -276,3,validate -3878,1,validate -2749,1,validate -488,2,validate -405,4,validate -9,4,validate -1230,1,validate -2445,4,validate -2142,3,validate -572,1,validate -3216,3,validate -3999,3,validate -356,3,validate -3300,1,validate -998,1,validate -1480,4,validate -3083,3,validate -3217,3,validate -1168,3,validate -4029,3,validate -2335,2,validate -944,2,validate -427,4,validate -3464,1,validate -3288,4,validate -2718,4,validate -2852,4,validate -153,2,validate -1065,4,validate -2327,2,validate -1199,4,validate -2802,3,validate -2244,4,validate -3148,2,validate -2194,3,validate -3015,3,validate -2323,4,validate -450,1,validate -1099,1,validate -3099,2,validate -317,2,validate -754,3,validate -487,4,validate -3219,3,validate -1050,1,validate -1828,3,validate -134,2,validate -1871,1,validate -1179,2,validate -783,2,validate -2091,4,validate -1263,1,validate -572,4,validate -1221,4,validate -388,3,validate -2521,2,validate -1130,2,validate -4082,4,validate -255,4,validate -1992,3,validate -818,1,validate -2076,2,validate -1597,3,validate -764,2,validate -2938,2,validate -2459,4,validate -3067,3,validate -2368,2,validate -2022,2,validate -1281,4,validate -3280,3,validate -2884,3,validate -3972,2,validate -2106,1,validate -715,1,validate -1627,3,validate -1365,3,validate -411,4,validate -1577,2,validate -3231,3,validate -1840,3,validate -270,1,validate -1578,3,validate -4043,3,validate -2177,2,validate -3485,4,validate -3914,1,validate -1099,4,validate -3781,2,validate -3082,1,validate -3564,4,validate -1133,2,validate -1262,3,validate -1995,3,validate -513,1,validate -2949,1,validate -1728,4,validate -647,1,validate -1162,1,validate -1079,3,validate -1812,3,validate -1896,2,validate -3678,3,validate -684,4,validate -1247,1,validate -2462,4,validate -2109,2,validate -3712,1,validate -2675,4,validate -331,1,validate -981,3,validate -1022,4,validate -2322,2,validate -3925,1,validate -931,2,validate -1143,1,validate -1581,3,validate -3700,4,validate -2443,4,validate -3347,1,validate -1527,4,validate -790,3,validate -91,2,validate -270,4,validate -3002,3,validate -1082,4,validate -3914,4,validate -3468,3,validate -3115,1,validate -2423,2,validate -3294,3,validate -3032,3,validate -1166,2,validate -1462,1,validate -2078,4,validate -1116,1,validate -425,4,validate -899,3,validate -3590,1,validate -1033,3,validate -2636,2,validate -1937,1,validate -1854,3,validate -1162,4,validate -1633,4,validate -1979,3,validate -3541,1,validate -2453,2,validate -1330,2,validate -4057,2,validate -405,3,validate -3712,4,validate -2142,2,validate -2750,1,validate -2355,2,validate -3916,4,validate -2921,4,validate -356,2,validate -3825,2,validate -831,3,validate -2830,2,validate -1480,3,validate -3217,2,validate -2385,2,validate -477,4,validate -2335,1,validate -944,1,validate -83,1,validate -2598,2,validate -3035,3,validate -2944,1,validate -3381,2,validate -2506,4,validate -1291,1,validate -337,2,validate -120,4,validate -2852,3,validate -903,4,validate -1199,3,validate -2802,2,validate -2244,3,validate -2719,4,validate -3148,1,validate -1462,4,validate -1891,1,validate -1674,3,validate -3673,2,validate -1808,3,validate -1116,4,validate -3015,2,validate -2323,3,validate -3149,2,validate -1066,3,validate -1541,4,validate -2366,1,validate -3099,1,validate -3319,4,validate -317,1,validate -754,2,validate -3228,2,validate -530,1,validate -3878,3,validate -2749,3,validate -1179,1,validate -488,4,validate -2091,3,validate -1230,3,validate -572,3,validate -2521,1,validate -1130,1,validate -4041,2,validate -2650,2,validate -1605,1,validate -3300,3,validate -998,3,validate -1818,1,validate -1597,2,validate -3463,2,validate -2335,4,validate -2368,1,validate -944,4,validate -2206,2,validate -2022,1,validate -2631,2,validate -3972,1,validate -3280,2,validate -3676,2,validate -1627,2,validate -1324,1,validate -1148,4,validate -153,4,validate -2327,4,validate -3627,2,validate -3231,2,validate -1840,2,validate -3148,4,validate -1578,2,validate -146,1,validate -321,2,validate -2320,1,validate -3485,3,validate -450,3,validate -4052,1,validate -1099,3,validate -317,4,validate -1133,1,validate -613,2,validate -1050,3,validate -1262,2,validate -134,4,validate -1871,3,validate -1179,4,validate -783,4,validate -259,4,validate -1263,3,validate -1079,2,validate -3120,4,validate -3687,2,validate -1130,4,validate -684,3,validate -818,3,validate -1688,2,validate -2076,4,validate -981,2,validate -764,4,validate -2322,1,validate -2938,4,validate -2368,4,validate -1194,2,validate -2022,4,validate -1581,2,validate -2106,3,validate -715,3,validate -1577,4,validate -100,1,validate -1527,3,validate -3660,2,validate -270,3,validate -2961,1,validate -3002,2,validate -179,1,validate -2177,4,validate -3914,3,validate -2086,2,validate -3781,4,validate -3082,3,validate -3294,2,validate -1133,4,validate -3032,2,validate -2037,2,validate -1033,2,validate -513,3,validate -2949,3,validate -1854,2,validate -1162,3,validate -3853,1,validate -1896,4,validate -1330,1,validate -1247,3,validate -2109,4,validate -3712,3,validate -973,1,validate -2322,4,validate -3925,3,validate -1622,1,validate -931,4,validate -1143,3,validate -2830,1,validate -2964,1,validate -1702,2,validate -1440,2,validate -3826,1,validate -832,2,validate -3347,3,validate -91,4,validate -262,2,validate -2598,1,validate -3035,2,validate -3381,1,validate -120,3,validate -3856,1,validate -862,2,validate -903,3,validate -3115,3,validate -2423,4,validate -1166,4,validate -1462,3,validate -1674,2,validate -3673,1,validate -1808,2,validate -1116,3,validate -3590,3,validate -3149,1,validate -2636,4,validate -1937,3,validate -763,1,validate -1541,3,validate -2283,2,validate -3541,3,validate -2453,4,validate -800,4,validate -3878,2,validate -2749,2,validate -4057,4,validate -581,2,validate -1230,2,validate -2142,4,validate -2750,3,validate -2355,4,validate -356,4,validate -3825,4,validate -3300,2,validate -998,2,validate -3083,4,validate -3217,4,validate -2385,4,validate -2335,3,validate -428,1,validate -944,3,validate -2206,1,validate -1686,2,validate -2598,4,validate -3464,2,validate -2631,1,validate -33,2,validate -3381,4,validate -3676,1,validate -379,1,validate -1291,3,validate -337,4,validate -2802,4,validate -3627,1,validate -3148,3,validate -2194,4,validate -1891,3,validate -3015,4,validate -3149,4,validate -450,2,validate -3099,3,validate -317,3,validate -754,4,validate -3228,4,validate -613,1,validate -530,3,validate -134,3,validate -1871,2,validate -1179,3,validate -1263,2,validate -2521,3,validate -3687,1,validate -1130,3,validate -4041,4,validate -2650,4,validate -1992,4,validate -1688,1,validate -1605,3,validate -2076,3,validate -36,2,validate -1818,3,validate -1597,4,validate -511,2,validate -3463,4,validate -1852,1,validate -3067,4,validate -2368,3,validate -1194,1,validate -2206,4,validate -3110,2,validate -2022,3,validate -2631,4,validate -3972,3,validate -3280,4,validate -2106,2,validate -3676,4,validate -674,1,validate -715,2,validate -3843,1,validate -1627,4,validate -1324,3,validate -1365,4,validate -3011,1,validate -3231,4,validate -3660,1,validate -1062,2,validate -1840,4,validate -1578,4,validate -146,3,validate -321,4,validate -3923,2,validate -2532,2,validate -1833,1,validate -3873,1,validate -3082,2,validate -1092,2,validate -1133,3,validate -2037,1,validate -613,4,validate -1304,1,validate -47,1,validate -1262,4,validate -2562,2,validate -513,2,validate -2949,2,validate -647,2,validate -2384,1,validate -1079,4,validate -3770,2,validate -3678,4,validate -1688,4,validate -1247,2,validate -2330,2,validate -3375,2,validate -331,2,validate -981,4,validate -2322,3,validate -3925,2,validate -931,3,validate -3538,1,validate -1673,2,validate -840,1,validate -1194,4,validate -1581,4,validate -1702,1,validate -1440,1,validate -3094,2,validate -832,1,validate -3660,4,validate -3002,4,validate -262,1,validate -179,3,validate -3257,1,validate -2086,4,validate -475,1,validate -862,1,validate -996,1,validate -3294,4,validate -3032,4,validate -1166,3,validate -3857,1,validate -2037,4,validate -3590,2,validate -1033,4,validate -3724,2,validate -2636,3,validate -1937,2,validate -1854,4,validate -3853,3,validate -2283,1,validate -2417,1,validate -1026,1,validate -3541,2,validate -1155,2,validate -1330,3,validate -4057,3,validate -581,1,validate -3146,2,validate -2750,2,validate -1889,2,validate -1622,3,validate -2355,3,validate -3825,3,validate -831,4,validate -2830,3,validate -2964,3,validate -399,1,validate -1440,4,validate -2385,3,validate -3826,3,validate -832,4,validate -345,2,validate -83,2,validate -2082,1,validate -1686,1,validate -2598,3,validate -3035,4,validate -33,1,validate -3206,2,validate -2944,2,validate -3381,3,validate -1291,2,validate -337,3,validate -3856,3,validate -862,4,validate -3157,2,validate -1766,2,validate -247,2,validate -1891,2,validate -1674,4,validate -3673,3,validate -1808,4,validate -3149,3,validate -1242,1,validate -1066,4,validate -763,3,validate -2366,2,validate -2283,4,validate -3228,3,validate -1455,1,validate -3533,1,validate -530,2,validate -1060,2,validate -3878,4,validate -2749,4,validate -581,4,validate -1230,4,validate -2742,1,validate -94,1,validate -4041,3,validate -2650,3,validate -3130,2,validate -1605,2,validate -3300,4,validate -998,4,validate -2560,2,validate -36,1,validate -1818,2,validate -1515,1,validate -1902,1,validate -511,1,validate -3463,3,validate -428,3,validate -2206,3,validate -3110,1,validate -3464,4,validate -2631,3,validate -724,1,validate -33,4,validate -3676,3,validate -1324,2,validate -3323,1,validate -3627,3,validate -1062,1,validate -3536,1,validate -3973,2,validate -1671,2,validate -146,2,validate -321,3,validate -2320,2,validate -3923,1,validate -2532,1,validate -450,4,validate -3141,2,validate -4052,2,validate -2795,2,validate -705,1,validate -1092,1,validate -613,3,validate -1050,4,validate -2562,1,validate -1871,4,validate -1263,4,validate -3770,1,validate -3687,3,validate -818,4,validate -1688,3,validate -2330,1,validate -3375,1,validate -3984,2,validate -36,4,validate -1673,1,validate -1852,3,validate -678,1,validate -1194,3,validate -108,1,validate -1886,1,validate -2106,4,validate -495,1,validate -715,4,validate -3406,2,validate -3843,3,validate -3144,2,validate -3094,1,validate -100,2,validate -3011,3,validate -3660,3,validate -2961,2,validate -179,2,validate -2532,4,validate -3873,3,validate -2086,3,validate -3082,4,validate -476,1,validate -2037,3,validate -1304,3,validate -2562,4,validate -3724,1,validate -513,4,validate -2949,4,validate -1734,1,validate -647,4,validate -3853,2,validate -2384,3,validate -3770,4,validate -1155,1,validate -4066,2,validate -1247,4,validate -2547,2,validate -2330,4,validate -3888,1,validate -3375,4,validate -3146,1,validate -1240,1,validate -331,4,validate -1889,1,validate -973,2,validate -3925,4,validate -1622,2,validate -3538,3,validate -1143,4,validate -1673,4,validate -62,1,validate -840,3,validate -2964,2,validate -3572,1,validate -1702,3,validate -3701,2,validate -1440,3,validate -3177,2,validate -3826,2,validate -832,3,validate -2132,1,validate -3347,4,validate -345,1,validate -875,1,validate -262,3,validate -3390,2,validate -3206,1,validate -3257,3,validate -475,3,validate -3207,2,validate -3856,2,validate -1950,2,validate -862,3,validate -3157,1,validate -996,3,validate -1766,1,validate -297,2,validate -3115,4,validate -247,1,validate -3857,3,validate -3590,4,validate -3724,4,validate -1937,4,validate -763,2,validate -2283,3,validate -1980,2,validate -2417,3,validate -4020,2,validate -1026,3,validate -3541,4,validate -1155,4,validate -2713,1,validate -1060,1,validate -2842,2,validate -581,3,validate -3146,4,validate -2750,4,validate -1664,2,validate -11,2,validate -3130,1,validate -1219,2,validate -2560,1,validate -399,3,validate -4080,2,validate -745,2,validate -428,2,validate -3556,1,validate -345,4,validate -83,4,validate -1686,3,validate -3685,2,validate -3464,3,validate -33,3,validate -2032,2,validate -3206,4,validate -2944,4,validate -379,2,validate -1291,4,validate -3502,2,validate -3157,4,validate -1766,4,validate -3973,1,validate -1671,1,validate -938,1,validate -1891,4,validate -1242,3,validate -3141,1,validate -2366,4,validate -3099,4,validate -2795,1,validate -493,1,validate -1538,1,validate -3616,1,validate -2796,2,validate -1963,1,validate -968,1,validate -1405,2,validate -530,4,validate -2742,3,validate -2521,4,validate -2564,2,validate -3130,4,validate -390,1,validate -1605,4,validate -3984,1,validate -36,3,validate -1818,4,validate -2381,1,validate -1902,3,validate -511,3,validate -2806,1,validate -1852,2,validate -3110,3,validate -724,3,validate -3972,4,validate -674,2,validate -3843,2,validate -3406,1,validate -808,2,validate -3144,1,validate -2411,1,validate -546,2,validate -3323,3,validate -1324,4,validate -3669,2,validate -3011,2,validate -1062,3,validate -2228,1,validate -3536,3,validate -3973,4,validate -146,4,validate -2320,4,validate -3923,3,validate -2532,3,validate -1833,2,validate -3873,2,validate -4052,4,validate -705,3,validate -1092,3,validate -1304,2,validate -47,2,validate -3175,1,validate -2562,3,validate -647,3,validate -2384,2,validate -952,1,validate -3770,3,validate -210,1,validate -4066,1,validate -211,2,validate -2547,1,validate -2330,3,validate -3375,3,validate -3072,2,validate -331,3,validate -2627,2,validate -3538,2,validate -1673,3,validate -840,2,validate -678,3,validate -1449,2,validate -1886,3,validate -495,3,validate -3406,4,validate -2232,2,validate -3701,1,validate -3144,4,validate -841,2,validate -3177,1,validate -3094,3,validate -100,4,validate -9,2,validate -2961,4,validate -3390,1,validate -179,4,validate -3257,2,validate -2000,2,validate -871,2,validate -475,2,validate -3207,1,validate -1950,1,validate -996,2,validate -297,1,validate -3470,2,validate -476,3,validate -3857,2,validate -3724,3,validate -3853,4,validate -1980,1,validate -2417,2,validate -4020,1,validate -1026,2,validate -31,2,validate -1155,3,validate -1330,4,validate -4066,4,validate -2842,1,validate -2547,4,validate -3888,3,validate -1585,1,validate -3146,3,validate -1240,3,validate -1889,3,validate -1664,1,validate -973,4,validate -1622,4,validate -11,1,validate -1403,2,validate -2830,4,validate -1219,1,validate -2964,4,validate -399,2,validate -3572,3,validate -4080,1,validate -745,1,validate -3219,1,validate -3701,4,validate -1828,1,validate -3868,1,validate -3177,4,validate -3826,4,validate -782,4,test -3036,1,test -2519,3,test -825,2,test -1341,4,test -1553,3,test -3989,3,test -84,4,test -733,4,test -2732,3,test -2549,3,test -3849,1,test -3453,1,test -593,2,test -3807,4,test -4019,3,test -939,1,test -543,1,test -2628,3,test -2409,1,test -3624,4,test -3362,4,test -976,4,test -1272,2,test -1485,2,test -3442,4,test -1140,4,test -3950,2,test -1352,3,test -4001,4,test -2431,2,test -1739,3,test -1648,1,test -2997,4,test -694,2,test -2906,2,test -1952,3,test -1649,2,test -2298,2,test -2814,4,test -2081,4,test -645,2,test -2427,3,test -2857,2,test -1769,3,test -595,1,test -378,3,test -2115,2,test -3852,1,test -641,4,test -1982,3,test -1932,2,test -463,3,test -3324,3,test -1933,3,test -1537,3,test -3453,4,test -1191,3,test -3537,3,test -1234,1,test -1058,4,test -359,3,test -3437,1,test -2745,2,test -3395,4,test -918,2,test -3650,1,test -1093,3,test -2696,2,test -2393,1,test -2479,4,test -2217,4,test -1955,4,test -826,4,test -3221,3,test -1651,1,test -2775,2,test -1518,2,test -523,2,test -2597,1,test -3213,4,test -1335,2,test -3509,2,test -1252,4,test -2077,1,test -1681,1,test -686,1,test -2727,3,test -3934,2,test -1336,3,test -2939,2,test -382,4,test -2069,2,test -3455,3,test -3193,3,test -595,4,test -2840,1,test -3322,4,test -1669,4,test -192,1,test -362,3,test -3053,1,test -2495,2,test -1104,2,test -446,2,test -1054,1,test -575,3,test -4049,1,test -2524,1,test -1437,4,test -2482,4,test -1783,3,test -2828,3,test -3437,4,test -3952,4,test -3649,3,test -1996,3,test -2130,3,test -2779,3,test -2991,2,test -1297,1,test -639,1,test -943,3,test -3720,4,test -2463,4,test -2597,4,test -3071,3,test -1206,4,test -1552,3,test -423,3,test -3155,2,test -3671,4,test -2414,4,test -3022,3,test -1848,1,test -3459,4,test -3368,2,test -1977,2,test -324,2,test -3014,4,test -408,1,test -3622,3,test -2527,2,test -366,4,test -537,2,test -3093,4,test -1482,1,test -3918,1,test -1745,2,test -1612,3,test -825,1,test -84,3,test -2649,4,test -347,4,test -3815,2,test -559,3,test -2995,3,test -905,2,test -1817,4,test -3766,2,test -593,1,test -3674,4,test -639,4,test -3929,1,test -1797,2,test -3401,2,test -3442,3,test -1140,3,test -3139,2,test -3747,1,test -1352,2,test -3268,3,test -4001,3,test -2052,4,test -1656,4,test -96,3,test -2906,1,test -1482,4,test -1649,1,test -1566,3,test -392,1,test -2081,3,test -216,4,test -3777,1,test -2427,2,test -125,2,test -2857,1,test -3036,3,test -1170,2,test -1600,1,test -825,4,test -641,3,test -1383,2,test -463,2,test -1467,1,test -3324,2,test -1933,2,test -3849,3,test -3453,3,test -2499,4,test -593,4,test -3537,2,test -939,3,test -543,3,test -1151,2,test -1759,1,test -2409,3,test -4012,2,test -918,1,test -1272,4,test -3221,2,test -573,2,test -1485,4,test -523,1,test -481,4,test -2043,2,test -3172,2,test -3950,4,test -2431,4,test -2127,1,test -1648,3,test -1252,3,test -694,4,test -3123,2,test -2727,2,test -2906,4,test -1336,2,test -2298,4,test -645,4,test -1811,2,test -2857,4,test -595,3,test -2115,4,test -3852,3,test -3365,1,test -1932,4,test -3232,2,test -2495,1,test -1500,1,test -1104,1,test -3578,1,test -1233,2,test -2970,1,test -1105,2,test -1317,1,test -1234,3,test -3966,2,test -2138,1,test -3183,1,test -922,2,test -3437,3,test -2745,4,test -1354,4,test -3649,2,test -1397,2,test -2130,2,test -3000,1,test -918,4,test -3650,3,test -2476,1,test -1347,1,test -2696,4,test -2393,3,test -1651,3,test -1086,2,test -2775,4,test -1518,4,test -2597,3,test -3071,2,test -1206,3,test -3983,4,test -1511,1,test -1552,2,test -423,2,test -3155,1,test -1335,4,test -2160,1,test -3509,4,test -1681,3,test -3680,2,test -686,3,test -3022,2,test -3459,3,test -3934,4,test -2939,4,test -3764,1,test -3368,1,test -374,2,test -1977,1,test -2111,1,test -324,1,test -2069,4,test -3235,2,test -2840,3,test -537,1,test -671,1,test -192,3,test -1795,2,test -1929,2,test -1745,1,test -3053,3,test -1104,4,test -446,4,test -2008,2,test -1612,2,test -1054,3,test -3349,1,test -2354,1,test -1958,1,test -2524,3,test -347,3,test -1217,2,test -2995,2,test -905,1,test -1817,3,test -2559,2,test -3766,1,test -3167,1,test -2991,4,test -1297,3,test -639,3,test -1076,4,test -2808,4,test -1069,1,test -3634,2,test -2935,1,test -3155,4,test -3584,1,test -1848,3,test -3401,1,test -3139,1,test -324,4,test -887,1,test -3268,2,test -408,3,test -2011,2,test -2527,4,test -96,2,test -570,1,test -1482,3,test -3918,3,test -528,4,test -1962,2,test -1566,2,test -1745,4,test -3389,4,test -3036,2,test -3170,2,test -825,3,test -2387,1,test -2824,2,test -1383,1,test -2732,4,test -3815,4,test -3462,2,test -905,4,test -3849,2,test -593,3,test -3766,4,test -939,2,test -1151,1,test -2409,2,test -4012,1,test -3929,3,test -1797,4,test -573,1,test -1485,3,test -3401,4,test -3139,4,test -1528,1,test -2043,1,test -1352,4,test -2652,2,test -1648,2,test -3123,1,test -2865,2,test -2906,3,test -999,1,test -1649,3,test -2257,2,test -2298,3,test -392,3,test -3598,1,test -2207,1,test -2427,4,test -125,4,test -2857,3,test -1170,4,test -1600,3,test -3852,2,test -817,2,test -1982,4,test -1383,4,test -463,4,test -3232,1,test -634,2,test -3324,4,test -1933,4,test -1763,1,test -1105,1,test -3537,4,test -1234,2,test -3966,1,test -239,2,test -1151,4,test -4012,4,test -2838,2,test -56,2,test -1397,1,test -918,3,test -3650,2,test -4046,2,test -1093,4,test -2393,2,test -3001,1,test -7,2,test -3221,4,test -1086,1,test -573,4,test -1518,3,test -523,3,test -3172,4,test -2043,4,test -2127,3,test -2077,2,test -3680,1,test -2211,2,test -686,2,test -3123,4,test -1512,1,test -2727,4,test -1336,4,test -2939,3,test -1811,4,test -721,1,test -3844,1,test -192,2,test -3365,3,test -1196,1,test -1929,1,test -3053,2,test -3232,4,test -2495,3,test -1500,3,test -1104,3,test -2666,1,test -3578,3,test -2008,1,test -1054,2,test -1233,4,test -2970,3,test -1105,4,test -1317,3,test -4049,2,test -2221,1,test -3966,4,test -964,1,test -922,4,test -3649,4,test -1996,4,test -2130,4,test -3000,3,test -1826,1,test -2559,1,test -2779,4,test -2476,3,test -1347,3,test -1693,2,test -1297,2,test -1431,2,test -3684,2,test -3071,4,test -1594,1,test -3634,1,test -1332,1,test -1552,4,test -423,4,test -3155,3,test -2160,3,test -3680,4,test -3022,4,test -1848,2,test -3847,1,test -416,1,test -3368,3,test -374,4,test -1977,3,test -2111,3,test -324,3,test -3235,4,test -408,2,test -3622,4,test -2011,1,test -3927,2,test -537,3,test -671,3,test -1795,4,test -1962,1,test -967,1,test -1745,3,test -2008,4,test -1612,4,test -3170,1,test -3349,3,test -1180,1,test -1958,3,test -2824,1,test -651,2,test -3815,3,test -1217,4,test -559,4,test -2995,4,test -3462,1,test -905,3,test -2559,4,test -3725,2,test -3766,3,test -1993,1,test -2855,2,test -2072,1,test -207,2,test -1810,1,test -3929,2,test -1069,3,test -3584,3,test -1797,3,test -3401,3,test -3139,3,test -3048,1,test -2652,1,test -3268,4,test -1657,1,test -2011,4,test -96,4,test -570,3,test -2865,1,test -3261,1,test -3910,1,test -2257,1,test -1566,4,test -392,2,test -3777,2,test -125,3,test -3036,4,test -1170,3,test -3170,4,test -867,2,test -3599,1,test -1600,2,test -2824,4,test -817,1,test -1383,3,test -1080,2,test -2683,1,test -1467,2,test -634,1,test -3462,4,test -3849,4,test -939,4,test -543,4,test -239,1,test -1151,3,test -1759,2,test -2409,4,test -4012,3,test -2838,1,test -56,1,test -586,1,test -2268,1,test -4046,1,test -1794,1,test -7,1,test -573,3,test -354,1,test -3172,3,test -2043,3,test -2652,4,test -3081,1,test -2127,2,test -1648,4,test -2211,1,test -3123,3,test -1216,1,test -999,3,test -2474,2,test -2257,4,test -3598,3,test -2207,3,test -1811,3,test -3852,4,test -3365,2,test -1113,2,test -851,2,test -3232,3,test -634,4,test -1500,2,test -3578,2,test -1233,3,test -1763,3,test -2970,2,test -1105,3,test -1276,1,test -1317,2,test -1234,4,test -3966,3,test -2138,2,test -3183,2,test -922,3,test -2838,4,test -3267,1,test -56,4,test -1397,3,test -4088,1,test -3000,2,test -4046,4,test -3650,4,test -2476,2,test -1347,2,test -1044,1,test -2393,4,test -1693,1,test -3001,3,test -1431,1,test -7,4,test -436,1,test -1651,4,test -1086,3,test -1956,2,test -565,2,test -3684,1,test -1511,2,test -516,2,test -2160,2,test -2077,4,test -1681,4,test -3680,3,test -686,4,test -3764,2,test -374,3,test -2111,2,test -3235,3,test -3540,1,test -721,3,test -3927,1,test -2840,4,test -1067,2,test -671,2,test -3844,3,test -192,4,test -1795,3,test -1929,3,test -2537,2,test -3053,4,test -884,2,test -2883,1,test -2008,3,test -1054,4,test -3349,2,test -2354,2,test -1958,2,test -4049,4,test -2524,4,test -2221,3,test -651,1,test -1217,3,test -1260,1,test -1826,3,test -2559,3,test -3725,1,test -3167,2,test -1693,4,test -82,1,test -1297,4,test -2855,1,test -1431,4,test -3938,1,test -207,1,test -3118,2,test -1290,1,test -3330,1,test -1069,2,test -470,2,test -3684,4,test -1594,3,test -420,1,test -3634,3,test -1332,3,test -2935,2,test -3543,1,test -3584,2,test -1848,4,test -3847,3,test -416,3,test -887,2,test -408,4,test -2011,3,test -1920,1,test -3918,4,test -1962,3,test -55,1,test -967,3,test -2916,1,test -2654,1,test -3170,3,test -867,1,test -2387,2,test -2824,3,test -651,4,test -1080,1,test -3462,3,test -2855,4,test -115,1,test -3971,1,test -1810,3,test -3929,4,test -3314,1,test -1528,2,test -3747,4,test -3048,3,test -2652,3,test -1657,3,test -3394,2,test -2865,3,test -999,2,test -696,1,test -3910,3,test -2736,1,test -1649,4,test -2474,1,test -2257,3,test -392,4,test -1954,2,test -3598,2,test -3295,1,test -3777,4,test -2207,2,test -301,2,test -867,4,test -3599,3,test -1600,4,test -817,3,test -2683,3,test -1113,1,test -851,1,test -1467,4,test -634,3,test -2633,2,test -1763,2,test -69,1,test -239,3,test -1976,2,test -1759,4,test -4054,2,test -2838,3,test -56,3,test -2268,3,test -4046,3,test -1794,3,test -2960,1,test -3001,2,test -7,3,test -1956,1,test -565,1,test -523,4,test -2303,1,test -3081,3,test -2127,4,test -516,1,test -2036,2,test -2077,3,test -2211,3,test -1512,2,test -1216,3,test -721,2,test -1804,2,test -1067,1,test -3844,2,test -3365,4,test -1196,2,test -2537,1,test -851,4,test -2495,4,test -884,1,test -1500,4,test -2666,2,test -3578,4,test -2101,1,test -2970,4,test -1276,3,test -1317,4,test -4049,3,test -2221,2,test -2138,4,test -964,2,test -3183,4,test -1310,1,test -3267,3,test -3909,1,test -2914,1,test -3000,4,test -1826,2,test -1960,2,test -3563,1,test -2476,4,test -1261,1,test -1347,4,test -1044,3,test -2647,2,test -1693,3,test -1431,3,test -436,3,test -2731,1,test -782,2,test -1078,1,test -3118,1,test -565,4,test -470,1,test -3684,3,test -1553,1,test -1594,2,test -1332,2,test -1511,4,test -2160,4,test -683,1,test -3847,2,test -416,2,test -2415,1,test -3764,4,test -3368,4,test -1977,4,test -2111,4,test -2628,1,test -3927,3,test -537,4,test -671,4,test -3362,2,test -2537,4,test -967,2,test -884,4,test -3349,4,test -1442,2,test -2354,4,test -1180,2,test -1958,4,test -135,1,test -651,3,test -1739,1,test -1260,3,test -2863,2,test -2601,2,test -3725,3,test -3167,4,test -1993,2,test -2814,2,test -2855,3,test -3938,3,test -2072,2,test -207,3,test -1810,2,test -3118,4,test -378,1,test -1290,3,test -3330,3,test -1069,4,test -3414,2,test -420,3,test -2935,4,test -3543,3,test -3584,4,test -1537,1,test -1191,1,test -3747,3,test -3048,2,test -887,4,test -1657,2,test -3656,1,test -3394,1,test -3528,1,test -1920,3,test -3261,2,test -3395,2,test -3910,2,test -1742,2,test -55,3,test -1954,1,test -3777,3,test -697,1,test -301,1,test -2916,3,test -2654,3,test -1955,2,test -826,2,test -867,3,test -3599,2,test -2387,4,test -3637,1,test -1080,3,test -2683,2,test -1984,1,test -1467,3,test -2633,1,test -2197,1,test -3242,1,test -2980,1,test -1976,1,test -1759,3,test -4054,1,test -2585,2,test -1456,2,test -3193,1,test -3971,3,test -586,2,test -2268,2,test -1794,2,test -362,1,test -3314,3,test -3610,1,test -1528,4,test -354,2,test -3739,2,test -1437,2,test -3081,2,test -2036,1,test -1216,2,test -3952,2,test -3690,2,test -999,4,test -696,3,test -2736,3,test -2474,3,test -3598,4,test -3295,3,test -2207,4,test -301,4,test -122,1,test -1804,1,test -1938,1,test -943,1,test -3720,2,test -2067,2,test -1113,3,test -851,3,test -2633,4,test -1763,4,test -1276,2,test -1410,2,test -19,2,test -2751,1,test -2138,3,test -1976,4,test -3183,3,test -4054,4,test -103,1,test -3267,2,test -1397,4,test -4088,2,test -3093,2,test -1960,1,test -1044,2,test -2647,1,test -3001,4,test -436,2,test -1086,4,test -1956,3,test -782,1,test -565,3,test -1341,1,test -84,1,test -733,1,test -1511,3,test -516,3,test -2036,4,test -1512,4,test -3764,3,test -3807,1,test -3540,2,test -3674,2,test -721,4,test -3624,1,test -1804,4,test -1067,3,test -3066,2,test -3362,1,test -3844,4,test -976,1,test -1196,4,test -3491,2,test -1929,4,test -2537,3,test -884,3,test -2883,2,test -2666,4,test -1442,1,test -2354,3,test -1705,2,test -2221,4,test -3442,1,test -964,4,test -1310,3,test -1656,2,test -1260,2,test -2863,1,test -2997,1,test -2601,1,test -3909,3,test -1826,4,test -1960,4,test -3563,3,test -3167,3,test -1261,3,test -2647,4,test -82,2,test -2814,1,test -2081,1,test -216,2,test -2731,3,test -3938,2,test -1078,3,test -3118,3,test -1290,2,test -3330,2,test -470,3,test -641,1,test -3414,1,test -1594,4,test -420,2,test -3634,4,test -1332,4,test -2935,3,test -3543,2,test -683,3,test -3847,4,test -416,4,test -2415,3,test -3756,2,test -2499,2,test -887,3,test -1058,1,test -1920,2,test -3395,1,test -1742,1,test -1962,4,test -55,2,test -967,4,test -2479,1,test -2916,2,test -2217,1,test -2654,2,test -1955,1,test -826,1,test -1442,4,test -1180,4,test -2387,3,test -135,3,test -481,2,test -3213,1,test -2863,4,test -1252,1,test -2601,4,test -1993,4,test -382,1,test -115,2,test -2585,1,test -1456,1,test -2072,4,test -3971,2,test -1810,4,test -3322,1,test -66,2,test -1669,1,test -3414,4,test -3314,2,test -1528,3,test -3739,1,test -3048,4,test -1437,1,test -1657,4,test -3656,3,test -2482,1,test -3394,3,test -3528,3,test -3952,1,test -3261,4,test -1354,2,test -2865,4,test -3690,1,test -696,2,test -3910,4,test -2736,2,test -1742,4,test -1954,3,test -3295,2,test -697,3,test -301,3,test -3599,4,test -1692,2,test -817,4,test -3720,1,test -860,2,test -3637,3,test -2463,1,test -2067,1,test -2683,4,test -1984,3,test -1206,1,test -3983,2,test -2633,3,test -3671,1,test -3113,2,test -2414,1,test -2197,3,test -3459,1,test -69,2,test -3242,3,test -2980,3,test -1410,1,test -19,1,test -3192,2,test -239,4,test -1976,3,test -4054,3,test -2585,4,test -1456,4,test -3014,1,test -366,1,test -3143,2,test -586,4,test -2268,4,test -3093,1,test -1794,4,test -2960,2,test -3610,3,test -2911,2,test -354,4,test -3739,4,test -2303,2,test -3081,4,test -2649,1,test -347,1,test -2036,3,test -2211,4,test -1216,4,test -1512,3,test -3690,4,test -1817,1,test -3674,1,test -1076,2,test -122,3,test -1804,3,test -3066,1,test -1938,3,test -2808,2,test -1196,3,test -3491,1,test -2067,4,test -2666,3,test -2101,2,test -1276,4,test -1705,1,test -1410,4,test -19,4,test -2314,2,test -2751,3,test -964,3,test -103,3,test -1310,2,test -2052,1,test -1656,1,test -3267,4,test -3909,2,test -4088,4,test -2914,2,test -1960,3,test -3563,2,test -528,2,test -1261,2,test -1044,4,test -2647,3,test -216,1,test -3389,2,test -436,4,test -2731,2,test -782,3,test -1078,2,test -2519,2,test -1341,3,test -1553,2,test -3989,2,test -733,3,test -2732,2,test -683,2,test -2415,2,test -2549,2,test -3756,1,test -2499,1,test -3807,3,test -4019,2,test -2628,2,test -3540,4,test -3927,4,test -3624,3,test -3066,4,test -3362,3,test -976,3,test -3491,4,test -2883,4,test -1272,1,test -1442,3,test -1180,3,test -1485,1,test -1705,4,test -135,2,test -481,1,test -3950,1,test -2431,1,test -1739,2,test -1260,4,test -2863,3,test -2997,3,test -2601,3,test -694,1,test -3725,4,test -1993,3,test -2298,1,test -82,4,test -2814,3,test -645,1,test -3938,4,test -2072,3,test -207,4,test -1769,2,test -378,2,test -1290,4,test -3330,4,test -2115,1,test -66,1,test -3414,3,test -420,4,test -1982,2,test -3543,4,test -1932,1,test -1537,2,test -3756,4,test -1191,2,test -3656,2,test -1058,3,test -359,2,test -3528,2,test -1920,4,test -2745,1,test -3261,3,test -1354,1,test -3395,3,test -1742,3,test -55,4,test -1093,2,test -697,2,test -2696,1,test -2479,3,test -2916,4,test -2654,4,test -1955,3,test -826,3,test -1692,1,test -2775,1,test -1518,1,test -860,1,test -3637,2,test -1080,4,test -3213,3,test -1984,2,test -3983,1,test -1335,1,test -3509,1,test -3113,1,test -2197,2,test -3934,1,test -3242,2,test -2939,1,test -2980,2,test -382,3,test -3192,1,test -115,4,test -2069,1,test -2585,3,test -1456,3,test -3455,2,test -3193,2,test -3971,4,test -3143,1,test -586,3,test -3322,3,test -66,4,test -1669,3,test -362,2,test -3314,4,test -446,1,test -3610,2,test -575,2,test -2911,1,test -354,3,test -3739,3,test -1437,3,test -2482,3,test -1783,2,test -2828,2,test -3952,3,test -3690,3,test -696,4,test -2736,4,test -1996,2,test -2474,4,test -2779,2,test -3295,4,test -2991,1,test -1076,1,test -1692,4,test -122,2,test -1938,2,test -2808,1,test -943,2,test -3720,3,test -860,4,test -2463,3,test -2067,3,test -1113,4,test -3671,3,test -3113,4,test -2414,3,test -69,4,test -1410,3,test -19,3,test -2314,1,test -2751,2,test -3192,4,test -103,2,test -3014,3,test -3622,2,test -2527,1,test -366,3,test -3143,4,test -4088,3,test -3093,3,test -528,1,test -2960,4,test -3389,1,test -1956,4,test -2519,1,test -2911,4,test -1341,2,test -3989,1,test -84,2,test -2303,4,test -733,2,test -2732,1,test -516,4,test -2649,3,test -3815,1,test -559,2,test -2549,1,test -3807,2,test -4019,1,test -3540,3,test -3674,3,test -3624,2,test -1067,4,test -3066,3,test -976,2,test -3491,3,test -2883,3,test -2101,4,test -1797,1,test -1705,3,test -3442,2,test -2314,4,test -1140,2,test -1352,1,test -1310,4,test -4001,2,test -2052,3,test -1656,3,test -2997,2,test -3909,4,test -2914,4,test -3563,4,test -1952,1,test -1261,4,test -82,3,test -2081,2,test -216,3,test -2731,4,test -2427,1,test -125,1,test -1769,1,test -1078,4,test -1170,1,test -2519,4,test -470,4,test -641,2,test -1553,4,test -3989,4,test -1982,1,test -463,1,test -683,4,test -3324,1,test -1933,1,test -2415,4,test -2549,4,test -3756,3,test -3453,2,test -2499,3,test -3537,1,test -4019,4,test -543,2,test -2628,4,test -1058,2,test -359,1,test -1093,1,test -1272,3,test -2479,2,test -2217,2,test -3221,1,test -135,4,test -481,3,test -3172,1,test -3213,2,test -3950,3,test -2431,3,test -1739,4,test -1252,2,test -694,3,test -2727,1,test -1336,1,test -1952,4,test -382,2,test -115,3,test -645,3,test -1811,1,test -3455,1,test -1769,4,test -595,2,test -378,4,test -2115,3,test -3322,2,test -66,3,test -1669,2,test -1932,3,test -1537,4,test -1233,1,test -575,1,test -1191,4,test -3656,4,test -2482,2,test -3394,4,test -1783,1,test -359,4,test -3528,4,test -2828,1,test -922,1,test -3437,2,test -2745,3,test -1354,3,test -3649,1,test -1996,1,test -2130,1,test -1954,4,test -2779,1,test -697,4,test -2696,3,test -1651,2,test -1692,3,test -2775,3,test -860,3,test -3637,4,test -2463,2,test -2597,2,test -3071,1,test -1206,2,test -3983,3,test -1984,4,test -1552,1,test -423,1,test -1335,3,test -3671,2,test -3509,3,test -3113,3,test -1681,2,test -2414,2,test -2197,4,test -3459,2,test -3022,1,test -3934,3,test -69,3,test -3242,4,test -2980,4,test -374,1,test -3192,3,test -2069,3,test -3235,1,test -3455,4,test -3014,2,test -3193,4,test -3622,1,test -366,2,test -3143,3,test -2840,2,test -1795,1,test -2960,3,test -362,4,test -446,3,test -1612,1,test -3610,4,test -575,4,test -2911,3,test -2524,2,test -2303,3,test -1783,4,test -2649,2,test -347,2,test -2828,4,test -1217,1,test -559,1,test -2995,1,test -1817,2,test -2991,3,test -639,2,test -1076,3,test -122,4,test -1938,4,test -2808,3,test -943,4,test -2101,3,test -2314,3,test -2751,4,test -1140,1,test -103,4,test -3268,1,test -4001,1,test -2052,2,test -2527,3,test -96,1,test -2914,3,test -1482,2,test -3918,2,test -528,3,test -1566,1,test -3389,3,test -1695,2,calibrate -596,3,calibrate -1433,2,calibrate -2625,3,calibrate -624,3,calibrate -3150,4,calibrate -1988,4,calibrate -3591,3,calibrate -1737,4,calibrate -201,4,calibrate -3552,2,calibrate -273,1,calibrate -3446,2,calibrate -2336,3,calibrate -748,2,calibrate -2933,2,calibrate -1345,1,calibrate -3408,3,calibrate -2850,4,calibrate -2017,3,calibrate -1011,3,calibrate -603,1,calibrate -1941,4,calibrate -1264,3,calibrate -3397,2,calibrate -710,2,calibrate -3860,1,calibrate -1558,1,calibrate -4058,4,calibrate -907,3,calibrate -3191,1,calibrate -4069,4,calibrate -3119,3,calibrate -774,4,calibrate -75,3,calibrate -2500,3,calibrate -657,4,calibrate -2952,2,calibrate -3666,1,calibrate -209,3,calibrate -3131,4,calibrate -2671,1,calibrate -186,1,calibrate -858,3,calibrate -2869,4,calibrate -1299,2,calibrate -3332,3,calibrate -2233,4,calibrate -3070,3,calibrate -1238,4,calibrate -1667,1,calibrate -725,4,calibrate -2724,3,calibrate -2317,3,calibrate -2328,3,calibrate -1584,3,calibrate -3613,3,calibrate -2477,1,calibrate -2663,2,calibrate -76,3,calibrate -3731,4,calibrate -3346,4,calibrate -980,1,calibrate -49,4,calibrate -2014,1,calibrate -71,1,calibrate -2290,3,calibrate -2279,3,calibrate -3905,4,calibrate -888,3,calibrate -596,2,calibrate -637,3,calibrate -2625,2,calibrate -3810,4,calibrate -2837,1,calibrate -3715,1,calibrate -1644,4,calibrate -201,3,calibrate -3552,1,calibrate -1040,2,calibrate -2336,2,calibrate -748,1,calibrate -2933,1,calibrate -3408,2,calibrate -466,4,calibrate -2017,2,calibrate -3829,4,calibrate -1941,3,calibrate -1264,2,calibrate -3316,4,calibrate -710,1,calibrate -2825,4,calibrate -907,2,calibrate -2708,4,calibrate -3863,2,calibrate -3119,2,calibrate -177,4,calibrate -1758,3,calibrate -629,3,calibrate -774,3,calibrate -740,1,calibrate -75,2,calibrate -2500,2,calibrate -657,3,calibrate -2952,1,calibrate -1165,1,calibrate -858,2,calibrate -1613,2,calibrate -1299,1,calibrate -1385,4,calibrate -2536,4,calibrate -2199,1,calibrate -2233,3,calibrate -2210,1,calibrate -3574,2,calibrate -273,4,calibrate -3312,2,calibrate -725,3,calibrate -2317,2,calibrate -2328,2,calibrate -3613,2,calibrate -3658,1,calibrate -2663,1,calibrate -2016,1,calibrate -603,4,calibrate -4068,3,calibrate -3346,3,calibrate -4079,3,calibrate -2677,3,calibrate -2290,2,calibrate -2279,2,calibrate -3905,3,calibrate -3191,4,calibrate -3475,1,calibrate -888,2,calibrate -637,2,calibrate -2625,1,calibrate -375,2,calibrate -3779,3,calibrate -1644,3,calibrate -1142,3,calibrate -2297,1,calibrate -2734,2,calibrate -454,2,calibrate -1040,1,calibrate -2336,1,calibrate -3741,3,calibrate -747,4,calibrate -466,3,calibrate -3976,4,calibrate -496,4,calibrate -1941,2,calibrate -1264,1,calibrate -3316,3,calibrate -355,1,calibrate -71,4,calibrate -907,1,calibrate -960,4,calibrate -3714,3,calibrate -2825,3,calibrate -1400,1,calibrate -249,1,calibrate -2708,3,calibrate -3863,1,calibrate -177,3,calibrate -1758,2,calibrate -629,2,calibrate -1362,2,calibrate -3425,4,calibrate -2837,4,calibrate -1970,1,calibrate -1959,1,calibrate -553,3,calibrate -2882,3,calibrate -2190,4,calibrate -1005,2,calibrate -3715,4,calibrate -1613,1,calibrate -526,4,calibrate -2536,3,calibrate -1385,3,calibrate -3574,1,calibrate -2464,2,calibrate -2475,2,calibrate -3312,1,calibrate -2810,1,calibrate -2035,4,calibrate -4079,2,calibrate -4068,2,calibrate -2677,2,calibrate -1985,3,calibrate -3600,4,calibrate -2186,2,calibrate -3109,4,calibrate -637,1,calibrate -241,1,calibrate -375,1,calibrate -1590,4,calibrate -3779,2,calibrate -344,4,calibrate -1644,2,calibrate -283,3,calibrate -3049,4,calibrate -1165,4,calibrate -757,2,calibrate -1142,2,calibrate -2734,1,calibrate -454,1,calibrate -484,2,calibrate -1780,2,calibrate -3858,2,calibrate -1981,1,calibrate -830,1,calibrate -1312,4,calibrate -150,4,calibrate -161,4,calibrate -3741,2,calibrate -579,1,calibrate -2205,2,calibrate -747,3,calibrate -3976,3,calibrate -496,3,calibrate -731,4,calibrate -2016,4,calibrate -1776,4,calibrate -385,4,calibrate -2825,2,calibrate -960,3,calibrate -3714,2,calibrate -2604,3,calibrate -3475,4,calibrate -525,2,calibrate -2984,4,calibrate -1362,1,calibrate -3425,3,calibrate -553,2,calibrate -4063,3,calibrate -2190,3,calibrate -2220,4,calibrate -1005,1,calibrate -2882,2,calibrate -2923,3,calibrate -526,3,calibrate -2536,2,calibrate -1385,2,calibrate -1426,3,calibrate -913,3,calibrate -2475,1,calibrate -2464,1,calibrate -3679,4,calibrate -3573,4,calibrate -571,1,calibrate -1042,4,calibrate -4079,1,calibrate -4068,1,calibrate -2677,1,calibrate -1985,2,calibrate -3600,3,calibrate -3652,4,calibrate -2186,1,calibrate -1506,4,calibrate -355,4,calibrate -3109,3,calibrate -795,1,calibrate -1400,4,calibrate -1590,3,calibrate -3779,1,calibrate -837,3,calibrate -2003,1,calibrate -1072,4,calibrate -3049,3,calibrate -283,2,calibrate -757,1,calibrate -484,1,calibrate -1780,1,calibrate -1855,4,calibrate -3858,1,calibrate -3899,2,calibrate -1312,3,calibrate -161,3,calibrate -150,3,calibrate -3827,4,calibrate -2205,1,calibrate -3576,4,calibrate -496,2,calibrate -731,3,calibrate -2364,3,calibrate -906,4,calibrate -206,1,calibrate -385,3,calibrate -2604,2,calibrate -3382,4,calibrate -3265,4,calibrate -525,1,calibrate -2984,3,calibrate -1874,4,calibrate -734,4,calibrate -3425,2,calibrate -1623,4,calibrate -4063,2,calibrate -2923,2,calibrate -2220,3,calibrate -526,2,calibrate -1426,2,calibrate -913,2,calibrate -3679,3,calibrate -685,4,calibrate -1981,4,calibrate -830,4,calibrate -3573,3,calibrate -579,4,calibrate -3640,2,calibrate -1042,3,calibrate -328,4,calibrate -3412,4,calibrate -1695,1,calibrate -1433,1,calibrate -3944,4,calibrate -2804,4,calibrate -2060,4,calibrate -3652,3,calibrate -3933,4,calibrate -624,2,calibrate -1536,4,calibrate -3109,2,calibrate -3150,3,calibrate -1988,3,calibrate -3591,2,calibrate -1737,3,calibrate -3446,1,calibrate -837,2,calibrate -1072,3,calibrate -1258,4,calibrate -2850,3,calibrate -1855,3,calibrate -1011,2,calibrate -3899,1,calibrate -1683,4,calibrate -3827,3,calibrate -3397,1,calibrate -3576,3,calibrate -571,4,calibrate -4069,3,calibrate -2611,4,calibrate -2204,4,calibrate -4058,3,calibrate -2364,2,calibrate -2604,1,calibrate -209,2,calibrate -3382,3,calibrate -3131,3,calibrate -3265,3,calibrate -2869,3,calibrate -3332,2,calibrate -1874,3,calibrate -734,3,calibrate -3070,2,calibrate -1623,3,calibrate -1238,3,calibrate -4063,1,calibrate -2923,1,calibrate -2220,2,calibrate -2724,2,calibrate -2003,4,calibrate -1584,2,calibrate -1345,4,calibrate -76,2,calibrate -913,1,calibrate -3679,2,calibrate -3731,3,calibrate -685,3,calibrate -49,3,calibrate -3640,1,calibrate -3860,4,calibrate -3412,3,calibrate -1558,4,calibrate -596,1,calibrate -3810,3,calibrate -3933,3,calibrate -3944,3,calibrate -2804,3,calibrate -3652,2,calibrate -624,1,calibrate -1536,3,calibrate -3150,2,calibrate -1988,2,calibrate -3591,1,calibrate -3666,4,calibrate -186,4,calibrate -1737,2,calibrate -201,2,calibrate -2671,4,calibrate -1667,4,calibrate -3408,1,calibrate -1258,3,calibrate -2850,2,calibrate -2477,4,calibrate -2017,1,calibrate -1011,1,calibrate -3829,3,calibrate -1683,3,calibrate -980,4,calibrate -2014,4,calibrate -4058,2,calibrate -2611,3,calibrate -4069,2,calibrate -2204,3,calibrate -3119,1,calibrate -2364,1,calibrate -774,2,calibrate -75,1,calibrate -2500,1,calibrate -657,2,calibrate -209,1,calibrate -3382,2,calibrate -3131,2,calibrate -858,1,calibrate -2869,2,calibrate -3332,1,calibrate -2233,2,calibrate -3070,1,calibrate -3552,4,calibrate -1238,2,calibrate -273,3,calibrate -3446,4,calibrate -748,4,calibrate -2724,1,calibrate -2328,1,calibrate -1584,1,calibrate -725,2,calibrate -3613,1,calibrate -1345,3,calibrate -2317,1,calibrate -2933,4,calibrate -76,1,calibrate -3731,2,calibrate -3346,2,calibrate -603,3,calibrate -49,2,calibrate -3397,4,calibrate -710,4,calibrate -3860,3,calibrate -2290,1,calibrate -2279,1,calibrate -3905,2,calibrate -3191,3,calibrate -888,1,calibrate -3810,2,calibrate -3933,2,calibrate -2804,2,calibrate -3944,2,calibrate -740,4,calibrate -3666,3,calibrate -2952,4,calibrate -186,3,calibrate -201,1,calibrate -1299,4,calibrate -2199,4,calibrate -2210,4,calibrate -1667,3,calibrate -466,2,calibrate -3658,4,calibrate -2477,3,calibrate -2663,4,calibrate -3829,2,calibrate -1941,1,calibrate -980,3,calibrate -3316,2,calibrate -71,3,calibrate -4058,1,calibrate -4069,1,calibrate -2204,2,calibrate -2708,2,calibrate -596,4,calibrate -177,2,calibrate -2625,4,calibrate -1758,1,calibrate -629,1,calibrate -774,1,calibrate -2837,3,calibrate -3715,3,calibrate -657,1,calibrate -2233,1,calibrate -2297,4,calibrate -3552,3,calibrate -1238,1,calibrate -1040,4,calibrate -273,2,calibrate -2336,4,calibrate -748,3,calibrate -725,1,calibrate -2933,3,calibrate -603,2,calibrate -3731,1,calibrate -3346,1,calibrate -1264,4,calibrate -3905,1,calibrate -907,4,calibrate -3191,2,calibrate -249,4,calibrate -3810,1,calibrate -3863,4,calibrate -740,3,calibrate -344,3,calibrate -1970,4,calibrate -75,4,calibrate -1959,4,calibrate -1644,1,calibrate -186,2,calibrate -2952,3,calibrate -1165,3,calibrate -1142,1,calibrate -858,4,calibrate -1299,3,calibrate -1613,4,calibrate -2199,3,calibrate -2210,3,calibrate -3574,4,calibrate -1667,2,calibrate -3312,4,calibrate -3741,1,calibrate -2317,4,calibrate -2328,4,calibrate -747,2,calibrate -2810,4,calibrate -466,1,calibrate -3976,2,calibrate -3658,3,calibrate -2663,3,calibrate -3829,1,calibrate -2016,3,calibrate -1776,3,calibrate -3316,1,calibrate -71,2,calibrate -2825,1,calibrate -960,2,calibrate -3714,1,calibrate -2290,4,calibrate -2279,4,calibrate -2708,1,calibrate -3475,3,calibrate -888,4,calibrate -637,4,calibrate -241,4,calibrate -177,1,calibrate -375,4,calibrate -2837,2,calibrate -553,1,calibrate -3715,2,calibrate -2190,2,calibrate -2882,1,calibrate -2536,1,calibrate -1385,1,calibrate -2297,3,calibrate -2734,4,calibrate -454,4,calibrate -1040,3,calibrate -2035,2,calibrate -1985,1,calibrate -3600,2,calibrate -1506,3,calibrate -355,3,calibrate -1400,3,calibrate -249,3,calibrate -3863,3,calibrate -1590,2,calibrate -1758,4,calibrate -629,4,calibrate -1362,4,calibrate -740,2,calibrate -344,2,calibrate -1970,3,calibrate -1959,3,calibrate -1005,4,calibrate -283,1,calibrate -3049,2,calibrate -1613,3,calibrate -1165,2,calibrate -2210,2,calibrate -2199,2,calibrate -3574,3,calibrate -2464,4,calibrate -1312,2,calibrate -150,2,calibrate -3312,3,calibrate -161,2,calibrate -2475,4,calibrate -747,1,calibrate -2810,3,calibrate -3658,2,calibrate -3976,1,calibrate -496,1,calibrate -731,2,calibrate -2016,2,calibrate -906,3,calibrate -4079,4,calibrate -4068,4,calibrate -1776,2,calibrate -2677,4,calibrate -385,2,calibrate -960,1,calibrate -2186,4,calibrate -3475,2,calibrate -795,4,calibrate -241,3,calibrate -2984,2,calibrate -375,3,calibrate -3425,1,calibrate -3779,4,calibrate -2190,1,calibrate -526,1,calibrate -1426,1,calibrate -757,4,calibrate -1142,4,calibrate -2297,2,calibrate -454,3,calibrate -484,4,calibrate -2734,3,calibrate -1780,4,calibrate -3858,4,calibrate -1981,3,calibrate -830,3,calibrate -3573,2,calibrate -3741,4,calibrate -579,3,calibrate -2205,4,calibrate -1042,2,calibrate -328,3,calibrate -2035,1,calibrate -2060,3,calibrate -3600,1,calibrate -206,4,calibrate -1506,2,calibrate -355,2,calibrate -3109,1,calibrate -3714,4,calibrate -1400,2,calibrate -249,2,calibrate -1590,1,calibrate -525,4,calibrate -1362,3,calibrate -344,1,calibrate -1959,2,calibrate -1970,2,calibrate -837,1,calibrate -553,4,calibrate -2882,4,calibrate -1005,3,calibrate -1072,2,calibrate -3049,1,calibrate -1855,2,calibrate -2475,3,calibrate -1312,1,calibrate -150,1,calibrate -2464,3,calibrate -161,1,calibrate -3827,2,calibrate -3576,2,calibrate -2810,2,calibrate -571,3,calibrate -731,1,calibrate -1695,4,calibrate -906,2,calibrate -1776,1,calibrate -1433,4,calibrate -1985,4,calibrate -385,1,calibrate -2186,3,calibrate -795,3,calibrate -3265,2,calibrate -241,2,calibrate -2984,1,calibrate -1874,2,calibrate -734,2,calibrate -1623,2,calibrate -2220,1,calibrate -2003,3,calibrate -283,4,calibrate -757,3,calibrate -484,3,calibrate -1780,3,calibrate -3679,1,calibrate -685,2,calibrate -3858,3,calibrate -1981,2,calibrate -830,2,calibrate -3899,4,calibrate -3573,1,calibrate -579,2,calibrate -2205,3,calibrate -1042,1,calibrate -328,2,calibrate -3412,2,calibrate -1558,3,calibrate -2060,2,calibrate -206,3,calibrate -3652,1,calibrate -1506,1,calibrate -1536,2,calibrate -3150,1,calibrate -1988,1,calibrate -2604,4,calibrate -1737,1,calibrate -2671,3,calibrate -525,3,calibrate -4063,4,calibrate -2923,4,calibrate -1072,1,calibrate -1258,2,calibrate -2850,1,calibrate -1426,4,calibrate -1855,1,calibrate -913,4,calibrate -1683,2,calibrate -3827,1,calibrate -2014,3,calibrate -3576,1,calibrate -3640,4,calibrate -571,2,calibrate -2611,2,calibrate -1695,3,calibrate -906,1,calibrate -1433,3,calibrate -624,4,calibrate -3382,1,calibrate -795,2,calibrate -3131,1,calibrate -3591,4,calibrate -3265,1,calibrate -2869,1,calibrate -1874,1,calibrate -734,1,calibrate -1623,1,calibrate -3446,3,calibrate -837,4,calibrate -2003,2,calibrate -1345,2,calibrate -3408,4,calibrate -2017,4,calibrate -1011,4,calibrate -685,1,calibrate -3899,3,calibrate -49,1,calibrate -3397,3,calibrate -328,1,calibrate -3860,2,calibrate -3412,1,calibrate -1558,2,calibrate -710,3,calibrate -3119,4,calibrate -2364,4,calibrate -3933,1,calibrate -3944,1,calibrate -2804,1,calibrate -206,2,calibrate -2060,1,calibrate -1536,1,calibrate -2500,4,calibrate -3666,2,calibrate -209,4,calibrate -2671,2,calibrate -3332,4,calibrate -3070,4,calibrate -2724,4,calibrate -1584,4,calibrate -3613,4,calibrate -1258,1,calibrate -2477,2,calibrate -76,4,calibrate -1683,1,calibrate -980,2,calibrate -2014,2,calibrate -3640,3,calibrate -2611,1,calibrate -2204,1,calibrate diff --git a/datasets/split_hbr_y9-eir.csv b/datasets/split_hbr_y9-eir.csv deleted file mode 100644 index 49a4fd7..0000000 --- a/datasets/split_hbr_y9-eir.csv +++ /dev/null @@ -1,12875 +0,0 @@ -parameter_index,simulation_index,split -1128,4,train -2344,2,train -2478,2,train -1820,2,train -1999,4,train -1603,4,train -2295,2,train -1899,2,train -2033,2,train -1637,2,train -2508,2,train -2112,2,train -2945,3,train -2246,2,train -1850,2,train -2029,4,train -1767,4,train -2845,1,train -2325,2,train -2063,2,train -3058,1,train -64,2,train -3271,1,train -277,2,train -3009,1,train -3484,1,train -3088,1,train -3222,1,train -2826,1,train -3005,3,train -3046,4,train -2347,3,train -2784,4,train -2481,3,train -3301,1,train -307,2,train -348,3,train -744,3,train -2643,1,train -45,2,train -482,3,train -3039,1,train -3259,4,train -3655,4,train -2694,3,train -778,1,train -3514,1,train -3555,2,train -957,3,train -2856,1,train -299,3,train -2990,1,train -3076,4,train -2773,3,train -857,1,train -991,1,train -3768,2,train -3902,2,train -3506,2,train -512,3,train -3289,4,train -3027,4,train -2765,4,train -1070,1,train -3981,2,train -3585,2,train -1028,4,train -3282,1,train -766,4,train -3061,2,train -67,3,train -2844,4,train -3240,4,train -2978,4,train -625,1,train -1241,4,train -1375,4,train -979,4,train -3274,2,train -3670,2,train -676,3,train -1496,1,train -1275,2,train -1454,4,train -576,1,train -3353,2,train -3749,2,train -3790,3,train -796,4,train -3487,2,train -1051,1,train -1488,2,train -1185,1,train -3962,2,train -3566,2,train -4003,3,train -1009,4,train -706,3,train -1567,2,train -1701,2,train -1305,2,train -1484,4,train -606,1,train -1043,2,train -3820,3,train -3954,3,train -564,4,train -1914,2,train -1652,2,train -1256,2,train -4033,3,train -1435,4,train -3771,3,train -777,4,train -1731,2,train -1772,3,train -1032,1,train -1073,2,train -1944,2,train -1723,3,train -4018,1,train -1420,2,train -1203,4,train -2198,3,train -1802,3,train -1936,3,train -1103,2,train -2494,1,train -2015,3,train -2452,4,train -1712,2,train -1316,2,train -2149,3,train -1491,3,train -2311,1,train -2665,4,train -1966,3,train -2262,1,train -2699,2,train -2441,3,train -2878,4,train -2179,3,train -2616,4,train -2737,1,train -2912,2,train -2079,1,train -2609,1,train -2213,1,train -2695,4,train -3091,4,train -2829,4,train -2688,1,train -2292,1,train -131,3,train -2426,1,train -2030,1,train -2512,4,train -2646,4,train -2250,4,train -293,1,train -2639,1,train -2243,1,train -2680,2,train -3121,4,train -2201,4,train -244,1,train -3417,2,train -2759,2,train -202,4,train -2456,1,train -2893,2,train -2676,4,train -2280,4,train -719,1,train -457,1,train -61,1,train -591,1,train -3409,3,train -811,4,train -415,4,train -2710,2,train -2669,1,train -2493,4,train -3705,1,train -670,1,train -711,2,train -3488,3,train -12,1,train -232,4,train -621,1,train -662,2,train -3398,2,train -2740,2,train -142,3,train -183,4,train -741,2,train -3869,1,train -438,1,train -479,2,train -3256,3,train -4089,4,train -176,1,train -658,4,train -2953,2,train -396,4,train -3948,1,train -1350,2,train -3686,1,train -1088,2,train -692,2,train -3469,3,train -3865,3,train -389,1,train -3906,4,train -213,4,train -3765,1,train -1167,2,train -1208,3,train -468,1,train -509,2,train -3682,3,train -643,2,train -3420,3,train -3816,3,train -3554,3,train -560,4,train -1421,3,train -3716,1,train -1118,2,train -722,2,train -1159,3,train -1555,3,train -856,2,train -3633,3,train -4070,4,train -3454,1,train -3237,3,train -3936,4,train -1851,1,train -1768,3,train -935,2,train -539,2,train -3667,1,train -3846,3,train -3450,3,train -1668,1,train -1847,3,train -1451,3,train -3746,1,train -1189,3,train -1626,4,train -3704,4,train -3838,4,train -2143,1,train -1747,1,train -1881,1,train -1798,3,train -1839,4,train -3917,4,train -4051,4,train -2094,1,train -2135,2,train -1832,1,train -1436,1,train -1353,3,train -2045,1,train -2131,4,train -2265,4,train -1432,3,train -1869,4,train -2124,1,train -2561,2,train -1862,1,train -1466,1,train -2344,4,train -1820,4,train -2640,2,train -2378,2,train -2075,1,train -1679,1,train -2116,2,train -1813,1,train -1899,4,train -2295,4,train -2033,4,train -1637,4,train -2853,2,train -2591,2,train -2195,2,train -1892,1,train -2112,4,train -1850,4,train -27,1,train -2408,2,train -2845,3,train -2105,1,train -2146,2,train -2542,2,train -2325,4,train -1884,2,train -2063,4,train -106,1,train -147,2,train -2621,2,train -3058,3,train -64,4,train -2359,2,train -2097,2,train -3092,1,train -57,1,train -98,2,train -3271,3,train -277,4,train -2572,2,train -2176,2,train -2613,3,train -3009,3,train -3567,1,train -3305,1,train -311,2,train -3088,3,train -3222,3,train -2826,3,train -3780,1,train -3384,1,train -786,2,train -3518,1,train -87,1,train -128,2,train -2860,1,train -3301,3,train -307,4,train -2602,2,train -2643,3,train -3039,3,train -45,4,train -3080,4,train -3342,4,train -644,3,train -3335,1,train -341,2,train -778,3,train -3073,1,train -3555,4,train -2856,3,train -2990,3,train -1074,1,train -3851,2,train -857,3,train -3548,1,train -991,3,train -158,2,train -3372,4,train -3768,4,train -292,2,train -3506,4,train -4064,2,train -1070,3,train -3802,2,train -371,2,train -3103,1,train -3499,1,train -3585,4,train -3282,3,train -3981,4,train -3061,4,train -3881,2,train -842,1,train -3619,2,train -4015,2,train -625,3,train -3753,2,train -363,3,train -3140,4,train -3670,4,train -3274,4,train -1055,1,train -3832,2,train -1275,4,train -3570,2,train -576,3,train -3353,4,train -3749,4,train -3487,4,train -1571,2,train -872,1,train -4045,2,train -1051,3,train -1488,4,train -3783,2,train -393,3,train -3566,4,train -1481,1,train -1085,1,train -1567,4,train -3862,2,train -1701,4,train -823,1,train -1305,4,train -4037,3,train -606,3,train -1043,4,train -1560,1,train -1298,1,train -902,1,train -1735,2,train -1122,4,train -3813,2,train -1256,4,train -1814,2,train -1115,1,train -1249,1,train -1731,4,train -4026,2,train -4067,3,train -1032,3,train -1073,4,train -3805,3,train -2027,2,train -1765,2,train -1369,2,train -4018,3,train -1420,4,train -2240,2,train -1978,2,train -2019,3,train -1716,2,train -1103,4,train -2494,3,train -1399,2,train -1533,2,train -1316,4,train -2924,1,train -2528,1,train -2311,3,train -2049,3,train -1787,3,train -2607,1,train -3137,1,train -2741,1,train -2262,3,train -2699,4,train -2820,1,train -222,2,train -2954,1,train -1,3,train -2296,1,train -2737,3,train -2778,4,train -2912,4,train -2079,3,train -2213,3,train -3033,1,train -3208,2,train -2509,1,train -2688,3,train -2292,3,train -2426,3,train -2030,3,train -293,3,train -3025,2,train -3421,2,train -2722,1,train -2546,4,train -2243,3,train -2680,4,train -2801,1,train -3238,2,train -244,3,train -2539,1,train -2976,2,train -3417,4,train -2759,4,train -2456,3,train -2893,4,train -540,1,train -719,3,train -3451,2,train -3055,2,train -457,3,train -61,3,train -498,4,train -3189,2,train -2576,4,train -2710,4,train -753,1,train -491,1,train -3664,2,train -3705,3,train -670,3,train -711,4,train -2965,1,train -3006,2,train -12,3,train -2744,2,train -966,1,train -308,1,train -3481,2,train -662,4,train -2957,2,train -2740,4,train -917,1,train -521,1,train -958,2,train -655,1,train -741,4,train -3432,2,train -3473,3,train -438,3,train -479,4,train -3869,3,train -176,3,train -2953,4,train -338,1,train -3948,3,train -558,4,train -3686,3,train -1088,4,train -692,4,train -3383,2,train -1250,2,train -3982,1,train -947,1,train -551,1,train -988,2,train -3765,3,train -1167,4,train -3503,3,train -468,3,train -509,4,train -3241,3,train -643,4,train -1201,2,train -805,2,train -3716,3,train -722,4,train -3454,3,train -856,4,train -1676,2,train -1414,2,train -1018,2,train -1851,3,train -3750,1,train -1152,2,train -935,4,train -539,4,train -3667,3,train -1231,2,train -1668,3,train -3963,1,train -969,2,train -3746,3,train -3921,4,train -2143,3,train -1747,3,train -4042,1,train -1881,3,train -1182,2,train -1223,3,train -1915,1,train -2094,3,train -2135,4,train -1395,2,train -1436,3,train -1832,3,train -2390,1,train -2128,1,train -1732,1,train -2214,4,train -1253,3,train -2341,1,train -1945,1,train -2124,3,train -2561,4,train -1862,3,train -1466,3,train -1903,4,train -2420,1,train -2158,1,train -1762,1,train -2640,4,train -2378,4,train -1679,3,train -2116,4,train -2371,1,train -2412,2,train -2853,4,train -2591,4,train -2195,4,train -1892,3,train -110,1,train -2887,2,train -2491,2,train -2188,1,train -1792,1,train -2408,4,train -2542,4,train -2146,4,train -1884,4,train -189,1,train -323,1,train -106,3,train -147,4,train -2401,1,train -2442,2,train -2879,3,train -2621,4,train -2180,2,train -2359,4,train -2097,4,train -2917,2,train -2655,2,train -3092,3,train -98,4,train -2572,4,train -2176,4,train -3388,1,train -353,1,train -394,2,train -3567,3,train -3305,3,train -2909,3,train -311,4,train -2606,2,train -473,2,train -3601,1,train -170,1,train -607,2,train -3384,3,train -3780,3,train -3518,3,train -128,4,train -2819,2,train -2860,3,train -3814,1,train -820,2,train -861,3,train -3156,1,train -3335,3,train -341,4,train -3073,3,train -3893,1,train -4027,1,train -3631,1,train -1074,3,train -3851,4,train -771,2,train -3548,3,train -158,4,train -292,4,train -3448,1,train -3885,2,train -891,3,train -3186,1,train -3582,1,train -588,2,train -3802,4,train -4064,4,train -371,4,train -3103,3,train -667,2,train -3399,1,train -3795,1,train -3881,4,train -4015,4,train -842,3,train -3619,4,train -3753,4,train -3357,4,train -1138,1,train -3874,1,train -3915,2,train -921,3,train -3612,1,train -618,2,train -1055,3,train -3832,4,train -3570,4,train -1351,1,train -1571,4,train -3429,1,train -3866,2,train -872,3,train -4045,4,train -3783,4,train -1564,1,train -1085,3,train -689,3,train -3862,4,train -823,3,train -2039,1,train -1777,1,train -1381,1,train -1560,3,train -1119,1,train -3896,2,train -1298,3,train -902,3,train -1735,4,train -4030,2,train -3813,4,train -1856,1,train -2031,2,train -1198,1,train -1814,4,train -1418,4,train -1115,3,train -1249,3,train -4026,4,train -2110,2,train -1807,1,train -1411,1,train -1545,1,train -2027,4,train -3926,2,train -1765,4,train -1369,4,train -1107,4,train -1927,2,train -1624,1,train -1978,4,train -1716,4,train -1878,2,train -2315,3,train -1575,1,train -1616,2,train -1399,4,train -1533,4,train -2924,3,train -2528,3,train -2225,2,train -1829,2,train -2607,3,train -2304,2,train -2345,3,train -2741,3,train -2042,2,train -1646,2,train -3037,1,train -43,2,train -2820,3,train -2954,3,train -2255,2,train -2296,3,train -3250,1,train -2854,1,train -3033,3,train -2592,1,train -3208,4,train -2375,3,train -2509,3,train -73,2,train -2805,1,train -3201,1,train -3421,4,train -3025,4,train -2722,3,train -286,2,train -327,3,train -2622,1,train -24,2,train -2801,3,train -3238,4,train -2539,3,train -2976,4,train -3493,1,train -3097,1,train -3534,2,train -540,3,train -2835,1,train -237,2,train -2969,1,train -2573,1,train -3055,4,train -3451,4,train -3189,4,train -836,1,train -970,1,train -574,1,train -753,3,train -357,3,train -54,2,train -2786,1,train -95,3,train -491,3,train -3006,4,train -2744,4,train -1049,1,train -1183,1,train -787,1,train -3960,2,train -966,3,train -3302,2,train -308,3,train -2999,1,train -3481,4,train -2823,4,train -2957,4,train -866,1,train -604,1,train -3911,2,train -3515,2,train -521,3,train -958,4,train -3253,2,train -655,3,train -3432,4,train -1475,1,train -1213,1,train -1254,2,train -3990,2,train -4031,3,train -951,1,train -555,1,train -3728,2,train -3769,3,train -338,3,train -775,4,train -3466,2,train -1333,2,train -1030,1,train -1250,4,train -3545,2,train -3982,3,train -551,3,train -988,4,train -1546,2,train -1680,2,train -1284,2,train -585,1,train -3758,2,train -1201,4,train -805,4,train -1893,2,train -1497,2,train -798,1,train -1235,2,train -1414,4,train -1018,4,train -3750,3,train -1152,4,train -1972,2,train -1710,2,train -1314,2,train -1231,4,train -3963,3,train -969,4,train -1661,2,train -1265,2,train -4042,3,train -1182,4,train -2260,1,train -4076,1,train -1478,2,train -1915,3,train -2390,3,train -1691,2,train -1295,2,train -1732,3,train -2128,3,train -2686,1,train -2424,1,train -1945,3,train -2503,1,train -2637,1,train -2420,3,train -1721,2,train -1762,3,train -2158,3,train -2716,1,train -2454,1,train -2192,1,train -2412,4,train -1579,3,train -193,1,train -2929,1,train -2667,1,train -2271,1,train -110,3,train -2405,1,train -2491,4,train -2887,4,train -2188,3,train -1792,3,train -2229,4,train -1967,4,train -406,1,train -10,1,train -2787,2,train -189,3,train -2484,1,train -2088,1,train -3317,2,train -2222,1,train -2442,4,train -2180,4,train -223,1,train -3396,2,train -2697,1,train -2738,2,train -181,4,train -2917,4,train -2655,4,train -2259,4,train -40,1,train -174,1,train -2951,2,train -3388,3,train -394,4,train -2689,2,train -3085,2,train -2606,4,train -649,1,train -253,1,train -690,2,train -3467,3,train -473,4,train -2768,2,train -3164,2,train -170,3,train -607,4,train -2902,2,train -3205,3,train -3601,3,train -70,1,train -204,1,train -2981,2,train -3377,2,train -820,4,train -3814,3,train -3156,3,train -679,1,train -720,2,train -3893,3,train -417,1,train -458,2,train -3631,3,train -2932,2,train -1329,2,train -3665,1,train -3448,3,train -3885,4,train -368,1,train -3145,2,train -3186,3,train -3582,3,train -588,4,train -3744,1,train -1146,2,train -750,2,train -1187,3,train -3964,4,train -667,4,train -3399,3,train -3957,1,train -4091,1,train -1138,3,train -3874,3,train -3915,4,train -3612,3,train -3653,4,train -618,4,train -3512,1,train -1351,3,train -3646,1,train -3429,3,train -3866,4,train -1647,1,train -1127,2,train -1564,3,train -865,2,train -1726,1,train -1860,1,train -1464,1,train -1381,3,train -1119,3,train -3896,4,train -4030,4,train -2073,1,train -1677,1,train -1856,3,train -1415,1,train -2031,4,train -1198,3,train -936,3,train -2152,1,train -1890,1,train -1494,1,train -1628,1,train -2110,4,train -1411,3,train -1545,3,train -3926,4,train -2144,2,train -1841,1,train -1445,1,train -1927,4,train -1624,3,train -1665,4,train -2753,2,train -1658,1,train -1878,4,train -1575,3,train -1616,4,train -2012,4,train -2133,1,train -2308,2,train -1912,2,train -1829,4,train -6,1,train -2125,2,train -2304,4,train -2042,4,train -1646,4,train -85,1,train -126,2,train -3037,3,train -2641,3,train -43,4,train -1942,2,train -339,2,train -77,2,train -2854,3,train -3250,3,train -2155,2,train -2592,3,train -2289,2,train -3284,1,train -290,2,train -73,4,train -2805,3,train -3201,3,train -3363,1,train -765,2,train -369,2,train -3497,1,train -503,2,train -3321,4,train -286,4,train -2581,2,train -2622,3,train -3059,4,train -24,4,train -3180,1,train -582,2,train -623,3,train -320,2,train -3097,3,train -3534,4,train -2835,3,train -2969,3,train -2573,3,train -3789,1,train -836,3,train -3527,1,train -533,2,train -137,2,train -574,3,train -970,3,train -54,4,train -2786,3,train -1266,1,train -1049,3,train -653,3,train -2948,1,train -1183,3,train -3478,1,train -350,2,train -787,3,train -3344,1,train -88,2,train -3302,4,train -3960,4,train -2999,3,train -866,3,train -3161,1,train -3994,2,train -563,2,train -604,3,train -1041,4,train -3336,2,train -342,3,train -3515,4,train -3253,4,train -1296,1,train -900,1,train -4073,2,train -3990,4,train -1254,4,train -3549,2,train -951,3,train -555,3,train -3728,4,train -3466,4,train -1333,4,train -3628,2,train -4024,2,train -1030,3,train -3366,2,train -3545,4,train -1326,1,train -930,1,train -1460,1,train -1546,4,train -3841,2,train -1064,1,train -1680,4,train -1284,4,train -3579,2,train -3975,2,train -585,3,train -3758,4,train -1539,1,train -1580,2,train -1497,4,train -1101,4,train -3792,2,train -798,3,train -1235,4,train -2189,2,train -1793,2,train -1490,1,train -1094,1,train -1228,1,train -1314,4,train -1710,4,train -4005,2,train -1610,2,train -1307,1,train -911,1,train -1348,2,train -1744,2,train -1265,4,train -869,4,train -2219,2,train -1823,2,train -2260,3,train -1957,2,train -1561,2,train -4076,3,train -1478,4,train -1774,2,train -1378,2,train -1295,4,train -2507,1,train -2686,3,train -1987,2,train -2424,3,train -2720,1,train -2503,3,train -2107,3,train -2637,3,train -2799,1,train -2716,3,train -2275,1,train -2757,4,train -2454,3,train -2192,3,train -1796,3,train -3012,1,train -193,3,train -2488,1,train -2667,3,train -2271,3,train -2405,3,train -3225,1,train -3400,2,train -2567,1,train -3004,2,train -406,3,train -10,3,train -2305,1,train -2787,4,train -2701,1,train -2484,3,train -2088,3,train -2525,4,train -2222,3,train -89,3,train -2780,1,train -223,3,train -2518,1,train -3396,4,train -2738,4,train -519,1,train -3296,2,train -257,1,train -2993,1,train -3034,2,train -3430,2,train -40,3,train -3168,2,train -2772,2,train -174,3,train -2951,4,train -2689,4,train -732,1,train -3247,2,train -253,3,train -690,4,train -2548,1,train -2985,2,train -3164,4,train -2768,4,train -2902,4,train -549,1,train -287,1,train -3064,2,train -3460,2,train -70,3,train -507,4,train -2761,1,train -204,3,train -2981,4,train -896,1,train -500,1,train -238,1,train -720,4,train -3411,2,train -417,3,train -458,4,train -2932,4,train -975,1,train -1016,2,train -713,1,train -1150,2,train -451,1,train -3665,3,train -3961,1,train -926,1,train -1363,2,train -3744,3,train -664,1,train -750,4,train -1146,4,train -3441,2,train -4040,1,train -1046,2,train -784,2,train -3957,3,train -4091,3,train -1655,2,train -1259,2,train -997,2,train -1434,3,train -3729,1,train -1131,2,train -735,2,train -3512,3,train -3949,4,train -3646,3,train -1210,2,train -814,2,train -1647,3,train -1344,2,train -3942,1,train -865,4,train -1943,1,train -1726,3,train -4021,1,train -1860,3,train -1027,2,train -1464,3,train -3759,1,train -1161,2,train -1202,3,train -2156,1,train -2073,3,train -1677,3,train -1415,3,train -2152,3,train -1711,1,train -1890,3,train -1494,3,train -1931,4,train -1628,3,train -1232,3,train -4009,4,train -2448,1,train -2144,4,train -1841,3,train -1445,3,train -2399,1,train -2440,2,train -1741,1,train -2223,4,train -1961,4,train -1658,3,train -2653,2,train -2391,2,train -2308,4,train -1912,4,train -2866,2,train -2470,2,train -2167,1,train -1771,1,train -1991,4,train -2125,4,train -168,1,train -302,1,train -3079,2,train -126,4,train -2380,1,train -2421,2,train -2159,2,train -1942,4,train -381,1,train -339,4,train -2634,2,train -2238,2,train -77,4,train -2372,2,train -2155,4,train -2289,4,train -198,1,train -332,1,train -373,2,train -2847,2,train -2888,3,train -3284,3,train -290,4,train -452,2,train -3580,1,train -149,1,train -3363,3,train -369,4,train -2664,2,train -3497,3,train -3659,1,train -665,2,train -3793,1,train -799,2,train -3180,3,train -582,4,train -141,2,train -2877,2,train -2918,3,train -320,4,train -2656,3,train -3872,1,train -3476,1,train -878,2,train -4006,1,train -616,2,train -220,2,train -3348,1,train -3527,3,train -137,4,train -4085,1,train -1091,2,train -829,2,train -1266,3,train -3561,1,train -130,1,train -171,2,train -567,2,train -2948,3,train -350,4,train -3344,3,train -3385,4,train -88,4,train -4036,1,train -646,2,train -3378,1,train -3774,1,train -780,2,train -3994,4,train -3161,3,train -3336,4,train -1379,1,train -3894,2,train -859,2,train -900,3,train -1296,3,train -3195,1,train -597,2,train -638,3,train -3415,4,train -3811,4,train -4073,4,train -3549,4,train -1592,1,train -3804,1,train -3845,2,train -4024,4,train -3628,4,train -3366,4,train -1805,1,train -1409,1,train -1543,1,train -1326,3,train -930,3,train -1367,4,train -627,2,train -668,3,train -1064,3,train -3841,4,train -3975,4,train -3579,4,train -1360,1,train -1539,3,train -1580,4,train -3792,4,train -1835,1,train -1876,2,train -1793,4,train -915,1,train -1094,3,train -698,3,train -4005,4,train -2089,2,train -1786,1,train -1390,1,train -1827,2,train -1524,1,train -1128,1,train -1610,4,train -1307,3,train -911,3,train -1348,4,train -1744,4,train -2302,2,train -1906,2,train -1603,1,train -1207,1,train -2040,2,train -1823,4,train -1957,4,train -1561,4,train -2515,2,train -2119,2,train -2253,2,train -2294,3,train -1774,4,train -1378,4,train -2332,2,train -2070,2,train -2507,3,train -2803,1,train -2720,3,train -1887,2,train -2324,3,train -2021,2,train -1625,2,train -22,2,train -2799,3,train -2100,2,train -1838,2,train -2275,3,train -101,2,train -235,2,train -3012,3,train -2313,2,train -2051,2,train -2092,3,train -2488,3,train -314,2,train -3046,1,train -2784,1,train -3400,4,train -2567,3,train -3004,4,train -2264,2,train -2305,3,train -2701,3,train -3259,1,train -306,3,train -3,2,train -2780,3,train -2518,3,train -2122,3,train -3076,1,train -3513,2,train -519,3,train -3296,4,train -257,3,train -2552,1,train -2993,3,train -3034,4,train -3168,4,train -2772,4,train -3430,4,train -3289,1,train -3726,2,train -295,2,train -732,3,train -3027,1,train -74,3,train -2765,1,train -2851,4,train -3247,4,train -2548,3,train -2985,4,train -1028,1,train -766,1,train -3939,2,train -549,3,train -2844,1,train -3240,1,train -3677,2,train -287,3,train -2978,1,train -3064,4,train -3460,4,train -2761,3,train -1241,1,train -845,1,train -979,1,train -803,4,train -3494,2,train -500,3,train -104,3,train -238,3,train -3411,4,train -796,1,train -975,3,train -534,1,train -1016,4,train -3311,2,train -713,3,train -1150,4,train -3445,2,train -3707,2,train -451,3,train -3748,3,train -1009,1,train -1446,2,train -833,4,train -3961,3,train -1363,4,train -3262,2,train -3441,4,train -1659,2,train -4040,3,train -564,1,train -1046,4,train -3778,3,train -784,4,train -522,4,train -1738,2,train -1342,2,train -1476,2,train -777,1,train -1259,4,train -997,4,train -3688,2,train -3729,3,train -1131,4,train -735,4,train -1951,2,train -1689,2,train -1293,2,train -4025,1,train -1427,2,train -1210,4,train -814,4,train -3942,3,train -1943,3,train -1640,2,train -1244,2,train -4021,3,train -1027,4,train -3759,3,train -1161,4,train -1719,2,train -1323,2,train -2156,3,train -4055,1,train -1457,2,train -1061,2,train -2452,1,train -1670,2,train -1274,2,train -1711,3,train -2665,1,train -2269,1,train -2448,3,train -2007,1,train -1790,3,train -1487,2,train -2878,1,train -2616,1,train -2399,3,train -2440,4,train -1700,2,train -1741,3,train -2695,1,train -2299,1,train -2653,4,train -2391,4,train -2512,1,train -2646,1,train -2250,1,train -2687,2,train -2866,4,train -2470,4,train -2167,3,train -1771,3,train -2766,2,train -168,3,train -2900,2,train -2201,1,train -2287,4,train -2421,4,train -2159,4,train -202,1,train -381,3,train -2676,1,train -2280,1,train -2717,2,train -2455,2,train -2634,4,train -2238,4,train -2372,4,train -281,1,train -415,1,train -198,3,train -2493,1,train -2930,2,train -3326,2,train -373,4,train -2668,2,train -2847,4,train -232,1,train -669,2,train -3405,2,train -452,4,train -3580,3,train -149,3,train -2485,2,train -2664,4,train -882,2,train -3659,3,train -183,1,train -269,4,train -665,4,train -799,4,train -3793,3,train -2698,2,train -141,4,train -2877,4,train -4089,1,train -3693,1,train -658,1,train -699,2,train -1095,2,train -3872,3,train -396,1,train -437,2,train -878,4,train -3173,2,train -616,4,train -220,4,train -3348,3,train -3476,3,train -3906,1,train -912,2,train -4085,3,train -213,1,train -650,2,train -829,4,train -3124,2,train -3561,3,train -567,4,train -171,4,train -3723,1,train -729,2,train -3461,1,train -863,2,train -467,2,train -3244,3,train -646,4,train -3378,3,train -3936,1,train -942,2,train -1379,3,train -4070,1,train -3894,4,train -3195,3,train -3632,4,train -597,4,train -1592,3,train -893,2,train -497,2,train -3845,4,train -1626,1,train -1805,3,train -1409,3,train -3704,1,train -1543,3,train -3838,1,train -844,2,train -3662,4,train -627,4,train -1839,1,train -1443,1,train -1226,3,train -3917,1,train -923,2,train -1360,3,train -1835,3,train -1876,4,train -915,3,train -2131,1,train -1869,1,train -1473,1,train -2089,4,train -1390,3,train -1827,4,train -1524,3,train -1128,3,train -2344,1,train -1820,1,train -1424,1,train -1906,4,train -2302,4,train -1603,3,train -1207,3,train -2040,4,train -2202,2,train -1899,1,train -1503,1,train -1637,1,train -2119,4,train -2253,4,train -2112,1,train -2153,2,train -2590,3,train -1850,1,train -2332,4,train -2070,4,train -1412,4,train -2803,3,train -2104,2,train -1887,4,train -2021,4,train -1625,4,train -64,1,train -22,4,train -1921,2,train -2100,4,train -1838,4,train -101,4,train -235,4,train -2134,2,train -2313,4,train -2051,4,train -3129,1,train -2867,1,train -314,4,train -3046,3,train -2347,2,train -2784,3,train -3342,1,train -348,2,train -3080,1,train -482,2,train -86,2,train -3259,3,train -3,4,train -3555,1,train -2897,1,train -299,2,train -3076,3,train -3513,4,train -2552,3,train -3768,1,train -3372,1,train -3506,1,train -512,2,train -3726,4,train -2848,1,train -3289,3,train -295,4,train -3027,3,train -3068,4,train -2765,3,train -849,1,train -3585,1,train -1028,3,train -632,3,train -2927,1,train -766,3,train -3061,1,train -3939,4,train -67,2,train -2844,3,train -3677,4,train -2978,3,train -3839,2,train -1241,3,train -845,3,train -3140,1,train -3577,2,train -979,3,train -3274,1,train -3494,4,train -3098,4,train -2836,4,train -1275,1,train -3353,1,train -3790,2,train -796,3,train -534,3,train -3311,4,train -3707,4,train -3445,4,train -1488,1,train -4003,2,train -3566,1,train -3607,2,train -1009,3,train -1446,4,train -4044,3,train -3128,4,train -3262,4,train -1567,1,train -1305,1,train -909,1,train -1043,1,train -3820,2,train -1659,4,train -3954,2,train -430,3,train -3558,2,train -564,3,train -1122,1,train -1559,2,train -1256,1,train -1342,4,train -1738,4,train -4033,2,train -1476,4,train -3771,2,train -4074,3,train -777,3,train -1638,2,train -1772,2,train -1073,1,train -1689,4,train -1293,4,train -4025,3,train -1427,4,train -1723,2,train -890,1,train -1327,2,train -1110,4,train -1244,4,train -2198,2,train -1802,2,train -1936,2,train -1103,1,train -1719,4,train -1323,4,train -4055,3,train -1457,4,train -1061,4,train -2015,2,train -2056,3,train -2452,3,train -1316,1,train -1357,2,train -1491,2,train -1274,4,train -2665,3,train -2269,3,train -1966,2,train -1570,2,train -2007,3,train -1487,4,train -2565,1,train -2699,1,train -1387,2,train -2778,1,train -2912,1,train -2516,1,train -2695,3,train -2299,3,train -1775,3,train -2595,1,train -2512,3,train -2250,3,train -2687,4,train -2546,1,train -2983,2,train -2680,1,train -2284,1,train -2766,4,train -2900,4,train -2201,3,train -285,1,train -68,3,train -2363,1,train -2759,1,train -202,3,train -2893,1,train -3196,2,train -2280,3,train -2717,4,train -2455,4,train -498,1,train -281,3,train -2576,1,train -3013,2,train -415,3,train -2710,1,train -3409,2,train -2493,3,train -2534,4,train -2930,4,train -2668,4,train -577,1,train -711,1,train -3488,2,train -3226,2,train -232,3,train -669,4,train -2485,4,train -662,1,train -3043,2,train -3480,3,train -882,4,train -2740,1,train -2781,2,train -183,3,train -2698,4,train -741,1,train -479,1,train -3256,2,train -3693,3,train -1095,4,train -699,4,train -4089,3,train -396,3,train -437,4,train -3173,4,train -558,1,train -995,2,train -3772,3,train -692,1,train -296,1,train -3510,3,train -3469,2,train -912,4,train -34,1,train -2811,2,train -3906,3,train -213,3,train -650,4,train -1208,2,train -3940,1,train -509,1,train -946,2,train -3682,2,train -643,1,train -729,4,train -3420,2,train -3461,3,train -863,4,train -467,4,train -3723,3,train -1421,2,train -722,1,train -326,1,train -1159,2,train -3936,3,train -942,4,train -3237,2,train -4070,3,train -284,4,train -3970,1,train -539,1,train -714,2,train -3450,2,train -3928,4,train -893,4,train -497,4,train -1451,2,train -1189,2,train -793,2,train -1626,3,train -3921,1,train -3704,3,train -3838,3,train -844,4,train -1922,1,train -4000,1,train -1839,3,train -1006,2,train -1443,3,train -3738,1,train -3917,3,train -3958,4,train -923,4,train -2135,1,train -1522,3,train -3817,1,train -2214,1,train -2131,3,train -1690,1,train -1432,2,train -1473,3,train -1869,3,train -1910,4,train -1211,3,train -3988,4,train -1903,1,train -1820,3,train -1424,3,train -2640,1,train -2378,1,train -2419,2,train -2116,1,train -2202,4,train -1899,3,train -1503,3,train -1940,4,train -1637,3,train -2195,1,train -2153,4,train -1850,3,train -2711,2,train -2408,1,train -2449,2,train -2845,2,train -2146,1,train -1884,1,train -2104,4,train -147,1,train -3058,2,train -2359,1,train -2400,2,train -2097,1,train -2183,4,train -1921,4,train -98,1,train -2176,1,train -2613,2,train -2134,4,train -311,1,train -3088,2,train -3129,3,train -2826,2,train -2430,2,train -2867,3,train -2347,4,train -431,2,train -128,1,train -169,2,train -3342,3,train -348,4,train -2643,2,train -2247,2,train -3080,3,train -86,4,train -644,2,train -3376,1,train -778,2,train -3555,3,train -2856,2,train -2460,2,train -2897,3,train -299,4,train -2635,3,train -3851,1,train -857,2,train -158,1,train -3372,3,train -3506,3,train -2848,3,train -4064,1,train -1070,2,train -3802,1,train -412,2,train -849,3,train -3585,3,train -3626,4,train -2927,3,train -3364,4,train -3061,3,train -67,4,train -3881,1,train -3619,1,train -625,2,train -3357,1,train -3753,1,train -3839,4,train -363,2,train -3140,3,train -3577,4,train -3274,3,train -3832,1,train -3436,1,train -1275,3,train -442,2,train -3174,1,train -3570,1,train -576,2,train -180,2,train -617,3,train -3353,3,train -3790,4,train -1571,1,train -4086,2,train -1488,3,train -3783,1,train -3824,2,train -393,2,train -3607,4,train -4003,4,train -1567,3,train -1126,1,train -3862,1,train -3903,2,train -1305,3,train -909,3,train -3641,2,train -4037,2,train -606,2,train -1043,3,train -3820,4,train -3558,4,train -1735,1,train -1122,3,train -1559,4,train -3813,1,train -1256,3,train -3854,2,train -4033,4,train -3771,4,train -1814,1,train -1418,1,train -1156,1,train -1638,4,train -1772,4,train -894,1,train -1376,4,train -4067,2,train -1073,3,train -677,3,train -3805,2,train -2068,2,train -1765,1,train -1369,1,train -1806,2,train -1107,1,train -1723,4,train -890,3,train -1327,4,train -4018,2,train -1885,2,train -2019,2,train -1186,1,train -1802,4,train -1406,4,train -1103,3,train -2494,2,train -2098,2,train -1399,1,train -1836,2,train -1533,1,train -2015,4,train -1316,3,train -1357,4,train -1491,4,train -2311,2,train -2049,2,train -1653,2,train -1787,2,train -1570,4,train -1174,4,train -2565,3,train -2262,2,train -1866,2,train -2699,3,train -1604,2,train -1387,4,train -1,2,train -2778,3,train -2912,3,train -2079,2,train -2516,3,train -2213,2,train -80,2,train -2812,1,train -3208,1,train -2595,3,train -2292,2,train -2770,4,train -2030,2,train -2071,3,train -2891,1,train -293,2,train -3025,1,train -3421,1,train -2546,3,train -2983,4,train -2680,3,train -2284,3,train -3238,1,train -3279,2,train -244,2,train -285,3,train -2580,1,train -2976,1,train -2759,3,train -2363,3,train -2800,4,train -3196,4,train -3055,1,train -3492,2,train -61,2,train -498,3,train -3189,1,train -3409,4,train -2576,3,train -3013,4,train -2710,3,train -3705,2,train -577,3,train -2872,1,train -711,3,train -3006,1,train -3309,2,train -3488,4,train -12,2,train -53,3,train -2744,1,train -3226,4,train -3522,2,train -2823,1,train -3260,2,train -662,3,train -2957,1,train -3043,4,train -2740,3,train -2781,4,train -824,1,train -958,1,train -3339,2,train -741,3,train -3473,2,train -479,3,train -3256,4,train -775,1,train -3948,2,train -3686,2,train -558,3,train -995,4,train -3290,2,train -692,3,train -296,3,train -3028,2,train -3469,4,train -34,3,train -2811,4,train -1250,1,train -854,1,train -988,1,train -592,1,train -3765,2,train -1208,4,train -330,1,train -812,4,train -3503,2,train -509,3,train -946,4,train -3241,2,train -3940,3,train -1201,1,train -805,1,train -1421,4,train -3716,2,train -3320,2,train -3757,3,train -722,3,train -326,3,train -1159,4,train -3454,2,train -3237,4,train -1321,2,train -1018,1,train -622,1,train -1059,2,train -3970,3,train -539,3,train -3667,2,train -714,4,train -1534,2,train -1231,1,train -1668,2,train -4004,1,train -969,1,train -1010,2,train -1451,4,train -3746,2,train -1189,4,train -793,4,train -3787,3,train -3921,3,train -531,4,train -1747,2,train -1922,3,train -1089,2,train -1223,2,train -4000,3,train -1006,4,train -3738,3,train -2135,3,train -1302,2,train -1436,2,train -3817,3,train -2214,3,train -1253,2,train -1690,3,train -2248,1,train -1986,1,train -1466,2,train -1507,3,train -1903,3,train -2378,3,train -2419,4,train -2116,3,train -2278,1,train -2412,1,train -2195,3,train -2236,4,train -2491,1,train -2229,1,train -2711,4,train -2408,3,train -1967,1,train -2449,4,train -2845,4,train -2146,3,train -1884,3,train -147,3,train -2442,1,train -2046,1,train -2879,2,train -2180,1,train -2266,4,train -2400,4,train -181,1,train -2958,2,train -2655,1,train -2259,1,train -3092,2,train -98,3,train -2176,3,train -2613,4,train -260,1,train -394,1,train -218,4,train -2909,2,train -2826,4,train -2430,4,train -473,1,train -607,1,train -3384,2,train -431,4,train -2726,2,train -3163,3,train -128,3,train -169,4,train -2860,2,train -2643,4,train -2247,4,train -861,2,train -644,4,train -248,4,train -2543,2,train -778,4,train -3073,2,train -3376,3,train -2460,4,train -3672,1,train -1074,2,train -3851,3,train -857,4,train -2756,2,train -158,3,train -2931,3,train -3751,1,train -3885,1,train -891,2,train -3802,3,train -412,4,train -3103,2,train -3964,1,train -3702,1,train -667,1,train -708,2,train -3922,4,train -1145,3,train -842,2,train -3619,3,train -3223,3,train -3440,1,train -625,4,train -3357,3,train -3881,3,train -363,4,train -3915,1,train -921,2,train -3653,1,train -1055,2,train -3832,3,train -3436,3,train -442,4,train -3174,3,train -3570,3,train -576,4,train -180,4,train -1571,3,train -738,2,train -1175,3,train -3866,1,train -872,2,train -4086,4,train -3824,4,train -393,4,train -1085,2,train -689,2,train -1126,3,train -3862,3,train -823,2,train -4037,4,train -3641,4,train -3903,4,train -606,4,train -1684,1,train -1422,1,train -1205,3,train -3500,1,train -3896,1,train -902,2,train -3854,4,train -2031,1,train -1814,3,train -1418,3,train -1156,3,train -894,3,train -4067,4,train -3805,4,train -2110,1,train -1714,1,train -1452,1,train -2068,4,train -3926,1,train -1369,3,train -1806,4,train -1107,3,train -4018,4,train -1927,1,train -1665,1,train -2102,2,train -1885,4,train -2019,4,train -1186,3,train -2181,2,train -1878,1,train -2315,2,train -1616,1,train -1220,1,train -2098,4,train -1399,3,train -1836,4,train -2528,2,train -1829,1,train -1870,2,train -2311,4,train -2049,4,train -1653,4,train -1787,4,train -1391,4,train -2607,2,train -2345,2,train -1646,1,train -2083,2,train -2262,4,train -1866,4,train -1604,4,train -43,1,train -2820,2,train -1,4,train -2296,2,train -2079,4,train -80,4,train -2375,2,train -2812,3,train -3208,3,train -2509,2,train -2113,2,train -2030,4,train -3108,1,train -73,1,train -114,2,train -2891,3,train -293,4,train -3025,3,train -2629,3,train -2367,3,train -3187,1,train -3321,1,train -327,2,train -3059,1,train -65,2,train -3238,3,train -3279,4,train -2539,2,train -2580,3,train -2976,3,train -3534,1,train -3138,1,train -540,2,train -144,2,train -2876,1,train -3055,3,train -2659,3,train -3492,4,train -61,4,train -2397,3,train -357,2,train -491,2,train -95,2,train -2872,3,train -3309,4,train -3705,4,train -3006,3,train -3047,4,train -12,4,train -2744,3,train -3605,2,train -3302,1,train -308,2,train -349,3,train -3522,4,train -2823,3,train -3260,4,train -2957,3,train -1041,1,train -824,3,train -3515,1,train -521,2,train -958,3,train -3253,1,train -3339,4,train -3473,4,train -3077,4,train -2815,4,train -1120,1,train -1254,1,train -4031,2,train -3635,2,train -3769,2,train -2936,1,train -338,2,train -775,3,train -3686,4,train -3290,4,train -3028,4,train -1333,1,train -1250,3,train -854,3,train -3545,1,train -3586,2,train -551,2,train -592,3,train -988,3,train -3765,4,train -3982,2,train -330,3,train -3503,4,train -3241,4,train -1546,1,train -1284,1,train -1108,4,train -805,3,train -409,3,train -3716,4,train -3320,4,train -3454,4,train -1497,1,train -1101,1,train -1235,1,train -839,1,train -1321,4,train -1018,3,train -622,3,train -1059,4,train -3750,2,train -1617,2,train -1314,1,train -1534,4,train -656,1,train -1668,4,train -3963,2,train -4004,3,train -1010,4,train -3746,4,train -1830,2,train -1568,2,train -1265,1,train -869,1,train -1747,4,train -4042,2,train -1089,4,train -1223,4,train -1915,2,train -1519,2,train -1302,4,train -1436,4,train -1598,2,train -1295,1,train -1732,2,train -1253,4,train -2248,3,train -1945,2,train -1549,2,train -1986,3,train -1466,4,train -2065,3,train -1762,2,train -2757,1,train -2278,3,train -2412,3,train -1579,2,train -2574,1,train -2312,1,train -2491,3,train -1792,2,train -2229,3,train -1967,3,train -2787,1,train -2525,1,train -2263,1,train -2442,3,train -2046,3,train -2879,4,train -2180,3,train -2738,1,train -2342,1,train -181,3,train -2958,4,train -3092,4,train -2259,3,train -1863,3,train -260,3,train -2951,1,train -2992,2,train -394,3,train -2689,1,train -3388,2,train -2909,4,train -2513,4,train -690,1,train -3467,2,train -473,3,train -2768,1,train -3205,2,train -3601,2,train -2726,4,train -2860,4,train -507,1,train -245,1,train -2981,1,train -861,4,train -465,4,train -2760,2,train -3156,2,train -2543,4,train -720,1,train -458,1,train -3631,2,train -3672,3,train -1074,4,train -2756,4,train -3968,1,train -3751,3,train -3448,2,train -3052,2,train -3489,3,train -891,4,train -3186,2,train -2790,2,train -3885,3,train -233,4,train -750,1,train -1187,2,train -3964,3,train -3702,3,train -708,4,train -3003,2,train -3399,2,train -842,4,train -3440,3,train -1004,2,train -3736,1,train -1138,2,train -742,2,train -3915,3,train -921,4,train -3653,3,train -263,4,train -3949,1,train -1351,2,train -955,2,train -738,4,train -3429,2,train -3866,3,train -872,4,train -4028,1,train -1034,2,train -1471,3,train -772,2,train -510,2,train -689,4,train -1684,3,train -1381,2,train -1422,3,train -3717,1,train -1119,2,train -723,2,train -3500,3,train -3896,3,train -902,4,train -3937,4,train -1718,1,train -1501,3,train -3796,1,train -1198,2,train -802,2,train -936,2,train -1931,1,train -2110,3,train -1714,3,train -4009,1,train -1411,2,train -1452,3,train -1190,3,train -3926,3,train -3967,4,train -2144,1,train -1748,1,train -1927,3,train -2102,4,train -1665,3,train -1269,3,train -2223,1,train -1961,1,train -2398,2,train -2181,4,train -1878,3,train -1919,4,train -2315,4,train -1616,3,train -1220,3,train -2308,1,train -1912,1,train -2528,4,train -1829,3,train -1870,4,train -1991,1,train -2428,2,train -2125,1,train -2166,2,train -2607,4,train -2345,4,train -1646,3,train -2083,4,train -126,1,train -3037,2,train -2641,2,train -1942,1,train -2379,2,train -2296,4,train -339,1,train -77,1,train -2854,2,train -2458,2,train -2895,3,train -2155,1,train -2592,2,train -2375,4,train -2113,4,train -1717,4,train -3108,3,train -114,4,train -2805,2,train -2147,2,train -369,1,train -3187,3,train -148,2,train -3321,3,train -327,4,train -2622,2,train -3059,3,train -65,4,train -623,2,train -361,2,train -3138,3,train -3534,3,train -540,4,train -144,4,train -2835,2,train -2876,3,train -2573,2,train -836,2,train -137,1,train -178,2,train -574,2,train -357,4,train -95,4,train -653,2,train -3385,1,train -787,2,train -391,2,train -3605,4,train -88,1,train -129,2,train -3302,3,train -3343,4,train -308,4,train -2644,3,train -866,2,train -3202,1,train -604,2,train -1041,3,train -3336,1,train -342,2,train -3253,3,train -1337,1,train -4073,1,train -1120,3,train -3415,1,train -1254,3,train -3549,1,train -4031,4,train -421,2,train -555,2,train -3635,4,train -2936,3,train -3373,4,train -338,4,train -3769,4,train -1333,3,train -937,3,train -3628,1,train -4065,2,train -3366,1,train -3982,4,train -3586,4,train -1367,1,train -1546,3,train -3841,1,train -3882,2,train -847,2,train -1284,3,train -1325,4,train -3579,1,train -585,2,train -626,3,train -3403,4,train -1580,1,train -1184,1,train -4095,2,train -1101,3,train -3792,1,train -1235,3,train -839,3,train -3750,4,train -1793,1,train -1834,2,train -1135,1,train -1617,4,train -3912,2,train -1314,3,train -1355,4,train -656,3,train -1610,1,train -1214,1,train -2047,2,train -1744,1,train -1348,1,train -1830,4,train -1568,4,train -1265,3,train -869,3,train -4042,4,train -1823,1,train -1864,2,train -2260,2,train -1561,1,train -1602,2,train -4076,2,train -1519,4,train -1123,4,train -1378,1,train -1598,4,train -1295,3,train -1732,4,train -2331,3,train -1632,2,train -1549,4,train -2503,2,train -2107,2,train -1845,2,train -1762,4,train -2757,3,train -1796,2,train -1579,4,train -193,2,train -2574,3,train -2271,2,train -1875,2,train -2312,3,train -1792,4,train -2870,1,train -3004,1,train -10,2,train -2787,3,train -2088,2,train -2525,3,train -2263,3,train -89,2,train -3258,2,train -223,2,train -2738,3,train -2342,3,train -3296,1,train -3034,1,train -3471,2,train -40,2,train -2772,1,train -3168,1,train -3388,4,train -2992,4,train -2689,3,train -3247,1,train -253,2,train -690,3,train -2985,1,train -3467,4,train -32,3,train -2768,3,train -2809,4,train -3205,4,train -3064,1,train -70,2,train -507,3,train -3239,2,train -245,3,train -3156,4,train -2760,4,train -803,1,train -541,1,train -720,3,train -761,4,train -2619,1,train -3056,2,train -458,3,train -2839,4,train -1016,1,train -620,1,train -1150,1,train -3531,2,train -3968,3,train -3665,2,train -3269,2,train -3448,4,train -3052,4,train -3186,4,train -2790,4,train -833,1,train -3744,2,train -750,3,train -791,4,train -1187,4,train -3003,4,train -1046,1,train -784,1,train -3957,2,train -522,1,train -3736,3,train -1004,4,train -3299,2,train -1138,4,train -742,4,train -1259,1,train -1300,2,train -997,1,train -1038,2,train -1434,2,train -735,1,train -821,4,train -3512,2,train -3949,3,train -955,4,train -1647,2,train -814,1,train -1251,2,train -4028,3,train -1034,4,train -772,4,train -3504,3,train -510,4,train -1726,2,train -1027,1,train -1068,2,train -1464,2,train -1202,2,train -589,4,train -3717,3,train -1119,4,train -723,4,train -1677,2,train -1718,3,train -4013,1,train -1415,2,train -3796,3,train -1198,4,train -802,4,train -936,4,train -1494,2,train -1098,2,train -1931,3,train -1232,2,train -4009,3,train -2227,1,train -2144,3,train -1748,3,train -2185,4,train -1445,2,train -1486,3,train -2306,1,train -2440,1,train -2223,3,train -1961,3,train -2398,4,train -2653,1,train -2391,1,train -2215,4,train -1912,3,train -1516,3,train -2470,1,train -1991,3,train -2428,4,train -2125,3,train -2166,4,train -2287,1,train -126,3,train -2421,1,train -2025,1,train -2159,1,train -2641,4,train -1942,3,train -2379,4,train -2937,2,train -2634,1,train -2238,1,train -77,3,train -2372,1,train -2458,4,train -2854,4,train -2155,3,train -2592,4,train -1934,4,train -373,1,train -197,4,train -2055,1,train -2888,2,train -2147,4,train -452,1,train -3363,2,train -2967,2,train -2664,1,train -2705,2,train -148,4,train -2622,4,train -665,1,train -269,1,train -444,2,train -3180,2,train -141,1,train -227,4,train -623,4,train -2522,2,train -361,4,train -2656,2,train -2918,2,train -2573,4,train -3651,1,train -616,1,train -220,1,train -836,4,train -137,3,train -178,4,train -574,4,train -3730,1,train -736,2,train -171,1,train -653,4,train -2948,2,train -3385,3,train -391,4,train -129,4,train -3681,1,train -646,1,train -687,2,train -866,4,train -3161,2,train -3202,3,train -604,4,train -3336,3,train -342,4,train -3894,1,train -900,2,train -504,2,train -1337,3,train -3632,1,train -638,2,train -3415,3,train -421,4,train -25,4,train -3549,3,train -555,4,train -717,2,train -3845,1,train -3931,4,train -3628,3,train -4065,4,train -3366,3,train -930,2,train -1367,3,train -3662,1,train -668,2,train -3882,4,train -3841,3,train -3579,3,train -585,4,train -1401,1,train -1580,3,train -1184,3,train -485,2,train -3699,4,train -4095,4,train -1876,1,train -1793,3,train -1834,4,train -698,2,train -1135,3,train -3912,4,train -2089,1,train -1827,1,train -1610,3,train -1214,3,train -2047,4,train -911,2,train -1348,3,train -1906,1,train -2040,1,train -2260,4,train -1864,4,train -1561,3,train -1602,4,train -4076,4,train -2119,1,train -2294,2,train -1378,3,train -982,3,train -2070,1,train -2507,2,train -1412,1,train -1632,4,train -1370,4,train -1887,1,train -1928,2,train -2324,2,train -1625,1,train -2107,4,train -1845,4,train -22,1,train -2799,2,train -2100,1,train -2141,2,train -1838,1,train -2275,2,train -1796,4,train -101,1,train -2488,2,train -2092,2,train -1875,4,train -3087,1,train -93,2,train -2870,3,train -2567,2,train -2171,2,train -2608,3,train -10,4,train -2305,2,train -1909,2,train -2346,3,train -3004,3,train -2088,4,train -172,2,train -306,2,train -89,4,train -3258,4,train -2518,2,train -2122,2,train -3513,1,train -3117,1,train -519,2,train -3296,3,train -257,2,train -3034,3,train -3471,4,train -40,4,train -2772,3,train -2376,3,train -3726,1,train -3068,1,train -74,2,train -2851,3,train -3247,3,train -2985,3,train -549,2,train -2885,1,train -3367,4,train -287,2,train -3064,3,train -2623,1,train -3105,4,train -70,4,train -3239,4,train -2406,3,train -3797,2,train -803,3,train -3098,1,train -3494,1,train -104,2,train -541,3,train -2836,1,train -238,2,train -2619,3,train -3056,4,train -3614,2,train -1016,3,train -620,3,train -2915,1,train -3311,1,train -3748,2,train -358,3,train -3531,4,train -3665,4,train -3269,4,train -1446,1,train -833,3,train -3128,1,train -3961,2,train -3262,1,train -3303,2,train -3744,4,train -4040,2,train -1046,3,train -605,1,train -1087,4,train -3778,2,train -784,3,train -3516,2,train -522,3,train -3299,4,train -1342,1,train -1476,1,train -1517,2,train -1259,3,train -1300,4,train -997,3,train -1038,4,train -1434,4,train -3729,2,train -735,3,train -3512,4,train -1596,2,train -1293,1,train -897,1,train -635,1,train -1117,4,train -1647,4,train -814,3,train -1251,4,train -3942,2,train -1809,2,train -1943,2,train -1110,1,train -1547,2,train -1244,1,train -1726,4,train -4021,2,train -4062,3,train -1027,3,train -1068,4,train -1464,4,train -3759,2,train -1202,4,train -806,4,train -3800,3,train -1323,1,train -1364,2,train -1061,1,train -4013,3,train -1415,4,train -1274,1,train -1315,2,train -1711,2,train -4092,3,train -1494,4,train -1098,4,train -1232,4,train -1790,2,train -2227,3,train -1445,4,train -2523,1,train -2306,3,train -2440,3,train -2044,3,train -1741,2,train -1782,3,train -2653,3,train -2391,3,train -2553,1,train -2687,1,train -2291,1,train -2470,3,train -1771,2,train -2766,1,train -2900,1,train -2287,3,train -2421,3,train -2025,3,train -2159,3,train -2583,1,train -3020,2,train -26,3,train -2321,1,train -2717,1,train -2937,4,train -2455,1,train -2541,4,train -2238,3,train -1842,3,train -3233,2,train -2930,1,train -2534,1,train -373,3,train -2668,1,train -2888,4,train -2055,3,train -669,1,train -452,3,train -2351,1,train -2485,1,train -2967,4,train -2705,4,train -882,1,train -3659,2,train -665,3,train -269,3,train -3438,3,train -444,4,train -2698,1,train -2739,2,train -141,3,train -2918,4,train -2522,4,train -3180,4,train -2656,4,train -699,1,train -303,1,train -3476,2,train -437,1,train -41,1,train -3651,3,train -220,3,train -3348,2,train -912,1,train -953,2,train -3730,3,train -650,1,train -736,4,train -3031,2,train -2769,2,train -171,3,train -2948,4,train -729,1,train -467,1,train -3244,2,train -3681,3,train -687,4,train -3378,2,train -3977,1,train -942,1,train -983,2,train -1379,2,train -284,1,train -3498,3,train -3894,3,train -900,4,train -504,4,train -3195,2,train -3236,3,train -638,4,train -242,4,train -3632,3,train -3928,1,train -497,1,train -934,2,train -717,4,train -3845,3,train -4007,1,train -1409,2,train -1013,2,train -3745,1,train -751,2,train -930,4,train -489,2,train -3662,3,train -668,4,train -1226,2,train -3958,1,train -1360,2,train -1401,3,train -3696,1,train -702,2,train -485,4,train -1697,1,train -1876,3,train -781,2,train -915,2,train -698,4,train -1910,1,train -2089,3,train -3988,1,train -1390,2,train -1827,3,train -1128,2,train -3946,4,train -911,4,train -1989,1,train -1727,1,train -1906,3,train -1207,2,train -1248,3,train -2202,1,train -1940,1,train -2119,3,train -1678,1,train -2294,4,train -2153,1,train -1757,1,train -2590,2,train -2507,4,train -1412,3,train -2803,2,train -2104,1,train -1708,1,train -1887,3,train -1928,4,train -2324,4,train -1625,3,train -1666,4,train -2486,2,train -1921,1,train -2141,4,train -2275,4,train -101,3,train -2437,2,train -2874,3,train -2134,1,train -2175,2,train -2092,4,train -1696,4,train -3087,3,train -93,4,train -2388,2,train -2784,2,train -2567,4,train -2171,4,train -2305,4,train -1909,4,train -348,1,train -86,1,train -172,4,train -2904,3,train -306,4,train -2122,4,train -3513,3,train -3117,3,train -519,4,train -257,4,train -2552,2,train -419,2,train -3151,1,train -3068,3,train -74,4,train -3626,1,train -632,2,train -3364,1,train -766,2,train -370,2,train -67,1,train -2844,2,train -2885,3,train -287,4,train -2623,3,train -3839,1,train -845,2,train -449,2,train -3577,1,train -187,2,train -3797,4,train -3098,3,train -2702,3,train -104,4,train -2836,3,train -3790,1,train -3831,2,train -796,2,train -3132,1,train -3614,4,train -534,2,train -138,2,train -2915,3,train -3311,3,train -3352,4,train -3748,4,train -916,3,train -3211,1,train -3607,1,train -4044,2,train -3961,4,train -3128,3,train -3262,3,train -3303,4,train -3820,1,train -3861,2,train -4040,4,train -430,2,train -3558,1,train -564,2,train -605,3,train -3778,4,train -3516,4,train -1425,1,train -1559,1,train -1342,3,train -4074,2,train -1517,4,train -3812,2,train -3729,4,train -1638,1,train -1772,1,train -1376,1,train -1114,1,train -1596,4,train -1293,3,train -897,3,train -4025,2,train -635,3,train -1193,1,train -1327,1,train -1809,4,train -1943,4,train -1110,3,train -1547,4,train -1244,3,train -1285,4,train -4021,4,train -3759,4,train -1802,1,train -1406,1,train -1843,2,train -1323,3,train -1364,4,train -4055,2,train -1061,3,train -1102,4,train -2452,2,train -2056,2,train -1357,1,train -961,1,train -1491,1,train -1711,4,train -1315,4,train -2269,2,train -1873,2,train -1570,1,train -1174,1,train -2007,2,train -1790,4,train -2523,3,train -1387,1,train -1824,2,train -1741,4,train -2299,2,train -2340,3,train -1641,2,train -1775,2,train -2770,1,train -2553,3,train -2250,2,train -2291,3,train -2687,3,train -1771,4,train -2983,1,train -2766,3,train -2370,3,train -68,2,train -2800,1,train -3196,1,train -202,2,train -2583,3,train -3020,4,train -2280,2,train -2321,3,train -2717,3,train -2455,3,train -2059,3,train -281,2,train -3013,1,train -2617,1,train -3233,4,train -2534,3,train -2668,3,train -3488,1,train -3226,1,train -232,2,train -669,3,train -2568,1,train -2351,3,train -2788,4,train -2485,3,train -569,1,train -352,3,train -3043,1,train -3480,2,train -90,3,train -2781,1,train -2698,3,train -2739,4,train -3559,2,train -3693,2,train -3256,1,train -3297,2,train -699,3,train -303,3,train -3476,4,train -437,3,train -41,3,train -2818,4,train -995,1,train -599,1,train -3772,2,train -3906,2,train -3510,2,train -953,4,train -2811,1,train -650,3,train -3031,4,train -2769,4,train -1208,1,train -812,1,train -946,1,train -550,1,train -3327,2,train -3723,2,train -729,3,train -770,4,train -3065,2,train -3461,2,train -467,3,train -508,4,train -3244,4,train -3936,2,train -3977,3,train -1379,4,train -983,4,train -3278,2,train -284,3,train -3195,4,train -1279,2,train -1017,2,train -3794,3,train -714,1,train -318,1,train -3095,2,train -3928,3,train -497,3,train -934,4,train -1626,2,train -793,1,train -4007,3,train -1409,4,train -531,1,train -1013,4,train -3308,2,train -3704,2,train -751,4,train -3745,3,train -489,4,train -1006,1,train -1047,2,train -1443,2,train -1226,4,train -3958,3,train -568,4,train -3696,3,train -702,4,train -1522,2,train -1697,3,train -3992,1,train -781,4,train -915,4,train -4071,1,train -1473,2,train -1077,2,train -1910,3,train -1211,2,train -3988,3,train -1989,3,train -1727,3,train -4022,1,train -1424,2,train -1465,3,train -1207,4,train -2285,1,train -2419,1,train -2202,3,train -1503,2,train -1940,3,train -1678,3,train -2236,1,train -1974,1,train -2153,3,train -1757,3,train -2590,4,train -1495,3,train -2711,1,train -2449,1,train -2053,1,train -2803,4,train -2104,3,train -1708,3,train -2266,1,train -2703,2,train -2400,1,train -2004,1,train -2486,4,train -2224,4,train -1921,3,train -5,1,train -2782,2,train -2613,1,train -2437,4,train -2134,3,train -2175,4,train -218,1,train -3129,2,train -2733,2,train -2430,1,train -2034,1,train -2471,2,train -2867,2,train -2254,4,train -2388,4,train -431,1,train -35,1,train -169,1,train -3342,2,train -3080,2,train -2247,1,train -2684,2,train -86,3,train -644,1,train -248,1,train -2763,2,train -3200,3,train -2460,1,train -2501,2,train -2897,2,train -2635,2,train -2552,4,train -636,2,train -3372,2,train -419,4,train -3151,3,train -2848,2,train -3709,1,train -412,1,train -3626,3,train -16,1,train -453,2,train -849,2,train -236,4,train -632,4,train -2927,2,train -370,4,train -3230,3,train -3364,3,train -3922,1,train -666,2,train -3839,3,train -363,1,train -449,4,train -845,4,train -3140,2,train -3618,4,train -187,4,train -2919,3,train -3577,3,train -442,1,train -180,1,train -617,2,train -3831,4,train -4,4,train -3132,3,train -534,4,train -138,4,train -4086,1,train -3824,1,train -3428,1,train -393,1,train -434,2,train -3211,3,train -3607,3,train -3648,4,train -4044,4,train -1212,3,train -3507,1,train -3903,1,train -909,2,train -3641,1,train -4037,1,train -251,2,train -3861,4,train -430,4,train -3558,3,train -1642,1,train -1425,3,train -1122,2,train -1559,3,train -3458,1,train -3854,1,train -3895,2,train -901,3,train -4074,4,train -3812,4,train -1638,3,train -1376,3,train -4067,1,train -677,2,train -1114,3,train -3805,1,train -4025,4,train -2068,1,train -1806,1,train -1193,3,train -890,2,train -1327,3,train -1885,1,train -1489,1,train -2019,1,train -1406,3,train -1843,4,train -3876,2,train -4055,4,train -2098,1,train -2139,2,train -1836,1,train -2056,4,train -1178,1,train -3955,2,train -1357,3,train -961,3,train -2352,2,train -2049,1,train -1653,1,train -2269,4,train -1391,1,train -1873,4,train -1787,1,train -1570,3,train -1174,3,train -2007,4,train -2565,2,train -2169,2,train -1866,1,train -1470,1,train -1907,2,train -1604,1,train -1387,3,train -1824,4,train -1,1,train -2778,2,train -2516,2,train -2299,4,train -1858,2,train -1641,4,train -1775,4,train -80,1,train -2595,2,train -2770,3,train -2071,2,train -1458,4,train -72,2,train -2546,2,train -2983,3,train -2284,2,train -1888,2,train -151,2,train -3279,1,train -285,2,train -68,4,train -2363,2,train -2800,3,train -3196,3,train -3492,1,train -3096,1,train -498,2,train -2834,1,train -281,4,train -2576,2,train -2617,3,train -3013,3,train -3054,4,train -577,2,train -3309,1,train -3047,1,train -53,2,train -3226,3,train -2568,3,train -3522,1,train -132,2,train -569,3,train -2864,1,train -3260,1,train -3043,3,train -3084,4,train -3480,4,train -2781,3,train -3339,1,train -2943,1,train -3776,2,train -3473,1,train -3077,1,train -3559,4,train -3693,4,train -2815,1,train -3297,4,train -3593,2,train -558,2,train -599,3,train -995,3,train -3290,1,train -296,2,train -3510,4,train -3028,1,train -3114,4,train -34,2,train -2811,3,train -3772,4,train -3806,2,train -3940,2,train -812,3,train -3503,1,train -3544,2,train -3723,4,train -946,3,train -550,3,train -3241,1,train -3327,4,train -3461,4,train -3065,4,train -1108,1,train -846,1,train -3757,2,train -3320,1,train -3361,2,train -326,2,train -367,3,train -105,3,train -3278,4,train -1321,1,train -1059,1,train -1279,4,train -4011,3,train -3970,2,train -1017,4,train -714,3,train -318,3,train -3095,4,train -1534,1,train -876,1,train -1313,2,train -1010,1,train -614,1,train -1096,4,train -3391,2,train -793,3,train -397,3,train -3787,2,train -3921,2,train -531,3,train -3308,4,train -1788,2,train -1922,2,train -1089,1,train -1526,2,train -1223,1,train -4000,2,train -3604,2,train -1006,3,train -1047,4,train -1443,4,train -3738,2,train -785,4,train -1302,1,train -1343,2,train -1522,4,train -3817,2,train -3992,3,train -2214,2,train -1253,1,train -1690,2,train -4071,3,train -1473,4,train -1077,4,train -1211,4,train -1903,2,train -1507,2,train -4022,3,train -1424,4,train -2285,3,train -2419,3,train -1586,2,train -1503,4,train -2236,3,train -1974,3,train -2711,3,train -2449,3,train -2053,3,train -2490,4,train -1791,3,train -2879,1,train -2266,3,train -2703,4,train -2400,3,train -2004,3,train -2958,1,train -5,3,train -2300,1,train -2782,4,train -2038,1,train -2520,4,train -218,3,train -2513,1,train -2909,1,train -2950,2,train -3129,4,train -2733,4,train -2867,4,train -2471,4,train -2430,3,train -2034,3,train -252,1,train -3029,2,train -431,3,train -35,3,train -2726,1,train -3163,2,train -169,3,train -2247,3,train -2684,4,train -861,1,train -465,1,train -248,3,train -2543,1,train -3376,2,train -2763,4,train -2460,3,train -2501,4,train -2897,4,train -2635,4,train -2239,4,train -544,1,train -282,1,train -20,1,train -2756,1,train -2797,2,train -636,4,train -2931,2,train -2848,4,train -891,1,train -932,2,train -3709,3,train -233,1,train -3010,2,train -412,3,train -16,3,train -453,4,train -849,4,train -2748,2,train -2927,4,train -708,1,train -312,1,train -1145,2,train -3922,3,train -532,4,train -2827,2,train -3223,2,train -666,4,train -3357,2,train -3956,1,train -921,1,train -962,2,train -263,1,train -700,2,train -3436,2,train -442,3,train -3174,2,train -3215,3,train -3477,3,train -180,3,train -617,4,train -4035,1,train -738,1,train -779,2,train -1175,2,train -4086,3,train -3824,3,train -3428,3,train -434,4,train -3986,1,train -992,2,train -1429,3,train -689,1,train -730,2,train -1126,2,train -3507,3,train -909,4,train -3641,3,train -3245,3,train -3903,3,train -251,4,train -1205,2,train -1642,3,train -3937,1,train -681,2,train -3458,3,train -3854,3,train -3895,4,train -4016,1,train -1418,2,train -3754,1,train -1156,2,train -760,2,train -894,2,train -677,4,train -2068,3,train -3967,1,train -1806,3,train -1107,2,train -890,4,train -3663,4,train -2102,1,train -1706,1,train -1885,3,train -1489,3,train -3784,1,train -1186,2,train -1227,3,train -3876,4,train -2181,1,train -2315,1,train -1919,1,train -2098,3,train -2139,4,train -1836,3,train -1178,3,train -3955,4,train -1870,1,train -2352,4,train -1653,3,train -1257,3,train -1391,3,train -2345,1,train -2386,2,train -2565,4,train -2083,1,train -2169,4,train -1866,3,train -1470,3,train -1907,4,train -1604,3,train -2465,2,train -1504,1,train -2516,4,train -1858,4,train -2678,2,train -80,3,train -2375,1,train -2812,2,train -2113,1,train -1717,1,train -2154,2,train -2595,4,train -2071,4,train -1675,4,train -114,1,train -2891,2,train -2629,2,train -72,4,train -2367,2,train -2284,4,train -1888,4,train -327,1,train -65,1,train -151,4,train -2446,2,train -3279,3,train -285,4,train -2580,2,train -2363,4,train -144,1,train -3492,3,train -2659,2,train -3096,3,train -2397,2,train -2834,3,train -3392,1,train -357,1,train -398,2,train -95,1,train -136,2,train -577,4,train -2872,2,train -2913,3,train -3047,3,train -2651,3,train -3309,3,train -53,4,train -3605,1,train -215,2,train -3343,1,train -349,2,train -3522,3,train -132,4,train -2823,2,train -2864,3,train -3260,3,train -3422,1,train -824,2,train -166,2,train -2943,3,train -3339,3,train -3776,4,train -3077,3,train -2815,3,train -4031,1,train -3635,1,train -3769,1,train -3373,1,train -775,2,train -3111,1,train -3593,4,train -117,2,train -3290,3,train -296,4,train -3028,3,train -34,4,train -3889,2,train -854,2,train -895,3,train -3586,1,train -592,2,train -196,2,train -633,3,train -3410,4,train -330,2,train -3544,4,train -3806,4,train -3940,4,train -1325,1,train -1108,3,train -3403,1,train -3840,2,train -409,2,train -846,3,train -3320,3,train -3361,4,train -3757,4,train -326,4,train -3919,2,train -1321,3,train -622,2,train -1059,3,train -3970,4,train -1617,1,train -1355,1,train -1534,3,train -3870,2,train -876,3,train -1313,4,train -4004,2,train -1010,3,train -614,3,train -3391,4,train -3787,4,train -1830,1,train -1568,1,train -1172,1,train -1788,4,train -910,1,train -1392,4,train -1922,4,train -1089,3,train -1526,4,train -3821,2,train -4000,4,train -3604,4,train -3738,4,train -1519,1,train -1123,1,train -3900,2,train -1302,3,train -1343,4,train -1081,4,train -3817,4,train -1598,1,train -1690,4,train -2248,2,train -1549,1,train -1986,2,train -1507,4,train -2065,2,train -1803,2,train -1586,4,train -2278,2,train -1882,2,train -2319,3,train -1579,1,train -1620,2,train -2057,3,train -2229,2,train -1967,2,train -2349,3,train -2046,2,train -1650,2,train -181,2,train -2958,3,train -2259,2,train -1863,2,train -2300,3,train -2038,3,train -2858,1,train -260,2,train -2992,1,train -2596,1,train -39,3,train -2513,3,train -2950,4,train -3467,1,train -3205,1,train -2809,1,train -252,3,train -3029,4,train -2726,3,train -2767,4,train -3163,4,train -548,1,train -3325,2,train -2626,1,train -465,3,train -2760,1,train -2846,4,train -3376,4,train -2543,3,train -761,1,train -544,3,train -3276,2,train -2839,1,train -3672,2,train -282,3,train -2577,1,train -20,3,train -2756,3,train -2797,4,train -2931,4,train -578,1,train -3751,2,train -3052,1,train -3489,2,train -932,4,train -3227,2,train -99,3,train -2790,1,train -233,3,train -3010,4,train -2748,4,train -1187,1,train -791,1,train -3964,2,train -529,1,train -3306,2,train -3702,2,train -708,3,train -3440,2,train -312,3,train -1145,4,train -3003,1,train -3044,2,train -2827,4,train -3223,4,train -1004,1,train -742,1,train -346,1,train -3956,3,train -962,4,train -3653,2,train -263,3,train -700,4,train -3436,4,train -3174,4,train -821,1,train -4035,3,train -955,1,train -738,3,train -779,4,train -1175,4,train -517,4,train -1034,1,train -1471,2,train -772,1,train -3986,3,train -376,1,train -1209,2,train -510,1,train -992,4,train -3287,2,train -1126,4,train -730,4,train -1684,2,train -1288,2,train -1422,2,train -589,1,train -3803,3,train -723,1,train -1205,4,train -3500,2,train -3937,3,train -547,4,train -681,4,train -1501,2,train -802,1,train -1239,2,train -4016,3,train -936,1,train -977,2,train -3754,3,train -1156,4,train -760,4,train -894,4,train -1714,2,train -1755,3,train -1452,2,train -1056,2,train -1190,2,train -794,2,train -3571,3,train -3967,3,train -2185,1,train -2102,3,train -1706,3,train -1665,2,train -1269,2,train -1007,2,train -3784,3,train -1186,4,train -3959,4,train -2398,1,train -2002,1,train -2181,3,train -1785,3,train -1919,3,train -1220,2,train -2215,1,train -1870,3,train -2428,1,train -2166,1,train -2386,4,train -2083,3,train -2641,1,train -2682,2,train -2379,1,train -1983,1,train -2465,4,train -2203,4,train -1504,3,train -2458,1,train -2062,1,train -2895,2,train -2678,4,train -2812,4,train -1934,1,train -2113,3,train -1717,3,train -2154,4,train -197,1,train -2974,2,train -3108,2,train -2712,2,train -114,3,train -2891,4,train -2013,1,train -2450,2,train -2147,1,train -2629,4,train -2367,4,train -1971,4,train -3187,2,train -148,1,train -3321,2,train -3059,2,train -65,3,train -2446,4,train -2580,4,train -623,1,train -227,1,train -361,1,train -3138,2,train -3179,3,train -144,3,train -2876,2,train -2659,4,train -2218,2,train -2397,4,train -44,1,train -178,1,train -3392,3,train -398,4,train -2693,2,train -136,4,train -2872,4,train -653,1,train -391,1,train -3605,3,train -3209,3,train -129,1,train -215,4,train -2510,2,train -3343,3,train -349,4,train -2644,2,train -1041,2,train -3422,3,train -342,1,train -824,4,train -2723,2,train -166,4,train -3718,1,train -1120,2,train -421,1,train -25,1,train -462,2,train -3635,3,train -2936,2,train -3373,3,train -3111,3,train -117,4,train -3931,1,train -937,2,train -4065,1,train -675,2,train -3407,1,train -3889,4,train -854,4,train -413,2,train -3586,3,train -592,4,train -196,4,train -330,4,train -1408,1,train -3882,1,train -3486,1,train -1325,3,train -492,2,train -626,2,train -3403,3,train -3840,4,train -230,2,train -409,4,train -4095,1,train -3699,1,train -1101,2,train -3919,4,train -839,2,train -3657,4,train -622,4,train -1834,1,train -1438,1,train -1617,3,train -3912,1,train -1355,3,train -959,3,train -656,2,train -3870,4,train -4004,4,train -2047,1,train -1830,3,train -1568,3,train -1172,3,train -1609,4,train -3904,2,train -869,2,train -910,3,train -3821,4,train -1864,1,train -1468,1,train -1602,1,train -989,3,train -1519,3,train -1123,3,train -3900,4,train -2118,2,train -1419,1,train -1598,3,train -1157,1,train -1639,4,train -1377,4,train -2331,2,train -1632,1,train -2248,4,train -1370,1,train -1549,3,train -1986,4,train -2107,1,train -1845,1,train -2065,4,train -1803,4,train -2757,2,train -1796,1,train -2278,4,train -1882,4,train -1620,4,train -2574,2,train -2178,2,train -2615,3,train -1875,1,train -1916,2,train -2312,2,train -51,2,train -2525,2,train -2129,2,train -2263,2,train -1867,2,train -2046,4,train -1650,4,train -89,1,train -3258,1,train -2645,3,train -2342,2,train -1946,2,train -1863,4,train -3471,1,train -2858,3,train -260,4,train -2992,3,train -2596,3,train -2334,3,train -3154,1,train -32,2,train -2809,3,train -3367,1,train -3105,1,train -3542,2,train -507,2,train -111,2,train -548,3,train -2843,1,train -245,2,train -3239,1,train -2626,3,train -3325,4,train -2760,3,train -3755,2,train -2922,1,train -761,3,train -3056,1,train -3672,4,train -2839,3,train -3276,4,train -2577,3,train -3531,1,train -3968,2,train -578,3,train -2873,1,train -3269,1,train -3310,2,train -316,3,train -3052,3,train -3489,4,train -3751,4,train -2790,3,train -2831,4,train -3227,4,train -874,1,train -791,3,train -529,3,train -3306,4,train -3702,4,train -3003,3,train -3440,4,train -3044,4,train -1087,1,train -3602,2,train -4039,3,train -1004,3,train -1045,4,train -2903,1,train -3299,1,train -742,3,train -346,3,train -3340,2,train -3736,2,train -1300,1,train -904,1,train -1434,1,train -1038,1,train -821,3,train -3553,2,train -3949,2,train -955,3,train -3291,2,train -1117,1,train -1251,1,train -855,1,train -1292,2,train -4028,2,train -1034,3,train -1075,4,train -1471,4,train -772,3,train -376,3,train -813,4,train -3504,2,train -510,3,train -3287,4,train -1209,4,train -1068,1,train -1505,2,train -1202,1,train -806,1,train -1288,4,train -1684,4,train -1422,4,train -589,3,train -3717,2,train -3583,2,train -723,3,train -3500,4,train -1718,2,train -885,1,train -1322,2,train -1501,4,train -3796,2,train -802,3,train -1239,4,train -843,4,train -977,4,train -1931,2,train -1098,1,train -1714,4,train -1232,1,train -4009,2,train -1452,4,train -1056,4,train -3788,3,train -1190,4,train -794,4,train -1748,2,train -2185,3,train -1486,2,train -1269,4,train -873,4,train -1007,4,train -2223,2,train -1961,2,train -2002,3,train -2398,3,train -1303,2,train -1220,4,train -2215,3,train -1516,2,train -2511,1,train -2249,1,train -1991,2,train -2428,3,train -2469,4,train -2166,3,train -1770,3,train -2682,4,train -2379,3,train -1983,3,train -2937,1,train -2541,1,train -2458,3,train -2062,3,train -2895,4,train -1800,3,train -1934,3,train -197,3,train -2888,1,train -2974,4,train -3108,4,train -2712,4,train -2013,3,train -2450,4,train -2147,3,train -2967,1,train -3008,2,train -2705,1,train -2309,1,train -2746,2,train -148,3,train -3187,4,train -2529,4,train -310,1,train -444,1,train -227,3,train -2522,1,train -2918,1,train -361,3,train -2656,1,train -2959,2,train -3138,4,train -2876,4,train -2218,4,train -261,1,train -3038,2,train -44,3,train -178,3,train -2693,4,train -736,1,train -3385,2,train -2989,2,train -3426,3,train -391,3,train -129,3,train -2510,4,train -2644,4,train -687,1,train -291,1,train -29,1,train -3202,2,train -2723,4,train -3935,1,train -1337,2,train -504,1,train -941,2,train -3718,3,train -638,1,train -242,1,train -1120,4,train -3019,2,train -421,3,train -25,3,train -462,4,train -3194,3,train -3415,2,train -2936,4,train -4014,1,train -1020,2,train -717,1,train -758,2,train -3931,3,train -937,4,train -59,1,train -4065,3,train -675,4,train -3407,3,train -413,4,train -3965,1,train -1367,2,train -971,2,train -1408,3,train -3703,1,train -668,1,train -709,2,train -3486,3,train -3882,3,train -492,4,train -3224,3,train -626,4,train -230,4,train -1184,2,train -788,2,train -485,1,train -3699,3,train -4095,3,train -839,4,train -1834,3,train -1438,3,train -698,1,train -1135,2,train -1176,3,train -3912,3,train -3953,4,train -656,4,train -2047,3,train -1214,2,train -3946,1,train -556,2,train -3904,4,train -1864,3,train -1468,3,train -1905,4,train -3763,1,train -1602,3,train -2294,1,train -2118,4,train -982,2,train -1419,3,train -1157,3,train -2331,4,train -1453,1,train -1935,4,train -1632,3,train -1236,3,train -1370,3,train -2324,1,train -1928,1,train -2365,2,train -1666,1,train -1845,3,train -2444,2,train -2141,1,train -2182,2,train -1483,1,train -1965,4,train -2657,2,train -2395,2,train -2092,1,train -1696,1,train -2178,4,train -2574,4,train -1875,3,train -1916,4,train -2312,4,train -1654,4,train -93,1,train -2870,2,train -2171,1,train -2212,2,train -2608,2,train -51,4,train -1909,1,train -2346,2,train -2129,4,train -1733,4,train -2263,4,train -1867,4,train -172,1,train -306,1,train -3258,3,train -2425,2,train -2122,1,train -2163,2,train -2342,4,train -1946,4,train -164,2,train -3471,3,train -2242,2,train -2376,2,train -3371,1,train -377,2,train -3154,3,train -74,1,train -2851,2,train -3329,4,train -2193,2,train -32,4,train -194,2,train -3367,3,train -3105,3,train -3542,4,train -111,4,train -2406,2,train -2843,3,train -245,4,train -3239,3,train -3797,1,train -803,2,train -407,2,train -104,1,train -145,2,train -541,2,train -2922,3,train -3755,4,train -2619,2,train -2660,3,train -3056,3,train -3614,1,train -620,2,train -224,2,train -3352,1,train -3748,1,train -358,2,train -3531,3,train -3968,4,train -3269,3,train -2873,3,train -3310,4,train -3431,1,train -833,2,train -874,3,train -175,2,train -612,3,train -2907,1,train -3303,1,train -4081,2,train -1087,3,train -3778,1,train -3819,2,train -3516,1,train -3602,4,train -522,2,train -3299,3,train -2903,3,train -3340,4,train -3736,4,train -1517,1,train -1121,1,train -1300,3,train -904,3,train -1038,3,train -3553,4,train -3291,4,train -1596,1,train -1117,3,train -1251,3,train -855,3,train -1292,4,train -3587,2,train -4028,4,train -3504,4,train -1809,1,train -1547,1,train -1285,1,train -889,1,train -1371,4,train -4062,2,train -1068,3,train -1505,4,train -3800,2,train -806,3,train -3583,4,train -3717,4,train -1364,1,train -1801,2,train -1102,1,train -3879,2,train -1718,4,train -885,3,train -1322,4,train -4013,2,train -3796,4,train -1880,2,train -1181,1,train -1618,2,train -1315,1,train -4092,2,train -1098,3,train -2093,2,train -1790,1,train -1831,2,train -2227,2,train -1569,2,train -1748,4,train -4084,3,train -1486,4,train -1090,4,train -2306,2,train -2044,2,train -1782,2,train -1169,4,train -1303,4,train -1861,2,train -1599,2,train -1516,4,train -2377,3,train -2511,3,train -2249,3,train -2807,1,train -2287,2,train -2025,2,train -1629,2,train -2066,3,train -3020,1,train -26,2,train -2937,3,train -2541,3,train -1842,2,train -3233,1,train -2575,1,train -2055,2,train -2096,3,train -2788,1,train -2967,3,train -3008,4,train -2705,3,train -2309,3,train -2746,4,train -527,1,train -3304,2,train -269,2,train -310,3,train -3438,2,train -444,3,train -48,3,train -2343,1,train -2739,1,train -2522,3,train -2126,3,train -2959,4,train -3651,2,train -2818,1,train -261,3,train -3038,4,train -2514,4,train -953,1,train -3730,2,train -736,3,train -3031,1,train -78,3,train -2769,1,train -2989,4,train -770,1,train -3547,2,train -508,1,train -3722,3,train -3244,1,train -3285,2,train -687,3,train -291,3,train -3023,2,train -3681,2,train -29,3,train -3202,4,train -2940,4,train -983,1,train -587,1,train -3498,2,train -3935,3,train -325,1,train -807,4,train -1337,4,train -504,3,train -941,4,train -3102,2,train -242,3,train -3019,4,train -3236,2,train -3632,2,train -1237,2,train -4014,3,train -934,1,train -1020,4,train -3752,3,train -717,3,train -758,4,train -59,3,train -1013,1,train -751,1,train -3965,3,train -489,1,train -971,4,train -3662,2,train -3703,3,train -709,4,train -1226,1,train -1401,2,train -568,1,train -3782,3,train -702,1,train -788,4,train -1184,4,train -3520,3,train -485,3,train -781,1,train -1135,4,train -1035,2,train -1472,3,train -1214,4,train -773,2,train -3550,3,train -3946,3,train -556,4,train -1248,2,train -3980,1,train -986,2,train -3763,3,train -1502,3,train -982,4,train -2590,1,train -1412,2,train -1453,3,train -2273,1,train -1928,3,train -1532,3,train -2365,4,train -2486,1,train -2224,1,train -2661,2,train -2444,4,train -2141,3,train -2182,4,train -1483,3,train -2437,1,train -2041,1,train -2874,2,train -2175,1,train -1779,1,train -2261,4,train -2657,4,train -2395,4,train -1696,3,train -3087,2,train -2254,1,train -2691,2,train -93,3,train -2388,1,train -2429,2,train -2870,4,train -2171,3,train -2212,4,train -2608,4,train -1909,3,train -2346,4,train -172,3,train -2904,2,train -2642,2,train -2425,4,train -2163,4,train -3117,2,train -2721,2,train -164,4,train -2242,4,train -2376,4,train -419,1,train -23,1,train -3371,3,train -2538,2,train -377,4,train -2672,2,train -3068,2,train -2193,4,train -632,1,train -236,1,train -673,2,train -370,1,train -194,4,train -2489,2,train -2885,2,train -2926,3,train -2623,2,train -2406,4,train -449,1,train -3618,1,train -3797,3,train -187,1,train -407,4,train -2702,2,train -3098,2,train -541,4,train -145,4,train -2836,2,train -2619,4,train -3697,1,train -3831,1,train -3435,1,train -3614,3,train -4,1,train -441,2,train -3218,3,train -138,1,train -224,4,train -620,4,train -2915,2,train -358,4,train -2956,3,train -3352,3,train -916,2,train -520,2,train -3648,1,train -4044,1,train -3431,3,train -3128,2,train -3606,4,train -175,4,train -2907,3,train -3303,3,train -3727,1,train -3861,1,train -430,1,train -471,2,train -908,3,train -4081,4,train -605,2,train -3819,4,train -2986,3,train -3516,3,train -4074,1,train -1517,3,train -1121,3,train -3416,1,train -3812,1,train -3636,4,train -3374,4,train -1417,1,train -1596,3,train -1200,3,train -897,2,train -635,2,train -3587,4,train -1809,3,train -1110,2,train -1547,3,train -1588,4,train -3883,2,train -889,3,train -4062,4,train -3800,4,train -1709,1,train -1843,1,train -1364,3,train -1801,4,train -4096,2,train -1102,3,train -3879,4,train -4013,4,train -2056,1,train -1398,1,train -1880,4,train -1181,3,train -1618,4,train -3913,2,train -1315,3,train -1356,4,train -4092,4,train -1873,1,train -1477,1,train -2093,4,train -1215,1,train -2227,4,train -1831,4,train -1569,4,train -2523,2,train -1824,1,train -2306,4,train -2044,4,train -1782,4,train -2340,2,train -1641,1,train -1775,1,train -1861,4,train -1599,4,train -2553,2,train -2291,2,train -1458,1,train -1895,2,train -1416,4,train -2370,2,train -2807,3,train -2108,2,train -1846,2,train -2025,4,train -1629,4,train -68,1,train -2841,1,train -2583,2,train -2624,3,train -3020,3,train -26,4,train -2321,2,train -2059,2,train -1842,4,train -3054,1,train -3233,3,train -2534,2,train -2575,3,train -2055,4,train -3133,1,train -139,2,train -2871,1,train -2351,2,train -2392,3,train -2788,3,train -352,2,train -3084,1,train -3480,1,train -90,2,train -527,3,train -2822,1,train -3304,4,train -3438,4,train -3042,4,train -2739,3,train -2343,3,train -3559,1,train -3297,1,train -2901,1,train -303,2,train -41,2,train -2818,3,train -2422,3,train -3651,4,train -3772,1,train -3510,1,train -3114,1,train -3551,2,train -953,3,train -3730,4,train -3031,3,train -2769,3,train -853,1,train -3327,1,train -770,3,train -3065,1,train -3547,4,train -508,3,train -3285,4,train -3681,4,train -3023,4,train -804,1,train -3581,2,train -3977,2,train -983,3,train -587,3,train -3278,1,train -284,2,train -325,3,train -3102,4,train -3498,4,train -3236,4,train -1279,1,train -1017,1,train -3794,2,train -1237,4,train -404,3,train -3095,1,train -934,3,train -3928,2,train -1096,1,train -834,1,train -4007,2,train -4048,3,train -1013,3,train -3308,1,train -3745,2,train -751,3,train -792,4,train -489,3,train -1047,1,train -785,1,train -3562,2,train -3958,2,train -1401,4,train -568,3,train -3696,2,train -702,3,train -1522,1,train -1697,2,train -4078,3,train -3379,2,train -781,3,train -822,4,train -1910,2,train -1077,1,train -1211,1,train -3988,2,train -3592,2,train -1035,4,train -3767,3,train -773,4,train -1989,2,train -1727,2,train -1331,2,train -1465,2,train -1248,4,train -3980,3,train -986,4,train -1940,2,train -1678,2,train -1282,2,train -2277,1,train -1757,2,train -1361,2,train -1495,2,train -2490,1,train -2273,3,train -1708,2,train -2569,1,train -2703,1,train -2486,3,train -2224,3,train -2661,4,train -2782,1,train -2520,1,train -2258,1,train -2437,3,train -2041,3,train -2478,4,train -2874,4,train -2175,3,train -1779,3,train -2733,1,train -2337,1,train -2471,1,train -3087,4,train -2254,3,train -2691,4,train -2388,3,train -2429,4,train -2684,1,train -2288,1,train -2725,2,train -2904,4,train -2026,1,train -2508,4,train -2642,4,train -2246,4,train -289,1,train -2763,1,train -3200,2,train -2501,1,train -2635,1,train -2239,1,train -2721,4,train -3117,4,train -636,1,train -3017,2,train -419,3,train -23,3,train -2755,2,train -3151,2,train -2538,4,train -2672,4,train -319,1,train -453,1,train -3230,2,train -3626,2,train -236,3,train -673,4,train -2968,2,train -370,3,train -3364,2,train -2706,2,train -2885,4,train -2489,4,train -2623,4,train -532,1,train -666,1,train -707,2,train -3484,3,train -449,3,train -8,1,train -2785,2,train -3618,3,train -187,3,train -2919,2,train -2702,4,train -920,2,train -3697,3,train -617,1,train -3831,3,train -2998,2,train -3435,3,train -4,3,train -441,4,train -3132,2,train -138,3,train -2915,4,train -3993,1,train -300,1,train -737,2,train -3514,3,train -434,1,train -38,1,train -520,4,train -916,4,train -3211,2,train -3648,3,train -1212,2,train -3727,3,train -251,1,train -3861,3,train -3902,4,train -471,4,train -605,4,train -1425,2,train -767,2,train -3895,1,train -901,2,train -3812,3,train -3416,3,train -1376,2,train -1417,3,train -677,1,train -718,2,train -1114,2,train -897,4,train -635,4,train -1713,1,train -1496,3,train -3791,1,train -1193,2,train -535,2,train -3663,1,train -3883,4,train -1709,3,train -1406,2,train -1843,3,train -1185,3,train -3876,1,train -3962,4,train -4096,4,train -2139,1,train -1743,1,train -3955,1,train -961,2,train -1398,3,train -3913,4,train -2352,1,train -1873,3,train -1477,3,train -1914,4,train -1174,2,train -1215,3,train -1652,4,train -2169,1,train -1907,1,train -2523,4,train -1824,3,train -2161,2,train -1858,1,train -1944,4,train -2340,4,train -1641,3,train -2770,2,train -2374,2,train -2071,1,train -1675,1,train -2553,4,train -2291,4,train -1458,3,train -1895,4,train -72,1,train -2191,2,train -1888,1,train -2370,4,train -2108,4,train -1712,4,train -1846,4,train -151,1,train -2800,2,train -2404,2,train -2841,3,train -2583,4,train -2321,4,train -2059,4,train -2617,2,train -3054,3,train -3133,3,train -53,1,train -139,4,train -2434,2,train -2871,3,train -2568,2,train -2172,2,train -2609,3,train -2351,4,train -435,2,train -132,1,train -173,2,train -569,2,train -352,4,train -3084,3,train -90,4,train -2822,3,train -3776,1,train -386,2,train -3559,3,train -124,2,train -2901,3,train -3297,3,train -303,4,train -2639,3,train -41,4,train -3593,1,train -3197,1,train -599,2,train -203,2,train -3114,3,train -3551,4,train -3806,1,train -3410,1,train -812,2,train -3544,1,train -853,3,train -550,2,train -154,2,train -591,3,train -2886,1,train -3327,3,train -3065,3,train -2669,3,train -4060,2,train -3757,1,train -3361,1,train -367,2,train -804,3,train -3581,4,train -3977,4,train -105,2,train -3278,3,train -1100,1,train -3877,2,train -1279,3,train -4011,2,train -3615,2,train -1017,3,train -184,2,train -621,3,train -3398,4,train -318,2,train -3095,3,train -3794,4,train -1313,1,train -4090,2,train -1096,3,train -3391,1,train -3787,1,train -3828,2,train -397,2,train -834,3,train -4007,4,train -531,2,train -3308,3,train -3745,4,train -1788,1,train -1392,1,train -1526,1,train -3907,2,train -868,1,train -1350,4,train -3604,1,train -1047,3,train -3645,2,train -785,3,train -389,3,train -3562,4,train -3696,4,train -1343,1,train -1081,1,train -1697,4,train -3992,2,train -3596,2,train -3379,4,train -1859,2,train -1160,1,train -898,1,train -3675,2,train -4071,2,train -1077,3,train -1118,4,train -3592,4,train -1507,1,train -1989,4,train -1727,4,train -1331,4,train -4022,2,train -1465,4,train -2285,2,train -1586,1,train -1678,4,train -1282,4,train -2236,2,train -2277,3,train -1974,2,train -1757,4,train -1361,4,train -1495,4,train -2053,2,train -2490,3,train -1791,2,train -1708,4,train -2569,3,train -2266,2,train -2703,3,train -2004,2,train -2045,3,train -5,2,train -2782,3,train -2520,3,train -2258,3,train -218,2,train -2950,1,train -2554,1,train -2733,3,train -2337,3,train -2034,2,train -2075,3,train -2471,3,train -1813,3,train -3029,1,train -35,2,train -2767,1,train -3163,1,train -2684,3,train -2288,3,train -2725,4,train -2026,3,train -2846,1,train -248,2,train -289,3,train -2584,1,train -3021,2,train -27,3,train -2763,3,train -3200,4,train -2501,3,train -2105,3,train -2239,3,train -3496,2,train -2797,1,train -3234,2,train -636,3,train -2931,1,train -3017,4,train -3151,4,train -2755,4,train -932,1,train -536,1,train -3709,2,train -319,3,train -3010,1,train -3051,2,train -16,2,train -57,3,train -453,3,train -2748,1,train -3230,4,train -2968,4,train -2706,4,train -615,1,train -1145,1,train -3922,2,train -532,3,train -2827,1,train -3223,1,train -666,3,train -707,4,train -3264,2,train -8,3,train -2785,4,train -2919,4,train -962,1,train -566,1,train -1003,2,train -700,1,train -304,1,train -786,4,train -3477,2,train -920,4,train -87,3,train -3215,2,train -2998,4,train -2602,4,train -3132,4,train -1175,1,train -779,1,train -3993,3,train -517,1,train -300,3,train -737,4,train -3428,2,train -434,3,train -38,3,train -3211,4,train -992,1,train -1429,2,train -730,1,train -1212,4,train -3507,2,train -3245,2,train -251,3,train -1205,1,train -1246,2,train -1642,2,train -3978,1,train -1425,4,train -547,1,train -681,1,train -767,4,train -3458,2,train -3499,3,train -901,4,train -3895,3,train -760,1,train -1114,4,train -718,4,train -1713,3,train -1014,2,train -3791,3,train -1193,4,train -752,2,train -535,4,train -3663,3,train -1489,2,train -1227,2,train -3959,1,train -965,2,train -3876,3,train -2139,3,train -1743,3,train -4038,1,train -1481,3,train -1178,2,train -3955,3,train -961,4,train -2352,3,train -1257,2,train -1391,2,train -2252,1,train -2386,1,train -1990,1,train -2169,3,train -1470,2,train -1907,3,train -2465,1,train -2203,1,train -2161,4,train -1858,3,train -2678,1,train -2020,1,train -2154,1,train -2240,4,train -2374,4,train -1675,3,train -2629,1,train -2670,2,train -72,3,train -2367,1,train -1971,1,train -2191,4,train -1888,3,train -151,3,train -2446,1,train -2487,2,train -2404,4,train -2962,2,train -2659,1,train -2700,2,train -3096,2,train -3137,3,train -2397,1,train -2438,2,train -2834,2,train -2617,4,train -398,1,train -136,1,train -222,4,train -2517,2,train -2913,2,train -3047,2,train -2651,2,train -2434,4,train -2568,4,train -2172,4,train -215,1,train -349,1,train -435,4,train -2730,2,train -132,3,train -173,4,train -569,4,train -2468,2,train -2864,2,train -469,2,train -166,1,train -2943,2,train -3776,3,train -386,4,train -3077,2,train -124,4,train -2815,2,train -682,2,train -3593,3,train -3197,3,train -117,1,train -203,4,train -599,4,train -3889,1,train -895,2,train -499,2,train -196,1,train -633,2,train -3410,3,train -3806,3,train -3544,3,train -550,4,train -154,4,train -2886,3,train -1108,2,train -712,2,train -3444,1,train -3840,1,train -409,1,train -4060,4,train -846,2,train -3664,4,train -188,2,train -2965,3,train -3361,3,train -367,4,train -105,4,train -3919,1,train -3657,1,train -1100,3,train -3877,4,train -401,2,train -3615,4,train -4011,4,train -184,4,train -318,4,train -1396,1,train -3870,1,train -3474,1,train -876,2,train -480,2,train -917,3,train -1313,3,train -614,2,train -3212,1,train -3391,3,train -3828,4,train -397,4,train -4090,4,train -1609,1,train -1788,3,train -1392,3,train -1526,3,train -3821,1,train -3907,4,train -868,3,train -3604,3,train -3645,4,train -3383,4,train -1164,1,train -3900,1,train -1343,3,train -947,3,train -4075,2,train -1081,3,train -3992,4,train -3596,4,train -1639,1,train -1377,1,train -1859,4,train -1160,3,train -898,3,train -3675,4,train -4071,4,train -1676,4,train -4022,4,train -2065,1,train -1803,1,train -1844,2,train -2285,4,train -1586,3,train -1882,1,train -1923,2,train -2319,2,train -1620,1,train -1224,1,train -2057,2,train -1974,4,train -2136,2,train -2053,4,train -1791,4,train -1395,4,train -2349,2,train -1953,2,train -1650,1,train -1825,2,train -2004,4,train -5,4,train -1863,1,train -1904,2,train -2300,2,train -2341,3,train -2038,2,train -39,2,train -2513,2,train -2554,3,train -2950,3,train -2034,4,train -118,2,train -252,2,train -3029,3,train -35,4,train -2767,3,train -2371,3,train -3325,1,train -465,2,train -2846,3,train -2584,3,train -3021,4,train -3142,1,train -544,2,train -3276,1,train -2880,1,train -282,2,train -323,3,train -3496,4,train -20,2,train -2797,3,train -2401,3,train -3234,4,train -3489,1,train -3530,2,train -932,3,train -99,2,train -536,3,train -2831,1,train -233,2,train -3010,3,train -3051,4,train -3227,1,train -16,4,train -2748,3,train -3709,4,train -615,3,train -2910,1,train -3306,1,train -312,2,train -353,3,train -2648,1,train -3044,1,train -3743,2,train -2827,3,train -3264,4,train -1045,1,train -3822,2,train -3956,2,train -962,3,train -566,3,train -1003,4,train -263,2,train -304,3,train -700,3,train -3477,4,train -3215,4,train -2819,4,train -4035,2,train -779,3,train -3511,2,train -517,3,train -3428,4,train -1471,1,train -1075,1,train -1209,1,train -813,1,train -4027,3,train -3986,2,train -992,3,train -1429,4,train -3287,1,train -3328,2,train -730,3,train -771,4,train -3507,4,train -3245,4,train -1288,1,train -3803,2,train -1642,4,train -1246,4,train -3937,2,train -3978,3,train -547,3,train -681,3,train -3458,4,train -1501,1,train -1542,2,train -1239,1,train -843,1,train -4016,2,train -977,1,train -1459,4,train -3358,2,train -3754,2,train -760,3,train -3795,3,train -1755,2,train -1359,2,train -1056,1,train -660,1,train -1493,2,train -1190,1,train -794,1,train -3571,2,train -3967,2,train -1014,4,train -752,4,train -1572,2,train -1269,1,train -873,1,train -1706,2,train -1007,1,train -1489,4,train -3784,2,train -1227,4,train -3959,3,train -965,4,train -1785,2,train -1919,2,train -4038,3,train -1178,4,train -2256,1,train -2039,3,train -1340,2,train -1777,3,train -1257,4,train -2469,1,train -2252,3,train -2386,3,train -1990,3,train -1470,4,train -2682,1,train -2286,1,train -2465,3,train -2203,3,train -1807,3,train -1504,2,train -2895,1,train -2678,3,train -2237,1,train -2020,3,train -1717,2,train -2154,3,train -2974,1,train -2712,1,train -2316,1,train -2450,1,train -2670,4,train -1971,3,train -2529,1,train -2966,2,train -2267,1,train -2446,3,train -2487,4,train -2225,4,train -268,1,train -3045,2,train -3179,2,train -2962,4,train -2084,1,train -3096,4,train -2218,1,train -2700,4,train -2834,4,train -2438,4,train -219,1,train -2996,2,train -3392,2,train -398,3,train -2693,1,train -136,3,train -2913,4,train -2517,4,train -2651,4,train -2255,4,train -3209,2,train -215,3,train -2510,1,train -2947,2,train -3343,2,train -2644,1,train -2730,4,train -2864,4,train -2468,4,train -3422,2,train -3026,2,train -469,4,train -2723,1,train -166,3,train -2943,4,train -2502,2,train -462,1,train -682,4,train -3373,2,train -3111,2,train -2715,2,train -117,3,train -937,1,train -978,2,train -675,1,train -3889,3,train -3493,3,train -413,1,train -17,1,train -499,4,train -895,4,train -196,3,train -237,4,train -633,4,train -2794,2,train -1325,2,train -492,1,train -626,1,train -230,1,train -712,4,train -3403,2,train -846,4,train -3444,3,train -3840,3,train -188,4,train -4002,1,train -1008,2,train -746,2,train -3919,3,train -3657,3,train -401,4,train -3953,1,train -1355,2,train -959,2,train -1396,3,train -3691,1,train -3870,3,train -3474,3,train -3911,4,train -876,4,train -480,4,train -3212,3,train -614,4,train -1475,3,train -1172,2,train -1213,3,train -1609,3,train -3904,1,train -910,2,train -514,2,train -3821,3,train -1905,1,train -989,2,train -3721,1,train -1123,2,train -1164,3,train -3900,3,train -4075,4,train -2118,1,train -1722,1,train -1639,3,train -1377,3,train -2331,1,train -1935,1,train -1893,4,train -1752,1,train -1972,4,train -1803,3,train -1844,4,train -1965,1,train -1703,1,train -1882,3,train -1441,1,train -1923,4,train -2319,4,train -1620,3,train -1224,3,train -1661,4,train -2057,4,train -2178,1,train -2615,2,train -1916,1,train -1520,1,train -2353,2,train -1654,1,train -2136,4,train -51,1,train -2432,2,train -2129,1,train -1733,1,train -2170,2,train -1867,1,train -1953,4,train -2349,4,train -1650,3,train -1691,4,train -1825,4,train -2645,2,train -1946,1,train -2300,4,train -1904,4,train -2038,4,train -2858,2,train -2596,2,train -39,4,train -2334,2,train -1721,4,train -3329,1,train -335,2,train -32,1,train -118,4,train -2413,2,train -2809,2,train -252,4,train -2151,2,train -3542,1,train -111,1,train -152,2,train -548,2,train -2929,3,train -3325,3,train -2626,2,train -3755,1,train -761,2,train -3142,3,train -544,4,train -2839,2,train -2880,3,train -3276,3,train -282,4,train -2577,2,train -3317,4,train -20,4,train -3176,1,train -578,2,train -182,2,train -3310,1,train -316,2,train -3530,4,train -2697,3,train -99,4,train -2831,3,train -3227,3,train -791,2,train -395,2,train -3127,1,train -529,2,train -133,2,train -2910,3,train -3306,3,train -312,4,train -3044,3,train -2648,3,train -3085,4,train -3743,4,train -1349,3,train -3602,1,train -4039,2,train -1045,3,train -649,3,train -3340,1,train -3822,4,train -346,2,train -3956,4,train -821,2,train -4035,4,train -3553,1,train -3594,2,train -3291,1,train -3377,4,train -3511,4,train -1292,1,train -1075,3,train -679,3,train -1209,3,train -376,2,train -813,3,train -3504,1,train -3986,4,train -3287,3,train -3328,4,train -1371,1,train -1505,1,train -1109,1,train -3886,2,train -1288,3,train -1329,4,train -3583,1,train -589,2,train -3803,4,train -368,3,train -3145,4,train -1188,1,train -1322,1,train -1542,4,train -3837,2,train -1239,3,train -843,3,train -3575,2,train -4016,4,train -977,3,train -3754,4,train -3358,4,train -1576,2,train -1755,4,train -877,1,train -1359,4,train -1056,3,train -660,3,train -1493,4,train -3788,2,train -794,3,train -3571,4,train -2185,2,train -1789,2,train -1486,1,train -1090,1,train -1572,4,train -3867,2,train -1706,4,train -873,3,train -1007,3,train -3784,4,train -1868,2,train -2002,2,train -1169,1,train -1303,1,train -1785,4,train -1127,4,train -2215,2,train -1819,2,train -2256,3,train -1516,1,train -1557,2,train -1340,4,train -2469,3,train -1636,2,train -1770,2,train -1374,2,train -2682,3,train -1849,2,train -2286,3,train -1983,2,train -1587,2,train -1504,4,train -2062,2,train -1800,2,train -2237,3,train -1934,2,train -197,2,train -2974,3,train -2533,1,train -2712,3,train -2316,3,train -2753,4,train -2013,2,train -2450,3,train -3008,1,train -2746,1,train -2529,3,train -2133,3,train -2966,4,train -2267,3,train -227,2,train -268,3,train -2563,1,train -2959,1,train -3045,4,train -6,3,train -2301,1,train -3179,4,train -2084,3,train -2218,3,train -3038,1,train -44,2,train -85,3,train -219,3,train -2514,1,train -2996,4,train -3392,4,train -2693,3,train -515,1,train -3292,2,train -2989,1,train -2593,1,train -3030,2,train -3426,2,train -3209,4,train -2510,3,train -2947,4,train -594,1,train -3243,2,train -3422,4,train -3026,4,train -2723,3,train -2502,4,train -807,1,train -941,1,train -545,1,train -3718,2,train -765,4,train -3019,1,train -3060,2,train -25,2,train -462,3,train -503,4,train -3194,2,train -2581,4,train -3111,4,train -2715,4,train -1020,1,train -758,1,train -1195,2,train -3931,2,train -978,4,train -3273,2,train -675,3,train -3407,2,train -413,3,train -17,3,train -2794,4,train -971,1,train -1408,2,train -3789,3,train -709,1,train -313,1,train -3486,2,train -492,3,train -533,4,train -3224,2,train -230,3,train -788,1,train -4002,3,train -1008,4,train -3699,2,train -746,4,train -3478,3,train -1438,2,train -1176,2,train -3953,3,train -959,4,train -563,4,train -3691,3,train -1255,2,train -3987,1,train -556,1,train -993,2,train -1172,4,train -3904,3,train -910,4,train -514,4,train -1468,2,train -1905,3,train -810,2,train -989,4,train -3721,3,train -2118,3,train -1722,3,train -4017,1,train -982,1,train -1023,2,train -1419,2,train -1460,3,train -1157,2,train -2018,1,train -1935,3,train -1236,2,train -1370,2,train -2365,1,train -1969,1,train -1752,3,train -2189,4,train -4047,1,train -1490,3,train -1228,3,train -2444,1,train -2048,1,train -2182,1,train -1965,3,train -1703,3,train -1441,3,train -2657,1,train -2261,1,train -2395,1,train -1999,1,train -2178,3,train -2219,4,train -2615,4,train -1916,3,train -1520,3,train -2353,4,train -1654,3,train -2608,1,train -2212,1,train -51,3,train -2346,1,train -2432,4,train -2129,3,train -1733,3,train -2170,4,train -1867,3,train -2728,2,train -2425,1,train -2029,1,train -2466,2,train -2163,1,train -1767,1,train -2645,4,train -1946,3,train -1987,4,train -164,1,train -2242,1,train -2679,2,train -2376,1,train -2858,4,train -2596,4,train -2334,4,train -377,1,train -3154,2,train -3329,3,train -2496,2,train -335,4,train -2193,1,train -2413,4,train -2151,4,train -194,1,train -3367,2,train -3542,3,train -3105,2,train -2709,2,train -111,3,train -152,4,train -548,4,train -2406,1,train -2447,2,train -2626,4,train -2843,2,train -407,1,train -3225,3,train -145,1,train -2922,2,train -3755,3,train -2660,2,train -2577,4,train -3655,1,train -224,1,train -661,2,train -358,1,train -3176,3,train -578,4,train -182,4,train -2873,2,train -3310,3,train -316,4,train -874,2,train -478,2,train -3606,1,train -612,2,train -175,1,train -395,4,train -3127,3,train -529,4,train -133,4,train -4081,1,train -1087,2,train -3819,1,train -3602,3,train -4039,4,train -167,2,train -2903,2,train -3340,3,train -346,4,train -904,2,train -3636,1,train -246,2,train -3374,1,train -380,2,train -3553,3,train -3594,4,train -3291,3,train -1375,1,train -1117,2,train -3890,2,train -855,2,train -896,3,train -1292,3,train -3587,1,train -376,4,train -1454,1,train -1588,1,train -1371,3,train -4062,1,train -1505,3,train -1109,3,train -3800,1,train -3886,4,train -806,2,train -3583,3,train -1801,1,train -1188,3,train -3879,1,train -3920,2,train -885,2,train -926,3,train -1322,3,train -664,3,train -3837,4,train -3575,4,train -1880,1,train -1484,1,train -1618,1,train -1356,1,train -4092,1,train -1576,4,train -3871,2,train -877,3,train -3788,4,train -2093,1,train -1831,1,train -1435,1,train -1872,2,train -1569,1,train -1655,4,train -1789,4,train -4084,2,train -1090,3,train -3867,4,train -2044,1,train -2085,2,train -1782,1,train -1868,4,train -2002,4,train -1169,3,train -3901,2,train -1303,3,train -1344,4,train -2164,2,train -1861,1,train -1599,1,train -1203,1,train -1819,4,train -1557,4,train -2377,2,train -2511,2,train -2249,2,train -1416,1,train -1636,4,train -1770,4,train -1374,4,train -1629,1,train -2066,2,train -1849,4,train -1983,4,train -1587,4,train -26,1,train -2541,2,train -2145,2,train -1842,1,train -1883,2,train -2062,4,train -1800,4,train -2096,2,train -2533,3,train -2013,4,train -3091,1,train -2829,1,train -3008,3,train -2309,2,train -2746,3,train -3304,1,train -310,2,train -3042,1,train -3438,1,train -48,2,train -2959,3,train -2126,2,train -2563,3,train -2301,3,train -3121,1,train -127,2,train -261,2,train -302,3,train -3038,3,train -3079,4,train -44,4,train -2380,3,train -2514,3,train -78,2,train -515,3,train -3292,4,train -2989,3,train -2593,3,train -3030,4,train -3426,4,train -811,1,train -3547,1,train -594,3,train -3285,1,train -3722,2,train -291,2,train -332,3,train -3023,1,train -29,2,train -3243,4,train -3801,2,train -807,3,train -3539,2,train -3102,1,train -3498,1,train -3718,4,train -941,3,train -545,3,train -242,2,train -3019,3,train -3060,4,train -3236,1,train -3194,4,train -1237,1,train -4014,2,train -1020,3,train -3752,2,train -758,3,train -1195,4,train -59,2,train -3273,4,train -3407,4,train -792,1,train -4006,3,train -3569,2,train -3965,2,train -971,3,train -1408,4,train -3307,2,train -709,3,train -313,3,train -3486,4,train -3703,2,train -3224,4,train -1091,4,train -3386,2,train -3782,2,train -788,3,train -3520,2,train -130,3,train -1521,2,train -822,1,train -4036,3,train -1438,4,train -560,1,train -3337,2,train -3774,3,train -1176,4,train -780,4,train -1338,2,train -1035,1,train -1472,2,train -773,1,train -859,4,train -1255,4,train -3550,2,train -556,3,train -993,4,train -3946,2,train -3987,3,train -1551,2,train -1248,1,train -1289,2,train -986,1,train -1468,4,train -3763,2,train -3804,3,train -810,4,train -1368,2,train -1502,2,train -4017,3,train -1419,4,train -1023,4,train -1157,4,train -2018,3,train -4051,1,train -1453,2,train -1057,2,train -1236,4,train -2365,3,train -1532,2,train -1969,3,train -1270,2,train -4047,3,train -2661,1,train -2265,1,train -2444,3,train -2048,3,train -2182,3,train -1349,2,train -1786,3,train -1483,2,train -2874,1,train -2478,1,train -2657,3,train -2261,3,train -2395,3,train -1999,3,train -1696,2,train -2691,1,train -2295,1,train -2429,1,train -2033,1,train -2515,4,train -2212,3,train -2904,1,train -2508,1,train -2945,2,train -2642,1,train -2246,1,train -2728,4,train -2425,3,train -2029,3,train -2466,4,train -2163,3,train -1767,3,train -2721,1,train -2325,1,train -164,3,train -2063,1,train -2242,3,train -2679,4,train -3371,2,train -2538,1,train -377,3,train -2672,1,train -3154,4,train -2496,4,train -2193,3,train -673,1,train -277,1,train -194,3,train -2489,1,train -2926,2,train -2709,4,train -2843,4,train -2447,4,train -3005,2,train -407,3,train -2702,1,train -145,3,train -2922,4,train -2481,2,train -2660,4,train -2264,4,train -307,1,train -744,2,train -441,1,train -45,1,train -3218,2,train -3655,3,train -224,3,train -661,4,train -2956,2,train -3352,2,train -2694,2,train -2873,4,train -916,1,train -520,1,train -957,2,train -3431,2,train -874,4,train -478,4,train -2773,2,train -3606,3,train -175,3,train -612,4,train -2907,2,train -3902,1,train -4081,3,train -471,1,train -908,2,train -3819,3,train -2986,2,train -167,4,train -2903,4,train -3981,1,train -1121,2,train -904,4,train -3636,3,train -3240,3,train -246,4,train -3374,3,train -380,4,train -1200,2,train -1375,3,train -3670,1,train -676,2,train -3890,4,train -855,4,train -3587,3,train -1454,3,train -3749,1,train -1588,3,train -3883,1,train -3487,1,train -889,2,train -3962,1,train -1801,3,train -4096,1,train -1102,2,train -706,2,train -3879,3,train -3920,4,train -885,4,train -1701,1,train -1880,3,train -1484,3,train -1181,2,train -1618,3,train -3913,1,train -1356,3,train -3871,4,train -1914,1,train -2093,3,train -1652,1,train -1831,3,train -1435,3,train -1872,4,train -1569,3,train -4084,4,train -3688,4,train -1731,1,train -1951,4,train -2085,4,train -3901,4,train -2340,1,train -1944,1,train -2164,4,train -1861,3,train -1420,1,train -1599,3,train -1203,3,train -1640,4,train -1895,1,train -2377,4,train -2511,4,train -2249,4,train -1416,3,train -2370,1,train -2807,2,train -2108,1,train -1712,1,train -2149,2,train -1846,1,train -1629,3,train -1670,4,train -2066,4,train -2624,2,train -2059,1,train -2145,4,train -1883,4,train -2441,2,train -2878,3,train -2575,2,train -2179,2,train -2616,3,train -2096,4,train -1700,4,train -139,1,train -3091,3,train -2788,2,train -2392,2,train -2829,3,train -2309,4,train -352,1,train -90,1,train -131,2,train -527,2,train -3304,3,train -310,4,train -3042,3,train -2646,3,train -48,4,train -2343,2,train -2126,4,train -3121,3,train -127,4,train -2422,2,train -2818,2,train -261,4,train -3417,1,train -3551,1,train -2676,3,train -78,4,train -770,2,train -811,3,train -3547,3,train -508,2,train -3285,3,train -3326,4,train -3722,4,train -291,4,train -3023,3,train -29,4,train -3581,1,train -587,2,train -3801,4,train -3405,4,train -325,2,train -3102,3,train -3539,4,train -3935,4,train -3794,1,train -3398,1,train -1237,3,train -404,2,train -4014,4,train -142,2,train -3752,4,train -59,4,train -4048,2,train -658,3,train -2953,1,train -792,3,train -3569,4,train -3965,4,train -3703,4,train -3307,4,train -1350,1,train -1088,1,train -3865,2,train -3562,1,train -568,2,train -3782,4,train -3386,4,train -3520,4,train -3124,4,train -1167,1,train -4078,2,train -1521,4,train -3379,1,train -3816,2,train -822,3,train -3554,2,train -560,3,train -3337,4,train -1118,1,train -1555,2,train -856,1,train -1338,4,train -3592,1,train -1035,3,train -1472,4,train -3633,2,train -3767,2,train -773,3,train -3550,4,train -1331,1,train -935,1,train -1768,2,train -1465,1,train -1551,4,train -3846,2,train -1289,4,train -3980,2,train -986,3,train -3763,4,train -1847,2,train -1282,1,train -1368,4,train -1502,4,train -1361,1,train -1798,2,train -1495,1,train -4051,3,train -1453,4,train -1057,4,train -2273,2,train -1353,2,train -1532,4,train -1270,4,train -2224,2,train -2265,3,train -2661,3,train -1349,4,train -1483,4,train -2561,1,train -2344,3,train -2041,2,train -2478,3,train -1779,2,train -2254,2,train -2295,3,train -2691,3,train -2429,3,train -2033,3,train -2853,1,train -2591,1,train -2725,1,train -2508,3,train -2112,3,train -2945,4,train -2642,3,train -2246,3,train -3200,1,train -2542,1,train -2721,3,train -2325,3,train -2063,3,train -3017,1,train -2621,1,train -23,2,train -64,3,train -2755,1,train -3371,4,train -2538,3,train -2672,3,train -3230,1,train -3271,2,train -236,2,train -277,3,train -673,3,train -2572,1,train -2968,1,train -2706,1,train -3009,2,train -2489,3,train -2926,4,train -707,1,train -3484,2,train -3618,2,train -2785,1,train -3222,2,train -2919,1,train -3005,4,train -2481,4,train -786,1,train -920,1,train -3697,2,train -3301,2,train -307,3,train -744,4,train -2602,1,train -4,2,train -45,3,train -441,3,train -482,4,train -2998,1,train -2956,4,train -3039,2,train -3218,4,train -2694,4,train -737,1,train -341,1,train -3514,2,train -520,3,train -957,4,train -3648,2,train -3431,4,train -2990,2,train -2773,4,train -2907,4,train -1212,1,train -991,2,train -3727,2,train -3768,3,train -292,1,train -3902,3,train -471,3,train -512,4,train -908,4,train -2986,4,train -767,1,train -371,1,train -3981,3,train -901,1,train -3282,2,train -1121,4,train -3416,2,train -4015,1,train -1417,2,train -718,1,train -1200,4,train -3670,3,train -676,4,train -1496,2,train -535,1,train -3749,3,train -3883,3,train -3487,3,train -889,4,train -1709,2,train -4045,1,train -1051,2,train -1185,2,train -3962,3,train -3566,3,train -4096,3,train -706,4,train -1701,3,train -1398,2,train -1181,4,train -3913,3,train -3954,4,train -1477,2,train -1914,3,train -1215,2,train -1652,3,train -3743,3,train -1731,3,train -4026,1,train -1032,2,train -2027,1,train -2161,1,train -1944,3,train -1420,3,train -2240,1,train -2374,1,train -1978,1,train -1716,1,train -2198,4,train -1458,2,train -1895,3,train -1936,4,train -2191,1,train -2807,4,train -2108,3,train -1712,3,train -2149,4,train -1846,3,train -2404,1,train -2841,2,train -2624,4,train -1966,4,train -3054,2,train -2441,4,train -2575,4,train -2179,4,train -222,1,train -3133,2,train -2737,2,train -139,3,train -2434,1,train -2871,2,train -2172,1,train -2609,2,train -2392,4,train -435,1,train -173,1,train -3084,2,train -2688,2,train -527,4,train -131,4,train -2426,2,train -2822,2,train -2343,4,train -386,1,train -124,1,train -2901,2,train -2639,2,train -2243,2,train -2422,4,train -203,1,train -3417,3,train -3114,2,train -3551,3,train -2456,2,train -2893,3,train -719,2,train -3451,1,train -853,2,train -457,2,train -154,1,train -591,2,train -2669,2,train -4060,1,train -3664,1,train -670,2,train -367,1,train -804,2,train -3581,3,train -105,1,train -587,4,train -325,4,train -3877,1,train -3481,1,train -4011,1,train -3615,1,train -184,1,train -621,2,train -3398,3,train -404,4,train -142,4,train -4090,1,train -1096,2,train -3828,1,train -3432,1,train -3869,2,train -397,1,train -4048,4,train -438,2,train -834,2,train -176,2,train -2953,3,train -3907,1,train -1350,3,train -3645,1,train -1088,3,train -3383,1,train -3865,4,train -785,2,train -389,2,train -3562,3,train -1167,3,train -468,2,train -3596,1,train -3682,4,train -4078,4,train -643,3,train -3379,3,train -3420,4,train -3816,4,train -3554,4,train -1859,1,train -3675,1,train -1118,3,train -1555,4,train -856,3,train -3592,3,train -3633,4,train -3767,4,train -1676,1,train -1414,1,train -1851,2,train -1152,1,train -1331,3,train -935,3,train -1768,4,train -3846,4,train -3450,4,train -3980,4,train -1847,4,train -1282,3,train -2143,2,train -2277,2,train -1881,2,train -1182,1,train -1361,3,train -1798,4,train -2490,2,train -2094,2,train -1791,1,train -1395,1,train -1832,2,train -2273,4,train -1353,4,train -2569,2,train -2045,2,train -1432,4,train -2520,2,train -2124,2,train -2561,3,train -2258,2,train -1862,2,train -2041,4,train -1779,4,train -2640,3,train -2337,2,train -2075,2,train -1679,2,train -1813,2,train -2853,3,train -2591,3,train -2288,2,train -1892,2,train -2725,3,train -2026,2,train -2887,1,train -289,2,train -3021,1,train -27,2,train -2105,2,train -2542,3,train -2239,2,train -3496,1,train -106,2,train -3234,1,train -3017,3,train -2621,3,train -3058,4,train -23,4,train -2755,3,train -2359,3,train -2097,3,train -2917,1,train -319,2,train -3051,1,train -57,2,train -3271,4,train -2968,3,train -2572,3,train -3009,4,train -2706,3,train -3567,2,train -532,2,train -3264,1,train -3305,2,train -707,3,train -311,3,train -2606,1,train -3088,4,train -8,2,train -2785,3,train -3222,4,train -3484,4,train -1003,1,train -3780,2,train -786,3,train -3518,2,train -3477,1,train -920,3,train -87,2,train -2819,1,train -3215,1,train -3301,4,train -2998,3,train -2602,3,train -3039,4,train -3435,4,train -3697,4,train -820,1,train -3993,2,train -3335,2,train -300,2,train -341,3,train -737,3,train -3514,4,train -38,2,train -2856,4,train -2990,4,train -1429,1,train -771,1,train -3548,2,train -991,4,train -3245,1,train -3727,4,train -292,3,train -1246,1,train -4064,3,train -588,1,train -1070,4,train -767,3,train -371,3,train -3499,2,train -3282,4,train -3416,4,train -4015,3,train -1417,4,train -3753,3,train -718,3,train -1713,2,train -1014,1,train -618,1,train -1496,4,train -3791,2,train -752,1,train -535,3,train -3663,2,train -1227,1,train -1709,4,train -4045,3,train -965,1,train -1051,4,train -3783,3,train -1185,4,train -1743,2,train -1481,2,train -1398,4,train -1560,2,train -1257,1,train -1298,2,train -1735,3,train -4030,1,train -1477,4,train -3813,3,train -1215,4,train -1115,2,train -1249,2,train -4026,3,train -1032,4,train -2027,3,train -2161,3,train -1765,3,train -2240,3,train -2374,3,train -1978,3,train -1675,2,train -1716,3,train -2670,1,train -2494,4,train -2191,3,train -1533,3,train -2487,1,train -2924,2,train -2225,1,train -2404,3,train -2841,4,train -2962,1,train -2700,1,train -2304,1,train -2741,2,train -3137,2,train -2438,1,train -2042,1,train -222,3,train -2517,1,train -2913,1,train -2954,2,train -2651,1,train -2255,1,train -2737,4,train -3133,4,train -2434,3,train -2871,4,train -2172,3,train -2213,4,train -2609,4,train -3033,2,train -435,3,train -2730,1,train -173,3,train -2468,1,train -2688,4,train -2292,4,train -2822,4,train -2426,4,train -469,1,train -3421,3,train -386,3,train -2722,2,train -124,3,train -2901,4,train -2639,4,train -2243,4,train -682,1,train -286,1,train -24,1,train -2801,2,train -3197,2,train -203,3,train -244,4,train -2456,4,train -895,1,train -499,1,train -633,1,train -237,1,train -3451,3,train -719,4,train -3410,2,train -457,4,train -853,4,train -3189,3,train -154,3,train -591,4,train -2886,2,train -2669,4,train -712,1,train -753,2,train -4060,3,train -54,1,train -3664,3,train -188,1,train -670,4,train -2965,2,train -804,4,train -3960,1,train -966,2,train -1100,2,train -3877,3,train -3481,3,train -401,1,train -3615,3,train -184,3,train -621,4,train -3911,1,train -480,1,train -917,2,train -4090,3,train -655,2,train -3432,3,train -3828,3,train -834,4,train -438,4,train -3869,4,train -176,4,train -3990,1,train -1392,2,train -3728,1,train -3907,3,train -3466,1,train -3948,4,train -868,2,train -3645,3,train -3383,3,train -389,4,train -947,2,train -4075,1,train -1081,2,train -468,4,train -3596,3,train -1680,1,train -1859,3,train -3758,1,train -1160,2,train -1201,3,train -898,2,train -3675,3,train -1893,1,train -1676,3,train -1414,3,train -1851,4,train -1152,3,train -3667,4,train -1972,1,train -1710,1,train -1844,1,train -1231,3,train -969,3,train -2319,1,train -1923,1,train -2057,1,train -1661,1,train -2143,4,train -2277,4,train -1881,4,train -1182,3,train -2136,1,train -1478,1,train -2094,4,train -1395,3,train -1832,4,train -2349,1,train -1953,1,train -2390,2,train -2569,4,train -1691,1,train -2128,2,train -1825,1,train -2045,4,train -1904,1,train -2341,2,train -2124,4,train -2258,4,train -1862,4,train -39,1,train -2420,2,train -2554,2,train -1721,1,train -2158,2,train -2337,4,train -2075,4,train -1679,4,train -1813,4,train -118,1,train -2767,2,train -2371,2,train -2288,4,train -1892,4,train -2026,4,train -110,2,train -2846,2,train -2887,3,train -289,4,train -2584,2,train -2188,2,train -3021,3,train -27,4,train -2105,4,train -3435,2,train -189,2,train -3317,1,train -323,2,train -3496,3,train -106,4,train -2401,2,train -3234,3,train -3396,1,train -3530,1,train -99,1,train -536,2,train -2917,3,train -319,4,train -3051,3,train -2655,3,train -57,4,train -615,2,train -3743,1,train -353,2,train -3085,1,train -3567,4,train -3264,3,train -3305,4,train -2606,3,train -8,4,train -3822,1,train -3164,1,train -566,2,train -170,2,train -607,3,train -1003,3,train -304,2,train -2902,1,train -3384,4,train -3518,4,train -87,4,train -2819,3,train -3780,4,train -3377,1,train -3814,2,train -3993,4,train -820,3,train -3511,1,train -517,2,train -3335,4,train -300,4,train -3073,4,train -38,4,train -3893,2,train -4027,2,train -3328,1,train -2932,1,train -771,3,train -3548,4,train -1329,1,train -3803,1,train -1246,3,train -3978,2,train -3145,1,train -3582,2,train -547,2,train -588,3,train -3499,4,train -3103,4,train -1542,1,train -1146,1,train -667,3,train -3358,1,train -3795,2,train -1755,1,train -1359,1,train -1493,1,train -3874,2,train -1713,4,train -3571,1,train -3612,2,train -1014,3,train -618,3,train -1055,4,train -3791,4,train -752,3,train -1572,1,train -3959,2,train -965,3,train -1785,1,train -1127,1,train -1564,2,train -1743,4,train -865,1,train -4038,2,train -1481,4,train -1085,4,train -823,4,train -2039,2,train -1340,1,train -1777,2,train -1560,4,train -1298,4,train -4030,3,train -2252,2,train -1856,2,train -1990,2,train -2031,3,train -1115,4,train -1249,4,train -2203,2,train -1807,2,train -1545,2,train -2020,2,train -1624,2,train -2753,1,train -2670,3,train -1837,2,train -1971,2,train -1575,2,train -2966,1,train -2487,3,train -2924,4,train -2225,3,train -3045,1,train -3179,1,train -2962,3,train -2700,3,train -2304,3,train -2741,4,train -3137,4,train -2438,3,train -2042,3,train -2996,1,train -43,3,train -2820,4,train -2517,3,train -2954,4,train -2255,3,train -3209,1,train -3250,2,train -2947,1,train -3033,4,train -2730,3,train -2289,1,train -2468,3,train -2509,4,train -290,1,train -3026,1,train -469,3,train -73,3,train -3201,2,train -2502,1,train -2722,4,train -765,1,train -503,1,train -682,3,train -286,3,train -2581,1,train -24,3,train -2715,1,train -2801,4,train -3197,4,train -2539,4,train -978,1,train -582,1,train -320,1,train -3097,2,train -3493,2,train -499,3,train -2794,1,train -237,3,train -2969,2,train -2886,4,train -533,1,train -970,2,train -712,3,train -753,4,train -3444,2,train -54,3,train -491,4,train -2786,2,train -188,3,train -2965,4,train -1008,1,train -1049,2,train -746,1,train -350,1,train -1183,2,train -3960,3,train -966,4,train -3657,2,train -1100,4,train -2999,2,train -401,3,train -3994,1,train -959,1,train -563,1,train -1396,2,train -3911,3,train -3474,2,train -3515,3,train -480,3,train -521,4,train -917,4,train -3212,2,train -655,4,train -1475,2,train -1609,2,train -1213,2,train -3990,3,train -514,1,train -951,2,train -3728,3,train -3466,3,train -868,4,train -4024,1,train -989,1,train -1030,2,train -1164,2,train -3545,3,train -947,4,train -551,4,train -4075,3,train -1639,2,train -1680,3,train -3975,1,train -1377,2,train -3758,3,train -1160,4,train -898,4,train -1893,3,train -1497,3,train -798,2,train -2189,1,train -1972,3,train -1710,3,train -4005,1,train -1844,3,train -3963,4,train -1923,3,train -1224,2,train -1661,3,train -2615,1,train -2219,1,train -2353,1,train -1957,1,train -2136,3,train -1478,3,train -1915,4,train -2432,1,train -2170,1,train -1774,1,train -1953,3,train -2390,4,train -1691,3,train -2128,4,train -1825,3,train -2645,1,train -2686,2,train -1987,1,train -2424,2,train -1904,3,train -1945,4,train -2341,4,train -2637,2,train -2334,1,train -2420,4,train -2554,4,train -1721,3,train -2158,4,train -335,1,train -2716,2,train -118,3,train -2413,1,train -2454,2,train -2151,1,train -2192,2,train -2371,4,train -152,1,train -2929,2,train -2667,2,train -110,4,train -2405,2,train -2584,4,train -2188,4,train -3400,1,train -406,2,train -3142,2,train -189,4,train -2484,2,train -2880,2,train -323,4,train -3317,3,train -2222,2,train -2401,4,train -182,1,train -3396,3,train -316,1,train -3530,3,train -2697,2,train -536,4,train -2831,2,train -3430,1,train -395,1,train -133,1,train -174,2,train -615,4,train -2910,2,train -353,4,train -2648,2,train -2951,3,train -3085,3,train -4039,1,train -1045,2,train -649,2,train -3822,3,train -3164,3,train -3601,4,train -566,4,train -170,4,train -2902,3,train -304,4,train -3460,1,train -3594,1,train -204,2,train -2981,3,train -3377,3,train -3511,3,train -3814,4,train -1075,2,train -679,2,train -3893,4,train -3411,1,train -813,2,train -417,2,train -3631,4,train -4027,4,train -3328,3,train -2932,3,train -3886,1,train -1329,3,train -368,2,train -3145,3,train -3582,4,train -3978,4,train -1363,1,train -1542,3,train -1146,3,train -3441,1,train -3837,1,train -843,2,train -3575,1,train -3358,3,train -3399,4,train -3795,4,train -1576,1,train -1359,3,train -4091,2,train -1493,3,train -660,2,train -3788,1,train -3874,4,train -3612,4,train -1655,1,train -1789,1,train -1572,3,train -1131,1,train -3867,1,train -873,2,train -1351,4,train -3646,2,train -3429,4,train -1868,1,train -1210,1,train -1344,1,train -1127,3,train -1564,4,train -865,3,train -4038,4,train -1819,1,train -1860,2,train -2256,2,train -1557,1,train -1161,1,train -2039,4,train -1340,3,train -1381,4,train -1777,4,train -2469,2,train -1636,1,train -2073,2,train -1770,1,train -1374,1,train -1856,4,train -2252,4,train -1990,4,train -2152,2,train -1849,1,train -1890,2,train -2286,2,train -1587,1,train -1628,2,train -1807,4,train -1411,4,train -1545,4,train -1800,1,train -1841,2,train -2237,2,train -2020,4,train -1624,4,train -2316,2,train -2753,3,train -1658,2,train -1575,4,train -2529,2,train -2133,2,train -2966,3,train -2267,2,train -2308,3,train -2866,1,train -268,2,train -3045,3,train -6,2,train -2084,2,train -3079,1,train -85,2,train -219,2,train -2996,3,train -3037,4,train -3292,1,train -339,3,train -3030,1,train -3250,4,train -2947,3,train -2289,3,train -3243,1,train -3284,2,train -2847,1,train -290,3,train -3026,3,train -3201,4,train -2805,4,train -2502,3,train -765,3,train -369,3,train -3060,1,train -3497,2,train -503,3,train -3194,1,train -2581,3,train -2715,3,train -1195,1,train -799,1,train -978,3,train -582,3,train -2877,1,train -3273,1,train -320,3,train -3097,4,train -3493,4,train -17,2,train -2794,3,train -2835,4,train -2969,4,train -878,1,train -3789,2,train -3527,2,train -533,3,train -970,4,train -3224,1,train -3444,4,train -2786,4,train -1091,1,train -829,1,train -1266,2,train -4002,2,train -1008,3,train -567,1,train -1049,4,train -3344,2,train -746,3,train -350,3,train -787,4,train -1183,4,train -3478,2,train -88,3,train -2999,4,train -1176,1,train -780,1,train -3953,2,train -3994,3,train -1396,4,train -563,3,train -3691,2,train -3474,4,train -3212,4,train -1255,1,train -859,1,train -1296,2,train -4073,3,train -993,1,train -597,1,train -1475,4,train -1213,4,train -514,3,train -951,4,train -1905,2,train -810,1,train -4024,3,train -1030,4,train -3721,2,train -1164,4,train -1722,2,train -1326,2,train -1023,1,train -627,1,train -1064,2,train -1460,2,train -847,4,train -3975,3,train -1935,2,train -1539,2,train -1236,1,train -3792,3,train -798,4,train -1752,2,train -2189,3,train -1490,2,train -1094,2,train -1228,2,train -4005,3,train -1965,2,train -1703,2,train -1307,2,train -1744,3,train -1441,2,train -1224,4,train -2302,1,train -2219,3,train -1823,3,train -2353,3,train -1520,2,train -1957,3,train -1654,2,train -2515,1,train -2253,1,train -2432,3,train -1733,2,train -1774,3,train -2170,3,train -2728,1,train -2332,1,train -2466,1,train -2686,4,train -1987,3,train -2424,4,train -2679,1,train -2720,2,train -2021,1,train -2503,4,train -2637,4,train -3329,2,train -2496,1,train -335,3,train -2716,4,train -2413,3,train -2454,4,train -2151,3,train -2192,4,train -235,1,train -3012,2,train -2709,1,train -2313,1,train -152,3,train -193,4,train -2051,1,train -2447,1,train -2929,4,train -2667,4,train -2271,4,train -2405,4,train -314,1,train -3225,2,train -3400,3,train -406,4,train -2264,1,train -2660,1,train -2701,2,train -2880,4,train -2484,4,train -3142,4,train -2222,4,train -661,1,train -3,1,train -2780,2,train -3176,2,train -182,3,train -223,4,train -2697,4,train -478,1,train -612,1,train -3430,3,train -2993,2,train -395,3,train -3127,2,train -3168,3,train -133,3,train -174,4,train -2910,4,train -2648,4,train -295,1,train -732,2,train -167,1,train -253,4,train -649,4,train -2548,2,train -3939,1,train -3677,1,train -246,1,train -3460,3,train -380,1,train -3594,3,train -2761,2,train -204,4,train -3890,1,train -896,2,train -500,2,train -679,4,train -3411,3,train -417,4,train -1371,2,train -975,2,train -3707,1,train -1109,2,train -713,2,train -1150,3,train -3445,1,train -3886,3,train -451,2,train -368,4,train -1188,2,train -3920,1,train -926,2,train -1363,3,train -664,2,train -3441,3,train -3837,3,train -3575,3,train -1659,1,train -3935,2,train -1576,3,train -3871,1,train -3957,4,train -877,2,train -4091,4,train -3695,4,train -660,4,train -1738,1,train -1872,1,train -1655,3,train -1789,3,train -4084,1,train -3688,1,train -1090,2,train -1131,3,train -3867,3,train -3646,4,train -1951,1,train -2085,1,train -1689,1,train -1868,3,train -1427,1,train -1169,2,train -1210,3,train -3901,1,train -1344,3,train -2164,1,train -1640,1,train -1819,3,train -1860,4,train -2256,4,train -1557,3,train -1161,3,train -2377,1,train -1719,1,train -2156,2,train -1457,1,train -1636,3,train -1677,4,train -2073,4,train -1374,3,train -2066,1,train -1670,1,train -2152,4,train -1849,3,train -1890,4,train -2286,4,train -1587,3,train -1628,4,train -2448,2,train -2145,1,train -1883,1,train -1487,1,train -2237,4,train -1841,4,train -2399,2,train -2096,1,train -1700,1,train -2533,2,train -2316,4,train -1658,4,train -2133,4,train -2267,4,train -48,1,train -2866,3,train -268,4,train -2126,1,train -2167,2,train -2563,2,train -6,4,train -2301,2,train -2084,4,train -127,1,train -168,2,train -302,2,train -3079,3,train -85,4,train -2380,2,train -219,4,train -2514,2,train -381,2,train -78,1,train -515,2,train -3292,3,train -2593,2,train -2634,3,train -3030,3,train -2372,3,train -594,2,train -198,2,train -3326,1,train -3722,1,train -332,2,train -3243,3,train -2847,3,train -3284,4,train -3801,1,train -3405,1,train -807,2,train -3539,1,train -3580,2,train -545,2,train -149,2,train -3363,4,train -3060,3,train -2664,3,train -3497,4,train -3752,1,train -3793,2,train -1195,3,train -799,3,train -3273,3,train -2877,3,train -17,4,train -1095,1,train -3872,2,train -4006,2,train -878,3,train -3173,1,train -616,3,train -3307,1,train -3789,4,train -313,2,train -3527,4,train -4085,2,train -1091,3,train -3386,1,train -3782,1,train -4002,4,train -829,3,train -1266,4,train -3124,1,train -130,2,train -567,3,train -3344,4,train -3520,1,train -3478,4,train -3561,2,train -1521,1,train -863,1,train -4036,2,train -646,3,train -3337,1,train -3774,2,train -780,3,train -3161,4,train -3691,4,train -1338,1,train -1472,1,train -1255,3,train -859,3,train -1296,4,train -3550,1,train -993,3,train -597,3,train -3987,2,train -1551,1,train -1592,2,train -1289,1,train -893,1,train -3804,2,train -810,3,train -3721,4,train -1368,1,train -1805,2,train -1502,1,train -1543,2,train -1722,4,train -844,1,train -1326,4,train -4017,2,train -1023,3,train -627,3,train -1064,4,train -1460,4,train -2018,2,train -923,1,train -1057,1,train -1539,4,train -1835,2,train -1532,1,train -1969,2,train -1270,1,train -1752,4,train -4047,2,train -1490,4,train -1094,4,train -1228,4,train -2048,2,train -1349,1,train -1786,2,train -1524,2,train -1703,4,train -1307,4,train -1441,4,train -2261,2,train -2302,3,train -1999,2,train -1603,2,train -2040,3,train -1520,4,train -2515,3,train -2253,3,train -2945,1,train -2728,3,train -2332,3,train -2029,2,train -2070,3,train -2466,3,train -1767,2,train -2679,3,train -2720,4,train -2021,3,train -22,3,train -2799,4,train -2496,3,train -2100,3,train -1838,3,train -235,3,train -2926,1,train -3012,4,train -2709,3,train -2313,3,train -2447,3,train -2051,3,train -2488,4,train -314,3,train -3005,1,train -3046,2,train -3225,4,train -2347,1,train -2481,1,train -2264,3,train -2701,4,train -744,1,train -3655,2,train -482,1,train -3218,1,train -3259,2,train -661,3,train -2956,1,train -3,3,train -2694,1,train -2780,4,train -3176,4,train -2518,4,train -957,1,train -299,1,train -3076,2,train -478,3,train -2773,1,train -3606,2,train -2993,4,train -3127,4,train -908,1,train -512,1,train -3289,2,train -3726,3,train -295,3,train -732,4,train -2986,1,train -3027,2,train -2765,2,train -167,3,train -2548,4,train -1028,2,train -3939,3,train -3636,2,train -3677,3,train -549,4,train -3240,2,train -246,3,train -2978,2,train -3374,2,train -380,3,train -2761,4,train -1200,1,train -1241,2,train -1375,2,train -979,2,train -676,1,train -3890,3,train -3494,3,train -896,4,train -500,4,train -238,4,train -1454,2,train -1588,2,train -975,4,train -3707,3,train -1109,4,train -713,4,train -3445,3,train -451,4,train -4003,1,train -1009,2,train -1446,3,train -706,1,train -1188,4,train -3920,3,train -926,4,train -664,4,train -1484,2,train -1659,3,train -3954,1,train -1356,2,train -3871,3,train -877,4,train -1738,3,train -4033,1,train -1435,2,train -1476,3,train -1872,3,train -3771,1,train -777,2,train -3688,3,train -1951,3,train -2085,3,train -1689,3,train -1427,3,train -3901,3,train -3942,4,train -2164,3,train -1723,1,train -1203,2,train -1640,3,train -2198,1,train -1936,1,train -1719,3,train -2156,4,train -1416,2,train -1457,3,train -2015,1,train -2149,1,train -1670,3,train -1274,3,train -2624,1,train -2665,2,train -1966,1,train -2448,4,train -2145,3,train -1883,3,train -1487,3,train -2441,1,train -2878,2,train -2179,1,train -2616,2,train -2399,4,train -2533,4,train -1700,3,train -3091,2,train -2695,2,train -2392,1,train -2829,2,train -131,1,train -2512,2,train -3042,2,train -2646,2,train -2563,4,train -2167,4,train -2301,4,train -3121,2,train -127,3,train -168,4,train -2422,1,train -2900,3,train -302,4,train -2201,2,train -2380,4,train -381,4,train -2676,2,train -515,4,train -2593,4,train -3409,1,train -811,2,train -415,2,train -594,4,train -198,4,train -2493,2,train -2930,3,train -332,4,train -3326,3,train -3801,3,train -3405,3,train -3539,3,train -3580,4,train -545,4,train -149,4,train -404,1,train -882,3,train -3659,4,train -142,1,train -183,2,train -3793,4,train -4048,1,train -4089,2,train -658,2,train -3872,4,train -1095,3,train -792,2,train -396,2,train -3173,3,train -4006,4,train -3307,3,train -3348,4,train -313,4,train -3865,1,train -3469,1,train -912,3,train -4085,4,train -213,2,train -3386,3,train -3124,3,train -3561,4,train -130,4,train -4078,1,train -3682,1,train -1521,3,train -3816,1,train -3420,1,train -822,2,train -863,3,train -3554,1,train -4036,4,train -560,2,train -3337,3,train -3378,4,train -3774,4,train -1421,1,train -1555,1,train -1159,1,train -1338,3,train -942,3,train -3237,1,train -3633,1,train -3767,1,train -4070,2,train -3987,4,train -1768,1,train -1551,3,train -1592,4,train -3450,1,train -3846,1,train -1289,3,train -893,3,train -3804,4,train -1847,1,train -1451,1,train -1189,1,train -1368,3,train -1805,4,train -1543,4,train -3838,2,train -844,3,train -4017,4,train -1798,1,train -1839,2,train -2018,4,train -3917,2,train -923,3,train -1360,4,train -4051,2,train -1057,3,train -1353,1,train -1835,4,train -1969,4,train -1270,3,train -4047,4,train -2131,2,train -2265,2,train -1432,1,train -1869,2,train -2048,4,train -1786,4,train -1390,4,train -1524,4,train -2132,3,validate -345,3,validate -83,3,validate -2082,2,validate -3685,1,validate -388,1,validate -3206,3,validate -2032,1,validate -2944,3,validate -3898,1,validate -3207,4,validate -3502,1,validate -205,1,validate -3856,4,validate -3157,3,validate -1766,3,validate -297,4,validate -247,3,validate -3673,4,validate -1242,2,validate -763,4,validate -2366,3,validate -4020,4,validate -1455,2,validate -756,1,validate -3533,2,validate -2796,1,validate -1405,1,validate -2713,3,validate -3617,1,validate -1060,3,validate -2226,1,validate -2842,4,validate -2742,2,validate -94,2,validate -2564,1,validate -11,4,validate -3130,3,validate -1219,4,validate -2560,3,validate -4080,4,validate -1515,2,validate -3689,2,validate -1902,2,validate -428,4,validate -3556,3,validate -1728,2,validate -3685,4,validate -1812,1,validate -724,2,validate -2032,4,validate -2461,1,validate -379,4,validate -808,1,validate -546,1,validate -3323,2,validate -3502,4,validate -3669,1,validate -4023,4,validate -3627,4,validate -1283,1,validate -3536,2,validate -3973,3,validate -1671,3,validate -2320,3,validate -3620,1,validate -3141,3,validate -4052,3,validate -972,1,validate -2358,2,validate -2795,3,validate -493,3,validate -1538,3,validate -705,2,validate -2704,1,validate -3833,1,validate -3616,3,validate -2796,4,validate -1963,3,validate -1405,4,validate -3700,2,validate -3687,4,validate -819,1,validate -2564,4,validate -211,1,validate -390,3,validate -3122,2,validate -3468,1,validate -3072,1,validate -3984,3,validate -2381,3,validate -2627,1,validate -2806,3,validate -1852,4,validate -678,2,validate -3152,2,validate -108,2,validate -2544,2,validate -1449,1,validate -1886,2,validate -495,2,validate -674,4,validate -3406,3,validate -2232,1,validate -3843,4,validate -2411,3,validate -3144,3,validate -546,4,validate -841,1,validate -100,3,validate -3011,4,validate -405,1,validate -9,1,validate -2445,1,validate -2228,3,validate -2961,3,validate -1833,4,validate -3873,4,validate -2000,1,validate -871,1,validate -3916,2,validate -3470,1,validate -476,2,validate -1480,1,validate -1304,4,validate -264,2,validate -47,4,validate -3125,2,validate -1734,2,validate -2384,4,validate -477,2,validate -2293,2,validate -427,1,validate -31,1,validate -210,3,validate -1947,2,validate -3288,1,validate -4066,3,validate -294,2,validate -2547,3,validate -2718,1,validate -3888,2,validate -1764,2,validate -1065,1,validate -1240,2,validate -973,3,validate -3106,2,validate -2627,4,validate -3538,4,validate -62,2,validate -840,4,validate -1403,1,validate -3572,2,validate -1449,4,validate -275,2,validate -487,1,validate -3701,3,validate -1702,4,validate -2232,4,validate -841,4,validate -3177,3,validate -2091,1,validate -2132,2,validate -875,2,validate -262,4,validate -3390,3,validate -1221,1,validate -3257,4,validate -4082,1,validate -255,1,validate -2000,4,validate -871,4,validate -475,4,validate -3207,3,validate -1950,3,validate -996,4,validate -297,3,validate -3470,4,validate -3857,4,validate -2459,1,validate -1980,3,validate -2417,4,validate -4020,3,validate -1026,4,validate -31,4,validate -2713,2,validate -1281,1,validate -2842,3,validate -1148,2,validate -1585,3,validate -411,1,validate -1664,3,validate -11,3,validate -3485,1,validate -1403,4,validate -1219,3,validate -399,4,validate -3564,1,validate -4080,3,validate -745,3,validate -3689,1,validate -3868,3,validate -1778,2,validate -3556,2,validate -1728,1,validate -259,2,validate -2082,4,validate -1686,4,validate -3685,3,validate -3120,2,validate -2032,3,validate -1729,2,validate -379,3,validate -684,1,validate -3898,3,validate -3502,3,validate -2462,1,validate -205,3,validate -4023,3,validate -938,2,validate -2675,1,validate -1022,1,validate -1242,4,validate -1413,2,validate -2358,1,validate -493,2,validate -1538,2,validate -3616,2,validate -1455,4,validate -756,3,validate -3533,4,validate -2796,3,validate -1963,2,validate -968,2,validate -1405,3,validate -3700,1,validate -3617,3,validate -2443,1,validate -2226,3,validate -3355,2,validate -1527,1,validate -2742,4,validate -94,4,validate -2564,3,validate -1082,1,validate -390,2,validate -3122,1,validate -1994,2,validate -1515,4,validate -2381,2,validate -3689,4,validate -2078,1,validate -1902,4,validate -425,1,validate -511,4,validate -2806,2,validate -3152,1,validate -3110,4,validate -1633,1,validate -2544,1,validate -724,4,validate -3153,2,validate -2461,3,validate -674,3,validate -808,3,validate -2411,2,validate -546,3,validate -3323,4,validate -3669,3,validate -1283,3,validate -1062,4,validate -2228,2,validate -322,2,validate -3536,4,validate -3923,4,validate -3620,3,validate -1833,3,validate -972,3,validate -2358,4,validate -3916,1,validate -2921,1,validate -705,4,validate -2704,3,validate -3833,3,validate -1092,4,validate -264,1,validate -47,3,validate -3175,2,validate -3125,1,validate -3734,2,validate -477,1,validate -952,2,validate -1997,2,validate -2293,1,validate -210,2,validate -1947,1,validate -819,3,validate -294,1,validate -211,3,validate -2506,1,validate -3122,4,validate -120,1,validate -557,2,validate -1764,1,validate -3072,3,validate -903,1,validate -2719,1,validate -3106,1,validate -2627,3,validate -678,4,validate -3152,4,validate -1541,1,validate -3319,1,validate -108,4,validate -2544,4,validate -1449,3,validate -275,1,validate -1886,4,validate -495,4,validate -2232,3,validate -800,2,validate -841,3,validate -276,2,validate -3094,4,validate -488,1,validate -9,3,validate -2445,3,validate -3216,2,validate -2000,3,validate -871,3,validate -3999,2,validate -3470,3,validate -476,4,validate -3083,2,validate -264,4,validate -1168,2,validate -3125,4,validate -1734,4,validate -4029,2,validate -2293,4,validate -427,3,validate -31,3,validate -1947,4,validate -3288,3,validate -294,4,validate -2718,3,validate -3888,4,validate -1148,1,validate -1585,2,validate -1764,4,validate -153,1,validate -1065,3,validate -2327,1,validate -1240,4,validate -1889,4,validate -2194,2,validate -3106,4,validate -62,4,validate -1403,3,validate -3572,4,validate -275,4,validate -487,3,validate -3219,2,validate -1828,2,validate -3868,2,validate -134,1,validate -1778,1,validate -783,1,validate -2132,4,validate -259,1,validate -875,4,validate -2082,3,validate -1221,3,validate -388,2,validate -3120,1,validate -1729,1,validate -4082,3,validate -255,3,validate -3898,2,validate -1992,2,validate -205,2,validate -2076,1,validate -247,4,validate -764,1,validate -2938,1,validate -1413,1,validate -2459,3,validate -3067,2,validate -1455,3,validate -756,2,validate -3533,3,validate -2713,4,validate -1281,3,validate -2884,2,validate -3617,2,validate -1060,4,validate -2226,2,validate -1365,2,validate -411,3,validate -1577,1,validate -3355,1,validate -94,3,validate -4043,2,validate -2177,1,validate -2560,4,validate -3781,1,validate -3564,3,validate -1994,1,validate -1515,3,validate -3689,3,validate -1995,2,validate -1778,4,validate -3556,4,validate -1728,3,validate -1812,2,validate -3153,1,validate -2461,2,validate -1729,4,validate -1896,1,validate -3678,2,validate -2462,3,validate -1283,2,validate -2109,1,validate -322,1,validate -1671,4,validate -938,4,validate -2675,3,validate -3620,2,validate -1022,3,validate -3141,4,validate -931,1,validate -972,2,validate -1413,4,validate -2358,3,validate -2795,4,validate -493,4,validate -1538,4,validate -3833,2,validate -2704,2,validate -3616,4,validate -1963,4,validate -968,4,validate -3700,3,validate -2443,3,validate -3734,1,validate -3355,4,validate -790,2,validate -1997,1,validate -91,1,validate -819,2,validate -1082,3,validate -390,4,validate -3122,3,validate -557,1,validate -3468,2,validate -3984,4,validate -1994,4,validate -2423,1,validate -1166,1,validate -2381,4,validate -2078,3,validate -425,3,validate -2806,4,validate -899,2,validate -2636,1,validate -3152,3,validate -1633,3,validate -108,3,validate -2544,3,validate -3153,4,validate -1979,2,validate -2453,1,validate -2411,4,validate -800,1,validate -276,1,validate -4057,1,validate -405,2,validate -2445,2,validate -2142,1,validate -2228,4,validate -322,4,validate -2791,1,validate -3216,1,validate -2355,1,validate -3999,1,validate -3916,3,validate -2921,3,validate -3825,1,validate -356,1,validate -831,2,validate -1480,2,validate -3083,1,validate -3217,1,validate -264,3,validate -3175,4,validate -1168,1,validate -3125,3,validate -2385,1,validate -1734,3,validate -3734,4,validate -4029,1,validate -477,3,validate -952,4,validate -1997,4,validate -2293,3,validate -427,2,validate -210,4,validate -1947,3,validate -3288,2,validate -294,3,validate -2506,3,validate -337,1,validate -2718,2,validate -557,4,validate -2852,2,validate -1764,3,validate -1065,2,validate -1199,2,validate -2802,1,validate -2244,2,validate -2719,3,validate -2194,1,validate -3106,3,validate -3015,1,validate -2323,2,validate -62,3,validate -1066,2,validate -3319,3,validate -754,1,validate -3228,1,validate -275,3,validate -487,2,validate -276,4,validate -488,3,validate -2091,2,validate -875,3,validate -572,2,validate -3390,4,validate -1221,2,validate -3216,4,validate -4041,1,validate -4082,2,validate -2650,1,validate -255,2,validate -3999,4,validate -1992,1,validate -1950,4,validate -1168,4,validate -1597,1,validate -4029,4,validate -2459,2,validate -3463,1,validate -3067,1,validate -1980,4,validate -1281,2,validate -3280,1,validate -2884,1,validate -1627,1,validate -1365,1,validate -1148,3,validate -411,2,validate -1585,4,validate -153,3,validate -2327,3,validate -3231,1,validate -1840,1,validate -1578,1,validate -1664,4,validate -321,1,validate -4043,1,validate -3485,2,validate -1099,2,validate -3564,2,validate -745,4,validate -3219,4,validate -1050,2,validate -1828,4,validate -3868,4,validate -1262,1,validate -1995,1,validate -1778,3,validate -783,3,validate -259,3,validate -1079,1,validate -388,4,validate -3120,3,validate -1729,3,validate -3678,1,validate -684,2,validate -3898,4,validate -818,2,validate -2462,2,validate -205,4,validate -938,3,validate -2675,2,validate -981,1,validate -1022,2,validate -764,3,validate -2938,3,validate -1413,3,validate -756,4,validate -1581,1,validate -968,3,validate -2884,4,validate -2443,2,validate -3617,4,validate -2226,4,validate -1577,3,validate -3355,3,validate -1527,2,validate -790,1,validate -270,2,validate -3002,1,validate -4043,4,validate -2177,3,validate -1082,2,validate -3914,2,validate -2086,1,validate -3781,3,validate -1994,3,validate -3294,1,validate -3032,1,validate -2078,2,validate -1995,4,validate -425,2,validate -899,1,validate -1033,1,validate -1854,1,validate -1162,2,validate -1633,2,validate -1812,4,validate -3153,3,validate -1979,1,validate -2461,4,validate -1896,3,validate -808,4,validate -3669,4,validate -1283,4,validate -2109,3,validate -3712,2,validate -322,3,validate -3620,4,validate -972,4,validate -1143,2,validate -2921,2,validate -3833,4,validate -2704,4,validate -831,1,validate -3175,3,validate -3734,3,validate -3347,2,validate -952,3,validate -790,4,validate -1997,3,validate -91,3,validate -3035,1,validate -819,4,validate -211,4,validate -2506,2,validate -120,2,validate -557,3,validate -2852,1,validate -3468,4,validate -3072,4,validate -903,2,validate -1199,1,validate -2244,1,validate -3115,2,validate -2719,2,validate -2423,3,validate -1462,2,validate -1674,1,validate -1808,1,validate -1116,2,validate -2323,1,validate -899,4,validate -1066,1,validate -1541,2,validate -3319,2,validate -1979,4,validate -2453,3,validate -800,3,validate -276,3,validate -3878,1,validate -2749,1,validate -488,2,validate -405,4,validate -9,4,validate -1230,1,validate -2445,4,validate -2142,3,validate -572,1,validate -3216,3,validate -3999,3,validate -356,3,validate -3300,1,validate -998,1,validate -1480,4,validate -3083,3,validate -3217,3,validate -1168,3,validate -4029,3,validate -2335,2,validate -944,2,validate -427,4,validate -3464,1,validate -3288,4,validate -2718,4,validate -2852,4,validate -153,2,validate -1065,4,validate -2327,2,validate -1199,4,validate -2802,3,validate -2244,4,validate -3148,2,validate -2194,3,validate -3015,3,validate -2323,4,validate -450,1,validate -1099,1,validate -3099,2,validate -317,2,validate -754,3,validate -487,4,validate -3219,3,validate -1050,1,validate -1828,3,validate -134,2,validate -1871,1,validate -1179,2,validate -783,2,validate -2091,4,validate -1263,1,validate -572,4,validate -1221,4,validate -388,3,validate -2521,2,validate -1130,2,validate -4082,4,validate -255,4,validate -1992,3,validate -818,1,validate -2076,2,validate -1597,3,validate -764,2,validate -2938,2,validate -2459,4,validate -3067,3,validate -2368,2,validate -2022,2,validate -1281,4,validate -3280,3,validate -2884,3,validate -3972,2,validate -2106,1,validate -715,1,validate -1627,3,validate -1365,3,validate -411,4,validate -1577,2,validate -3231,3,validate -1840,3,validate -270,1,validate -1578,3,validate -4043,3,validate -2177,2,validate -3485,4,validate -3914,1,validate -1099,4,validate -3781,2,validate -3082,1,validate -3564,4,validate -1133,2,validate -1262,3,validate -1995,3,validate -513,1,validate -2949,1,validate -1728,4,validate -647,1,validate -1162,1,validate -1079,3,validate -1812,3,validate -1896,2,validate -3678,3,validate -684,4,validate -1247,1,validate -2462,4,validate -2109,2,validate -3712,1,validate -2675,4,validate -331,1,validate -981,3,validate -1022,4,validate -2322,2,validate -3925,1,validate -931,2,validate -1143,1,validate -1581,3,validate -3700,4,validate -2443,4,validate -3347,1,validate -1527,4,validate -790,3,validate -91,2,validate -270,4,validate -3002,3,validate -1082,4,validate -3914,4,validate -3468,3,validate -3115,1,validate -2423,2,validate -3294,3,validate -3032,3,validate -1166,2,validate -1462,1,validate -2078,4,validate -1116,1,validate -425,4,validate -899,3,validate -3590,1,validate -1033,3,validate -2636,2,validate -1937,1,validate -1854,3,validate -1162,4,validate -1633,4,validate -1979,3,validate -3541,1,validate -2453,2,validate -1330,2,validate -4057,2,validate -405,3,validate -3712,4,validate -2142,2,validate -2750,1,validate -2355,2,validate -3916,4,validate -2921,4,validate -356,2,validate -3825,2,validate -831,3,validate -2830,2,validate -1480,3,validate -3217,2,validate -2385,2,validate -477,4,validate -2335,1,validate -944,1,validate -83,1,validate -2598,2,validate -3035,3,validate -2944,1,validate -3381,2,validate -2506,4,validate -1291,1,validate -337,2,validate -120,4,validate -2852,3,validate -903,4,validate -1199,3,validate -2802,2,validate -2244,3,validate -2719,4,validate -3148,1,validate -1462,4,validate -1891,1,validate -1674,3,validate -3673,2,validate -1808,3,validate -1116,4,validate -3015,2,validate -2323,3,validate -3149,2,validate -1066,3,validate -1541,4,validate -2366,1,validate -3099,1,validate -3319,4,validate -317,1,validate -754,2,validate -3228,2,validate -530,1,validate -3878,3,validate -2749,3,validate -1179,1,validate -488,4,validate -2091,3,validate -1230,3,validate -572,3,validate -2521,1,validate -1130,1,validate -4041,2,validate -2650,2,validate -1605,1,validate -3300,3,validate -998,3,validate -1818,1,validate -1597,2,validate -3463,2,validate -2335,4,validate -2368,1,validate -944,4,validate -2206,2,validate -2022,1,validate -2631,2,validate -3972,1,validate -3280,2,validate -3676,2,validate -1627,2,validate -1324,1,validate -1148,4,validate -153,4,validate -2327,4,validate -3627,2,validate -3231,2,validate -1840,2,validate -3148,4,validate -1578,2,validate -146,1,validate -321,2,validate -2320,1,validate -3485,3,validate -450,3,validate -4052,1,validate -1099,3,validate -317,4,validate -1133,1,validate -613,2,validate -1050,3,validate -1262,2,validate -134,4,validate -1871,3,validate -1179,4,validate -783,4,validate -259,4,validate -1263,3,validate -1079,2,validate -3120,4,validate -3687,2,validate -1130,4,validate -684,3,validate -818,3,validate -1688,2,validate -2076,4,validate -981,2,validate -764,4,validate -2322,1,validate -2938,4,validate -2368,4,validate -1194,2,validate -2022,4,validate -1581,2,validate -2106,3,validate -715,3,validate -1577,4,validate -100,1,validate -1527,3,validate -3660,2,validate -270,3,validate -2961,1,validate -3002,2,validate -179,1,validate -2177,4,validate -3914,3,validate -2086,2,validate -3781,4,validate -3082,3,validate -3294,2,validate -1133,4,validate -3032,2,validate -2037,2,validate -1033,2,validate -513,3,validate -2949,3,validate -1854,2,validate -1162,3,validate -3853,1,validate -1896,4,validate -1330,1,validate -1247,3,validate -2109,4,validate -3712,3,validate -973,1,validate -2322,4,validate -3925,3,validate -1622,1,validate -931,4,validate -1143,3,validate -2830,1,validate -2964,1,validate -1702,2,validate -1440,2,validate -3826,1,validate -832,2,validate -3347,3,validate -91,4,validate -262,2,validate -2598,1,validate -3035,2,validate -3381,1,validate -120,3,validate -3856,1,validate -862,2,validate -903,3,validate -3115,3,validate -2423,4,validate -1166,4,validate -1462,3,validate -1674,2,validate -3673,1,validate -1808,2,validate -1116,3,validate -3590,3,validate -3149,1,validate -2636,4,validate -1937,3,validate -763,1,validate -1541,3,validate -2283,2,validate -3541,3,validate -2453,4,validate -800,4,validate -3878,2,validate -2749,2,validate -4057,4,validate -581,2,validate -1230,2,validate -2142,4,validate -2750,3,validate -2355,4,validate -356,4,validate -3825,4,validate -3300,2,validate -998,2,validate -3083,4,validate -3217,4,validate -2385,4,validate -2335,3,validate -428,1,validate -944,3,validate -2206,1,validate -1686,2,validate -2598,4,validate -3464,2,validate -2631,1,validate -33,2,validate -3381,4,validate -3676,1,validate -379,1,validate -1291,3,validate -337,4,validate -2802,4,validate -3627,1,validate -3148,3,validate -2194,4,validate -1891,3,validate -3015,4,validate -3149,4,validate -450,2,validate -3099,3,validate -317,3,validate -754,4,validate -3228,4,validate -613,1,validate -530,3,validate -134,3,validate -1871,2,validate -1179,3,validate -1263,2,validate -2521,3,validate -3687,1,validate -1130,3,validate -4041,4,validate -2650,4,validate -1992,4,validate -1688,1,validate -1605,3,validate -2076,3,validate -36,2,validate -1818,3,validate -1597,4,validate -511,2,validate -3463,4,validate -1852,1,validate -3067,4,validate -2368,3,validate -1194,1,validate -2206,4,validate -3110,2,validate -2022,3,validate -2631,4,validate -3972,3,validate -3280,4,validate -2106,2,validate -3676,4,validate -674,1,validate -715,2,validate -3843,1,validate -1627,4,validate -1324,3,validate -1365,4,validate -3011,1,validate -3231,4,validate -3660,1,validate -1062,2,validate -1840,4,validate -1578,4,validate -146,3,validate -321,4,validate -3923,2,validate -2532,2,validate -1833,1,validate -3873,1,validate -3082,2,validate -1092,2,validate -1133,3,validate -2037,1,validate -613,4,validate -1304,1,validate -47,1,validate -1262,4,validate -2562,2,validate -513,2,validate -2949,2,validate -647,2,validate -2384,1,validate -1079,4,validate -3770,2,validate -3678,4,validate -1688,4,validate -1247,2,validate -2330,2,validate -3375,2,validate -331,2,validate -981,4,validate -2322,3,validate -3925,2,validate -931,3,validate -3538,1,validate -1673,2,validate -840,1,validate -1194,4,validate -1581,4,validate -1702,1,validate -1440,1,validate -3094,2,validate -832,1,validate -3660,4,validate -3002,4,validate -262,1,validate -179,3,validate -3257,1,validate -2086,4,validate -475,1,validate -862,1,validate -996,1,validate -3294,4,validate -3032,4,validate -1166,3,validate -3857,1,validate -2037,4,validate -3590,2,validate -1033,4,validate -3724,2,validate -2636,3,validate -1937,2,validate -1854,4,validate -3853,3,validate -2283,1,validate -2417,1,validate -1026,1,validate -3541,2,validate -1155,2,validate -1330,3,validate -4057,3,validate -581,1,validate -3146,2,validate -2750,2,validate -1889,2,validate -1622,3,validate -2355,3,validate -3825,3,validate -831,4,validate -2830,3,validate -2964,3,validate -399,1,validate -1440,4,validate -2385,3,validate -3826,3,validate -832,4,validate -345,2,validate -83,2,validate -2082,1,validate -1686,1,validate -2598,3,validate -3035,4,validate -33,1,validate -3206,2,validate -2944,2,validate -3381,3,validate -1291,2,validate -337,3,validate -3856,3,validate -862,4,validate -3157,2,validate -1766,2,validate -247,2,validate -1891,2,validate -1674,4,validate -3673,3,validate -1808,4,validate -3149,3,validate -1242,1,validate -1066,4,validate -763,3,validate -2366,2,validate -2283,4,validate -3228,3,validate -1455,1,validate -3533,1,validate -530,2,validate -1060,2,validate -3878,4,validate -2749,4,validate -581,4,validate -1230,4,validate -2742,1,validate -94,1,validate -4041,3,validate -2650,3,validate -3130,2,validate -1605,2,validate -3300,4,validate -998,4,validate -2560,2,validate -36,1,validate -1818,2,validate -1515,1,validate -1902,1,validate -511,1,validate -3463,3,validate -428,3,validate -2206,3,validate -3110,1,validate -3464,4,validate -2631,3,validate -724,1,validate -33,4,validate -3676,3,validate -1324,2,validate -3323,1,validate -3627,3,validate -1062,1,validate -3536,1,validate -3973,2,validate -1671,2,validate -146,2,validate -321,3,validate -2320,2,validate -3923,1,validate -2532,1,validate -450,4,validate -3141,2,validate -4052,2,validate -2795,2,validate -705,1,validate -1092,1,validate -613,3,validate -1050,4,validate -2562,1,validate -1871,4,validate -1263,4,validate -3770,1,validate -3687,3,validate -818,4,validate -1688,3,validate -2330,1,validate -3375,1,validate -3984,2,validate -36,4,validate -1673,1,validate -1852,3,validate -678,1,validate -1194,3,validate -108,1,validate -1886,1,validate -2106,4,validate -495,1,validate -715,4,validate -3406,2,validate -3843,3,validate -3144,2,validate -3094,1,validate -100,2,validate -3011,3,validate -3660,3,validate -2961,2,validate -179,2,validate -2532,4,validate -3873,3,validate -2086,3,validate -3082,4,validate -476,1,validate -2037,3,validate -1304,3,validate -2562,4,validate -3724,1,validate -513,4,validate -2949,4,validate -1734,1,validate -647,4,validate -3853,2,validate -2384,3,validate -3770,4,validate -1155,1,validate -4066,2,validate -1247,4,validate -2547,2,validate -2330,4,validate -3888,1,validate -3375,4,validate -3146,1,validate -1240,1,validate -331,4,validate -1889,1,validate -973,2,validate -3925,4,validate -1622,2,validate -3538,3,validate -1143,4,validate -1673,4,validate -62,1,validate -840,3,validate -2964,2,validate -3572,1,validate -1702,3,validate -3701,2,validate -1440,3,validate -3177,2,validate -3826,2,validate -832,3,validate -2132,1,validate -3347,4,validate -345,1,validate -875,1,validate -262,3,validate -3390,2,validate -3206,1,validate -3257,3,validate -475,3,validate -3207,2,validate -3856,2,validate -1950,2,validate -862,3,validate -3157,1,validate -996,3,validate -1766,1,validate -297,2,validate -3115,4,validate -247,1,validate -3857,3,validate -3590,4,validate -3724,4,validate -1937,4,validate -763,2,validate -2283,3,validate -1980,2,validate -2417,3,validate -4020,2,validate -1026,3,validate -3541,4,validate -1155,4,validate -2713,1,validate -1060,1,validate -2842,2,validate -581,3,validate -3146,4,validate -2750,4,validate -1664,2,validate -11,2,validate -3130,1,validate -1219,2,validate -2560,1,validate -399,3,validate -4080,2,validate -745,2,validate -428,2,validate -3556,1,validate -345,4,validate -83,4,validate -1686,3,validate -3685,2,validate -3464,3,validate -33,3,validate -2032,2,validate -3206,4,validate -2944,4,validate -379,2,validate -1291,4,validate -3502,2,validate -3157,4,validate -1766,4,validate -3973,1,validate -1671,1,validate -938,1,validate -1891,4,validate -1242,3,validate -3141,1,validate -2366,4,validate -3099,4,validate -2795,1,validate -493,1,validate -1538,1,validate -3616,1,validate -2796,2,validate -1963,1,validate -968,1,validate -1405,2,validate -530,4,validate -2742,3,validate -2521,4,validate -2564,2,validate -3130,4,validate -390,1,validate -1605,4,validate -3984,1,validate -36,3,validate -1818,4,validate -2381,1,validate -1902,3,validate -511,3,validate -2806,1,validate -1852,2,validate -3110,3,validate -724,3,validate -3972,4,validate -674,2,validate -3843,2,validate -3406,1,validate -808,2,validate -3144,1,validate -2411,1,validate -546,2,validate -3323,3,validate -1324,4,validate -3669,2,validate -3011,2,validate -1062,3,validate -2228,1,validate -3536,3,validate -3973,4,validate -146,4,validate -2320,4,validate -3923,3,validate -2532,3,validate -1833,2,validate -3873,2,validate -4052,4,validate -705,3,validate -1092,3,validate -1304,2,validate -47,2,validate -3175,1,validate -2562,3,validate -647,3,validate -2384,2,validate -952,1,validate -3770,3,validate -210,1,validate -4066,1,validate -211,2,validate -2547,1,validate -2330,3,validate -3375,3,validate -3072,2,validate -331,3,validate -2627,2,validate -3538,2,validate -1673,3,validate -840,2,validate -678,3,validate -1449,2,validate -1886,3,validate -495,3,validate -3406,4,validate -2232,2,validate -3701,1,validate -3144,4,validate -841,2,validate -3177,1,validate -3094,3,validate -100,4,validate -9,2,validate -2961,4,validate -3390,1,validate -179,4,validate -3257,2,validate -2000,2,validate -871,2,validate -475,2,validate -3207,1,validate -1950,1,validate -996,2,validate -297,1,validate -3470,2,validate -476,3,validate -3857,2,validate -3724,3,validate -3853,4,validate -1980,1,validate -2417,2,validate -4020,1,validate -1026,2,validate -31,2,validate -1155,3,validate -1330,4,validate -4066,4,validate -2842,1,validate -2547,4,validate -3888,3,validate -1585,1,validate -3146,3,validate -1240,3,validate -1889,3,validate -1664,1,validate -973,4,validate -1622,4,validate -11,1,validate -1403,2,validate -2830,4,validate -1219,1,validate -2964,4,validate -399,2,validate -3572,3,validate -4080,1,validate -745,1,validate -3219,1,validate -3701,4,validate -1828,1,validate -3868,1,validate -3177,4,validate -3826,4,validate -782,4,test -3036,1,test -2519,3,test -825,2,test -1341,4,test -1553,3,test -3989,3,test -84,4,test -733,4,test -2732,3,test -2549,3,test -3849,1,test -3453,1,test -593,2,test -3807,4,test -4019,3,test -939,1,test -543,1,test -2628,3,test -2409,1,test -3624,4,test -3362,4,test -976,4,test -1272,2,test -1485,2,test -3442,4,test -1140,4,test -3950,2,test -1352,3,test -4001,4,test -2431,2,test -1739,3,test -1648,1,test -2997,4,test -694,2,test -2906,2,test -1952,3,test -1649,2,test -2298,2,test -2814,4,test -2081,4,test -645,2,test -2427,3,test -2857,2,test -1769,3,test -595,1,test -378,3,test -2115,2,test -3852,1,test -641,4,test -1982,3,test -1932,2,test -463,3,test -3324,3,test -1933,3,test -1537,3,test -3453,4,test -1191,3,test -3537,3,test -1234,1,test -1058,4,test -359,3,test -3437,1,test -2745,2,test -3395,4,test -918,2,test -3650,1,test -1093,3,test -2696,2,test -2393,1,test -2479,4,test -2217,4,test -1955,4,test -826,4,test -3221,3,test -1651,1,test -2775,2,test -1518,2,test -523,2,test -2597,1,test -3213,4,test -1335,2,test -3509,2,test -1252,4,test -2077,1,test -1681,1,test -686,1,test -2727,3,test -3934,2,test -1336,3,test -2939,2,test -382,4,test -2069,2,test -3455,3,test -3193,3,test -595,4,test -2840,1,test -3322,4,test -1669,4,test -192,1,test -362,3,test -3053,1,test -2495,2,test -1104,2,test -446,2,test -1054,1,test -575,3,test -4049,1,test -2524,1,test -1437,4,test -2482,4,test -1783,3,test -2828,3,test -3437,4,test -3952,4,test -3649,3,test -1996,3,test -2130,3,test -2779,3,test -2991,2,test -1297,1,test -639,1,test -943,3,test -3720,4,test -2463,4,test -2597,4,test -3071,3,test -1206,4,test -1552,3,test -423,3,test -3155,2,test -3671,4,test -2414,4,test -3022,3,test -1848,1,test -3459,4,test -3368,2,test -1977,2,test -324,2,test -3014,4,test -408,1,test -3622,3,test -2527,2,test -366,4,test -537,2,test -3093,4,test -1482,1,test -3918,1,test -1745,2,test -1612,3,test -825,1,test -84,3,test -2649,4,test -347,4,test -3815,2,test -559,3,test -2995,3,test -905,2,test -1817,4,test -3766,2,test -593,1,test -3674,4,test -639,4,test -3929,1,test -1797,2,test -3401,2,test -3442,3,test -1140,3,test -3139,2,test -3747,1,test -1352,2,test -3268,3,test -4001,3,test -2052,4,test -1656,4,test -96,3,test -2906,1,test -1482,4,test -1649,1,test -1566,3,test -392,1,test -2081,3,test -216,4,test -3777,1,test -2427,2,test -125,2,test -2857,1,test -3036,3,test -1170,2,test -1600,1,test -825,4,test -641,3,test -1383,2,test -463,2,test -1467,1,test -3324,2,test -1933,2,test -3849,3,test -3453,3,test -2499,4,test -593,4,test -3537,2,test -939,3,test -543,3,test -1151,2,test -1759,1,test -2409,3,test -4012,2,test -918,1,test -1272,4,test -3221,2,test -573,2,test -1485,4,test -523,1,test -481,4,test -2043,2,test -3172,2,test -3950,4,test -2431,4,test -2127,1,test -1648,3,test -1252,3,test -694,4,test -3123,2,test -2727,2,test -2906,4,test -1336,2,test -2298,4,test -645,4,test -1811,2,test -2857,4,test -595,3,test -2115,4,test -3852,3,test -3365,1,test -1932,4,test -3232,2,test -2495,1,test -1500,1,test -1104,1,test -3578,1,test -1233,2,test -2970,1,test -1105,2,test -1317,1,test -1234,3,test -3966,2,test -2138,1,test -3183,1,test -922,2,test -3437,3,test -2745,4,test -1354,4,test -3649,2,test -1397,2,test -2130,2,test -3000,1,test -918,4,test -3650,3,test -2476,1,test -1347,1,test -2696,4,test -2393,3,test -1651,3,test -1086,2,test -2775,4,test -1518,4,test -2597,3,test -3071,2,test -1206,3,test -3983,4,test -1511,1,test -1552,2,test -423,2,test -3155,1,test -1335,4,test -2160,1,test -3509,4,test -1681,3,test -3680,2,test -686,3,test -3022,2,test -3459,3,test -3934,4,test -2939,4,test -3764,1,test -3368,1,test -374,2,test -1977,1,test -2111,1,test -324,1,test -2069,4,test -3235,2,test -2840,3,test -537,1,test -671,1,test -192,3,test -1795,2,test -1929,2,test -1745,1,test -3053,3,test -1104,4,test -446,4,test -2008,2,test -1612,2,test -1054,3,test -3349,1,test -2354,1,test -1958,1,test -2524,3,test -347,3,test -1217,2,test -2995,2,test -905,1,test -1817,3,test -2559,2,test -3766,1,test -3167,1,test -2991,4,test -1297,3,test -639,3,test -1076,4,test -2808,4,test -1069,1,test -3634,2,test -2935,1,test -3155,4,test -3584,1,test -1848,3,test -3401,1,test -3139,1,test -324,4,test -887,1,test -3268,2,test -408,3,test -2011,2,test -2527,4,test -96,2,test -570,1,test -1482,3,test -3918,3,test -528,4,test -1962,2,test -1566,2,test -1745,4,test -3389,4,test -3036,2,test -3170,2,test -825,3,test -2387,1,test -2824,2,test -1383,1,test -2732,4,test -3815,4,test -3462,2,test -905,4,test -3849,2,test -593,3,test -3766,4,test -939,2,test -1151,1,test -2409,2,test -4012,1,test -3929,3,test -1797,4,test -573,1,test -1485,3,test -3401,4,test -3139,4,test -1528,1,test -2043,1,test -1352,4,test -2652,2,test -1648,2,test -3123,1,test -2865,2,test -2906,3,test -999,1,test -1649,3,test -2257,2,test -2298,3,test -392,3,test -3598,1,test -2207,1,test -2427,4,test -125,4,test -2857,3,test -1170,4,test -1600,3,test -3852,2,test -817,2,test -1982,4,test -1383,4,test -463,4,test -3232,1,test -634,2,test -3324,4,test -1933,4,test -1763,1,test -1105,1,test -3537,4,test -1234,2,test -3966,1,test -239,2,test -1151,4,test -4012,4,test -2838,2,test -56,2,test -1397,1,test -918,3,test -3650,2,test -4046,2,test -1093,4,test -2393,2,test -3001,1,test -7,2,test -3221,4,test -1086,1,test -573,4,test -1518,3,test -523,3,test -3172,4,test -2043,4,test -2127,3,test -2077,2,test -3680,1,test -2211,2,test -686,2,test -3123,4,test -1512,1,test -2727,4,test -1336,4,test -2939,3,test -1811,4,test -721,1,test -3844,1,test -192,2,test -3365,3,test -1196,1,test -1929,1,test -3053,2,test -3232,4,test -2495,3,test -1500,3,test -1104,3,test -2666,1,test -3578,3,test -2008,1,test -1054,2,test -1233,4,test -2970,3,test -1105,4,test -1317,3,test -4049,2,test -2221,1,test -3966,4,test -964,1,test -922,4,test -3649,4,test -1996,4,test -2130,4,test -3000,3,test -1826,1,test -2559,1,test -2779,4,test -2476,3,test -1347,3,test -1693,2,test -1297,2,test -1431,2,test -3684,2,test -3071,4,test -1594,1,test -3634,1,test -1332,1,test -1552,4,test -423,4,test -3155,3,test -2160,3,test -3680,4,test -3022,4,test -1848,2,test -3847,1,test -416,1,test -3368,3,test -374,4,test -1977,3,test -2111,3,test -324,3,test -3235,4,test -408,2,test -3622,4,test -2011,1,test -3927,2,test -537,3,test -671,3,test -1795,4,test -1962,1,test -967,1,test -1745,3,test -2008,4,test -1612,4,test -3170,1,test -3349,3,test -1180,1,test -1958,3,test -2824,1,test -651,2,test -3815,3,test -1217,4,test -559,4,test -2995,4,test -3462,1,test -905,3,test -2559,4,test -3725,2,test -3766,3,test -1993,1,test -2855,2,test -2072,1,test -207,2,test -1810,1,test -3929,2,test -1069,3,test -3584,3,test -1797,3,test -3401,3,test -3139,3,test -3048,1,test -2652,1,test -3268,4,test -1657,1,test -2011,4,test -96,4,test -570,3,test -2865,1,test -3261,1,test -3910,1,test -2257,1,test -1566,4,test -392,2,test -3777,2,test -125,3,test -3036,4,test -1170,3,test -3170,4,test -867,2,test -3599,1,test -1600,2,test -2824,4,test -817,1,test -1383,3,test -1080,2,test -2683,1,test -1467,2,test -634,1,test -3462,4,test -3849,4,test -939,4,test -543,4,test -239,1,test -1151,3,test -1759,2,test -2409,4,test -4012,3,test -2838,1,test -56,1,test -586,1,test -2268,1,test -4046,1,test -1794,1,test -7,1,test -573,3,test -354,1,test -3172,3,test -2043,3,test -2652,4,test -3081,1,test -2127,2,test -1648,4,test -2211,1,test -3123,3,test -1216,1,test -999,3,test -2474,2,test -2257,4,test -3598,3,test -2207,3,test -1811,3,test -3852,4,test -3365,2,test -1113,2,test -851,2,test -3232,3,test -634,4,test -1500,2,test -3578,2,test -1233,3,test -1763,3,test -2970,2,test -1105,3,test -1276,1,test -1317,2,test -1234,4,test -3966,3,test -2138,2,test -3183,2,test -922,3,test -2838,4,test -3267,1,test -56,4,test -1397,3,test -4088,1,test -3000,2,test -4046,4,test -3650,4,test -2476,2,test -1347,2,test -1044,1,test -2393,4,test -1693,1,test -3001,3,test -1431,1,test -7,4,test -436,1,test -1651,4,test -1086,3,test -1956,2,test -565,2,test -3684,1,test -1511,2,test -516,2,test -2160,2,test -2077,4,test -1681,4,test -3680,3,test -686,4,test -3764,2,test -374,3,test -2111,2,test -3235,3,test -3540,1,test -721,3,test -3927,1,test -2840,4,test -1067,2,test -671,2,test -3844,3,test -192,4,test -1795,3,test -1929,3,test -2537,2,test -3053,4,test -884,2,test -2883,1,test -2008,3,test -1054,4,test -3349,2,test -2354,2,test -1958,2,test -4049,4,test -2524,4,test -2221,3,test -651,1,test -1217,3,test -1260,1,test -1826,3,test -2559,3,test -3725,1,test -3167,2,test -1693,4,test -82,1,test -1297,4,test -2855,1,test -1431,4,test -3938,1,test -207,1,test -3118,2,test -1290,1,test -3330,1,test -1069,2,test -470,2,test -3684,4,test -1594,3,test -420,1,test -3634,3,test -1332,3,test -2935,2,test -3543,1,test -3584,2,test -1848,4,test -3847,3,test -416,3,test -887,2,test -408,4,test -2011,3,test -1920,1,test -3918,4,test -1962,3,test -55,1,test -967,3,test -2916,1,test -2654,1,test -3170,3,test -867,1,test -2387,2,test -2824,3,test -651,4,test -1080,1,test -3462,3,test -2855,4,test -115,1,test -3971,1,test -1810,3,test -3929,4,test -3314,1,test -1528,2,test -3747,4,test -3048,3,test -2652,3,test -1657,3,test -3394,2,test -2865,3,test -999,2,test -696,1,test -3910,3,test -2736,1,test -1649,4,test -2474,1,test -2257,3,test -392,4,test -1954,2,test -3598,2,test -3295,1,test -3777,4,test -2207,2,test -301,2,test -867,4,test -3599,3,test -1600,4,test -817,3,test -2683,3,test -1113,1,test -851,1,test -1467,4,test -634,3,test -2633,2,test -1763,2,test -69,1,test -239,3,test -1976,2,test -1759,4,test -4054,2,test -2838,3,test -56,3,test -2268,3,test -4046,3,test -1794,3,test -2960,1,test -3001,2,test -7,3,test -1956,1,test -565,1,test -523,4,test -2303,1,test -3081,3,test -2127,4,test -516,1,test -2036,2,test -2077,3,test -2211,3,test -1512,2,test -1216,3,test -721,2,test -1804,2,test -1067,1,test -3844,2,test -3365,4,test -1196,2,test -2537,1,test -851,4,test -2495,4,test -884,1,test -1500,4,test -2666,2,test -3578,4,test -2101,1,test -2970,4,test -1276,3,test -1317,4,test -4049,3,test -2221,2,test -2138,4,test -964,2,test -3183,4,test -1310,1,test -3267,3,test -3909,1,test -2914,1,test -3000,4,test -1826,2,test -1960,2,test -3563,1,test -2476,4,test -1261,1,test -1347,4,test -1044,3,test -2647,2,test -1693,3,test -1431,3,test -436,3,test -2731,1,test -782,2,test -1078,1,test -3118,1,test -565,4,test -470,1,test -3684,3,test -1553,1,test -1594,2,test -1332,2,test -1511,4,test -2160,4,test -683,1,test -3847,2,test -416,2,test -2415,1,test -3764,4,test -3368,4,test -1977,4,test -2111,4,test -2628,1,test -3927,3,test -537,4,test -671,4,test -3362,2,test -2537,4,test -967,2,test -884,4,test -3349,4,test -1442,2,test -2354,4,test -1180,2,test -1958,4,test -135,1,test -651,3,test -1739,1,test -1260,3,test -2863,2,test -2601,2,test -3725,3,test -3167,4,test -1993,2,test -2814,2,test -2855,3,test -3938,3,test -2072,2,test -207,3,test -1810,2,test -3118,4,test -378,1,test -1290,3,test -3330,3,test -1069,4,test -3414,2,test -420,3,test -2935,4,test -3543,3,test -3584,4,test -1537,1,test -1191,1,test -3747,3,test -3048,2,test -887,4,test -1657,2,test -3656,1,test -3394,1,test -3528,1,test -1920,3,test -3261,2,test -3395,2,test -3910,2,test -1742,2,test -55,3,test -1954,1,test -3777,3,test -697,1,test -301,1,test -2916,3,test -2654,3,test -1955,2,test -826,2,test -867,3,test -3599,2,test -2387,4,test -3637,1,test -1080,3,test -2683,2,test -1984,1,test -1467,3,test -2633,1,test -2197,1,test -3242,1,test -2980,1,test -1976,1,test -1759,3,test -4054,1,test -2585,2,test -1456,2,test -3193,1,test -3971,3,test -586,2,test -2268,2,test -1794,2,test -362,1,test -3314,3,test -3610,1,test -1528,4,test -354,2,test -3739,2,test -1437,2,test -3081,2,test -2036,1,test -1216,2,test -3952,2,test -3690,2,test -999,4,test -696,3,test -2736,3,test -2474,3,test -3598,4,test -3295,3,test -2207,4,test -301,4,test -122,1,test -1804,1,test -1938,1,test -943,1,test -3720,2,test -2067,2,test -1113,3,test -851,3,test -2633,4,test -1763,4,test -1276,2,test -1410,2,test -19,2,test -2751,1,test -2138,3,test -1976,4,test -3183,3,test -4054,4,test -103,1,test -3267,2,test -1397,4,test -4088,2,test -3093,2,test -1960,1,test -1044,2,test -2647,1,test -3001,4,test -436,2,test -1086,4,test -1956,3,test -782,1,test -565,3,test -1341,1,test -84,1,test -733,1,test -1511,3,test -516,3,test -2036,4,test -1512,4,test -3764,3,test -3807,1,test -3540,2,test -3674,2,test -721,4,test -3624,1,test -1804,4,test -1067,3,test -3066,2,test -3362,1,test -3844,4,test -976,1,test -1196,4,test -3491,2,test -1929,4,test -2537,3,test -884,3,test -2883,2,test -2666,4,test -1442,1,test -2354,3,test -1705,2,test -2221,4,test -3442,1,test -964,4,test -1310,3,test -1656,2,test -1260,2,test -2863,1,test -2997,1,test -2601,1,test -3909,3,test -1826,4,test -1960,4,test -3563,3,test -3167,3,test -1261,3,test -2647,4,test -82,2,test -2814,1,test -2081,1,test -216,2,test -2731,3,test -3938,2,test -1078,3,test -3118,3,test -1290,2,test -3330,2,test -470,3,test -641,1,test -3414,1,test -1594,4,test -420,2,test -3634,4,test -1332,4,test -2935,3,test -3543,2,test -683,3,test -3847,4,test -416,4,test -2415,3,test -3756,2,test -2499,2,test -887,3,test -1058,1,test -1920,2,test -3395,1,test -1742,1,test -1962,4,test -55,2,test -967,4,test -2479,1,test -2916,2,test -2217,1,test -2654,2,test -1955,1,test -826,1,test -1442,4,test -1180,4,test -2387,3,test -135,3,test -481,2,test -3213,1,test -2863,4,test -1252,1,test -2601,4,test -1993,4,test -382,1,test -115,2,test -2585,1,test -1456,1,test -2072,4,test -3971,2,test -1810,4,test -3322,1,test -66,2,test -1669,1,test -3414,4,test -3314,2,test -1528,3,test -3739,1,test -3048,4,test -1437,1,test -1657,4,test -3656,3,test -2482,1,test -3394,3,test -3528,3,test -3952,1,test -3261,4,test -1354,2,test -2865,4,test -3690,1,test -696,2,test -3910,4,test -2736,2,test -1742,4,test -1954,3,test -3295,2,test -697,3,test -301,3,test -3599,4,test -1692,2,test -817,4,test -3720,1,test -860,2,test -3637,3,test -2463,1,test -2067,1,test -2683,4,test -1984,3,test -1206,1,test -3983,2,test -2633,3,test -3671,1,test -3113,2,test -2414,1,test -2197,3,test -3459,1,test -69,2,test -3242,3,test -2980,3,test -1410,1,test -19,1,test -3192,2,test -239,4,test -1976,3,test -4054,3,test -2585,4,test -1456,4,test -3014,1,test -366,1,test -3143,2,test -586,4,test -2268,4,test -3093,1,test -1794,4,test -2960,2,test -3610,3,test -2911,2,test -354,4,test -3739,4,test -2303,2,test -3081,4,test -2649,1,test -347,1,test -2036,3,test -2211,4,test -1216,4,test -1512,3,test -3690,4,test -1817,1,test -3674,1,test -1076,2,test -122,3,test -1804,3,test -3066,1,test -1938,3,test -2808,2,test -1196,3,test -3491,1,test -2067,4,test -2666,3,test -2101,2,test -1276,4,test -1705,1,test -1410,4,test -19,4,test -2314,2,test -2751,3,test -964,3,test -103,3,test -1310,2,test -2052,1,test -1656,1,test -3267,4,test -3909,2,test -4088,4,test -2914,2,test -1960,3,test -3563,2,test -528,2,test -1261,2,test -1044,4,test -2647,3,test -216,1,test -3389,2,test -436,4,test -2731,2,test -782,3,test -1078,2,test -2519,2,test -1341,3,test -1553,2,test -3989,2,test -733,3,test -2732,2,test -683,2,test -2415,2,test -2549,2,test -3756,1,test -2499,1,test -3807,3,test -4019,2,test -2628,2,test -3540,4,test -3927,4,test -3624,3,test -3066,4,test -3362,3,test -976,3,test -3491,4,test -2883,4,test -1272,1,test -1442,3,test -1180,3,test -1485,1,test -1705,4,test -135,2,test -481,1,test -3950,1,test -2431,1,test -1739,2,test -1260,4,test -2863,3,test -2997,3,test -2601,3,test -694,1,test -3725,4,test -1993,3,test -2298,1,test -82,4,test -2814,3,test -645,1,test -3938,4,test -2072,3,test -207,4,test -1769,2,test -378,2,test -1290,4,test -3330,4,test -2115,1,test -66,1,test -3414,3,test -420,4,test -1982,2,test -3543,4,test -1932,1,test -1537,2,test -3756,4,test -1191,2,test -3656,2,test -1058,3,test -359,2,test -3528,2,test -1920,4,test -2745,1,test -3261,3,test -1354,1,test -3395,3,test -1742,3,test -55,4,test -1093,2,test -697,2,test -2696,1,test -2479,3,test -2916,4,test -2654,4,test -1955,3,test -826,3,test -1692,1,test -2775,1,test -1518,1,test -860,1,test -3637,2,test -1080,4,test -3213,3,test -1984,2,test -3983,1,test -1335,1,test -3509,1,test -3113,1,test -2197,2,test -3934,1,test -3242,2,test -2939,1,test -2980,2,test -382,3,test -3192,1,test -115,4,test -2069,1,test -2585,3,test -1456,3,test -3455,2,test -3193,2,test -3971,4,test -3143,1,test -586,3,test -3322,3,test -66,4,test -1669,3,test -362,2,test -3314,4,test -446,1,test -3610,2,test -575,2,test -2911,1,test -354,3,test -3739,3,test -1437,3,test -2482,3,test -1783,2,test -2828,2,test -3952,3,test -3690,3,test -696,4,test -2736,4,test -1996,2,test -2474,4,test -2779,2,test -3295,4,test -2991,1,test -1076,1,test -1692,4,test -122,2,test -1938,2,test -2808,1,test -943,2,test -3720,3,test -860,4,test -2463,3,test -2067,3,test -1113,4,test -3671,3,test -3113,4,test -2414,3,test -69,4,test -1410,3,test -19,3,test -2314,1,test -2751,2,test -3192,4,test -103,2,test -3014,3,test -3622,2,test -2527,1,test -366,3,test -3143,4,test -4088,3,test -3093,3,test -528,1,test -2960,4,test -3389,1,test -1956,4,test -2519,1,test -2911,4,test -1341,2,test -3989,1,test -84,2,test -2303,4,test -733,2,test -2732,1,test -516,4,test -2649,3,test -3815,1,test -559,2,test -2549,1,test -3807,2,test -4019,1,test -3540,3,test -3674,3,test -3624,2,test -1067,4,test -3066,3,test -976,2,test -3491,3,test -2883,3,test -2101,4,test -1797,1,test -1705,3,test -3442,2,test -2314,4,test -1140,2,test -1352,1,test -1310,4,test -4001,2,test -2052,3,test -1656,3,test -2997,2,test -3909,4,test -2914,4,test -3563,4,test -1952,1,test -1261,4,test -82,3,test -2081,2,test -216,3,test -2731,4,test -2427,1,test -125,1,test -1769,1,test -1078,4,test -1170,1,test -2519,4,test -470,4,test -641,2,test -1553,4,test -3989,4,test -1982,1,test -463,1,test -683,4,test -3324,1,test -1933,1,test -2415,4,test -2549,4,test -3756,3,test -3453,2,test -2499,3,test -3537,1,test -4019,4,test -543,2,test -2628,4,test -1058,2,test -359,1,test -1093,1,test -1272,3,test -2479,2,test -2217,2,test -3221,1,test -135,4,test -481,3,test -3172,1,test -3213,2,test -3950,3,test -2431,3,test -1739,4,test -1252,2,test -694,3,test -2727,1,test -1336,1,test -1952,4,test -382,2,test -115,3,test -645,3,test -1811,1,test -3455,1,test -1769,4,test -595,2,test -378,4,test -2115,3,test -3322,2,test -66,3,test -1669,2,test -1932,3,test -1537,4,test -1233,1,test -575,1,test -1191,4,test -3656,4,test -2482,2,test -3394,4,test -1783,1,test -359,4,test -3528,4,test -2828,1,test -922,1,test -3437,2,test -2745,3,test -1354,3,test -3649,1,test -1996,1,test -2130,1,test -1954,4,test -2779,1,test -697,4,test -2696,3,test -1651,2,test -1692,3,test -2775,3,test -860,3,test -3637,4,test -2463,2,test -2597,2,test -3071,1,test -1206,2,test -3983,3,test -1984,4,test -1552,1,test -423,1,test -1335,3,test -3671,2,test -3509,3,test -3113,3,test -1681,2,test -2414,2,test -2197,4,test -3459,2,test -3022,1,test -3934,3,test -69,3,test -3242,4,test -2980,4,test -374,1,test -3192,3,test -2069,3,test -3235,1,test -3455,4,test -3014,2,test -3193,4,test -3622,1,test -366,2,test -3143,3,test -2840,2,test -1795,1,test -2960,3,test -362,4,test -446,3,test -1612,1,test -3610,4,test -575,4,test -2911,3,test -2524,2,test -2303,3,test -1783,4,test -2649,2,test -347,2,test -2828,4,test -1217,1,test -559,1,test -2995,1,test -1817,2,test -2991,3,test -639,2,test -1076,3,test -122,4,test -1938,4,test -2808,3,test -943,4,test -2101,3,test -2314,3,test -2751,4,test -1140,1,test -103,4,test -3268,1,test -4001,1,test -2052,2,test -2527,3,test -96,1,test -2914,3,test -1482,2,test -3918,2,test -528,3,test -1566,1,test -3389,3,test -1695,2,calibrate -596,3,calibrate -1433,2,calibrate -2625,3,calibrate -624,3,calibrate -3150,4,calibrate -1988,4,calibrate -3591,3,calibrate -1737,4,calibrate -201,4,calibrate -3552,2,calibrate -273,1,calibrate -3446,2,calibrate -2336,3,calibrate -748,2,calibrate -2933,2,calibrate -1345,1,calibrate -3408,3,calibrate -2850,4,calibrate -2017,3,calibrate -1011,3,calibrate -603,1,calibrate -1941,4,calibrate -1264,3,calibrate -3397,2,calibrate -710,2,calibrate -3860,1,calibrate -1558,1,calibrate -4058,4,calibrate -907,3,calibrate -3191,1,calibrate -4069,4,calibrate -3119,3,calibrate -774,4,calibrate -75,3,calibrate -2500,3,calibrate -657,4,calibrate -2952,2,calibrate -3666,1,calibrate -209,3,calibrate -3131,4,calibrate -2671,1,calibrate -186,1,calibrate -858,3,calibrate -2869,4,calibrate -1299,2,calibrate -3332,3,calibrate -2233,4,calibrate -3070,3,calibrate -1238,4,calibrate -1667,1,calibrate -725,4,calibrate -2724,3,calibrate -2317,3,calibrate -2328,3,calibrate -1584,3,calibrate -3613,3,calibrate -2477,1,calibrate -2663,2,calibrate -76,3,calibrate -3731,4,calibrate -3346,4,calibrate -980,1,calibrate -49,4,calibrate -2014,1,calibrate -71,1,calibrate -2290,3,calibrate -2279,3,calibrate -3905,4,calibrate -888,3,calibrate -596,2,calibrate -637,3,calibrate -2625,2,calibrate -3810,4,calibrate -2837,1,calibrate -3715,1,calibrate -1644,4,calibrate -201,3,calibrate -3552,1,calibrate -1040,2,calibrate -2336,2,calibrate -748,1,calibrate -2933,1,calibrate -3408,2,calibrate -466,4,calibrate -2017,2,calibrate -3829,4,calibrate -1941,3,calibrate -1264,2,calibrate -3316,4,calibrate -710,1,calibrate -2825,4,calibrate -907,2,calibrate -2708,4,calibrate -3863,2,calibrate -3119,2,calibrate -177,4,calibrate -1758,3,calibrate -629,3,calibrate -774,3,calibrate -740,1,calibrate -75,2,calibrate -2500,2,calibrate -657,3,calibrate -2952,1,calibrate -1165,1,calibrate -858,2,calibrate -1613,2,calibrate -1299,1,calibrate -1385,4,calibrate -2536,4,calibrate -2199,1,calibrate -2233,3,calibrate -2210,1,calibrate -3574,2,calibrate -273,4,calibrate -3312,2,calibrate -725,3,calibrate -2317,2,calibrate -2328,2,calibrate -3613,2,calibrate -3658,1,calibrate -2663,1,calibrate -2016,1,calibrate -603,4,calibrate -4068,3,calibrate -3346,3,calibrate -4079,3,calibrate -2677,3,calibrate -2290,2,calibrate -2279,2,calibrate -3905,3,calibrate -3191,4,calibrate -3475,1,calibrate -888,2,calibrate -637,2,calibrate -2625,1,calibrate -375,2,calibrate -3779,3,calibrate -1644,3,calibrate -1142,3,calibrate -2297,1,calibrate -2734,2,calibrate -454,2,calibrate -1040,1,calibrate -2336,1,calibrate -3741,3,calibrate -747,4,calibrate -466,3,calibrate -3976,4,calibrate -496,4,calibrate -1941,2,calibrate -1264,1,calibrate -3316,3,calibrate -355,1,calibrate -71,4,calibrate -907,1,calibrate -960,4,calibrate -3714,3,calibrate -2825,3,calibrate -1400,1,calibrate -249,1,calibrate -2708,3,calibrate -3863,1,calibrate -177,3,calibrate -1758,2,calibrate -629,2,calibrate -1362,2,calibrate -3425,4,calibrate -2837,4,calibrate -1970,1,calibrate -1959,1,calibrate -553,3,calibrate -2882,3,calibrate -2190,4,calibrate -1005,2,calibrate -3715,4,calibrate -1613,1,calibrate -526,4,calibrate -2536,3,calibrate -1385,3,calibrate -3574,1,calibrate -2464,2,calibrate -2475,2,calibrate -3312,1,calibrate -2810,1,calibrate -2035,4,calibrate -4079,2,calibrate -4068,2,calibrate -2677,2,calibrate -1985,3,calibrate -3600,4,calibrate -2186,2,calibrate -3109,4,calibrate -637,1,calibrate -241,1,calibrate -375,1,calibrate -1590,4,calibrate -3779,2,calibrate -344,4,calibrate -1644,2,calibrate -283,3,calibrate -3049,4,calibrate -1165,4,calibrate -757,2,calibrate -1142,2,calibrate -2734,1,calibrate -454,1,calibrate -484,2,calibrate -1780,2,calibrate -3858,2,calibrate -1981,1,calibrate -830,1,calibrate -1312,4,calibrate -150,4,calibrate -161,4,calibrate -3741,2,calibrate -579,1,calibrate -2205,2,calibrate -747,3,calibrate -3976,3,calibrate -496,3,calibrate -731,4,calibrate -2016,4,calibrate -1776,4,calibrate -385,4,calibrate -2825,2,calibrate -960,3,calibrate -3714,2,calibrate -2604,3,calibrate -3475,4,calibrate -525,2,calibrate -2984,4,calibrate -1362,1,calibrate -3425,3,calibrate -553,2,calibrate -4063,3,calibrate -2190,3,calibrate -2220,4,calibrate -1005,1,calibrate -2882,2,calibrate -2923,3,calibrate -526,3,calibrate -2536,2,calibrate -1385,2,calibrate -1426,3,calibrate -913,3,calibrate -2475,1,calibrate -2464,1,calibrate -3679,4,calibrate -3573,4,calibrate -571,1,calibrate -1042,4,calibrate -4079,1,calibrate -4068,1,calibrate -2677,1,calibrate -1985,2,calibrate -3600,3,calibrate -3652,4,calibrate -2186,1,calibrate -1506,4,calibrate -355,4,calibrate -3109,3,calibrate -795,1,calibrate -1400,4,calibrate -1590,3,calibrate -3779,1,calibrate -837,3,calibrate -2003,1,calibrate -1072,4,calibrate -3049,3,calibrate -283,2,calibrate -757,1,calibrate -484,1,calibrate -1780,1,calibrate -1855,4,calibrate -3858,1,calibrate -3899,2,calibrate -1312,3,calibrate -161,3,calibrate -150,3,calibrate -3827,4,calibrate -2205,1,calibrate -3576,4,calibrate -496,2,calibrate -731,3,calibrate -2364,3,calibrate -906,4,calibrate -206,1,calibrate -385,3,calibrate -2604,2,calibrate -3382,4,calibrate -3265,4,calibrate -525,1,calibrate -2984,3,calibrate -1874,4,calibrate -734,4,calibrate -3425,2,calibrate -1623,4,calibrate -4063,2,calibrate -2923,2,calibrate -2220,3,calibrate -526,2,calibrate -1426,2,calibrate -913,2,calibrate -3679,3,calibrate -685,4,calibrate -1981,4,calibrate -830,4,calibrate -3573,3,calibrate -579,4,calibrate -3640,2,calibrate -1042,3,calibrate -328,4,calibrate -3412,4,calibrate -1695,1,calibrate -1433,1,calibrate -3944,4,calibrate -2804,4,calibrate -2060,4,calibrate -3652,3,calibrate -3933,4,calibrate -624,2,calibrate -1536,4,calibrate -3109,2,calibrate -3150,3,calibrate -1988,3,calibrate -3591,2,calibrate -1737,3,calibrate -3446,1,calibrate -837,2,calibrate -1072,3,calibrate -1258,4,calibrate -2850,3,calibrate -1855,3,calibrate -1011,2,calibrate -3899,1,calibrate -1683,4,calibrate -3827,3,calibrate -3397,1,calibrate -3576,3,calibrate -571,4,calibrate -4069,3,calibrate -2611,4,calibrate -2204,4,calibrate -4058,3,calibrate -2364,2,calibrate -2604,1,calibrate -209,2,calibrate -3382,3,calibrate -3131,3,calibrate -3265,3,calibrate -2869,3,calibrate -3332,2,calibrate -1874,3,calibrate -734,3,calibrate -3070,2,calibrate -1623,3,calibrate -1238,3,calibrate -4063,1,calibrate -2923,1,calibrate -2220,2,calibrate -2724,2,calibrate -2003,4,calibrate -1584,2,calibrate -1345,4,calibrate -76,2,calibrate -913,1,calibrate -3679,2,calibrate -3731,3,calibrate -685,3,calibrate -49,3,calibrate -3640,1,calibrate -3860,4,calibrate -3412,3,calibrate -1558,4,calibrate -596,1,calibrate -3810,3,calibrate -3933,3,calibrate -3944,3,calibrate -2804,3,calibrate -3652,2,calibrate -624,1,calibrate -1536,3,calibrate -3150,2,calibrate -1988,2,calibrate -3591,1,calibrate -3666,4,calibrate -186,4,calibrate -1737,2,calibrate -201,2,calibrate -2671,4,calibrate -1667,4,calibrate -3408,1,calibrate -1258,3,calibrate -2850,2,calibrate -2477,4,calibrate -2017,1,calibrate -1011,1,calibrate -3829,3,calibrate -1683,3,calibrate -980,4,calibrate -2014,4,calibrate -4058,2,calibrate -2611,3,calibrate -4069,2,calibrate -2204,3,calibrate -3119,1,calibrate -2364,1,calibrate -774,2,calibrate -75,1,calibrate -2500,1,calibrate -657,2,calibrate -209,1,calibrate -3382,2,calibrate -3131,2,calibrate -858,1,calibrate -2869,2,calibrate -3332,1,calibrate -2233,2,calibrate -3070,1,calibrate -3552,4,calibrate -1238,2,calibrate -273,3,calibrate -3446,4,calibrate -748,4,calibrate -2724,1,calibrate -2328,1,calibrate -1584,1,calibrate -725,2,calibrate -3613,1,calibrate -1345,3,calibrate -2317,1,calibrate -2933,4,calibrate -76,1,calibrate -3731,2,calibrate -3346,2,calibrate -603,3,calibrate -49,2,calibrate -3397,4,calibrate -710,4,calibrate -3860,3,calibrate -2290,1,calibrate -2279,1,calibrate -3905,2,calibrate -3191,3,calibrate -888,1,calibrate -3810,2,calibrate -3933,2,calibrate -2804,2,calibrate -3944,2,calibrate -740,4,calibrate -3666,3,calibrate -2952,4,calibrate -186,3,calibrate -201,1,calibrate -1299,4,calibrate -2199,4,calibrate -2210,4,calibrate -1667,3,calibrate -466,2,calibrate -3658,4,calibrate -2477,3,calibrate -2663,4,calibrate -3829,2,calibrate -1941,1,calibrate -980,3,calibrate -3316,2,calibrate -71,3,calibrate -4058,1,calibrate -4069,1,calibrate -2204,2,calibrate -2708,2,calibrate -596,4,calibrate -177,2,calibrate -2625,4,calibrate -1758,1,calibrate -629,1,calibrate -774,1,calibrate -2837,3,calibrate -3715,3,calibrate -657,1,calibrate -2233,1,calibrate -2297,4,calibrate -3552,3,calibrate -1238,1,calibrate -1040,4,calibrate -273,2,calibrate -2336,4,calibrate -748,3,calibrate -725,1,calibrate -2933,3,calibrate -603,2,calibrate -3731,1,calibrate -3346,1,calibrate -1264,4,calibrate -3905,1,calibrate -907,4,calibrate -3191,2,calibrate -249,4,calibrate -3810,1,calibrate -3863,4,calibrate -740,3,calibrate -344,3,calibrate -1970,4,calibrate -75,4,calibrate -1959,4,calibrate -1644,1,calibrate -186,2,calibrate -2952,3,calibrate -1165,3,calibrate -1142,1,calibrate -858,4,calibrate -1299,3,calibrate -1613,4,calibrate -2199,3,calibrate -2210,3,calibrate -3574,4,calibrate -1667,2,calibrate -3312,4,calibrate -3741,1,calibrate -2317,4,calibrate -2328,4,calibrate -747,2,calibrate -2810,4,calibrate -466,1,calibrate -3976,2,calibrate -3658,3,calibrate -2663,3,calibrate -3829,1,calibrate -2016,3,calibrate -1776,3,calibrate -3316,1,calibrate -71,2,calibrate -2825,1,calibrate -960,2,calibrate -3714,1,calibrate -2290,4,calibrate -2279,4,calibrate -2708,1,calibrate -3475,3,calibrate -888,4,calibrate -637,4,calibrate -241,4,calibrate -177,1,calibrate -375,4,calibrate -2837,2,calibrate -553,1,calibrate -3715,2,calibrate -2190,2,calibrate -2882,1,calibrate -2536,1,calibrate -1385,1,calibrate -2297,3,calibrate -2734,4,calibrate -454,4,calibrate -1040,3,calibrate -2035,2,calibrate -1985,1,calibrate -3600,2,calibrate -1506,3,calibrate -355,3,calibrate -1400,3,calibrate -249,3,calibrate -3863,3,calibrate -1590,2,calibrate -1758,4,calibrate -629,4,calibrate -1362,4,calibrate -740,2,calibrate -344,2,calibrate -1970,3,calibrate -1959,3,calibrate -1005,4,calibrate -283,1,calibrate -3049,2,calibrate -1613,3,calibrate -1165,2,calibrate -2210,2,calibrate -2199,2,calibrate -3574,3,calibrate -2464,4,calibrate -1312,2,calibrate -150,2,calibrate -3312,3,calibrate -161,2,calibrate -2475,4,calibrate -747,1,calibrate -2810,3,calibrate -3658,2,calibrate -3976,1,calibrate -496,1,calibrate -731,2,calibrate -2016,2,calibrate -906,3,calibrate -4079,4,calibrate -4068,4,calibrate -1776,2,calibrate -2677,4,calibrate -385,2,calibrate -960,1,calibrate -2186,4,calibrate -3475,2,calibrate -795,4,calibrate -241,3,calibrate -2984,2,calibrate -375,3,calibrate -3425,1,calibrate -3779,4,calibrate -2190,1,calibrate -526,1,calibrate -1426,1,calibrate -757,4,calibrate -1142,4,calibrate -2297,2,calibrate -454,3,calibrate -484,4,calibrate -2734,3,calibrate -1780,4,calibrate -3858,4,calibrate -1981,3,calibrate -830,3,calibrate -3573,2,calibrate -3741,4,calibrate -579,3,calibrate -2205,4,calibrate -1042,2,calibrate -328,3,calibrate -2035,1,calibrate -2060,3,calibrate -3600,1,calibrate -206,4,calibrate -1506,2,calibrate -355,2,calibrate -3109,1,calibrate -3714,4,calibrate -1400,2,calibrate -249,2,calibrate -1590,1,calibrate -525,4,calibrate -1362,3,calibrate -344,1,calibrate -1959,2,calibrate -1970,2,calibrate -837,1,calibrate -553,4,calibrate -2882,4,calibrate -1005,3,calibrate -1072,2,calibrate -3049,1,calibrate -1855,2,calibrate -2475,3,calibrate -1312,1,calibrate -150,1,calibrate -2464,3,calibrate -161,1,calibrate -3827,2,calibrate -3576,2,calibrate -2810,2,calibrate -571,3,calibrate -731,1,calibrate -1695,4,calibrate -906,2,calibrate -1776,1,calibrate -1433,4,calibrate -1985,4,calibrate -385,1,calibrate -2186,3,calibrate -795,3,calibrate -3265,2,calibrate -241,2,calibrate -2984,1,calibrate -1874,2,calibrate -734,2,calibrate -1623,2,calibrate -2220,1,calibrate -2003,3,calibrate -283,4,calibrate -757,3,calibrate -484,3,calibrate -1780,3,calibrate -3679,1,calibrate -685,2,calibrate -3858,3,calibrate -1981,2,calibrate -830,2,calibrate -3899,4,calibrate -3573,1,calibrate -579,2,calibrate -2205,3,calibrate -1042,1,calibrate -328,2,calibrate -3412,2,calibrate -1558,3,calibrate -2060,2,calibrate -206,3,calibrate -3652,1,calibrate -1506,1,calibrate -1536,2,calibrate -3150,1,calibrate -1988,1,calibrate -2604,4,calibrate -1737,1,calibrate -2671,3,calibrate -525,3,calibrate -4063,4,calibrate -2923,4,calibrate -1072,1,calibrate -1258,2,calibrate -2850,1,calibrate -1426,4,calibrate -1855,1,calibrate -913,4,calibrate -1683,2,calibrate -3827,1,calibrate -2014,3,calibrate -3576,1,calibrate -3640,4,calibrate -571,2,calibrate -2611,2,calibrate -1695,3,calibrate -906,1,calibrate -1433,3,calibrate -624,4,calibrate -3382,1,calibrate -795,2,calibrate -3131,1,calibrate -3591,4,calibrate -3265,1,calibrate -2869,1,calibrate -1874,1,calibrate -734,1,calibrate -1623,1,calibrate -3446,3,calibrate -837,4,calibrate -2003,2,calibrate -1345,2,calibrate -3408,4,calibrate -2017,4,calibrate -1011,4,calibrate -685,1,calibrate -3899,3,calibrate -49,1,calibrate -3397,3,calibrate -328,1,calibrate -3860,2,calibrate -3412,1,calibrate -1558,2,calibrate -710,3,calibrate -3119,4,calibrate -2364,4,calibrate -3933,1,calibrate -3944,1,calibrate -2804,1,calibrate -206,2,calibrate -2060,1,calibrate -1536,1,calibrate -2500,4,calibrate -3666,2,calibrate -209,4,calibrate -2671,2,calibrate -3332,4,calibrate -3070,4,calibrate -2724,4,calibrate -1584,4,calibrate -3613,4,calibrate -1258,1,calibrate -2477,2,calibrate -76,4,calibrate -1683,1,calibrate -980,2,calibrate -2014,2,calibrate -3640,3,calibrate -2611,1,calibrate -2204,1,calibrate diff --git a/datasets/split_prev_y9-eir.csv b/datasets/split_prev_y9-eir.csv deleted file mode 100644 index 49a4fd7..0000000 --- a/datasets/split_prev_y9-eir.csv +++ /dev/null @@ -1,12875 +0,0 @@ -parameter_index,simulation_index,split -1128,4,train -2344,2,train -2478,2,train -1820,2,train -1999,4,train -1603,4,train -2295,2,train -1899,2,train -2033,2,train -1637,2,train -2508,2,train -2112,2,train -2945,3,train -2246,2,train -1850,2,train -2029,4,train -1767,4,train -2845,1,train -2325,2,train -2063,2,train -3058,1,train -64,2,train -3271,1,train -277,2,train -3009,1,train -3484,1,train -3088,1,train -3222,1,train -2826,1,train -3005,3,train -3046,4,train -2347,3,train -2784,4,train -2481,3,train -3301,1,train -307,2,train -348,3,train -744,3,train -2643,1,train -45,2,train -482,3,train -3039,1,train -3259,4,train -3655,4,train -2694,3,train -778,1,train -3514,1,train -3555,2,train -957,3,train -2856,1,train -299,3,train -2990,1,train -3076,4,train -2773,3,train -857,1,train -991,1,train -3768,2,train -3902,2,train -3506,2,train -512,3,train -3289,4,train -3027,4,train -2765,4,train -1070,1,train -3981,2,train -3585,2,train -1028,4,train -3282,1,train -766,4,train -3061,2,train -67,3,train -2844,4,train -3240,4,train -2978,4,train -625,1,train -1241,4,train -1375,4,train -979,4,train -3274,2,train -3670,2,train -676,3,train -1496,1,train -1275,2,train -1454,4,train -576,1,train -3353,2,train -3749,2,train -3790,3,train -796,4,train -3487,2,train -1051,1,train -1488,2,train -1185,1,train -3962,2,train -3566,2,train -4003,3,train -1009,4,train -706,3,train -1567,2,train -1701,2,train -1305,2,train -1484,4,train -606,1,train -1043,2,train -3820,3,train -3954,3,train -564,4,train -1914,2,train -1652,2,train -1256,2,train -4033,3,train -1435,4,train -3771,3,train -777,4,train -1731,2,train -1772,3,train -1032,1,train -1073,2,train -1944,2,train -1723,3,train -4018,1,train -1420,2,train -1203,4,train -2198,3,train -1802,3,train -1936,3,train -1103,2,train -2494,1,train -2015,3,train -2452,4,train -1712,2,train -1316,2,train -2149,3,train -1491,3,train -2311,1,train -2665,4,train -1966,3,train -2262,1,train -2699,2,train -2441,3,train -2878,4,train -2179,3,train -2616,4,train -2737,1,train -2912,2,train -2079,1,train -2609,1,train -2213,1,train -2695,4,train -3091,4,train -2829,4,train -2688,1,train -2292,1,train -131,3,train -2426,1,train -2030,1,train -2512,4,train -2646,4,train -2250,4,train -293,1,train -2639,1,train -2243,1,train -2680,2,train -3121,4,train -2201,4,train -244,1,train -3417,2,train -2759,2,train -202,4,train -2456,1,train -2893,2,train -2676,4,train -2280,4,train -719,1,train -457,1,train -61,1,train -591,1,train -3409,3,train -811,4,train -415,4,train -2710,2,train -2669,1,train -2493,4,train -3705,1,train -670,1,train -711,2,train -3488,3,train -12,1,train -232,4,train -621,1,train -662,2,train -3398,2,train -2740,2,train -142,3,train -183,4,train -741,2,train -3869,1,train -438,1,train -479,2,train -3256,3,train -4089,4,train -176,1,train -658,4,train -2953,2,train -396,4,train -3948,1,train -1350,2,train -3686,1,train -1088,2,train -692,2,train -3469,3,train -3865,3,train -389,1,train -3906,4,train -213,4,train -3765,1,train -1167,2,train -1208,3,train -468,1,train -509,2,train -3682,3,train -643,2,train -3420,3,train -3816,3,train -3554,3,train -560,4,train -1421,3,train -3716,1,train -1118,2,train -722,2,train -1159,3,train -1555,3,train -856,2,train -3633,3,train -4070,4,train -3454,1,train -3237,3,train -3936,4,train -1851,1,train -1768,3,train -935,2,train -539,2,train -3667,1,train -3846,3,train -3450,3,train -1668,1,train -1847,3,train -1451,3,train -3746,1,train -1189,3,train -1626,4,train -3704,4,train -3838,4,train -2143,1,train -1747,1,train -1881,1,train -1798,3,train -1839,4,train -3917,4,train -4051,4,train -2094,1,train -2135,2,train -1832,1,train -1436,1,train -1353,3,train -2045,1,train -2131,4,train -2265,4,train -1432,3,train -1869,4,train -2124,1,train -2561,2,train -1862,1,train -1466,1,train -2344,4,train -1820,4,train -2640,2,train -2378,2,train -2075,1,train -1679,1,train -2116,2,train -1813,1,train -1899,4,train -2295,4,train -2033,4,train -1637,4,train -2853,2,train -2591,2,train -2195,2,train -1892,1,train -2112,4,train -1850,4,train -27,1,train -2408,2,train -2845,3,train -2105,1,train -2146,2,train -2542,2,train -2325,4,train -1884,2,train -2063,4,train -106,1,train -147,2,train -2621,2,train -3058,3,train -64,4,train -2359,2,train -2097,2,train -3092,1,train -57,1,train -98,2,train -3271,3,train -277,4,train -2572,2,train -2176,2,train -2613,3,train -3009,3,train -3567,1,train -3305,1,train -311,2,train -3088,3,train -3222,3,train -2826,3,train -3780,1,train -3384,1,train -786,2,train -3518,1,train -87,1,train -128,2,train -2860,1,train -3301,3,train -307,4,train -2602,2,train -2643,3,train -3039,3,train -45,4,train -3080,4,train -3342,4,train -644,3,train -3335,1,train -341,2,train -778,3,train -3073,1,train -3555,4,train -2856,3,train -2990,3,train -1074,1,train -3851,2,train -857,3,train -3548,1,train -991,3,train -158,2,train -3372,4,train -3768,4,train -292,2,train -3506,4,train -4064,2,train -1070,3,train -3802,2,train -371,2,train -3103,1,train -3499,1,train -3585,4,train -3282,3,train -3981,4,train -3061,4,train -3881,2,train -842,1,train -3619,2,train -4015,2,train -625,3,train -3753,2,train -363,3,train -3140,4,train -3670,4,train -3274,4,train -1055,1,train -3832,2,train -1275,4,train -3570,2,train -576,3,train -3353,4,train -3749,4,train -3487,4,train -1571,2,train -872,1,train -4045,2,train -1051,3,train -1488,4,train -3783,2,train -393,3,train -3566,4,train -1481,1,train -1085,1,train -1567,4,train -3862,2,train -1701,4,train -823,1,train -1305,4,train -4037,3,train -606,3,train -1043,4,train -1560,1,train -1298,1,train -902,1,train -1735,2,train -1122,4,train -3813,2,train -1256,4,train -1814,2,train -1115,1,train -1249,1,train -1731,4,train -4026,2,train -4067,3,train -1032,3,train -1073,4,train -3805,3,train -2027,2,train -1765,2,train -1369,2,train -4018,3,train -1420,4,train -2240,2,train -1978,2,train -2019,3,train -1716,2,train -1103,4,train -2494,3,train -1399,2,train -1533,2,train -1316,4,train -2924,1,train -2528,1,train -2311,3,train -2049,3,train -1787,3,train -2607,1,train -3137,1,train -2741,1,train -2262,3,train -2699,4,train -2820,1,train -222,2,train -2954,1,train -1,3,train -2296,1,train -2737,3,train -2778,4,train -2912,4,train -2079,3,train -2213,3,train -3033,1,train -3208,2,train -2509,1,train -2688,3,train -2292,3,train -2426,3,train -2030,3,train -293,3,train -3025,2,train -3421,2,train -2722,1,train -2546,4,train -2243,3,train -2680,4,train -2801,1,train -3238,2,train -244,3,train -2539,1,train -2976,2,train -3417,4,train -2759,4,train -2456,3,train -2893,4,train -540,1,train -719,3,train -3451,2,train -3055,2,train -457,3,train -61,3,train -498,4,train -3189,2,train -2576,4,train -2710,4,train -753,1,train -491,1,train -3664,2,train -3705,3,train -670,3,train -711,4,train -2965,1,train -3006,2,train -12,3,train -2744,2,train -966,1,train -308,1,train -3481,2,train -662,4,train -2957,2,train -2740,4,train -917,1,train -521,1,train -958,2,train -655,1,train -741,4,train -3432,2,train -3473,3,train -438,3,train -479,4,train -3869,3,train -176,3,train -2953,4,train -338,1,train -3948,3,train -558,4,train -3686,3,train -1088,4,train -692,4,train -3383,2,train -1250,2,train -3982,1,train -947,1,train -551,1,train -988,2,train -3765,3,train -1167,4,train -3503,3,train -468,3,train -509,4,train -3241,3,train -643,4,train -1201,2,train -805,2,train -3716,3,train -722,4,train -3454,3,train -856,4,train -1676,2,train -1414,2,train -1018,2,train -1851,3,train -3750,1,train -1152,2,train -935,4,train -539,4,train -3667,3,train -1231,2,train -1668,3,train -3963,1,train -969,2,train -3746,3,train -3921,4,train -2143,3,train -1747,3,train -4042,1,train -1881,3,train -1182,2,train -1223,3,train -1915,1,train -2094,3,train -2135,4,train -1395,2,train -1436,3,train -1832,3,train -2390,1,train -2128,1,train -1732,1,train -2214,4,train -1253,3,train -2341,1,train -1945,1,train -2124,3,train -2561,4,train -1862,3,train -1466,3,train -1903,4,train -2420,1,train -2158,1,train -1762,1,train -2640,4,train -2378,4,train -1679,3,train -2116,4,train -2371,1,train -2412,2,train -2853,4,train -2591,4,train -2195,4,train -1892,3,train -110,1,train -2887,2,train -2491,2,train -2188,1,train -1792,1,train -2408,4,train -2542,4,train -2146,4,train -1884,4,train -189,1,train -323,1,train -106,3,train -147,4,train -2401,1,train -2442,2,train -2879,3,train -2621,4,train -2180,2,train -2359,4,train -2097,4,train -2917,2,train -2655,2,train -3092,3,train -98,4,train -2572,4,train -2176,4,train -3388,1,train -353,1,train -394,2,train -3567,3,train -3305,3,train -2909,3,train -311,4,train -2606,2,train -473,2,train -3601,1,train -170,1,train -607,2,train -3384,3,train -3780,3,train -3518,3,train -128,4,train -2819,2,train -2860,3,train -3814,1,train -820,2,train -861,3,train -3156,1,train -3335,3,train -341,4,train -3073,3,train -3893,1,train -4027,1,train -3631,1,train -1074,3,train -3851,4,train -771,2,train -3548,3,train -158,4,train -292,4,train -3448,1,train -3885,2,train -891,3,train -3186,1,train -3582,1,train -588,2,train -3802,4,train -4064,4,train -371,4,train -3103,3,train -667,2,train -3399,1,train -3795,1,train -3881,4,train -4015,4,train -842,3,train -3619,4,train -3753,4,train -3357,4,train -1138,1,train -3874,1,train -3915,2,train -921,3,train -3612,1,train -618,2,train -1055,3,train -3832,4,train -3570,4,train -1351,1,train -1571,4,train -3429,1,train -3866,2,train -872,3,train -4045,4,train -3783,4,train -1564,1,train -1085,3,train -689,3,train -3862,4,train -823,3,train -2039,1,train -1777,1,train -1381,1,train -1560,3,train -1119,1,train -3896,2,train -1298,3,train -902,3,train -1735,4,train -4030,2,train -3813,4,train -1856,1,train -2031,2,train -1198,1,train -1814,4,train -1418,4,train -1115,3,train -1249,3,train -4026,4,train -2110,2,train -1807,1,train -1411,1,train -1545,1,train -2027,4,train -3926,2,train -1765,4,train -1369,4,train -1107,4,train -1927,2,train -1624,1,train -1978,4,train -1716,4,train -1878,2,train -2315,3,train -1575,1,train -1616,2,train -1399,4,train -1533,4,train -2924,3,train -2528,3,train -2225,2,train -1829,2,train -2607,3,train -2304,2,train -2345,3,train -2741,3,train -2042,2,train -1646,2,train -3037,1,train -43,2,train -2820,3,train -2954,3,train -2255,2,train -2296,3,train -3250,1,train -2854,1,train -3033,3,train -2592,1,train -3208,4,train -2375,3,train -2509,3,train -73,2,train -2805,1,train -3201,1,train -3421,4,train -3025,4,train -2722,3,train -286,2,train -327,3,train -2622,1,train -24,2,train -2801,3,train -3238,4,train -2539,3,train -2976,4,train -3493,1,train -3097,1,train -3534,2,train -540,3,train -2835,1,train -237,2,train -2969,1,train -2573,1,train -3055,4,train -3451,4,train -3189,4,train -836,1,train -970,1,train -574,1,train -753,3,train -357,3,train -54,2,train -2786,1,train -95,3,train -491,3,train -3006,4,train -2744,4,train -1049,1,train -1183,1,train -787,1,train -3960,2,train -966,3,train -3302,2,train -308,3,train -2999,1,train -3481,4,train -2823,4,train -2957,4,train -866,1,train -604,1,train -3911,2,train -3515,2,train -521,3,train -958,4,train -3253,2,train -655,3,train -3432,4,train -1475,1,train -1213,1,train -1254,2,train -3990,2,train -4031,3,train -951,1,train -555,1,train -3728,2,train -3769,3,train -338,3,train -775,4,train -3466,2,train -1333,2,train -1030,1,train -1250,4,train -3545,2,train -3982,3,train -551,3,train -988,4,train -1546,2,train -1680,2,train -1284,2,train -585,1,train -3758,2,train -1201,4,train -805,4,train -1893,2,train -1497,2,train -798,1,train -1235,2,train -1414,4,train -1018,4,train -3750,3,train -1152,4,train -1972,2,train -1710,2,train -1314,2,train -1231,4,train -3963,3,train -969,4,train -1661,2,train -1265,2,train -4042,3,train -1182,4,train -2260,1,train -4076,1,train -1478,2,train -1915,3,train -2390,3,train -1691,2,train -1295,2,train -1732,3,train -2128,3,train -2686,1,train -2424,1,train -1945,3,train -2503,1,train -2637,1,train -2420,3,train -1721,2,train -1762,3,train -2158,3,train -2716,1,train -2454,1,train -2192,1,train -2412,4,train -1579,3,train -193,1,train -2929,1,train -2667,1,train -2271,1,train -110,3,train -2405,1,train -2491,4,train -2887,4,train -2188,3,train -1792,3,train -2229,4,train -1967,4,train -406,1,train -10,1,train -2787,2,train -189,3,train -2484,1,train -2088,1,train -3317,2,train -2222,1,train -2442,4,train -2180,4,train -223,1,train -3396,2,train -2697,1,train -2738,2,train -181,4,train -2917,4,train -2655,4,train -2259,4,train -40,1,train -174,1,train -2951,2,train -3388,3,train -394,4,train -2689,2,train -3085,2,train -2606,4,train -649,1,train -253,1,train -690,2,train -3467,3,train -473,4,train -2768,2,train -3164,2,train -170,3,train -607,4,train -2902,2,train -3205,3,train -3601,3,train -70,1,train -204,1,train -2981,2,train -3377,2,train -820,4,train -3814,3,train -3156,3,train -679,1,train -720,2,train -3893,3,train -417,1,train -458,2,train -3631,3,train -2932,2,train -1329,2,train -3665,1,train -3448,3,train -3885,4,train -368,1,train -3145,2,train -3186,3,train -3582,3,train -588,4,train -3744,1,train -1146,2,train -750,2,train -1187,3,train -3964,4,train -667,4,train -3399,3,train -3957,1,train -4091,1,train -1138,3,train -3874,3,train -3915,4,train -3612,3,train -3653,4,train -618,4,train -3512,1,train -1351,3,train -3646,1,train -3429,3,train -3866,4,train -1647,1,train -1127,2,train -1564,3,train -865,2,train -1726,1,train -1860,1,train -1464,1,train -1381,3,train -1119,3,train -3896,4,train -4030,4,train -2073,1,train -1677,1,train -1856,3,train -1415,1,train -2031,4,train -1198,3,train -936,3,train -2152,1,train -1890,1,train -1494,1,train -1628,1,train -2110,4,train -1411,3,train -1545,3,train -3926,4,train -2144,2,train -1841,1,train -1445,1,train -1927,4,train -1624,3,train -1665,4,train -2753,2,train -1658,1,train -1878,4,train -1575,3,train -1616,4,train -2012,4,train -2133,1,train -2308,2,train -1912,2,train -1829,4,train -6,1,train -2125,2,train -2304,4,train -2042,4,train -1646,4,train -85,1,train -126,2,train -3037,3,train -2641,3,train -43,4,train -1942,2,train -339,2,train -77,2,train -2854,3,train -3250,3,train -2155,2,train -2592,3,train -2289,2,train -3284,1,train -290,2,train -73,4,train -2805,3,train -3201,3,train -3363,1,train -765,2,train -369,2,train -3497,1,train -503,2,train -3321,4,train -286,4,train -2581,2,train -2622,3,train -3059,4,train -24,4,train -3180,1,train -582,2,train -623,3,train -320,2,train -3097,3,train -3534,4,train -2835,3,train -2969,3,train -2573,3,train -3789,1,train -836,3,train -3527,1,train -533,2,train -137,2,train -574,3,train -970,3,train -54,4,train -2786,3,train -1266,1,train -1049,3,train -653,3,train -2948,1,train -1183,3,train -3478,1,train -350,2,train -787,3,train -3344,1,train -88,2,train -3302,4,train -3960,4,train -2999,3,train -866,3,train -3161,1,train -3994,2,train -563,2,train -604,3,train -1041,4,train -3336,2,train -342,3,train -3515,4,train -3253,4,train -1296,1,train -900,1,train -4073,2,train -3990,4,train -1254,4,train -3549,2,train -951,3,train -555,3,train -3728,4,train -3466,4,train -1333,4,train -3628,2,train -4024,2,train -1030,3,train -3366,2,train -3545,4,train -1326,1,train -930,1,train -1460,1,train -1546,4,train -3841,2,train -1064,1,train -1680,4,train -1284,4,train -3579,2,train -3975,2,train -585,3,train -3758,4,train -1539,1,train -1580,2,train -1497,4,train -1101,4,train -3792,2,train -798,3,train -1235,4,train -2189,2,train -1793,2,train -1490,1,train -1094,1,train -1228,1,train -1314,4,train -1710,4,train -4005,2,train -1610,2,train -1307,1,train -911,1,train -1348,2,train -1744,2,train -1265,4,train -869,4,train -2219,2,train -1823,2,train -2260,3,train -1957,2,train -1561,2,train -4076,3,train -1478,4,train -1774,2,train -1378,2,train -1295,4,train -2507,1,train -2686,3,train -1987,2,train -2424,3,train -2720,1,train -2503,3,train -2107,3,train -2637,3,train -2799,1,train -2716,3,train -2275,1,train -2757,4,train -2454,3,train -2192,3,train -1796,3,train -3012,1,train -193,3,train -2488,1,train -2667,3,train -2271,3,train -2405,3,train -3225,1,train -3400,2,train -2567,1,train -3004,2,train -406,3,train -10,3,train -2305,1,train -2787,4,train -2701,1,train -2484,3,train -2088,3,train -2525,4,train -2222,3,train -89,3,train -2780,1,train -223,3,train -2518,1,train -3396,4,train -2738,4,train -519,1,train -3296,2,train -257,1,train -2993,1,train -3034,2,train -3430,2,train -40,3,train -3168,2,train -2772,2,train -174,3,train -2951,4,train -2689,4,train -732,1,train -3247,2,train -253,3,train -690,4,train -2548,1,train -2985,2,train -3164,4,train -2768,4,train -2902,4,train -549,1,train -287,1,train -3064,2,train -3460,2,train -70,3,train -507,4,train -2761,1,train -204,3,train -2981,4,train -896,1,train -500,1,train -238,1,train -720,4,train -3411,2,train -417,3,train -458,4,train -2932,4,train -975,1,train -1016,2,train -713,1,train -1150,2,train -451,1,train -3665,3,train -3961,1,train -926,1,train -1363,2,train -3744,3,train -664,1,train -750,4,train -1146,4,train -3441,2,train -4040,1,train -1046,2,train -784,2,train -3957,3,train -4091,3,train -1655,2,train -1259,2,train -997,2,train -1434,3,train -3729,1,train -1131,2,train -735,2,train -3512,3,train -3949,4,train -3646,3,train -1210,2,train -814,2,train -1647,3,train -1344,2,train -3942,1,train -865,4,train -1943,1,train -1726,3,train -4021,1,train -1860,3,train -1027,2,train -1464,3,train -3759,1,train -1161,2,train -1202,3,train -2156,1,train -2073,3,train -1677,3,train -1415,3,train -2152,3,train -1711,1,train -1890,3,train -1494,3,train -1931,4,train -1628,3,train -1232,3,train -4009,4,train -2448,1,train -2144,4,train -1841,3,train -1445,3,train -2399,1,train -2440,2,train -1741,1,train -2223,4,train -1961,4,train -1658,3,train -2653,2,train -2391,2,train -2308,4,train -1912,4,train -2866,2,train -2470,2,train -2167,1,train -1771,1,train -1991,4,train -2125,4,train -168,1,train -302,1,train -3079,2,train -126,4,train -2380,1,train -2421,2,train -2159,2,train -1942,4,train -381,1,train -339,4,train -2634,2,train -2238,2,train -77,4,train -2372,2,train -2155,4,train -2289,4,train -198,1,train -332,1,train -373,2,train -2847,2,train -2888,3,train -3284,3,train -290,4,train -452,2,train -3580,1,train -149,1,train -3363,3,train -369,4,train -2664,2,train -3497,3,train -3659,1,train -665,2,train -3793,1,train -799,2,train -3180,3,train -582,4,train -141,2,train -2877,2,train -2918,3,train -320,4,train -2656,3,train -3872,1,train -3476,1,train -878,2,train -4006,1,train -616,2,train -220,2,train -3348,1,train -3527,3,train -137,4,train -4085,1,train -1091,2,train -829,2,train -1266,3,train -3561,1,train -130,1,train -171,2,train -567,2,train -2948,3,train -350,4,train -3344,3,train -3385,4,train -88,4,train -4036,1,train -646,2,train -3378,1,train -3774,1,train -780,2,train -3994,4,train -3161,3,train -3336,4,train -1379,1,train -3894,2,train -859,2,train -900,3,train -1296,3,train -3195,1,train -597,2,train -638,3,train -3415,4,train -3811,4,train -4073,4,train -3549,4,train -1592,1,train -3804,1,train -3845,2,train -4024,4,train -3628,4,train -3366,4,train -1805,1,train -1409,1,train -1543,1,train -1326,3,train -930,3,train -1367,4,train -627,2,train -668,3,train -1064,3,train -3841,4,train -3975,4,train -3579,4,train -1360,1,train -1539,3,train -1580,4,train -3792,4,train -1835,1,train -1876,2,train -1793,4,train -915,1,train -1094,3,train -698,3,train -4005,4,train -2089,2,train -1786,1,train -1390,1,train -1827,2,train -1524,1,train -1128,1,train -1610,4,train -1307,3,train -911,3,train -1348,4,train -1744,4,train -2302,2,train -1906,2,train -1603,1,train -1207,1,train -2040,2,train -1823,4,train -1957,4,train -1561,4,train -2515,2,train -2119,2,train -2253,2,train -2294,3,train -1774,4,train -1378,4,train -2332,2,train -2070,2,train -2507,3,train -2803,1,train -2720,3,train -1887,2,train -2324,3,train -2021,2,train -1625,2,train -22,2,train -2799,3,train -2100,2,train -1838,2,train -2275,3,train -101,2,train -235,2,train -3012,3,train -2313,2,train -2051,2,train -2092,3,train -2488,3,train -314,2,train -3046,1,train -2784,1,train -3400,4,train -2567,3,train -3004,4,train -2264,2,train -2305,3,train -2701,3,train -3259,1,train -306,3,train -3,2,train -2780,3,train -2518,3,train -2122,3,train -3076,1,train -3513,2,train -519,3,train -3296,4,train -257,3,train -2552,1,train -2993,3,train -3034,4,train -3168,4,train -2772,4,train -3430,4,train -3289,1,train -3726,2,train -295,2,train -732,3,train -3027,1,train -74,3,train -2765,1,train -2851,4,train -3247,4,train -2548,3,train -2985,4,train -1028,1,train -766,1,train -3939,2,train -549,3,train -2844,1,train -3240,1,train -3677,2,train -287,3,train -2978,1,train -3064,4,train -3460,4,train -2761,3,train -1241,1,train -845,1,train -979,1,train -803,4,train -3494,2,train -500,3,train -104,3,train -238,3,train -3411,4,train -796,1,train -975,3,train -534,1,train -1016,4,train -3311,2,train -713,3,train -1150,4,train -3445,2,train -3707,2,train -451,3,train -3748,3,train -1009,1,train -1446,2,train -833,4,train -3961,3,train -1363,4,train -3262,2,train -3441,4,train -1659,2,train -4040,3,train -564,1,train -1046,4,train -3778,3,train -784,4,train -522,4,train -1738,2,train -1342,2,train -1476,2,train -777,1,train -1259,4,train -997,4,train -3688,2,train -3729,3,train -1131,4,train -735,4,train -1951,2,train -1689,2,train -1293,2,train -4025,1,train -1427,2,train -1210,4,train -814,4,train -3942,3,train -1943,3,train -1640,2,train -1244,2,train -4021,3,train -1027,4,train -3759,3,train -1161,4,train -1719,2,train -1323,2,train -2156,3,train -4055,1,train -1457,2,train -1061,2,train -2452,1,train -1670,2,train -1274,2,train -1711,3,train -2665,1,train -2269,1,train -2448,3,train -2007,1,train -1790,3,train -1487,2,train -2878,1,train -2616,1,train -2399,3,train -2440,4,train -1700,2,train -1741,3,train -2695,1,train -2299,1,train -2653,4,train -2391,4,train -2512,1,train -2646,1,train -2250,1,train -2687,2,train -2866,4,train -2470,4,train -2167,3,train -1771,3,train -2766,2,train -168,3,train -2900,2,train -2201,1,train -2287,4,train -2421,4,train -2159,4,train -202,1,train -381,3,train -2676,1,train -2280,1,train -2717,2,train -2455,2,train -2634,4,train -2238,4,train -2372,4,train -281,1,train -415,1,train -198,3,train -2493,1,train -2930,2,train -3326,2,train -373,4,train -2668,2,train -2847,4,train -232,1,train -669,2,train -3405,2,train -452,4,train -3580,3,train -149,3,train -2485,2,train -2664,4,train -882,2,train -3659,3,train -183,1,train -269,4,train -665,4,train -799,4,train -3793,3,train -2698,2,train -141,4,train -2877,4,train -4089,1,train -3693,1,train -658,1,train -699,2,train -1095,2,train -3872,3,train -396,1,train -437,2,train -878,4,train -3173,2,train -616,4,train -220,4,train -3348,3,train -3476,3,train -3906,1,train -912,2,train -4085,3,train -213,1,train -650,2,train -829,4,train -3124,2,train -3561,3,train -567,4,train -171,4,train -3723,1,train -729,2,train -3461,1,train -863,2,train -467,2,train -3244,3,train -646,4,train -3378,3,train -3936,1,train -942,2,train -1379,3,train -4070,1,train -3894,4,train -3195,3,train -3632,4,train -597,4,train -1592,3,train -893,2,train -497,2,train -3845,4,train -1626,1,train -1805,3,train -1409,3,train -3704,1,train -1543,3,train -3838,1,train -844,2,train -3662,4,train -627,4,train -1839,1,train -1443,1,train -1226,3,train -3917,1,train -923,2,train -1360,3,train -1835,3,train -1876,4,train -915,3,train -2131,1,train -1869,1,train -1473,1,train -2089,4,train -1390,3,train -1827,4,train -1524,3,train -1128,3,train -2344,1,train -1820,1,train -1424,1,train -1906,4,train -2302,4,train -1603,3,train -1207,3,train -2040,4,train -2202,2,train -1899,1,train -1503,1,train -1637,1,train -2119,4,train -2253,4,train -2112,1,train -2153,2,train -2590,3,train -1850,1,train -2332,4,train -2070,4,train -1412,4,train -2803,3,train -2104,2,train -1887,4,train -2021,4,train -1625,4,train -64,1,train -22,4,train -1921,2,train -2100,4,train -1838,4,train -101,4,train -235,4,train -2134,2,train -2313,4,train -2051,4,train -3129,1,train -2867,1,train -314,4,train -3046,3,train -2347,2,train -2784,3,train -3342,1,train -348,2,train -3080,1,train -482,2,train -86,2,train -3259,3,train -3,4,train -3555,1,train -2897,1,train -299,2,train -3076,3,train -3513,4,train -2552,3,train -3768,1,train -3372,1,train -3506,1,train -512,2,train -3726,4,train -2848,1,train -3289,3,train -295,4,train -3027,3,train -3068,4,train -2765,3,train -849,1,train -3585,1,train -1028,3,train -632,3,train -2927,1,train -766,3,train -3061,1,train -3939,4,train -67,2,train -2844,3,train -3677,4,train -2978,3,train -3839,2,train -1241,3,train -845,3,train -3140,1,train -3577,2,train -979,3,train -3274,1,train -3494,4,train -3098,4,train -2836,4,train -1275,1,train -3353,1,train -3790,2,train -796,3,train -534,3,train -3311,4,train -3707,4,train -3445,4,train -1488,1,train -4003,2,train -3566,1,train -3607,2,train -1009,3,train -1446,4,train -4044,3,train -3128,4,train -3262,4,train -1567,1,train -1305,1,train -909,1,train -1043,1,train -3820,2,train -1659,4,train -3954,2,train -430,3,train -3558,2,train -564,3,train -1122,1,train -1559,2,train -1256,1,train -1342,4,train -1738,4,train -4033,2,train -1476,4,train -3771,2,train -4074,3,train -777,3,train -1638,2,train -1772,2,train -1073,1,train -1689,4,train -1293,4,train -4025,3,train -1427,4,train -1723,2,train -890,1,train -1327,2,train -1110,4,train -1244,4,train -2198,2,train -1802,2,train -1936,2,train -1103,1,train -1719,4,train -1323,4,train -4055,3,train -1457,4,train -1061,4,train -2015,2,train -2056,3,train -2452,3,train -1316,1,train -1357,2,train -1491,2,train -1274,4,train -2665,3,train -2269,3,train -1966,2,train -1570,2,train -2007,3,train -1487,4,train -2565,1,train -2699,1,train -1387,2,train -2778,1,train -2912,1,train -2516,1,train -2695,3,train -2299,3,train -1775,3,train -2595,1,train -2512,3,train -2250,3,train -2687,4,train -2546,1,train -2983,2,train -2680,1,train -2284,1,train -2766,4,train -2900,4,train -2201,3,train -285,1,train -68,3,train -2363,1,train -2759,1,train -202,3,train -2893,1,train -3196,2,train -2280,3,train -2717,4,train -2455,4,train -498,1,train -281,3,train -2576,1,train -3013,2,train -415,3,train -2710,1,train -3409,2,train -2493,3,train -2534,4,train -2930,4,train -2668,4,train -577,1,train -711,1,train -3488,2,train -3226,2,train -232,3,train -669,4,train -2485,4,train -662,1,train -3043,2,train -3480,3,train -882,4,train -2740,1,train -2781,2,train -183,3,train -2698,4,train -741,1,train -479,1,train -3256,2,train -3693,3,train -1095,4,train -699,4,train -4089,3,train -396,3,train -437,4,train -3173,4,train -558,1,train -995,2,train -3772,3,train -692,1,train -296,1,train -3510,3,train -3469,2,train -912,4,train -34,1,train -2811,2,train -3906,3,train -213,3,train -650,4,train -1208,2,train -3940,1,train -509,1,train -946,2,train -3682,2,train -643,1,train -729,4,train -3420,2,train -3461,3,train -863,4,train -467,4,train -3723,3,train -1421,2,train -722,1,train -326,1,train -1159,2,train -3936,3,train -942,4,train -3237,2,train -4070,3,train -284,4,train -3970,1,train -539,1,train -714,2,train -3450,2,train -3928,4,train -893,4,train -497,4,train -1451,2,train -1189,2,train -793,2,train -1626,3,train -3921,1,train -3704,3,train -3838,3,train -844,4,train -1922,1,train -4000,1,train -1839,3,train -1006,2,train -1443,3,train -3738,1,train -3917,3,train -3958,4,train -923,4,train -2135,1,train -1522,3,train -3817,1,train -2214,1,train -2131,3,train -1690,1,train -1432,2,train -1473,3,train -1869,3,train -1910,4,train -1211,3,train -3988,4,train -1903,1,train -1820,3,train -1424,3,train -2640,1,train -2378,1,train -2419,2,train -2116,1,train -2202,4,train -1899,3,train -1503,3,train -1940,4,train -1637,3,train -2195,1,train -2153,4,train -1850,3,train -2711,2,train -2408,1,train -2449,2,train -2845,2,train -2146,1,train -1884,1,train -2104,4,train -147,1,train -3058,2,train -2359,1,train -2400,2,train -2097,1,train -2183,4,train -1921,4,train -98,1,train -2176,1,train -2613,2,train -2134,4,train -311,1,train -3088,2,train -3129,3,train -2826,2,train -2430,2,train -2867,3,train -2347,4,train -431,2,train -128,1,train -169,2,train -3342,3,train -348,4,train -2643,2,train -2247,2,train -3080,3,train -86,4,train -644,2,train -3376,1,train -778,2,train -3555,3,train -2856,2,train -2460,2,train -2897,3,train -299,4,train -2635,3,train -3851,1,train -857,2,train -158,1,train -3372,3,train -3506,3,train -2848,3,train -4064,1,train -1070,2,train -3802,1,train -412,2,train -849,3,train -3585,3,train -3626,4,train -2927,3,train -3364,4,train -3061,3,train -67,4,train -3881,1,train -3619,1,train -625,2,train -3357,1,train -3753,1,train -3839,4,train -363,2,train -3140,3,train -3577,4,train -3274,3,train -3832,1,train -3436,1,train -1275,3,train -442,2,train -3174,1,train -3570,1,train -576,2,train -180,2,train -617,3,train -3353,3,train -3790,4,train -1571,1,train -4086,2,train -1488,3,train -3783,1,train -3824,2,train -393,2,train -3607,4,train -4003,4,train -1567,3,train -1126,1,train -3862,1,train -3903,2,train -1305,3,train -909,3,train -3641,2,train -4037,2,train -606,2,train -1043,3,train -3820,4,train -3558,4,train -1735,1,train -1122,3,train -1559,4,train -3813,1,train -1256,3,train -3854,2,train -4033,4,train -3771,4,train -1814,1,train -1418,1,train -1156,1,train -1638,4,train -1772,4,train -894,1,train -1376,4,train -4067,2,train -1073,3,train -677,3,train -3805,2,train -2068,2,train -1765,1,train -1369,1,train -1806,2,train -1107,1,train -1723,4,train -890,3,train -1327,4,train -4018,2,train -1885,2,train -2019,2,train -1186,1,train -1802,4,train -1406,4,train -1103,3,train -2494,2,train -2098,2,train -1399,1,train -1836,2,train -1533,1,train -2015,4,train -1316,3,train -1357,4,train -1491,4,train -2311,2,train -2049,2,train -1653,2,train -1787,2,train -1570,4,train -1174,4,train -2565,3,train -2262,2,train -1866,2,train -2699,3,train -1604,2,train -1387,4,train -1,2,train -2778,3,train -2912,3,train -2079,2,train -2516,3,train -2213,2,train -80,2,train -2812,1,train -3208,1,train -2595,3,train -2292,2,train -2770,4,train -2030,2,train -2071,3,train -2891,1,train -293,2,train -3025,1,train -3421,1,train -2546,3,train -2983,4,train -2680,3,train -2284,3,train -3238,1,train -3279,2,train -244,2,train -285,3,train -2580,1,train -2976,1,train -2759,3,train -2363,3,train -2800,4,train -3196,4,train -3055,1,train -3492,2,train -61,2,train -498,3,train -3189,1,train -3409,4,train -2576,3,train -3013,4,train -2710,3,train -3705,2,train -577,3,train -2872,1,train -711,3,train -3006,1,train -3309,2,train -3488,4,train -12,2,train -53,3,train -2744,1,train -3226,4,train -3522,2,train -2823,1,train -3260,2,train -662,3,train -2957,1,train -3043,4,train -2740,3,train -2781,4,train -824,1,train -958,1,train -3339,2,train -741,3,train -3473,2,train -479,3,train -3256,4,train -775,1,train -3948,2,train -3686,2,train -558,3,train -995,4,train -3290,2,train -692,3,train -296,3,train -3028,2,train -3469,4,train -34,3,train -2811,4,train -1250,1,train -854,1,train -988,1,train -592,1,train -3765,2,train -1208,4,train -330,1,train -812,4,train -3503,2,train -509,3,train -946,4,train -3241,2,train -3940,3,train -1201,1,train -805,1,train -1421,4,train -3716,2,train -3320,2,train -3757,3,train -722,3,train -326,3,train -1159,4,train -3454,2,train -3237,4,train -1321,2,train -1018,1,train -622,1,train -1059,2,train -3970,3,train -539,3,train -3667,2,train -714,4,train -1534,2,train -1231,1,train -1668,2,train -4004,1,train -969,1,train -1010,2,train -1451,4,train -3746,2,train -1189,4,train -793,4,train -3787,3,train -3921,3,train -531,4,train -1747,2,train -1922,3,train -1089,2,train -1223,2,train -4000,3,train -1006,4,train -3738,3,train -2135,3,train -1302,2,train -1436,2,train -3817,3,train -2214,3,train -1253,2,train -1690,3,train -2248,1,train -1986,1,train -1466,2,train -1507,3,train -1903,3,train -2378,3,train -2419,4,train -2116,3,train -2278,1,train -2412,1,train -2195,3,train -2236,4,train -2491,1,train -2229,1,train -2711,4,train -2408,3,train -1967,1,train -2449,4,train -2845,4,train -2146,3,train -1884,3,train -147,3,train -2442,1,train -2046,1,train -2879,2,train -2180,1,train -2266,4,train -2400,4,train -181,1,train -2958,2,train -2655,1,train -2259,1,train -3092,2,train -98,3,train -2176,3,train -2613,4,train -260,1,train -394,1,train -218,4,train -2909,2,train -2826,4,train -2430,4,train -473,1,train -607,1,train -3384,2,train -431,4,train -2726,2,train -3163,3,train -128,3,train -169,4,train -2860,2,train -2643,4,train -2247,4,train -861,2,train -644,4,train -248,4,train -2543,2,train -778,4,train -3073,2,train -3376,3,train -2460,4,train -3672,1,train -1074,2,train -3851,3,train -857,4,train -2756,2,train -158,3,train -2931,3,train -3751,1,train -3885,1,train -891,2,train -3802,3,train -412,4,train -3103,2,train -3964,1,train -3702,1,train -667,1,train -708,2,train -3922,4,train -1145,3,train -842,2,train -3619,3,train -3223,3,train -3440,1,train -625,4,train -3357,3,train -3881,3,train -363,4,train -3915,1,train -921,2,train -3653,1,train -1055,2,train -3832,3,train -3436,3,train -442,4,train -3174,3,train -3570,3,train -576,4,train -180,4,train -1571,3,train -738,2,train -1175,3,train -3866,1,train -872,2,train -4086,4,train -3824,4,train -393,4,train -1085,2,train -689,2,train -1126,3,train -3862,3,train -823,2,train -4037,4,train -3641,4,train -3903,4,train -606,4,train -1684,1,train -1422,1,train -1205,3,train -3500,1,train -3896,1,train -902,2,train -3854,4,train -2031,1,train -1814,3,train -1418,3,train -1156,3,train -894,3,train -4067,4,train -3805,4,train -2110,1,train -1714,1,train -1452,1,train -2068,4,train -3926,1,train -1369,3,train -1806,4,train -1107,3,train -4018,4,train -1927,1,train -1665,1,train -2102,2,train -1885,4,train -2019,4,train -1186,3,train -2181,2,train -1878,1,train -2315,2,train -1616,1,train -1220,1,train -2098,4,train -1399,3,train -1836,4,train -2528,2,train -1829,1,train -1870,2,train -2311,4,train -2049,4,train -1653,4,train -1787,4,train -1391,4,train -2607,2,train -2345,2,train -1646,1,train -2083,2,train -2262,4,train -1866,4,train -1604,4,train -43,1,train -2820,2,train -1,4,train -2296,2,train -2079,4,train -80,4,train -2375,2,train -2812,3,train -3208,3,train -2509,2,train -2113,2,train -2030,4,train -3108,1,train -73,1,train -114,2,train -2891,3,train -293,4,train -3025,3,train -2629,3,train -2367,3,train -3187,1,train -3321,1,train -327,2,train -3059,1,train -65,2,train -3238,3,train -3279,4,train -2539,2,train -2580,3,train -2976,3,train -3534,1,train -3138,1,train -540,2,train -144,2,train -2876,1,train -3055,3,train -2659,3,train -3492,4,train -61,4,train -2397,3,train -357,2,train -491,2,train -95,2,train -2872,3,train -3309,4,train -3705,4,train -3006,3,train -3047,4,train -12,4,train -2744,3,train -3605,2,train -3302,1,train -308,2,train -349,3,train -3522,4,train -2823,3,train -3260,4,train -2957,3,train -1041,1,train -824,3,train -3515,1,train -521,2,train -958,3,train -3253,1,train -3339,4,train -3473,4,train -3077,4,train -2815,4,train -1120,1,train -1254,1,train -4031,2,train -3635,2,train -3769,2,train -2936,1,train -338,2,train -775,3,train -3686,4,train -3290,4,train -3028,4,train -1333,1,train -1250,3,train -854,3,train -3545,1,train -3586,2,train -551,2,train -592,3,train -988,3,train -3765,4,train -3982,2,train -330,3,train -3503,4,train -3241,4,train -1546,1,train -1284,1,train -1108,4,train -805,3,train -409,3,train -3716,4,train -3320,4,train -3454,4,train -1497,1,train -1101,1,train -1235,1,train -839,1,train -1321,4,train -1018,3,train -622,3,train -1059,4,train -3750,2,train -1617,2,train -1314,1,train -1534,4,train -656,1,train -1668,4,train -3963,2,train -4004,3,train -1010,4,train -3746,4,train -1830,2,train -1568,2,train -1265,1,train -869,1,train -1747,4,train -4042,2,train -1089,4,train -1223,4,train -1915,2,train -1519,2,train -1302,4,train -1436,4,train -1598,2,train -1295,1,train -1732,2,train -1253,4,train -2248,3,train -1945,2,train -1549,2,train -1986,3,train -1466,4,train -2065,3,train -1762,2,train -2757,1,train -2278,3,train -2412,3,train -1579,2,train -2574,1,train -2312,1,train -2491,3,train -1792,2,train -2229,3,train -1967,3,train -2787,1,train -2525,1,train -2263,1,train -2442,3,train -2046,3,train -2879,4,train -2180,3,train -2738,1,train -2342,1,train -181,3,train -2958,4,train -3092,4,train -2259,3,train -1863,3,train -260,3,train -2951,1,train -2992,2,train -394,3,train -2689,1,train -3388,2,train -2909,4,train -2513,4,train -690,1,train -3467,2,train -473,3,train -2768,1,train -3205,2,train -3601,2,train -2726,4,train -2860,4,train -507,1,train -245,1,train -2981,1,train -861,4,train -465,4,train -2760,2,train -3156,2,train -2543,4,train -720,1,train -458,1,train -3631,2,train -3672,3,train -1074,4,train -2756,4,train -3968,1,train -3751,3,train -3448,2,train -3052,2,train -3489,3,train -891,4,train -3186,2,train -2790,2,train -3885,3,train -233,4,train -750,1,train -1187,2,train -3964,3,train -3702,3,train -708,4,train -3003,2,train -3399,2,train -842,4,train -3440,3,train -1004,2,train -3736,1,train -1138,2,train -742,2,train -3915,3,train -921,4,train -3653,3,train -263,4,train -3949,1,train -1351,2,train -955,2,train -738,4,train -3429,2,train -3866,3,train -872,4,train -4028,1,train -1034,2,train -1471,3,train -772,2,train -510,2,train -689,4,train -1684,3,train -1381,2,train -1422,3,train -3717,1,train -1119,2,train -723,2,train -3500,3,train -3896,3,train -902,4,train -3937,4,train -1718,1,train -1501,3,train -3796,1,train -1198,2,train -802,2,train -936,2,train -1931,1,train -2110,3,train -1714,3,train -4009,1,train -1411,2,train -1452,3,train -1190,3,train -3926,3,train -3967,4,train -2144,1,train -1748,1,train -1927,3,train -2102,4,train -1665,3,train -1269,3,train -2223,1,train -1961,1,train -2398,2,train -2181,4,train -1878,3,train -1919,4,train -2315,4,train -1616,3,train -1220,3,train -2308,1,train -1912,1,train -2528,4,train -1829,3,train -1870,4,train -1991,1,train -2428,2,train -2125,1,train -2166,2,train -2607,4,train -2345,4,train -1646,3,train -2083,4,train -126,1,train -3037,2,train -2641,2,train -1942,1,train -2379,2,train -2296,4,train -339,1,train -77,1,train -2854,2,train -2458,2,train -2895,3,train -2155,1,train -2592,2,train -2375,4,train -2113,4,train -1717,4,train -3108,3,train -114,4,train -2805,2,train -2147,2,train -369,1,train -3187,3,train -148,2,train -3321,3,train -327,4,train -2622,2,train -3059,3,train -65,4,train -623,2,train -361,2,train -3138,3,train -3534,3,train -540,4,train -144,4,train -2835,2,train -2876,3,train -2573,2,train -836,2,train -137,1,train -178,2,train -574,2,train -357,4,train -95,4,train -653,2,train -3385,1,train -787,2,train -391,2,train -3605,4,train -88,1,train -129,2,train -3302,3,train -3343,4,train -308,4,train -2644,3,train -866,2,train -3202,1,train -604,2,train -1041,3,train -3336,1,train -342,2,train -3253,3,train -1337,1,train -4073,1,train -1120,3,train -3415,1,train -1254,3,train -3549,1,train -4031,4,train -421,2,train -555,2,train -3635,4,train -2936,3,train -3373,4,train -338,4,train -3769,4,train -1333,3,train -937,3,train -3628,1,train -4065,2,train -3366,1,train -3982,4,train -3586,4,train -1367,1,train -1546,3,train -3841,1,train -3882,2,train -847,2,train -1284,3,train -1325,4,train -3579,1,train -585,2,train -626,3,train -3403,4,train -1580,1,train -1184,1,train -4095,2,train -1101,3,train -3792,1,train -1235,3,train -839,3,train -3750,4,train -1793,1,train -1834,2,train -1135,1,train -1617,4,train -3912,2,train -1314,3,train -1355,4,train -656,3,train -1610,1,train -1214,1,train -2047,2,train -1744,1,train -1348,1,train -1830,4,train -1568,4,train -1265,3,train -869,3,train -4042,4,train -1823,1,train -1864,2,train -2260,2,train -1561,1,train -1602,2,train -4076,2,train -1519,4,train -1123,4,train -1378,1,train -1598,4,train -1295,3,train -1732,4,train -2331,3,train -1632,2,train -1549,4,train -2503,2,train -2107,2,train -1845,2,train -1762,4,train -2757,3,train -1796,2,train -1579,4,train -193,2,train -2574,3,train -2271,2,train -1875,2,train -2312,3,train -1792,4,train -2870,1,train -3004,1,train -10,2,train -2787,3,train -2088,2,train -2525,3,train -2263,3,train -89,2,train -3258,2,train -223,2,train -2738,3,train -2342,3,train -3296,1,train -3034,1,train -3471,2,train -40,2,train -2772,1,train -3168,1,train -3388,4,train -2992,4,train -2689,3,train -3247,1,train -253,2,train -690,3,train -2985,1,train -3467,4,train -32,3,train -2768,3,train -2809,4,train -3205,4,train -3064,1,train -70,2,train -507,3,train -3239,2,train -245,3,train -3156,4,train -2760,4,train -803,1,train -541,1,train -720,3,train -761,4,train -2619,1,train -3056,2,train -458,3,train -2839,4,train -1016,1,train -620,1,train -1150,1,train -3531,2,train -3968,3,train -3665,2,train -3269,2,train -3448,4,train -3052,4,train -3186,4,train -2790,4,train -833,1,train -3744,2,train -750,3,train -791,4,train -1187,4,train -3003,4,train -1046,1,train -784,1,train -3957,2,train -522,1,train -3736,3,train -1004,4,train -3299,2,train -1138,4,train -742,4,train -1259,1,train -1300,2,train -997,1,train -1038,2,train -1434,2,train -735,1,train -821,4,train -3512,2,train -3949,3,train -955,4,train -1647,2,train -814,1,train -1251,2,train -4028,3,train -1034,4,train -772,4,train -3504,3,train -510,4,train -1726,2,train -1027,1,train -1068,2,train -1464,2,train -1202,2,train -589,4,train -3717,3,train -1119,4,train -723,4,train -1677,2,train -1718,3,train -4013,1,train -1415,2,train -3796,3,train -1198,4,train -802,4,train -936,4,train -1494,2,train -1098,2,train -1931,3,train -1232,2,train -4009,3,train -2227,1,train -2144,3,train -1748,3,train -2185,4,train -1445,2,train -1486,3,train -2306,1,train -2440,1,train -2223,3,train -1961,3,train -2398,4,train -2653,1,train -2391,1,train -2215,4,train -1912,3,train -1516,3,train -2470,1,train -1991,3,train -2428,4,train -2125,3,train -2166,4,train -2287,1,train -126,3,train -2421,1,train -2025,1,train -2159,1,train -2641,4,train -1942,3,train -2379,4,train -2937,2,train -2634,1,train -2238,1,train -77,3,train -2372,1,train -2458,4,train -2854,4,train -2155,3,train -2592,4,train -1934,4,train -373,1,train -197,4,train -2055,1,train -2888,2,train -2147,4,train -452,1,train -3363,2,train -2967,2,train -2664,1,train -2705,2,train -148,4,train -2622,4,train -665,1,train -269,1,train -444,2,train -3180,2,train -141,1,train -227,4,train -623,4,train -2522,2,train -361,4,train -2656,2,train -2918,2,train -2573,4,train -3651,1,train -616,1,train -220,1,train -836,4,train -137,3,train -178,4,train -574,4,train -3730,1,train -736,2,train -171,1,train -653,4,train -2948,2,train -3385,3,train -391,4,train -129,4,train -3681,1,train -646,1,train -687,2,train -866,4,train -3161,2,train -3202,3,train -604,4,train -3336,3,train -342,4,train -3894,1,train -900,2,train -504,2,train -1337,3,train -3632,1,train -638,2,train -3415,3,train -421,4,train -25,4,train -3549,3,train -555,4,train -717,2,train -3845,1,train -3931,4,train -3628,3,train -4065,4,train -3366,3,train -930,2,train -1367,3,train -3662,1,train -668,2,train -3882,4,train -3841,3,train -3579,3,train -585,4,train -1401,1,train -1580,3,train -1184,3,train -485,2,train -3699,4,train -4095,4,train -1876,1,train -1793,3,train -1834,4,train -698,2,train -1135,3,train -3912,4,train -2089,1,train -1827,1,train -1610,3,train -1214,3,train -2047,4,train -911,2,train -1348,3,train -1906,1,train -2040,1,train -2260,4,train -1864,4,train -1561,3,train -1602,4,train -4076,4,train -2119,1,train -2294,2,train -1378,3,train -982,3,train -2070,1,train -2507,2,train -1412,1,train -1632,4,train -1370,4,train -1887,1,train -1928,2,train -2324,2,train -1625,1,train -2107,4,train -1845,4,train -22,1,train -2799,2,train -2100,1,train -2141,2,train -1838,1,train -2275,2,train -1796,4,train -101,1,train -2488,2,train -2092,2,train -1875,4,train -3087,1,train -93,2,train -2870,3,train -2567,2,train -2171,2,train -2608,3,train -10,4,train -2305,2,train -1909,2,train -2346,3,train -3004,3,train -2088,4,train -172,2,train -306,2,train -89,4,train -3258,4,train -2518,2,train -2122,2,train -3513,1,train -3117,1,train -519,2,train -3296,3,train -257,2,train -3034,3,train -3471,4,train -40,4,train -2772,3,train -2376,3,train -3726,1,train -3068,1,train -74,2,train -2851,3,train -3247,3,train -2985,3,train -549,2,train -2885,1,train -3367,4,train -287,2,train -3064,3,train -2623,1,train -3105,4,train -70,4,train -3239,4,train -2406,3,train -3797,2,train -803,3,train -3098,1,train -3494,1,train -104,2,train -541,3,train -2836,1,train -238,2,train -2619,3,train -3056,4,train -3614,2,train -1016,3,train -620,3,train -2915,1,train -3311,1,train -3748,2,train -358,3,train -3531,4,train -3665,4,train -3269,4,train -1446,1,train -833,3,train -3128,1,train -3961,2,train -3262,1,train -3303,2,train -3744,4,train -4040,2,train -1046,3,train -605,1,train -1087,4,train -3778,2,train -784,3,train -3516,2,train -522,3,train -3299,4,train -1342,1,train -1476,1,train -1517,2,train -1259,3,train -1300,4,train -997,3,train -1038,4,train -1434,4,train -3729,2,train -735,3,train -3512,4,train -1596,2,train -1293,1,train -897,1,train -635,1,train -1117,4,train -1647,4,train -814,3,train -1251,4,train -3942,2,train -1809,2,train -1943,2,train -1110,1,train -1547,2,train -1244,1,train -1726,4,train -4021,2,train -4062,3,train -1027,3,train -1068,4,train -1464,4,train -3759,2,train -1202,4,train -806,4,train -3800,3,train -1323,1,train -1364,2,train -1061,1,train -4013,3,train -1415,4,train -1274,1,train -1315,2,train -1711,2,train -4092,3,train -1494,4,train -1098,4,train -1232,4,train -1790,2,train -2227,3,train -1445,4,train -2523,1,train -2306,3,train -2440,3,train -2044,3,train -1741,2,train -1782,3,train -2653,3,train -2391,3,train -2553,1,train -2687,1,train -2291,1,train -2470,3,train -1771,2,train -2766,1,train -2900,1,train -2287,3,train -2421,3,train -2025,3,train -2159,3,train -2583,1,train -3020,2,train -26,3,train -2321,1,train -2717,1,train -2937,4,train -2455,1,train -2541,4,train -2238,3,train -1842,3,train -3233,2,train -2930,1,train -2534,1,train -373,3,train -2668,1,train -2888,4,train -2055,3,train -669,1,train -452,3,train -2351,1,train -2485,1,train -2967,4,train -2705,4,train -882,1,train -3659,2,train -665,3,train -269,3,train -3438,3,train -444,4,train -2698,1,train -2739,2,train -141,3,train -2918,4,train -2522,4,train -3180,4,train -2656,4,train -699,1,train -303,1,train -3476,2,train -437,1,train -41,1,train -3651,3,train -220,3,train -3348,2,train -912,1,train -953,2,train -3730,3,train -650,1,train -736,4,train -3031,2,train -2769,2,train -171,3,train -2948,4,train -729,1,train -467,1,train -3244,2,train -3681,3,train -687,4,train -3378,2,train -3977,1,train -942,1,train -983,2,train -1379,2,train -284,1,train -3498,3,train -3894,3,train -900,4,train -504,4,train -3195,2,train -3236,3,train -638,4,train -242,4,train -3632,3,train -3928,1,train -497,1,train -934,2,train -717,4,train -3845,3,train -4007,1,train -1409,2,train -1013,2,train -3745,1,train -751,2,train -930,4,train -489,2,train -3662,3,train -668,4,train -1226,2,train -3958,1,train -1360,2,train -1401,3,train -3696,1,train -702,2,train -485,4,train -1697,1,train -1876,3,train -781,2,train -915,2,train -698,4,train -1910,1,train -2089,3,train -3988,1,train -1390,2,train -1827,3,train -1128,2,train -3946,4,train -911,4,train -1989,1,train -1727,1,train -1906,3,train -1207,2,train -1248,3,train -2202,1,train -1940,1,train -2119,3,train -1678,1,train -2294,4,train -2153,1,train -1757,1,train -2590,2,train -2507,4,train -1412,3,train -2803,2,train -2104,1,train -1708,1,train -1887,3,train -1928,4,train -2324,4,train -1625,3,train -1666,4,train -2486,2,train -1921,1,train -2141,4,train -2275,4,train -101,3,train -2437,2,train -2874,3,train -2134,1,train -2175,2,train -2092,4,train -1696,4,train -3087,3,train -93,4,train -2388,2,train -2784,2,train -2567,4,train -2171,4,train -2305,4,train -1909,4,train -348,1,train -86,1,train -172,4,train -2904,3,train -306,4,train -2122,4,train -3513,3,train -3117,3,train -519,4,train -257,4,train -2552,2,train -419,2,train -3151,1,train -3068,3,train -74,4,train -3626,1,train -632,2,train -3364,1,train -766,2,train -370,2,train -67,1,train -2844,2,train -2885,3,train -287,4,train -2623,3,train -3839,1,train -845,2,train -449,2,train -3577,1,train -187,2,train -3797,4,train -3098,3,train -2702,3,train -104,4,train -2836,3,train -3790,1,train -3831,2,train -796,2,train -3132,1,train -3614,4,train -534,2,train -138,2,train -2915,3,train -3311,3,train -3352,4,train -3748,4,train -916,3,train -3211,1,train -3607,1,train -4044,2,train -3961,4,train -3128,3,train -3262,3,train -3303,4,train -3820,1,train -3861,2,train -4040,4,train -430,2,train -3558,1,train -564,2,train -605,3,train -3778,4,train -3516,4,train -1425,1,train -1559,1,train -1342,3,train -4074,2,train -1517,4,train -3812,2,train -3729,4,train -1638,1,train -1772,1,train -1376,1,train -1114,1,train -1596,4,train -1293,3,train -897,3,train -4025,2,train -635,3,train -1193,1,train -1327,1,train -1809,4,train -1943,4,train -1110,3,train -1547,4,train -1244,3,train -1285,4,train -4021,4,train -3759,4,train -1802,1,train -1406,1,train -1843,2,train -1323,3,train -1364,4,train -4055,2,train -1061,3,train -1102,4,train -2452,2,train -2056,2,train -1357,1,train -961,1,train -1491,1,train -1711,4,train -1315,4,train -2269,2,train -1873,2,train -1570,1,train -1174,1,train -2007,2,train -1790,4,train -2523,3,train -1387,1,train -1824,2,train -1741,4,train -2299,2,train -2340,3,train -1641,2,train -1775,2,train -2770,1,train -2553,3,train -2250,2,train -2291,3,train -2687,3,train -1771,4,train -2983,1,train -2766,3,train -2370,3,train -68,2,train -2800,1,train -3196,1,train -202,2,train -2583,3,train -3020,4,train -2280,2,train -2321,3,train -2717,3,train -2455,3,train -2059,3,train -281,2,train -3013,1,train -2617,1,train -3233,4,train -2534,3,train -2668,3,train -3488,1,train -3226,1,train -232,2,train -669,3,train -2568,1,train -2351,3,train -2788,4,train -2485,3,train -569,1,train -352,3,train -3043,1,train -3480,2,train -90,3,train -2781,1,train -2698,3,train -2739,4,train -3559,2,train -3693,2,train -3256,1,train -3297,2,train -699,3,train -303,3,train -3476,4,train -437,3,train -41,3,train -2818,4,train -995,1,train -599,1,train -3772,2,train -3906,2,train -3510,2,train -953,4,train -2811,1,train -650,3,train -3031,4,train -2769,4,train -1208,1,train -812,1,train -946,1,train -550,1,train -3327,2,train -3723,2,train -729,3,train -770,4,train -3065,2,train -3461,2,train -467,3,train -508,4,train -3244,4,train -3936,2,train -3977,3,train -1379,4,train -983,4,train -3278,2,train -284,3,train -3195,4,train -1279,2,train -1017,2,train -3794,3,train -714,1,train -318,1,train -3095,2,train -3928,3,train -497,3,train -934,4,train -1626,2,train -793,1,train -4007,3,train -1409,4,train -531,1,train -1013,4,train -3308,2,train -3704,2,train -751,4,train -3745,3,train -489,4,train -1006,1,train -1047,2,train -1443,2,train -1226,4,train -3958,3,train -568,4,train -3696,3,train -702,4,train -1522,2,train -1697,3,train -3992,1,train -781,4,train -915,4,train -4071,1,train -1473,2,train -1077,2,train -1910,3,train -1211,2,train -3988,3,train -1989,3,train -1727,3,train -4022,1,train -1424,2,train -1465,3,train -1207,4,train -2285,1,train -2419,1,train -2202,3,train -1503,2,train -1940,3,train -1678,3,train -2236,1,train -1974,1,train -2153,3,train -1757,3,train -2590,4,train -1495,3,train -2711,1,train -2449,1,train -2053,1,train -2803,4,train -2104,3,train -1708,3,train -2266,1,train -2703,2,train -2400,1,train -2004,1,train -2486,4,train -2224,4,train -1921,3,train -5,1,train -2782,2,train -2613,1,train -2437,4,train -2134,3,train -2175,4,train -218,1,train -3129,2,train -2733,2,train -2430,1,train -2034,1,train -2471,2,train -2867,2,train -2254,4,train -2388,4,train -431,1,train -35,1,train -169,1,train -3342,2,train -3080,2,train -2247,1,train -2684,2,train -86,3,train -644,1,train -248,1,train -2763,2,train -3200,3,train -2460,1,train -2501,2,train -2897,2,train -2635,2,train -2552,4,train -636,2,train -3372,2,train -419,4,train -3151,3,train -2848,2,train -3709,1,train -412,1,train -3626,3,train -16,1,train -453,2,train -849,2,train -236,4,train -632,4,train -2927,2,train -370,4,train -3230,3,train -3364,3,train -3922,1,train -666,2,train -3839,3,train -363,1,train -449,4,train -845,4,train -3140,2,train -3618,4,train -187,4,train -2919,3,train -3577,3,train -442,1,train -180,1,train -617,2,train -3831,4,train -4,4,train -3132,3,train -534,4,train -138,4,train -4086,1,train -3824,1,train -3428,1,train -393,1,train -434,2,train -3211,3,train -3607,3,train -3648,4,train -4044,4,train -1212,3,train -3507,1,train -3903,1,train -909,2,train -3641,1,train -4037,1,train -251,2,train -3861,4,train -430,4,train -3558,3,train -1642,1,train -1425,3,train -1122,2,train -1559,3,train -3458,1,train -3854,1,train -3895,2,train -901,3,train -4074,4,train -3812,4,train -1638,3,train -1376,3,train -4067,1,train -677,2,train -1114,3,train -3805,1,train -4025,4,train -2068,1,train -1806,1,train -1193,3,train -890,2,train -1327,3,train -1885,1,train -1489,1,train -2019,1,train -1406,3,train -1843,4,train -3876,2,train -4055,4,train -2098,1,train -2139,2,train -1836,1,train -2056,4,train -1178,1,train -3955,2,train -1357,3,train -961,3,train -2352,2,train -2049,1,train -1653,1,train -2269,4,train -1391,1,train -1873,4,train -1787,1,train -1570,3,train -1174,3,train -2007,4,train -2565,2,train -2169,2,train -1866,1,train -1470,1,train -1907,2,train -1604,1,train -1387,3,train -1824,4,train -1,1,train -2778,2,train -2516,2,train -2299,4,train -1858,2,train -1641,4,train -1775,4,train -80,1,train -2595,2,train -2770,3,train -2071,2,train -1458,4,train -72,2,train -2546,2,train -2983,3,train -2284,2,train -1888,2,train -151,2,train -3279,1,train -285,2,train -68,4,train -2363,2,train -2800,3,train -3196,3,train -3492,1,train -3096,1,train -498,2,train -2834,1,train -281,4,train -2576,2,train -2617,3,train -3013,3,train -3054,4,train -577,2,train -3309,1,train -3047,1,train -53,2,train -3226,3,train -2568,3,train -3522,1,train -132,2,train -569,3,train -2864,1,train -3260,1,train -3043,3,train -3084,4,train -3480,4,train -2781,3,train -3339,1,train -2943,1,train -3776,2,train -3473,1,train -3077,1,train -3559,4,train -3693,4,train -2815,1,train -3297,4,train -3593,2,train -558,2,train -599,3,train -995,3,train -3290,1,train -296,2,train -3510,4,train -3028,1,train -3114,4,train -34,2,train -2811,3,train -3772,4,train -3806,2,train -3940,2,train -812,3,train -3503,1,train -3544,2,train -3723,4,train -946,3,train -550,3,train -3241,1,train -3327,4,train -3461,4,train -3065,4,train -1108,1,train -846,1,train -3757,2,train -3320,1,train -3361,2,train -326,2,train -367,3,train -105,3,train -3278,4,train -1321,1,train -1059,1,train -1279,4,train -4011,3,train -3970,2,train -1017,4,train -714,3,train -318,3,train -3095,4,train -1534,1,train -876,1,train -1313,2,train -1010,1,train -614,1,train -1096,4,train -3391,2,train -793,3,train -397,3,train -3787,2,train -3921,2,train -531,3,train -3308,4,train -1788,2,train -1922,2,train -1089,1,train -1526,2,train -1223,1,train -4000,2,train -3604,2,train -1006,3,train -1047,4,train -1443,4,train -3738,2,train -785,4,train -1302,1,train -1343,2,train -1522,4,train -3817,2,train -3992,3,train -2214,2,train -1253,1,train -1690,2,train -4071,3,train -1473,4,train -1077,4,train -1211,4,train -1903,2,train -1507,2,train -4022,3,train -1424,4,train -2285,3,train -2419,3,train -1586,2,train -1503,4,train -2236,3,train -1974,3,train -2711,3,train -2449,3,train -2053,3,train -2490,4,train -1791,3,train -2879,1,train -2266,3,train -2703,4,train -2400,3,train -2004,3,train -2958,1,train -5,3,train -2300,1,train -2782,4,train -2038,1,train -2520,4,train -218,3,train -2513,1,train -2909,1,train -2950,2,train -3129,4,train -2733,4,train -2867,4,train -2471,4,train -2430,3,train -2034,3,train -252,1,train -3029,2,train -431,3,train -35,3,train -2726,1,train -3163,2,train -169,3,train -2247,3,train -2684,4,train -861,1,train -465,1,train -248,3,train -2543,1,train -3376,2,train -2763,4,train -2460,3,train -2501,4,train -2897,4,train -2635,4,train -2239,4,train -544,1,train -282,1,train -20,1,train -2756,1,train -2797,2,train -636,4,train -2931,2,train -2848,4,train -891,1,train -932,2,train -3709,3,train -233,1,train -3010,2,train -412,3,train -16,3,train -453,4,train -849,4,train -2748,2,train -2927,4,train -708,1,train -312,1,train -1145,2,train -3922,3,train -532,4,train -2827,2,train -3223,2,train -666,4,train -3357,2,train -3956,1,train -921,1,train -962,2,train -263,1,train -700,2,train -3436,2,train -442,3,train -3174,2,train -3215,3,train -3477,3,train -180,3,train -617,4,train -4035,1,train -738,1,train -779,2,train -1175,2,train -4086,3,train -3824,3,train -3428,3,train -434,4,train -3986,1,train -992,2,train -1429,3,train -689,1,train -730,2,train -1126,2,train -3507,3,train -909,4,train -3641,3,train -3245,3,train -3903,3,train -251,4,train -1205,2,train -1642,3,train -3937,1,train -681,2,train -3458,3,train -3854,3,train -3895,4,train -4016,1,train -1418,2,train -3754,1,train -1156,2,train -760,2,train -894,2,train -677,4,train -2068,3,train -3967,1,train -1806,3,train -1107,2,train -890,4,train -3663,4,train -2102,1,train -1706,1,train -1885,3,train -1489,3,train -3784,1,train -1186,2,train -1227,3,train -3876,4,train -2181,1,train -2315,1,train -1919,1,train -2098,3,train -2139,4,train -1836,3,train -1178,3,train -3955,4,train -1870,1,train -2352,4,train -1653,3,train -1257,3,train -1391,3,train -2345,1,train -2386,2,train -2565,4,train -2083,1,train -2169,4,train -1866,3,train -1470,3,train -1907,4,train -1604,3,train -2465,2,train -1504,1,train -2516,4,train -1858,4,train -2678,2,train -80,3,train -2375,1,train -2812,2,train -2113,1,train -1717,1,train -2154,2,train -2595,4,train -2071,4,train -1675,4,train -114,1,train -2891,2,train -2629,2,train -72,4,train -2367,2,train -2284,4,train -1888,4,train -327,1,train -65,1,train -151,4,train -2446,2,train -3279,3,train -285,4,train -2580,2,train -2363,4,train -144,1,train -3492,3,train -2659,2,train -3096,3,train -2397,2,train -2834,3,train -3392,1,train -357,1,train -398,2,train -95,1,train -136,2,train -577,4,train -2872,2,train -2913,3,train -3047,3,train -2651,3,train -3309,3,train -53,4,train -3605,1,train -215,2,train -3343,1,train -349,2,train -3522,3,train -132,4,train -2823,2,train -2864,3,train -3260,3,train -3422,1,train -824,2,train -166,2,train -2943,3,train -3339,3,train -3776,4,train -3077,3,train -2815,3,train -4031,1,train -3635,1,train -3769,1,train -3373,1,train -775,2,train -3111,1,train -3593,4,train -117,2,train -3290,3,train -296,4,train -3028,3,train -34,4,train -3889,2,train -854,2,train -895,3,train -3586,1,train -592,2,train -196,2,train -633,3,train -3410,4,train -330,2,train -3544,4,train -3806,4,train -3940,4,train -1325,1,train -1108,3,train -3403,1,train -3840,2,train -409,2,train -846,3,train -3320,3,train -3361,4,train -3757,4,train -326,4,train -3919,2,train -1321,3,train -622,2,train -1059,3,train -3970,4,train -1617,1,train -1355,1,train -1534,3,train -3870,2,train -876,3,train -1313,4,train -4004,2,train -1010,3,train -614,3,train -3391,4,train -3787,4,train -1830,1,train -1568,1,train -1172,1,train -1788,4,train -910,1,train -1392,4,train -1922,4,train -1089,3,train -1526,4,train -3821,2,train -4000,4,train -3604,4,train -3738,4,train -1519,1,train -1123,1,train -3900,2,train -1302,3,train -1343,4,train -1081,4,train -3817,4,train -1598,1,train -1690,4,train -2248,2,train -1549,1,train -1986,2,train -1507,4,train -2065,2,train -1803,2,train -1586,4,train -2278,2,train -1882,2,train -2319,3,train -1579,1,train -1620,2,train -2057,3,train -2229,2,train -1967,2,train -2349,3,train -2046,2,train -1650,2,train -181,2,train -2958,3,train -2259,2,train -1863,2,train -2300,3,train -2038,3,train -2858,1,train -260,2,train -2992,1,train -2596,1,train -39,3,train -2513,3,train -2950,4,train -3467,1,train -3205,1,train -2809,1,train -252,3,train -3029,4,train -2726,3,train -2767,4,train -3163,4,train -548,1,train -3325,2,train -2626,1,train -465,3,train -2760,1,train -2846,4,train -3376,4,train -2543,3,train -761,1,train -544,3,train -3276,2,train -2839,1,train -3672,2,train -282,3,train -2577,1,train -20,3,train -2756,3,train -2797,4,train -2931,4,train -578,1,train -3751,2,train -3052,1,train -3489,2,train -932,4,train -3227,2,train -99,3,train -2790,1,train -233,3,train -3010,4,train -2748,4,train -1187,1,train -791,1,train -3964,2,train -529,1,train -3306,2,train -3702,2,train -708,3,train -3440,2,train -312,3,train -1145,4,train -3003,1,train -3044,2,train -2827,4,train -3223,4,train -1004,1,train -742,1,train -346,1,train -3956,3,train -962,4,train -3653,2,train -263,3,train -700,4,train -3436,4,train -3174,4,train -821,1,train -4035,3,train -955,1,train -738,3,train -779,4,train -1175,4,train -517,4,train -1034,1,train -1471,2,train -772,1,train -3986,3,train -376,1,train -1209,2,train -510,1,train -992,4,train -3287,2,train -1126,4,train -730,4,train -1684,2,train -1288,2,train -1422,2,train -589,1,train -3803,3,train -723,1,train -1205,4,train -3500,2,train -3937,3,train -547,4,train -681,4,train -1501,2,train -802,1,train -1239,2,train -4016,3,train -936,1,train -977,2,train -3754,3,train -1156,4,train -760,4,train -894,4,train -1714,2,train -1755,3,train -1452,2,train -1056,2,train -1190,2,train -794,2,train -3571,3,train -3967,3,train -2185,1,train -2102,3,train -1706,3,train -1665,2,train -1269,2,train -1007,2,train -3784,3,train -1186,4,train -3959,4,train -2398,1,train -2002,1,train -2181,3,train -1785,3,train -1919,3,train -1220,2,train -2215,1,train -1870,3,train -2428,1,train -2166,1,train -2386,4,train -2083,3,train -2641,1,train -2682,2,train -2379,1,train -1983,1,train -2465,4,train -2203,4,train -1504,3,train -2458,1,train -2062,1,train -2895,2,train -2678,4,train -2812,4,train -1934,1,train -2113,3,train -1717,3,train -2154,4,train -197,1,train -2974,2,train -3108,2,train -2712,2,train -114,3,train -2891,4,train -2013,1,train -2450,2,train -2147,1,train -2629,4,train -2367,4,train -1971,4,train -3187,2,train -148,1,train -3321,2,train -3059,2,train -65,3,train -2446,4,train -2580,4,train -623,1,train -227,1,train -361,1,train -3138,2,train -3179,3,train -144,3,train -2876,2,train -2659,4,train -2218,2,train -2397,4,train -44,1,train -178,1,train -3392,3,train -398,4,train -2693,2,train -136,4,train -2872,4,train -653,1,train -391,1,train -3605,3,train -3209,3,train -129,1,train -215,4,train -2510,2,train -3343,3,train -349,4,train -2644,2,train -1041,2,train -3422,3,train -342,1,train -824,4,train -2723,2,train -166,4,train -3718,1,train -1120,2,train -421,1,train -25,1,train -462,2,train -3635,3,train -2936,2,train -3373,3,train -3111,3,train -117,4,train -3931,1,train -937,2,train -4065,1,train -675,2,train -3407,1,train -3889,4,train -854,4,train -413,2,train -3586,3,train -592,4,train -196,4,train -330,4,train -1408,1,train -3882,1,train -3486,1,train -1325,3,train -492,2,train -626,2,train -3403,3,train -3840,4,train -230,2,train -409,4,train -4095,1,train -3699,1,train -1101,2,train -3919,4,train -839,2,train -3657,4,train -622,4,train -1834,1,train -1438,1,train -1617,3,train -3912,1,train -1355,3,train -959,3,train -656,2,train -3870,4,train -4004,4,train -2047,1,train -1830,3,train -1568,3,train -1172,3,train -1609,4,train -3904,2,train -869,2,train -910,3,train -3821,4,train -1864,1,train -1468,1,train -1602,1,train -989,3,train -1519,3,train -1123,3,train -3900,4,train -2118,2,train -1419,1,train -1598,3,train -1157,1,train -1639,4,train -1377,4,train -2331,2,train -1632,1,train -2248,4,train -1370,1,train -1549,3,train -1986,4,train -2107,1,train -1845,1,train -2065,4,train -1803,4,train -2757,2,train -1796,1,train -2278,4,train -1882,4,train -1620,4,train -2574,2,train -2178,2,train -2615,3,train -1875,1,train -1916,2,train -2312,2,train -51,2,train -2525,2,train -2129,2,train -2263,2,train -1867,2,train -2046,4,train -1650,4,train -89,1,train -3258,1,train -2645,3,train -2342,2,train -1946,2,train -1863,4,train -3471,1,train -2858,3,train -260,4,train -2992,3,train -2596,3,train -2334,3,train -3154,1,train -32,2,train -2809,3,train -3367,1,train -3105,1,train -3542,2,train -507,2,train -111,2,train -548,3,train -2843,1,train -245,2,train -3239,1,train -2626,3,train -3325,4,train -2760,3,train -3755,2,train -2922,1,train -761,3,train -3056,1,train -3672,4,train -2839,3,train -3276,4,train -2577,3,train -3531,1,train -3968,2,train -578,3,train -2873,1,train -3269,1,train -3310,2,train -316,3,train -3052,3,train -3489,4,train -3751,4,train -2790,3,train -2831,4,train -3227,4,train -874,1,train -791,3,train -529,3,train -3306,4,train -3702,4,train -3003,3,train -3440,4,train -3044,4,train -1087,1,train -3602,2,train -4039,3,train -1004,3,train -1045,4,train -2903,1,train -3299,1,train -742,3,train -346,3,train -3340,2,train -3736,2,train -1300,1,train -904,1,train -1434,1,train -1038,1,train -821,3,train -3553,2,train -3949,2,train -955,3,train -3291,2,train -1117,1,train -1251,1,train -855,1,train -1292,2,train -4028,2,train -1034,3,train -1075,4,train -1471,4,train -772,3,train -376,3,train -813,4,train -3504,2,train -510,3,train -3287,4,train -1209,4,train -1068,1,train -1505,2,train -1202,1,train -806,1,train -1288,4,train -1684,4,train -1422,4,train -589,3,train -3717,2,train -3583,2,train -723,3,train -3500,4,train -1718,2,train -885,1,train -1322,2,train -1501,4,train -3796,2,train -802,3,train -1239,4,train -843,4,train -977,4,train -1931,2,train -1098,1,train -1714,4,train -1232,1,train -4009,2,train -1452,4,train -1056,4,train -3788,3,train -1190,4,train -794,4,train -1748,2,train -2185,3,train -1486,2,train -1269,4,train -873,4,train -1007,4,train -2223,2,train -1961,2,train -2002,3,train -2398,3,train -1303,2,train -1220,4,train -2215,3,train -1516,2,train -2511,1,train -2249,1,train -1991,2,train -2428,3,train -2469,4,train -2166,3,train -1770,3,train -2682,4,train -2379,3,train -1983,3,train -2937,1,train -2541,1,train -2458,3,train -2062,3,train -2895,4,train -1800,3,train -1934,3,train -197,3,train -2888,1,train -2974,4,train -3108,4,train -2712,4,train -2013,3,train -2450,4,train -2147,3,train -2967,1,train -3008,2,train -2705,1,train -2309,1,train -2746,2,train -148,3,train -3187,4,train -2529,4,train -310,1,train -444,1,train -227,3,train -2522,1,train -2918,1,train -361,3,train -2656,1,train -2959,2,train -3138,4,train -2876,4,train -2218,4,train -261,1,train -3038,2,train -44,3,train -178,3,train -2693,4,train -736,1,train -3385,2,train -2989,2,train -3426,3,train -391,3,train -129,3,train -2510,4,train -2644,4,train -687,1,train -291,1,train -29,1,train -3202,2,train -2723,4,train -3935,1,train -1337,2,train -504,1,train -941,2,train -3718,3,train -638,1,train -242,1,train -1120,4,train -3019,2,train -421,3,train -25,3,train -462,4,train -3194,3,train -3415,2,train -2936,4,train -4014,1,train -1020,2,train -717,1,train -758,2,train -3931,3,train -937,4,train -59,1,train -4065,3,train -675,4,train -3407,3,train -413,4,train -3965,1,train -1367,2,train -971,2,train -1408,3,train -3703,1,train -668,1,train -709,2,train -3486,3,train -3882,3,train -492,4,train -3224,3,train -626,4,train -230,4,train -1184,2,train -788,2,train -485,1,train -3699,3,train -4095,3,train -839,4,train -1834,3,train -1438,3,train -698,1,train -1135,2,train -1176,3,train -3912,3,train -3953,4,train -656,4,train -2047,3,train -1214,2,train -3946,1,train -556,2,train -3904,4,train -1864,3,train -1468,3,train -1905,4,train -3763,1,train -1602,3,train -2294,1,train -2118,4,train -982,2,train -1419,3,train -1157,3,train -2331,4,train -1453,1,train -1935,4,train -1632,3,train -1236,3,train -1370,3,train -2324,1,train -1928,1,train -2365,2,train -1666,1,train -1845,3,train -2444,2,train -2141,1,train -2182,2,train -1483,1,train -1965,4,train -2657,2,train -2395,2,train -2092,1,train -1696,1,train -2178,4,train -2574,4,train -1875,3,train -1916,4,train -2312,4,train -1654,4,train -93,1,train -2870,2,train -2171,1,train -2212,2,train -2608,2,train -51,4,train -1909,1,train -2346,2,train -2129,4,train -1733,4,train -2263,4,train -1867,4,train -172,1,train -306,1,train -3258,3,train -2425,2,train -2122,1,train -2163,2,train -2342,4,train -1946,4,train -164,2,train -3471,3,train -2242,2,train -2376,2,train -3371,1,train -377,2,train -3154,3,train -74,1,train -2851,2,train -3329,4,train -2193,2,train -32,4,train -194,2,train -3367,3,train -3105,3,train -3542,4,train -111,4,train -2406,2,train -2843,3,train -245,4,train -3239,3,train -3797,1,train -803,2,train -407,2,train -104,1,train -145,2,train -541,2,train -2922,3,train -3755,4,train -2619,2,train -2660,3,train -3056,3,train -3614,1,train -620,2,train -224,2,train -3352,1,train -3748,1,train -358,2,train -3531,3,train -3968,4,train -3269,3,train -2873,3,train -3310,4,train -3431,1,train -833,2,train -874,3,train -175,2,train -612,3,train -2907,1,train -3303,1,train -4081,2,train -1087,3,train -3778,1,train -3819,2,train -3516,1,train -3602,4,train -522,2,train -3299,3,train -2903,3,train -3340,4,train -3736,4,train -1517,1,train -1121,1,train -1300,3,train -904,3,train -1038,3,train -3553,4,train -3291,4,train -1596,1,train -1117,3,train -1251,3,train -855,3,train -1292,4,train -3587,2,train -4028,4,train -3504,4,train -1809,1,train -1547,1,train -1285,1,train -889,1,train -1371,4,train -4062,2,train -1068,3,train -1505,4,train -3800,2,train -806,3,train -3583,4,train -3717,4,train -1364,1,train -1801,2,train -1102,1,train -3879,2,train -1718,4,train -885,3,train -1322,4,train -4013,2,train -3796,4,train -1880,2,train -1181,1,train -1618,2,train -1315,1,train -4092,2,train -1098,3,train -2093,2,train -1790,1,train -1831,2,train -2227,2,train -1569,2,train -1748,4,train -4084,3,train -1486,4,train -1090,4,train -2306,2,train -2044,2,train -1782,2,train -1169,4,train -1303,4,train -1861,2,train -1599,2,train -1516,4,train -2377,3,train -2511,3,train -2249,3,train -2807,1,train -2287,2,train -2025,2,train -1629,2,train -2066,3,train -3020,1,train -26,2,train -2937,3,train -2541,3,train -1842,2,train -3233,1,train -2575,1,train -2055,2,train -2096,3,train -2788,1,train -2967,3,train -3008,4,train -2705,3,train -2309,3,train -2746,4,train -527,1,train -3304,2,train -269,2,train -310,3,train -3438,2,train -444,3,train -48,3,train -2343,1,train -2739,1,train -2522,3,train -2126,3,train -2959,4,train -3651,2,train -2818,1,train -261,3,train -3038,4,train -2514,4,train -953,1,train -3730,2,train -736,3,train -3031,1,train -78,3,train -2769,1,train -2989,4,train -770,1,train -3547,2,train -508,1,train -3722,3,train -3244,1,train -3285,2,train -687,3,train -291,3,train -3023,2,train -3681,2,train -29,3,train -3202,4,train -2940,4,train -983,1,train -587,1,train -3498,2,train -3935,3,train -325,1,train -807,4,train -1337,4,train -504,3,train -941,4,train -3102,2,train -242,3,train -3019,4,train -3236,2,train -3632,2,train -1237,2,train -4014,3,train -934,1,train -1020,4,train -3752,3,train -717,3,train -758,4,train -59,3,train -1013,1,train -751,1,train -3965,3,train -489,1,train -971,4,train -3662,2,train -3703,3,train -709,4,train -1226,1,train -1401,2,train -568,1,train -3782,3,train -702,1,train -788,4,train -1184,4,train -3520,3,train -485,3,train -781,1,train -1135,4,train -1035,2,train -1472,3,train -1214,4,train -773,2,train -3550,3,train -3946,3,train -556,4,train -1248,2,train -3980,1,train -986,2,train -3763,3,train -1502,3,train -982,4,train -2590,1,train -1412,2,train -1453,3,train -2273,1,train -1928,3,train -1532,3,train -2365,4,train -2486,1,train -2224,1,train -2661,2,train -2444,4,train -2141,3,train -2182,4,train -1483,3,train -2437,1,train -2041,1,train -2874,2,train -2175,1,train -1779,1,train -2261,4,train -2657,4,train -2395,4,train -1696,3,train -3087,2,train -2254,1,train -2691,2,train -93,3,train -2388,1,train -2429,2,train -2870,4,train -2171,3,train -2212,4,train -2608,4,train -1909,3,train -2346,4,train -172,3,train -2904,2,train -2642,2,train -2425,4,train -2163,4,train -3117,2,train -2721,2,train -164,4,train -2242,4,train -2376,4,train -419,1,train -23,1,train -3371,3,train -2538,2,train -377,4,train -2672,2,train -3068,2,train -2193,4,train -632,1,train -236,1,train -673,2,train -370,1,train -194,4,train -2489,2,train -2885,2,train -2926,3,train -2623,2,train -2406,4,train -449,1,train -3618,1,train -3797,3,train -187,1,train -407,4,train -2702,2,train -3098,2,train -541,4,train -145,4,train -2836,2,train -2619,4,train -3697,1,train -3831,1,train -3435,1,train -3614,3,train -4,1,train -441,2,train -3218,3,train -138,1,train -224,4,train -620,4,train -2915,2,train -358,4,train -2956,3,train -3352,3,train -916,2,train -520,2,train -3648,1,train -4044,1,train -3431,3,train -3128,2,train -3606,4,train -175,4,train -2907,3,train -3303,3,train -3727,1,train -3861,1,train -430,1,train -471,2,train -908,3,train -4081,4,train -605,2,train -3819,4,train -2986,3,train -3516,3,train -4074,1,train -1517,3,train -1121,3,train -3416,1,train -3812,1,train -3636,4,train -3374,4,train -1417,1,train -1596,3,train -1200,3,train -897,2,train -635,2,train -3587,4,train -1809,3,train -1110,2,train -1547,3,train -1588,4,train -3883,2,train -889,3,train -4062,4,train -3800,4,train -1709,1,train -1843,1,train -1364,3,train -1801,4,train -4096,2,train -1102,3,train -3879,4,train -4013,4,train -2056,1,train -1398,1,train -1880,4,train -1181,3,train -1618,4,train -3913,2,train -1315,3,train -1356,4,train -4092,4,train -1873,1,train -1477,1,train -2093,4,train -1215,1,train -2227,4,train -1831,4,train -1569,4,train -2523,2,train -1824,1,train -2306,4,train -2044,4,train -1782,4,train -2340,2,train -1641,1,train -1775,1,train -1861,4,train -1599,4,train -2553,2,train -2291,2,train -1458,1,train -1895,2,train -1416,4,train -2370,2,train -2807,3,train -2108,2,train -1846,2,train -2025,4,train -1629,4,train -68,1,train -2841,1,train -2583,2,train -2624,3,train -3020,3,train -26,4,train -2321,2,train -2059,2,train -1842,4,train -3054,1,train -3233,3,train -2534,2,train -2575,3,train -2055,4,train -3133,1,train -139,2,train -2871,1,train -2351,2,train -2392,3,train -2788,3,train -352,2,train -3084,1,train -3480,1,train -90,2,train -527,3,train -2822,1,train -3304,4,train -3438,4,train -3042,4,train -2739,3,train -2343,3,train -3559,1,train -3297,1,train -2901,1,train -303,2,train -41,2,train -2818,3,train -2422,3,train -3651,4,train -3772,1,train -3510,1,train -3114,1,train -3551,2,train -953,3,train -3730,4,train -3031,3,train -2769,3,train -853,1,train -3327,1,train -770,3,train -3065,1,train -3547,4,train -508,3,train -3285,4,train -3681,4,train -3023,4,train -804,1,train -3581,2,train -3977,2,train -983,3,train -587,3,train -3278,1,train -284,2,train -325,3,train -3102,4,train -3498,4,train -3236,4,train -1279,1,train -1017,1,train -3794,2,train -1237,4,train -404,3,train -3095,1,train -934,3,train -3928,2,train -1096,1,train -834,1,train -4007,2,train -4048,3,train -1013,3,train -3308,1,train -3745,2,train -751,3,train -792,4,train -489,3,train -1047,1,train -785,1,train -3562,2,train -3958,2,train -1401,4,train -568,3,train -3696,2,train -702,3,train -1522,1,train -1697,2,train -4078,3,train -3379,2,train -781,3,train -822,4,train -1910,2,train -1077,1,train -1211,1,train -3988,2,train -3592,2,train -1035,4,train -3767,3,train -773,4,train -1989,2,train -1727,2,train -1331,2,train -1465,2,train -1248,4,train -3980,3,train -986,4,train -1940,2,train -1678,2,train -1282,2,train -2277,1,train -1757,2,train -1361,2,train -1495,2,train -2490,1,train -2273,3,train -1708,2,train -2569,1,train -2703,1,train -2486,3,train -2224,3,train -2661,4,train -2782,1,train -2520,1,train -2258,1,train -2437,3,train -2041,3,train -2478,4,train -2874,4,train -2175,3,train -1779,3,train -2733,1,train -2337,1,train -2471,1,train -3087,4,train -2254,3,train -2691,4,train -2388,3,train -2429,4,train -2684,1,train -2288,1,train -2725,2,train -2904,4,train -2026,1,train -2508,4,train -2642,4,train -2246,4,train -289,1,train -2763,1,train -3200,2,train -2501,1,train -2635,1,train -2239,1,train -2721,4,train -3117,4,train -636,1,train -3017,2,train -419,3,train -23,3,train -2755,2,train -3151,2,train -2538,4,train -2672,4,train -319,1,train -453,1,train -3230,2,train -3626,2,train -236,3,train -673,4,train -2968,2,train -370,3,train -3364,2,train -2706,2,train -2885,4,train -2489,4,train -2623,4,train -532,1,train -666,1,train -707,2,train -3484,3,train -449,3,train -8,1,train -2785,2,train -3618,3,train -187,3,train -2919,2,train -2702,4,train -920,2,train -3697,3,train -617,1,train -3831,3,train -2998,2,train -3435,3,train -4,3,train -441,4,train -3132,2,train -138,3,train -2915,4,train -3993,1,train -300,1,train -737,2,train -3514,3,train -434,1,train -38,1,train -520,4,train -916,4,train -3211,2,train -3648,3,train -1212,2,train -3727,3,train -251,1,train -3861,3,train -3902,4,train -471,4,train -605,4,train -1425,2,train -767,2,train -3895,1,train -901,2,train -3812,3,train -3416,3,train -1376,2,train -1417,3,train -677,1,train -718,2,train -1114,2,train -897,4,train -635,4,train -1713,1,train -1496,3,train -3791,1,train -1193,2,train -535,2,train -3663,1,train -3883,4,train -1709,3,train -1406,2,train -1843,3,train -1185,3,train -3876,1,train -3962,4,train -4096,4,train -2139,1,train -1743,1,train -3955,1,train -961,2,train -1398,3,train -3913,4,train -2352,1,train -1873,3,train -1477,3,train -1914,4,train -1174,2,train -1215,3,train -1652,4,train -2169,1,train -1907,1,train -2523,4,train -1824,3,train -2161,2,train -1858,1,train -1944,4,train -2340,4,train -1641,3,train -2770,2,train -2374,2,train -2071,1,train -1675,1,train -2553,4,train -2291,4,train -1458,3,train -1895,4,train -72,1,train -2191,2,train -1888,1,train -2370,4,train -2108,4,train -1712,4,train -1846,4,train -151,1,train -2800,2,train -2404,2,train -2841,3,train -2583,4,train -2321,4,train -2059,4,train -2617,2,train -3054,3,train -3133,3,train -53,1,train -139,4,train -2434,2,train -2871,3,train -2568,2,train -2172,2,train -2609,3,train -2351,4,train -435,2,train -132,1,train -173,2,train -569,2,train -352,4,train -3084,3,train -90,4,train -2822,3,train -3776,1,train -386,2,train -3559,3,train -124,2,train -2901,3,train -3297,3,train -303,4,train -2639,3,train -41,4,train -3593,1,train -3197,1,train -599,2,train -203,2,train -3114,3,train -3551,4,train -3806,1,train -3410,1,train -812,2,train -3544,1,train -853,3,train -550,2,train -154,2,train -591,3,train -2886,1,train -3327,3,train -3065,3,train -2669,3,train -4060,2,train -3757,1,train -3361,1,train -367,2,train -804,3,train -3581,4,train -3977,4,train -105,2,train -3278,3,train -1100,1,train -3877,2,train -1279,3,train -4011,2,train -3615,2,train -1017,3,train -184,2,train -621,3,train -3398,4,train -318,2,train -3095,3,train -3794,4,train -1313,1,train -4090,2,train -1096,3,train -3391,1,train -3787,1,train -3828,2,train -397,2,train -834,3,train -4007,4,train -531,2,train -3308,3,train -3745,4,train -1788,1,train -1392,1,train -1526,1,train -3907,2,train -868,1,train -1350,4,train -3604,1,train -1047,3,train -3645,2,train -785,3,train -389,3,train -3562,4,train -3696,4,train -1343,1,train -1081,1,train -1697,4,train -3992,2,train -3596,2,train -3379,4,train -1859,2,train -1160,1,train -898,1,train -3675,2,train -4071,2,train -1077,3,train -1118,4,train -3592,4,train -1507,1,train -1989,4,train -1727,4,train -1331,4,train -4022,2,train -1465,4,train -2285,2,train -1586,1,train -1678,4,train -1282,4,train -2236,2,train -2277,3,train -1974,2,train -1757,4,train -1361,4,train -1495,4,train -2053,2,train -2490,3,train -1791,2,train -1708,4,train -2569,3,train -2266,2,train -2703,3,train -2004,2,train -2045,3,train -5,2,train -2782,3,train -2520,3,train -2258,3,train -218,2,train -2950,1,train -2554,1,train -2733,3,train -2337,3,train -2034,2,train -2075,3,train -2471,3,train -1813,3,train -3029,1,train -35,2,train -2767,1,train -3163,1,train -2684,3,train -2288,3,train -2725,4,train -2026,3,train -2846,1,train -248,2,train -289,3,train -2584,1,train -3021,2,train -27,3,train -2763,3,train -3200,4,train -2501,3,train -2105,3,train -2239,3,train -3496,2,train -2797,1,train -3234,2,train -636,3,train -2931,1,train -3017,4,train -3151,4,train -2755,4,train -932,1,train -536,1,train -3709,2,train -319,3,train -3010,1,train -3051,2,train -16,2,train -57,3,train -453,3,train -2748,1,train -3230,4,train -2968,4,train -2706,4,train -615,1,train -1145,1,train -3922,2,train -532,3,train -2827,1,train -3223,1,train -666,3,train -707,4,train -3264,2,train -8,3,train -2785,4,train -2919,4,train -962,1,train -566,1,train -1003,2,train -700,1,train -304,1,train -786,4,train -3477,2,train -920,4,train -87,3,train -3215,2,train -2998,4,train -2602,4,train -3132,4,train -1175,1,train -779,1,train -3993,3,train -517,1,train -300,3,train -737,4,train -3428,2,train -434,3,train -38,3,train -3211,4,train -992,1,train -1429,2,train -730,1,train -1212,4,train -3507,2,train -3245,2,train -251,3,train -1205,1,train -1246,2,train -1642,2,train -3978,1,train -1425,4,train -547,1,train -681,1,train -767,4,train -3458,2,train -3499,3,train -901,4,train -3895,3,train -760,1,train -1114,4,train -718,4,train -1713,3,train -1014,2,train -3791,3,train -1193,4,train -752,2,train -535,4,train -3663,3,train -1489,2,train -1227,2,train -3959,1,train -965,2,train -3876,3,train -2139,3,train -1743,3,train -4038,1,train -1481,3,train -1178,2,train -3955,3,train -961,4,train -2352,3,train -1257,2,train -1391,2,train -2252,1,train -2386,1,train -1990,1,train -2169,3,train -1470,2,train -1907,3,train -2465,1,train -2203,1,train -2161,4,train -1858,3,train -2678,1,train -2020,1,train -2154,1,train -2240,4,train -2374,4,train -1675,3,train -2629,1,train -2670,2,train -72,3,train -2367,1,train -1971,1,train -2191,4,train -1888,3,train -151,3,train -2446,1,train -2487,2,train -2404,4,train -2962,2,train -2659,1,train -2700,2,train -3096,2,train -3137,3,train -2397,1,train -2438,2,train -2834,2,train -2617,4,train -398,1,train -136,1,train -222,4,train -2517,2,train -2913,2,train -3047,2,train -2651,2,train -2434,4,train -2568,4,train -2172,4,train -215,1,train -349,1,train -435,4,train -2730,2,train -132,3,train -173,4,train -569,4,train -2468,2,train -2864,2,train -469,2,train -166,1,train -2943,2,train -3776,3,train -386,4,train -3077,2,train -124,4,train -2815,2,train -682,2,train -3593,3,train -3197,3,train -117,1,train -203,4,train -599,4,train -3889,1,train -895,2,train -499,2,train -196,1,train -633,2,train -3410,3,train -3806,3,train -3544,3,train -550,4,train -154,4,train -2886,3,train -1108,2,train -712,2,train -3444,1,train -3840,1,train -409,1,train -4060,4,train -846,2,train -3664,4,train -188,2,train -2965,3,train -3361,3,train -367,4,train -105,4,train -3919,1,train -3657,1,train -1100,3,train -3877,4,train -401,2,train -3615,4,train -4011,4,train -184,4,train -318,4,train -1396,1,train -3870,1,train -3474,1,train -876,2,train -480,2,train -917,3,train -1313,3,train -614,2,train -3212,1,train -3391,3,train -3828,4,train -397,4,train -4090,4,train -1609,1,train -1788,3,train -1392,3,train -1526,3,train -3821,1,train -3907,4,train -868,3,train -3604,3,train -3645,4,train -3383,4,train -1164,1,train -3900,1,train -1343,3,train -947,3,train -4075,2,train -1081,3,train -3992,4,train -3596,4,train -1639,1,train -1377,1,train -1859,4,train -1160,3,train -898,3,train -3675,4,train -4071,4,train -1676,4,train -4022,4,train -2065,1,train -1803,1,train -1844,2,train -2285,4,train -1586,3,train -1882,1,train -1923,2,train -2319,2,train -1620,1,train -1224,1,train -2057,2,train -1974,4,train -2136,2,train -2053,4,train -1791,4,train -1395,4,train -2349,2,train -1953,2,train -1650,1,train -1825,2,train -2004,4,train -5,4,train -1863,1,train -1904,2,train -2300,2,train -2341,3,train -2038,2,train -39,2,train -2513,2,train -2554,3,train -2950,3,train -2034,4,train -118,2,train -252,2,train -3029,3,train -35,4,train -2767,3,train -2371,3,train -3325,1,train -465,2,train -2846,3,train -2584,3,train -3021,4,train -3142,1,train -544,2,train -3276,1,train -2880,1,train -282,2,train -323,3,train -3496,4,train -20,2,train -2797,3,train -2401,3,train -3234,4,train -3489,1,train -3530,2,train -932,3,train -99,2,train -536,3,train -2831,1,train -233,2,train -3010,3,train -3051,4,train -3227,1,train -16,4,train -2748,3,train -3709,4,train -615,3,train -2910,1,train -3306,1,train -312,2,train -353,3,train -2648,1,train -3044,1,train -3743,2,train -2827,3,train -3264,4,train -1045,1,train -3822,2,train -3956,2,train -962,3,train -566,3,train -1003,4,train -263,2,train -304,3,train -700,3,train -3477,4,train -3215,4,train -2819,4,train -4035,2,train -779,3,train -3511,2,train -517,3,train -3428,4,train -1471,1,train -1075,1,train -1209,1,train -813,1,train -4027,3,train -3986,2,train -992,3,train -1429,4,train -3287,1,train -3328,2,train -730,3,train -771,4,train -3507,4,train -3245,4,train -1288,1,train -3803,2,train -1642,4,train -1246,4,train -3937,2,train -3978,3,train -547,3,train -681,3,train -3458,4,train -1501,1,train -1542,2,train -1239,1,train -843,1,train -4016,2,train -977,1,train -1459,4,train -3358,2,train -3754,2,train -760,3,train -3795,3,train -1755,2,train -1359,2,train -1056,1,train -660,1,train -1493,2,train -1190,1,train -794,1,train -3571,2,train -3967,2,train -1014,4,train -752,4,train -1572,2,train -1269,1,train -873,1,train -1706,2,train -1007,1,train -1489,4,train -3784,2,train -1227,4,train -3959,3,train -965,4,train -1785,2,train -1919,2,train -4038,3,train -1178,4,train -2256,1,train -2039,3,train -1340,2,train -1777,3,train -1257,4,train -2469,1,train -2252,3,train -2386,3,train -1990,3,train -1470,4,train -2682,1,train -2286,1,train -2465,3,train -2203,3,train -1807,3,train -1504,2,train -2895,1,train -2678,3,train -2237,1,train -2020,3,train -1717,2,train -2154,3,train -2974,1,train -2712,1,train -2316,1,train -2450,1,train -2670,4,train -1971,3,train -2529,1,train -2966,2,train -2267,1,train -2446,3,train -2487,4,train -2225,4,train -268,1,train -3045,2,train -3179,2,train -2962,4,train -2084,1,train -3096,4,train -2218,1,train -2700,4,train -2834,4,train -2438,4,train -219,1,train -2996,2,train -3392,2,train -398,3,train -2693,1,train -136,3,train -2913,4,train -2517,4,train -2651,4,train -2255,4,train -3209,2,train -215,3,train -2510,1,train -2947,2,train -3343,2,train -2644,1,train -2730,4,train -2864,4,train -2468,4,train -3422,2,train -3026,2,train -469,4,train -2723,1,train -166,3,train -2943,4,train -2502,2,train -462,1,train -682,4,train -3373,2,train -3111,2,train -2715,2,train -117,3,train -937,1,train -978,2,train -675,1,train -3889,3,train -3493,3,train -413,1,train -17,1,train -499,4,train -895,4,train -196,3,train -237,4,train -633,4,train -2794,2,train -1325,2,train -492,1,train -626,1,train -230,1,train -712,4,train -3403,2,train -846,4,train -3444,3,train -3840,3,train -188,4,train -4002,1,train -1008,2,train -746,2,train -3919,3,train -3657,3,train -401,4,train -3953,1,train -1355,2,train -959,2,train -1396,3,train -3691,1,train -3870,3,train -3474,3,train -3911,4,train -876,4,train -480,4,train -3212,3,train -614,4,train -1475,3,train -1172,2,train -1213,3,train -1609,3,train -3904,1,train -910,2,train -514,2,train -3821,3,train -1905,1,train -989,2,train -3721,1,train -1123,2,train -1164,3,train -3900,3,train -4075,4,train -2118,1,train -1722,1,train -1639,3,train -1377,3,train -2331,1,train -1935,1,train -1893,4,train -1752,1,train -1972,4,train -1803,3,train -1844,4,train -1965,1,train -1703,1,train -1882,3,train -1441,1,train -1923,4,train -2319,4,train -1620,3,train -1224,3,train -1661,4,train -2057,4,train -2178,1,train -2615,2,train -1916,1,train -1520,1,train -2353,2,train -1654,1,train -2136,4,train -51,1,train -2432,2,train -2129,1,train -1733,1,train -2170,2,train -1867,1,train -1953,4,train -2349,4,train -1650,3,train -1691,4,train -1825,4,train -2645,2,train -1946,1,train -2300,4,train -1904,4,train -2038,4,train -2858,2,train -2596,2,train -39,4,train -2334,2,train -1721,4,train -3329,1,train -335,2,train -32,1,train -118,4,train -2413,2,train -2809,2,train -252,4,train -2151,2,train -3542,1,train -111,1,train -152,2,train -548,2,train -2929,3,train -3325,3,train -2626,2,train -3755,1,train -761,2,train -3142,3,train -544,4,train -2839,2,train -2880,3,train -3276,3,train -282,4,train -2577,2,train -3317,4,train -20,4,train -3176,1,train -578,2,train -182,2,train -3310,1,train -316,2,train -3530,4,train -2697,3,train -99,4,train -2831,3,train -3227,3,train -791,2,train -395,2,train -3127,1,train -529,2,train -133,2,train -2910,3,train -3306,3,train -312,4,train -3044,3,train -2648,3,train -3085,4,train -3743,4,train -1349,3,train -3602,1,train -4039,2,train -1045,3,train -649,3,train -3340,1,train -3822,4,train -346,2,train -3956,4,train -821,2,train -4035,4,train -3553,1,train -3594,2,train -3291,1,train -3377,4,train -3511,4,train -1292,1,train -1075,3,train -679,3,train -1209,3,train -376,2,train -813,3,train -3504,1,train -3986,4,train -3287,3,train -3328,4,train -1371,1,train -1505,1,train -1109,1,train -3886,2,train -1288,3,train -1329,4,train -3583,1,train -589,2,train -3803,4,train -368,3,train -3145,4,train -1188,1,train -1322,1,train -1542,4,train -3837,2,train -1239,3,train -843,3,train -3575,2,train -4016,4,train -977,3,train -3754,4,train -3358,4,train -1576,2,train -1755,4,train -877,1,train -1359,4,train -1056,3,train -660,3,train -1493,4,train -3788,2,train -794,3,train -3571,4,train -2185,2,train -1789,2,train -1486,1,train -1090,1,train -1572,4,train -3867,2,train -1706,4,train -873,3,train -1007,3,train -3784,4,train -1868,2,train -2002,2,train -1169,1,train -1303,1,train -1785,4,train -1127,4,train -2215,2,train -1819,2,train -2256,3,train -1516,1,train -1557,2,train -1340,4,train -2469,3,train -1636,2,train -1770,2,train -1374,2,train -2682,3,train -1849,2,train -2286,3,train -1983,2,train -1587,2,train -1504,4,train -2062,2,train -1800,2,train -2237,3,train -1934,2,train -197,2,train -2974,3,train -2533,1,train -2712,3,train -2316,3,train -2753,4,train -2013,2,train -2450,3,train -3008,1,train -2746,1,train -2529,3,train -2133,3,train -2966,4,train -2267,3,train -227,2,train -268,3,train -2563,1,train -2959,1,train -3045,4,train -6,3,train -2301,1,train -3179,4,train -2084,3,train -2218,3,train -3038,1,train -44,2,train -85,3,train -219,3,train -2514,1,train -2996,4,train -3392,4,train -2693,3,train -515,1,train -3292,2,train -2989,1,train -2593,1,train -3030,2,train -3426,2,train -3209,4,train -2510,3,train -2947,4,train -594,1,train -3243,2,train -3422,4,train -3026,4,train -2723,3,train -2502,4,train -807,1,train -941,1,train -545,1,train -3718,2,train -765,4,train -3019,1,train -3060,2,train -25,2,train -462,3,train -503,4,train -3194,2,train -2581,4,train -3111,4,train -2715,4,train -1020,1,train -758,1,train -1195,2,train -3931,2,train -978,4,train -3273,2,train -675,3,train -3407,2,train -413,3,train -17,3,train -2794,4,train -971,1,train -1408,2,train -3789,3,train -709,1,train -313,1,train -3486,2,train -492,3,train -533,4,train -3224,2,train -230,3,train -788,1,train -4002,3,train -1008,4,train -3699,2,train -746,4,train -3478,3,train -1438,2,train -1176,2,train -3953,3,train -959,4,train -563,4,train -3691,3,train -1255,2,train -3987,1,train -556,1,train -993,2,train -1172,4,train -3904,3,train -910,4,train -514,4,train -1468,2,train -1905,3,train -810,2,train -989,4,train -3721,3,train -2118,3,train -1722,3,train -4017,1,train -982,1,train -1023,2,train -1419,2,train -1460,3,train -1157,2,train -2018,1,train -1935,3,train -1236,2,train -1370,2,train -2365,1,train -1969,1,train -1752,3,train -2189,4,train -4047,1,train -1490,3,train -1228,3,train -2444,1,train -2048,1,train -2182,1,train -1965,3,train -1703,3,train -1441,3,train -2657,1,train -2261,1,train -2395,1,train -1999,1,train -2178,3,train -2219,4,train -2615,4,train -1916,3,train -1520,3,train -2353,4,train -1654,3,train -2608,1,train -2212,1,train -51,3,train -2346,1,train -2432,4,train -2129,3,train -1733,3,train -2170,4,train -1867,3,train -2728,2,train -2425,1,train -2029,1,train -2466,2,train -2163,1,train -1767,1,train -2645,4,train -1946,3,train -1987,4,train -164,1,train -2242,1,train -2679,2,train -2376,1,train -2858,4,train -2596,4,train -2334,4,train -377,1,train -3154,2,train -3329,3,train -2496,2,train -335,4,train -2193,1,train -2413,4,train -2151,4,train -194,1,train -3367,2,train -3542,3,train -3105,2,train -2709,2,train -111,3,train -152,4,train -548,4,train -2406,1,train -2447,2,train -2626,4,train -2843,2,train -407,1,train -3225,3,train -145,1,train -2922,2,train -3755,3,train -2660,2,train -2577,4,train -3655,1,train -224,1,train -661,2,train -358,1,train -3176,3,train -578,4,train -182,4,train -2873,2,train -3310,3,train -316,4,train -874,2,train -478,2,train -3606,1,train -612,2,train -175,1,train -395,4,train -3127,3,train -529,4,train -133,4,train -4081,1,train -1087,2,train -3819,1,train -3602,3,train -4039,4,train -167,2,train -2903,2,train -3340,3,train -346,4,train -904,2,train -3636,1,train -246,2,train -3374,1,train -380,2,train -3553,3,train -3594,4,train -3291,3,train -1375,1,train -1117,2,train -3890,2,train -855,2,train -896,3,train -1292,3,train -3587,1,train -376,4,train -1454,1,train -1588,1,train -1371,3,train -4062,1,train -1505,3,train -1109,3,train -3800,1,train -3886,4,train -806,2,train -3583,3,train -1801,1,train -1188,3,train -3879,1,train -3920,2,train -885,2,train -926,3,train -1322,3,train -664,3,train -3837,4,train -3575,4,train -1880,1,train -1484,1,train -1618,1,train -1356,1,train -4092,1,train -1576,4,train -3871,2,train -877,3,train -3788,4,train -2093,1,train -1831,1,train -1435,1,train -1872,2,train -1569,1,train -1655,4,train -1789,4,train -4084,2,train -1090,3,train -3867,4,train -2044,1,train -2085,2,train -1782,1,train -1868,4,train -2002,4,train -1169,3,train -3901,2,train -1303,3,train -1344,4,train -2164,2,train -1861,1,train -1599,1,train -1203,1,train -1819,4,train -1557,4,train -2377,2,train -2511,2,train -2249,2,train -1416,1,train -1636,4,train -1770,4,train -1374,4,train -1629,1,train -2066,2,train -1849,4,train -1983,4,train -1587,4,train -26,1,train -2541,2,train -2145,2,train -1842,1,train -1883,2,train -2062,4,train -1800,4,train -2096,2,train -2533,3,train -2013,4,train -3091,1,train -2829,1,train -3008,3,train -2309,2,train -2746,3,train -3304,1,train -310,2,train -3042,1,train -3438,1,train -48,2,train -2959,3,train -2126,2,train -2563,3,train -2301,3,train -3121,1,train -127,2,train -261,2,train -302,3,train -3038,3,train -3079,4,train -44,4,train -2380,3,train -2514,3,train -78,2,train -515,3,train -3292,4,train -2989,3,train -2593,3,train -3030,4,train -3426,4,train -811,1,train -3547,1,train -594,3,train -3285,1,train -3722,2,train -291,2,train -332,3,train -3023,1,train -29,2,train -3243,4,train -3801,2,train -807,3,train -3539,2,train -3102,1,train -3498,1,train -3718,4,train -941,3,train -545,3,train -242,2,train -3019,3,train -3060,4,train -3236,1,train -3194,4,train -1237,1,train -4014,2,train -1020,3,train -3752,2,train -758,3,train -1195,4,train -59,2,train -3273,4,train -3407,4,train -792,1,train -4006,3,train -3569,2,train -3965,2,train -971,3,train -1408,4,train -3307,2,train -709,3,train -313,3,train -3486,4,train -3703,2,train -3224,4,train -1091,4,train -3386,2,train -3782,2,train -788,3,train -3520,2,train -130,3,train -1521,2,train -822,1,train -4036,3,train -1438,4,train -560,1,train -3337,2,train -3774,3,train -1176,4,train -780,4,train -1338,2,train -1035,1,train -1472,2,train -773,1,train -859,4,train -1255,4,train -3550,2,train -556,3,train -993,4,train -3946,2,train -3987,3,train -1551,2,train -1248,1,train -1289,2,train -986,1,train -1468,4,train -3763,2,train -3804,3,train -810,4,train -1368,2,train -1502,2,train -4017,3,train -1419,4,train -1023,4,train -1157,4,train -2018,3,train -4051,1,train -1453,2,train -1057,2,train -1236,4,train -2365,3,train -1532,2,train -1969,3,train -1270,2,train -4047,3,train -2661,1,train -2265,1,train -2444,3,train -2048,3,train -2182,3,train -1349,2,train -1786,3,train -1483,2,train -2874,1,train -2478,1,train -2657,3,train -2261,3,train -2395,3,train -1999,3,train -1696,2,train -2691,1,train -2295,1,train -2429,1,train -2033,1,train -2515,4,train -2212,3,train -2904,1,train -2508,1,train -2945,2,train -2642,1,train -2246,1,train -2728,4,train -2425,3,train -2029,3,train -2466,4,train -2163,3,train -1767,3,train -2721,1,train -2325,1,train -164,3,train -2063,1,train -2242,3,train -2679,4,train -3371,2,train -2538,1,train -377,3,train -2672,1,train -3154,4,train -2496,4,train -2193,3,train -673,1,train -277,1,train -194,3,train -2489,1,train -2926,2,train -2709,4,train -2843,4,train -2447,4,train -3005,2,train -407,3,train -2702,1,train -145,3,train -2922,4,train -2481,2,train -2660,4,train -2264,4,train -307,1,train -744,2,train -441,1,train -45,1,train -3218,2,train -3655,3,train -224,3,train -661,4,train -2956,2,train -3352,2,train -2694,2,train -2873,4,train -916,1,train -520,1,train -957,2,train -3431,2,train -874,4,train -478,4,train -2773,2,train -3606,3,train -175,3,train -612,4,train -2907,2,train -3902,1,train -4081,3,train -471,1,train -908,2,train -3819,3,train -2986,2,train -167,4,train -2903,4,train -3981,1,train -1121,2,train -904,4,train -3636,3,train -3240,3,train -246,4,train -3374,3,train -380,4,train -1200,2,train -1375,3,train -3670,1,train -676,2,train -3890,4,train -855,4,train -3587,3,train -1454,3,train -3749,1,train -1588,3,train -3883,1,train -3487,1,train -889,2,train -3962,1,train -1801,3,train -4096,1,train -1102,2,train -706,2,train -3879,3,train -3920,4,train -885,4,train -1701,1,train -1880,3,train -1484,3,train -1181,2,train -1618,3,train -3913,1,train -1356,3,train -3871,4,train -1914,1,train -2093,3,train -1652,1,train -1831,3,train -1435,3,train -1872,4,train -1569,3,train -4084,4,train -3688,4,train -1731,1,train -1951,4,train -2085,4,train -3901,4,train -2340,1,train -1944,1,train -2164,4,train -1861,3,train -1420,1,train -1599,3,train -1203,3,train -1640,4,train -1895,1,train -2377,4,train -2511,4,train -2249,4,train -1416,3,train -2370,1,train -2807,2,train -2108,1,train -1712,1,train -2149,2,train -1846,1,train -1629,3,train -1670,4,train -2066,4,train -2624,2,train -2059,1,train -2145,4,train -1883,4,train -2441,2,train -2878,3,train -2575,2,train -2179,2,train -2616,3,train -2096,4,train -1700,4,train -139,1,train -3091,3,train -2788,2,train -2392,2,train -2829,3,train -2309,4,train -352,1,train -90,1,train -131,2,train -527,2,train -3304,3,train -310,4,train -3042,3,train -2646,3,train -48,4,train -2343,2,train -2126,4,train -3121,3,train -127,4,train -2422,2,train -2818,2,train -261,4,train -3417,1,train -3551,1,train -2676,3,train -78,4,train -770,2,train -811,3,train -3547,3,train -508,2,train -3285,3,train -3326,4,train -3722,4,train -291,4,train -3023,3,train -29,4,train -3581,1,train -587,2,train -3801,4,train -3405,4,train -325,2,train -3102,3,train -3539,4,train -3935,4,train -3794,1,train -3398,1,train -1237,3,train -404,2,train -4014,4,train -142,2,train -3752,4,train -59,4,train -4048,2,train -658,3,train -2953,1,train -792,3,train -3569,4,train -3965,4,train -3703,4,train -3307,4,train -1350,1,train -1088,1,train -3865,2,train -3562,1,train -568,2,train -3782,4,train -3386,4,train -3520,4,train -3124,4,train -1167,1,train -4078,2,train -1521,4,train -3379,1,train -3816,2,train -822,3,train -3554,2,train -560,3,train -3337,4,train -1118,1,train -1555,2,train -856,1,train -1338,4,train -3592,1,train -1035,3,train -1472,4,train -3633,2,train -3767,2,train -773,3,train -3550,4,train -1331,1,train -935,1,train -1768,2,train -1465,1,train -1551,4,train -3846,2,train -1289,4,train -3980,2,train -986,3,train -3763,4,train -1847,2,train -1282,1,train -1368,4,train -1502,4,train -1361,1,train -1798,2,train -1495,1,train -4051,3,train -1453,4,train -1057,4,train -2273,2,train -1353,2,train -1532,4,train -1270,4,train -2224,2,train -2265,3,train -2661,3,train -1349,4,train -1483,4,train -2561,1,train -2344,3,train -2041,2,train -2478,3,train -1779,2,train -2254,2,train -2295,3,train -2691,3,train -2429,3,train -2033,3,train -2853,1,train -2591,1,train -2725,1,train -2508,3,train -2112,3,train -2945,4,train -2642,3,train -2246,3,train -3200,1,train -2542,1,train -2721,3,train -2325,3,train -2063,3,train -3017,1,train -2621,1,train -23,2,train -64,3,train -2755,1,train -3371,4,train -2538,3,train -2672,3,train -3230,1,train -3271,2,train -236,2,train -277,3,train -673,3,train -2572,1,train -2968,1,train -2706,1,train -3009,2,train -2489,3,train -2926,4,train -707,1,train -3484,2,train -3618,2,train -2785,1,train -3222,2,train -2919,1,train -3005,4,train -2481,4,train -786,1,train -920,1,train -3697,2,train -3301,2,train -307,3,train -744,4,train -2602,1,train -4,2,train -45,3,train -441,3,train -482,4,train -2998,1,train -2956,4,train -3039,2,train -3218,4,train -2694,4,train -737,1,train -341,1,train -3514,2,train -520,3,train -957,4,train -3648,2,train -3431,4,train -2990,2,train -2773,4,train -2907,4,train -1212,1,train -991,2,train -3727,2,train -3768,3,train -292,1,train -3902,3,train -471,3,train -512,4,train -908,4,train -2986,4,train -767,1,train -371,1,train -3981,3,train -901,1,train -3282,2,train -1121,4,train -3416,2,train -4015,1,train -1417,2,train -718,1,train -1200,4,train -3670,3,train -676,4,train -1496,2,train -535,1,train -3749,3,train -3883,3,train -3487,3,train -889,4,train -1709,2,train -4045,1,train -1051,2,train -1185,2,train -3962,3,train -3566,3,train -4096,3,train -706,4,train -1701,3,train -1398,2,train -1181,4,train -3913,3,train -3954,4,train -1477,2,train -1914,3,train -1215,2,train -1652,3,train -3743,3,train -1731,3,train -4026,1,train -1032,2,train -2027,1,train -2161,1,train -1944,3,train -1420,3,train -2240,1,train -2374,1,train -1978,1,train -1716,1,train -2198,4,train -1458,2,train -1895,3,train -1936,4,train -2191,1,train -2807,4,train -2108,3,train -1712,3,train -2149,4,train -1846,3,train -2404,1,train -2841,2,train -2624,4,train -1966,4,train -3054,2,train -2441,4,train -2575,4,train -2179,4,train -222,1,train -3133,2,train -2737,2,train -139,3,train -2434,1,train -2871,2,train -2172,1,train -2609,2,train -2392,4,train -435,1,train -173,1,train -3084,2,train -2688,2,train -527,4,train -131,4,train -2426,2,train -2822,2,train -2343,4,train -386,1,train -124,1,train -2901,2,train -2639,2,train -2243,2,train -2422,4,train -203,1,train -3417,3,train -3114,2,train -3551,3,train -2456,2,train -2893,3,train -719,2,train -3451,1,train -853,2,train -457,2,train -154,1,train -591,2,train -2669,2,train -4060,1,train -3664,1,train -670,2,train -367,1,train -804,2,train -3581,3,train -105,1,train -587,4,train -325,4,train -3877,1,train -3481,1,train -4011,1,train -3615,1,train -184,1,train -621,2,train -3398,3,train -404,4,train -142,4,train -4090,1,train -1096,2,train -3828,1,train -3432,1,train -3869,2,train -397,1,train -4048,4,train -438,2,train -834,2,train -176,2,train -2953,3,train -3907,1,train -1350,3,train -3645,1,train -1088,3,train -3383,1,train -3865,4,train -785,2,train -389,2,train -3562,3,train -1167,3,train -468,2,train -3596,1,train -3682,4,train -4078,4,train -643,3,train -3379,3,train -3420,4,train -3816,4,train -3554,4,train -1859,1,train -3675,1,train -1118,3,train -1555,4,train -856,3,train -3592,3,train -3633,4,train -3767,4,train -1676,1,train -1414,1,train -1851,2,train -1152,1,train -1331,3,train -935,3,train -1768,4,train -3846,4,train -3450,4,train -3980,4,train -1847,4,train -1282,3,train -2143,2,train -2277,2,train -1881,2,train -1182,1,train -1361,3,train -1798,4,train -2490,2,train -2094,2,train -1791,1,train -1395,1,train -1832,2,train -2273,4,train -1353,4,train -2569,2,train -2045,2,train -1432,4,train -2520,2,train -2124,2,train -2561,3,train -2258,2,train -1862,2,train -2041,4,train -1779,4,train -2640,3,train -2337,2,train -2075,2,train -1679,2,train -1813,2,train -2853,3,train -2591,3,train -2288,2,train -1892,2,train -2725,3,train -2026,2,train -2887,1,train -289,2,train -3021,1,train -27,2,train -2105,2,train -2542,3,train -2239,2,train -3496,1,train -106,2,train -3234,1,train -3017,3,train -2621,3,train -3058,4,train -23,4,train -2755,3,train -2359,3,train -2097,3,train -2917,1,train -319,2,train -3051,1,train -57,2,train -3271,4,train -2968,3,train -2572,3,train -3009,4,train -2706,3,train -3567,2,train -532,2,train -3264,1,train -3305,2,train -707,3,train -311,3,train -2606,1,train -3088,4,train -8,2,train -2785,3,train -3222,4,train -3484,4,train -1003,1,train -3780,2,train -786,3,train -3518,2,train -3477,1,train -920,3,train -87,2,train -2819,1,train -3215,1,train -3301,4,train -2998,3,train -2602,3,train -3039,4,train -3435,4,train -3697,4,train -820,1,train -3993,2,train -3335,2,train -300,2,train -341,3,train -737,3,train -3514,4,train -38,2,train -2856,4,train -2990,4,train -1429,1,train -771,1,train -3548,2,train -991,4,train -3245,1,train -3727,4,train -292,3,train -1246,1,train -4064,3,train -588,1,train -1070,4,train -767,3,train -371,3,train -3499,2,train -3282,4,train -3416,4,train -4015,3,train -1417,4,train -3753,3,train -718,3,train -1713,2,train -1014,1,train -618,1,train -1496,4,train -3791,2,train -752,1,train -535,3,train -3663,2,train -1227,1,train -1709,4,train -4045,3,train -965,1,train -1051,4,train -3783,3,train -1185,4,train -1743,2,train -1481,2,train -1398,4,train -1560,2,train -1257,1,train -1298,2,train -1735,3,train -4030,1,train -1477,4,train -3813,3,train -1215,4,train -1115,2,train -1249,2,train -4026,3,train -1032,4,train -2027,3,train -2161,3,train -1765,3,train -2240,3,train -2374,3,train -1978,3,train -1675,2,train -1716,3,train -2670,1,train -2494,4,train -2191,3,train -1533,3,train -2487,1,train -2924,2,train -2225,1,train -2404,3,train -2841,4,train -2962,1,train -2700,1,train -2304,1,train -2741,2,train -3137,2,train -2438,1,train -2042,1,train -222,3,train -2517,1,train -2913,1,train -2954,2,train -2651,1,train -2255,1,train -2737,4,train -3133,4,train -2434,3,train -2871,4,train -2172,3,train -2213,4,train -2609,4,train -3033,2,train -435,3,train -2730,1,train -173,3,train -2468,1,train -2688,4,train -2292,4,train -2822,4,train -2426,4,train -469,1,train -3421,3,train -386,3,train -2722,2,train -124,3,train -2901,4,train -2639,4,train -2243,4,train -682,1,train -286,1,train -24,1,train -2801,2,train -3197,2,train -203,3,train -244,4,train -2456,4,train -895,1,train -499,1,train -633,1,train -237,1,train -3451,3,train -719,4,train -3410,2,train -457,4,train -853,4,train -3189,3,train -154,3,train -591,4,train -2886,2,train -2669,4,train -712,1,train -753,2,train -4060,3,train -54,1,train -3664,3,train -188,1,train -670,4,train -2965,2,train -804,4,train -3960,1,train -966,2,train -1100,2,train -3877,3,train -3481,3,train -401,1,train -3615,3,train -184,3,train -621,4,train -3911,1,train -480,1,train -917,2,train -4090,3,train -655,2,train -3432,3,train -3828,3,train -834,4,train -438,4,train -3869,4,train -176,4,train -3990,1,train -1392,2,train -3728,1,train -3907,3,train -3466,1,train -3948,4,train -868,2,train -3645,3,train -3383,3,train -389,4,train -947,2,train -4075,1,train -1081,2,train -468,4,train -3596,3,train -1680,1,train -1859,3,train -3758,1,train -1160,2,train -1201,3,train -898,2,train -3675,3,train -1893,1,train -1676,3,train -1414,3,train -1851,4,train -1152,3,train -3667,4,train -1972,1,train -1710,1,train -1844,1,train -1231,3,train -969,3,train -2319,1,train -1923,1,train -2057,1,train -1661,1,train -2143,4,train -2277,4,train -1881,4,train -1182,3,train -2136,1,train -1478,1,train -2094,4,train -1395,3,train -1832,4,train -2349,1,train -1953,1,train -2390,2,train -2569,4,train -1691,1,train -2128,2,train -1825,1,train -2045,4,train -1904,1,train -2341,2,train -2124,4,train -2258,4,train -1862,4,train -39,1,train -2420,2,train -2554,2,train -1721,1,train -2158,2,train -2337,4,train -2075,4,train -1679,4,train -1813,4,train -118,1,train -2767,2,train -2371,2,train -2288,4,train -1892,4,train -2026,4,train -110,2,train -2846,2,train -2887,3,train -289,4,train -2584,2,train -2188,2,train -3021,3,train -27,4,train -2105,4,train -3435,2,train -189,2,train -3317,1,train -323,2,train -3496,3,train -106,4,train -2401,2,train -3234,3,train -3396,1,train -3530,1,train -99,1,train -536,2,train -2917,3,train -319,4,train -3051,3,train -2655,3,train -57,4,train -615,2,train -3743,1,train -353,2,train -3085,1,train -3567,4,train -3264,3,train -3305,4,train -2606,3,train -8,4,train -3822,1,train -3164,1,train -566,2,train -170,2,train -607,3,train -1003,3,train -304,2,train -2902,1,train -3384,4,train -3518,4,train -87,4,train -2819,3,train -3780,4,train -3377,1,train -3814,2,train -3993,4,train -820,3,train -3511,1,train -517,2,train -3335,4,train -300,4,train -3073,4,train -38,4,train -3893,2,train -4027,2,train -3328,1,train -2932,1,train -771,3,train -3548,4,train -1329,1,train -3803,1,train -1246,3,train -3978,2,train -3145,1,train -3582,2,train -547,2,train -588,3,train -3499,4,train -3103,4,train -1542,1,train -1146,1,train -667,3,train -3358,1,train -3795,2,train -1755,1,train -1359,1,train -1493,1,train -3874,2,train -1713,4,train -3571,1,train -3612,2,train -1014,3,train -618,3,train -1055,4,train -3791,4,train -752,3,train -1572,1,train -3959,2,train -965,3,train -1785,1,train -1127,1,train -1564,2,train -1743,4,train -865,1,train -4038,2,train -1481,4,train -1085,4,train -823,4,train -2039,2,train -1340,1,train -1777,2,train -1560,4,train -1298,4,train -4030,3,train -2252,2,train -1856,2,train -1990,2,train -2031,3,train -1115,4,train -1249,4,train -2203,2,train -1807,2,train -1545,2,train -2020,2,train -1624,2,train -2753,1,train -2670,3,train -1837,2,train -1971,2,train -1575,2,train -2966,1,train -2487,3,train -2924,4,train -2225,3,train -3045,1,train -3179,1,train -2962,3,train -2700,3,train -2304,3,train -2741,4,train -3137,4,train -2438,3,train -2042,3,train -2996,1,train -43,3,train -2820,4,train -2517,3,train -2954,4,train -2255,3,train -3209,1,train -3250,2,train -2947,1,train -3033,4,train -2730,3,train -2289,1,train -2468,3,train -2509,4,train -290,1,train -3026,1,train -469,3,train -73,3,train -3201,2,train -2502,1,train -2722,4,train -765,1,train -503,1,train -682,3,train -286,3,train -2581,1,train -24,3,train -2715,1,train -2801,4,train -3197,4,train -2539,4,train -978,1,train -582,1,train -320,1,train -3097,2,train -3493,2,train -499,3,train -2794,1,train -237,3,train -2969,2,train -2886,4,train -533,1,train -970,2,train -712,3,train -753,4,train -3444,2,train -54,3,train -491,4,train -2786,2,train -188,3,train -2965,4,train -1008,1,train -1049,2,train -746,1,train -350,1,train -1183,2,train -3960,3,train -966,4,train -3657,2,train -1100,4,train -2999,2,train -401,3,train -3994,1,train -959,1,train -563,1,train -1396,2,train -3911,3,train -3474,2,train -3515,3,train -480,3,train -521,4,train -917,4,train -3212,2,train -655,4,train -1475,2,train -1609,2,train -1213,2,train -3990,3,train -514,1,train -951,2,train -3728,3,train -3466,3,train -868,4,train -4024,1,train -989,1,train -1030,2,train -1164,2,train -3545,3,train -947,4,train -551,4,train -4075,3,train -1639,2,train -1680,3,train -3975,1,train -1377,2,train -3758,3,train -1160,4,train -898,4,train -1893,3,train -1497,3,train -798,2,train -2189,1,train -1972,3,train -1710,3,train -4005,1,train -1844,3,train -3963,4,train -1923,3,train -1224,2,train -1661,3,train -2615,1,train -2219,1,train -2353,1,train -1957,1,train -2136,3,train -1478,3,train -1915,4,train -2432,1,train -2170,1,train -1774,1,train -1953,3,train -2390,4,train -1691,3,train -2128,4,train -1825,3,train -2645,1,train -2686,2,train -1987,1,train -2424,2,train -1904,3,train -1945,4,train -2341,4,train -2637,2,train -2334,1,train -2420,4,train -2554,4,train -1721,3,train -2158,4,train -335,1,train -2716,2,train -118,3,train -2413,1,train -2454,2,train -2151,1,train -2192,2,train -2371,4,train -152,1,train -2929,2,train -2667,2,train -110,4,train -2405,2,train -2584,4,train -2188,4,train -3400,1,train -406,2,train -3142,2,train -189,4,train -2484,2,train -2880,2,train -323,4,train -3317,3,train -2222,2,train -2401,4,train -182,1,train -3396,3,train -316,1,train -3530,3,train -2697,2,train -536,4,train -2831,2,train -3430,1,train -395,1,train -133,1,train -174,2,train -615,4,train -2910,2,train -353,4,train -2648,2,train -2951,3,train -3085,3,train -4039,1,train -1045,2,train -649,2,train -3822,3,train -3164,3,train -3601,4,train -566,4,train -170,4,train -2902,3,train -304,4,train -3460,1,train -3594,1,train -204,2,train -2981,3,train -3377,3,train -3511,3,train -3814,4,train -1075,2,train -679,2,train -3893,4,train -3411,1,train -813,2,train -417,2,train -3631,4,train -4027,4,train -3328,3,train -2932,3,train -3886,1,train -1329,3,train -368,2,train -3145,3,train -3582,4,train -3978,4,train -1363,1,train -1542,3,train -1146,3,train -3441,1,train -3837,1,train -843,2,train -3575,1,train -3358,3,train -3399,4,train -3795,4,train -1576,1,train -1359,3,train -4091,2,train -1493,3,train -660,2,train -3788,1,train -3874,4,train -3612,4,train -1655,1,train -1789,1,train -1572,3,train -1131,1,train -3867,1,train -873,2,train -1351,4,train -3646,2,train -3429,4,train -1868,1,train -1210,1,train -1344,1,train -1127,3,train -1564,4,train -865,3,train -4038,4,train -1819,1,train -1860,2,train -2256,2,train -1557,1,train -1161,1,train -2039,4,train -1340,3,train -1381,4,train -1777,4,train -2469,2,train -1636,1,train -2073,2,train -1770,1,train -1374,1,train -1856,4,train -2252,4,train -1990,4,train -2152,2,train -1849,1,train -1890,2,train -2286,2,train -1587,1,train -1628,2,train -1807,4,train -1411,4,train -1545,4,train -1800,1,train -1841,2,train -2237,2,train -2020,4,train -1624,4,train -2316,2,train -2753,3,train -1658,2,train -1575,4,train -2529,2,train -2133,2,train -2966,3,train -2267,2,train -2308,3,train -2866,1,train -268,2,train -3045,3,train -6,2,train -2084,2,train -3079,1,train -85,2,train -219,2,train -2996,3,train -3037,4,train -3292,1,train -339,3,train -3030,1,train -3250,4,train -2947,3,train -2289,3,train -3243,1,train -3284,2,train -2847,1,train -290,3,train -3026,3,train -3201,4,train -2805,4,train -2502,3,train -765,3,train -369,3,train -3060,1,train -3497,2,train -503,3,train -3194,1,train -2581,3,train -2715,3,train -1195,1,train -799,1,train -978,3,train -582,3,train -2877,1,train -3273,1,train -320,3,train -3097,4,train -3493,4,train -17,2,train -2794,3,train -2835,4,train -2969,4,train -878,1,train -3789,2,train -3527,2,train -533,3,train -970,4,train -3224,1,train -3444,4,train -2786,4,train -1091,1,train -829,1,train -1266,2,train -4002,2,train -1008,3,train -567,1,train -1049,4,train -3344,2,train -746,3,train -350,3,train -787,4,train -1183,4,train -3478,2,train -88,3,train -2999,4,train -1176,1,train -780,1,train -3953,2,train -3994,3,train -1396,4,train -563,3,train -3691,2,train -3474,4,train -3212,4,train -1255,1,train -859,1,train -1296,2,train -4073,3,train -993,1,train -597,1,train -1475,4,train -1213,4,train -514,3,train -951,4,train -1905,2,train -810,1,train -4024,3,train -1030,4,train -3721,2,train -1164,4,train -1722,2,train -1326,2,train -1023,1,train -627,1,train -1064,2,train -1460,2,train -847,4,train -3975,3,train -1935,2,train -1539,2,train -1236,1,train -3792,3,train -798,4,train -1752,2,train -2189,3,train -1490,2,train -1094,2,train -1228,2,train -4005,3,train -1965,2,train -1703,2,train -1307,2,train -1744,3,train -1441,2,train -1224,4,train -2302,1,train -2219,3,train -1823,3,train -2353,3,train -1520,2,train -1957,3,train -1654,2,train -2515,1,train -2253,1,train -2432,3,train -1733,2,train -1774,3,train -2170,3,train -2728,1,train -2332,1,train -2466,1,train -2686,4,train -1987,3,train -2424,4,train -2679,1,train -2720,2,train -2021,1,train -2503,4,train -2637,4,train -3329,2,train -2496,1,train -335,3,train -2716,4,train -2413,3,train -2454,4,train -2151,3,train -2192,4,train -235,1,train -3012,2,train -2709,1,train -2313,1,train -152,3,train -193,4,train -2051,1,train -2447,1,train -2929,4,train -2667,4,train -2271,4,train -2405,4,train -314,1,train -3225,2,train -3400,3,train -406,4,train -2264,1,train -2660,1,train -2701,2,train -2880,4,train -2484,4,train -3142,4,train -2222,4,train -661,1,train -3,1,train -2780,2,train -3176,2,train -182,3,train -223,4,train -2697,4,train -478,1,train -612,1,train -3430,3,train -2993,2,train -395,3,train -3127,2,train -3168,3,train -133,3,train -174,4,train -2910,4,train -2648,4,train -295,1,train -732,2,train -167,1,train -253,4,train -649,4,train -2548,2,train -3939,1,train -3677,1,train -246,1,train -3460,3,train -380,1,train -3594,3,train -2761,2,train -204,4,train -3890,1,train -896,2,train -500,2,train -679,4,train -3411,3,train -417,4,train -1371,2,train -975,2,train -3707,1,train -1109,2,train -713,2,train -1150,3,train -3445,1,train -3886,3,train -451,2,train -368,4,train -1188,2,train -3920,1,train -926,2,train -1363,3,train -664,2,train -3441,3,train -3837,3,train -3575,3,train -1659,1,train -3935,2,train -1576,3,train -3871,1,train -3957,4,train -877,2,train -4091,4,train -3695,4,train -660,4,train -1738,1,train -1872,1,train -1655,3,train -1789,3,train -4084,1,train -3688,1,train -1090,2,train -1131,3,train -3867,3,train -3646,4,train -1951,1,train -2085,1,train -1689,1,train -1868,3,train -1427,1,train -1169,2,train -1210,3,train -3901,1,train -1344,3,train -2164,1,train -1640,1,train -1819,3,train -1860,4,train -2256,4,train -1557,3,train -1161,3,train -2377,1,train -1719,1,train -2156,2,train -1457,1,train -1636,3,train -1677,4,train -2073,4,train -1374,3,train -2066,1,train -1670,1,train -2152,4,train -1849,3,train -1890,4,train -2286,4,train -1587,3,train -1628,4,train -2448,2,train -2145,1,train -1883,1,train -1487,1,train -2237,4,train -1841,4,train -2399,2,train -2096,1,train -1700,1,train -2533,2,train -2316,4,train -1658,4,train -2133,4,train -2267,4,train -48,1,train -2866,3,train -268,4,train -2126,1,train -2167,2,train -2563,2,train -6,4,train -2301,2,train -2084,4,train -127,1,train -168,2,train -302,2,train -3079,3,train -85,4,train -2380,2,train -219,4,train -2514,2,train -381,2,train -78,1,train -515,2,train -3292,3,train -2593,2,train -2634,3,train -3030,3,train -2372,3,train -594,2,train -198,2,train -3326,1,train -3722,1,train -332,2,train -3243,3,train -2847,3,train -3284,4,train -3801,1,train -3405,1,train -807,2,train -3539,1,train -3580,2,train -545,2,train -149,2,train -3363,4,train -3060,3,train -2664,3,train -3497,4,train -3752,1,train -3793,2,train -1195,3,train -799,3,train -3273,3,train -2877,3,train -17,4,train -1095,1,train -3872,2,train -4006,2,train -878,3,train -3173,1,train -616,3,train -3307,1,train -3789,4,train -313,2,train -3527,4,train -4085,2,train -1091,3,train -3386,1,train -3782,1,train -4002,4,train -829,3,train -1266,4,train -3124,1,train -130,2,train -567,3,train -3344,4,train -3520,1,train -3478,4,train -3561,2,train -1521,1,train -863,1,train -4036,2,train -646,3,train -3337,1,train -3774,2,train -780,3,train -3161,4,train -3691,4,train -1338,1,train -1472,1,train -1255,3,train -859,3,train -1296,4,train -3550,1,train -993,3,train -597,3,train -3987,2,train -1551,1,train -1592,2,train -1289,1,train -893,1,train -3804,2,train -810,3,train -3721,4,train -1368,1,train -1805,2,train -1502,1,train -1543,2,train -1722,4,train -844,1,train -1326,4,train -4017,2,train -1023,3,train -627,3,train -1064,4,train -1460,4,train -2018,2,train -923,1,train -1057,1,train -1539,4,train -1835,2,train -1532,1,train -1969,2,train -1270,1,train -1752,4,train -4047,2,train -1490,4,train -1094,4,train -1228,4,train -2048,2,train -1349,1,train -1786,2,train -1524,2,train -1703,4,train -1307,4,train -1441,4,train -2261,2,train -2302,3,train -1999,2,train -1603,2,train -2040,3,train -1520,4,train -2515,3,train -2253,3,train -2945,1,train -2728,3,train -2332,3,train -2029,2,train -2070,3,train -2466,3,train -1767,2,train -2679,3,train -2720,4,train -2021,3,train -22,3,train -2799,4,train -2496,3,train -2100,3,train -1838,3,train -235,3,train -2926,1,train -3012,4,train -2709,3,train -2313,3,train -2447,3,train -2051,3,train -2488,4,train -314,3,train -3005,1,train -3046,2,train -3225,4,train -2347,1,train -2481,1,train -2264,3,train -2701,4,train -744,1,train -3655,2,train -482,1,train -3218,1,train -3259,2,train -661,3,train -2956,1,train -3,3,train -2694,1,train -2780,4,train -3176,4,train -2518,4,train -957,1,train -299,1,train -3076,2,train -478,3,train -2773,1,train -3606,2,train -2993,4,train -3127,4,train -908,1,train -512,1,train -3289,2,train -3726,3,train -295,3,train -732,4,train -2986,1,train -3027,2,train -2765,2,train -167,3,train -2548,4,train -1028,2,train -3939,3,train -3636,2,train -3677,3,train -549,4,train -3240,2,train -246,3,train -2978,2,train -3374,2,train -380,3,train -2761,4,train -1200,1,train -1241,2,train -1375,2,train -979,2,train -676,1,train -3890,3,train -3494,3,train -896,4,train -500,4,train -238,4,train -1454,2,train -1588,2,train -975,4,train -3707,3,train -1109,4,train -713,4,train -3445,3,train -451,4,train -4003,1,train -1009,2,train -1446,3,train -706,1,train -1188,4,train -3920,3,train -926,4,train -664,4,train -1484,2,train -1659,3,train -3954,1,train -1356,2,train -3871,3,train -877,4,train -1738,3,train -4033,1,train -1435,2,train -1476,3,train -1872,3,train -3771,1,train -777,2,train -3688,3,train -1951,3,train -2085,3,train -1689,3,train -1427,3,train -3901,3,train -3942,4,train -2164,3,train -1723,1,train -1203,2,train -1640,3,train -2198,1,train -1936,1,train -1719,3,train -2156,4,train -1416,2,train -1457,3,train -2015,1,train -2149,1,train -1670,3,train -1274,3,train -2624,1,train -2665,2,train -1966,1,train -2448,4,train -2145,3,train -1883,3,train -1487,3,train -2441,1,train -2878,2,train -2179,1,train -2616,2,train -2399,4,train -2533,4,train -1700,3,train -3091,2,train -2695,2,train -2392,1,train -2829,2,train -131,1,train -2512,2,train -3042,2,train -2646,2,train -2563,4,train -2167,4,train -2301,4,train -3121,2,train -127,3,train -168,4,train -2422,1,train -2900,3,train -302,4,train -2201,2,train -2380,4,train -381,4,train -2676,2,train -515,4,train -2593,4,train -3409,1,train -811,2,train -415,2,train -594,4,train -198,4,train -2493,2,train -2930,3,train -332,4,train -3326,3,train -3801,3,train -3405,3,train -3539,3,train -3580,4,train -545,4,train -149,4,train -404,1,train -882,3,train -3659,4,train -142,1,train -183,2,train -3793,4,train -4048,1,train -4089,2,train -658,2,train -3872,4,train -1095,3,train -792,2,train -396,2,train -3173,3,train -4006,4,train -3307,3,train -3348,4,train -313,4,train -3865,1,train -3469,1,train -912,3,train -4085,4,train -213,2,train -3386,3,train -3124,3,train -3561,4,train -130,4,train -4078,1,train -3682,1,train -1521,3,train -3816,1,train -3420,1,train -822,2,train -863,3,train -3554,1,train -4036,4,train -560,2,train -3337,3,train -3378,4,train -3774,4,train -1421,1,train -1555,1,train -1159,1,train -1338,3,train -942,3,train -3237,1,train -3633,1,train -3767,1,train -4070,2,train -3987,4,train -1768,1,train -1551,3,train -1592,4,train -3450,1,train -3846,1,train -1289,3,train -893,3,train -3804,4,train -1847,1,train -1451,1,train -1189,1,train -1368,3,train -1805,4,train -1543,4,train -3838,2,train -844,3,train -4017,4,train -1798,1,train -1839,2,train -2018,4,train -3917,2,train -923,3,train -1360,4,train -4051,2,train -1057,3,train -1353,1,train -1835,4,train -1969,4,train -1270,3,train -4047,4,train -2131,2,train -2265,2,train -1432,1,train -1869,2,train -2048,4,train -1786,4,train -1390,4,train -1524,4,train -2132,3,validate -345,3,validate -83,3,validate -2082,2,validate -3685,1,validate -388,1,validate -3206,3,validate -2032,1,validate -2944,3,validate -3898,1,validate -3207,4,validate -3502,1,validate -205,1,validate -3856,4,validate -3157,3,validate -1766,3,validate -297,4,validate -247,3,validate -3673,4,validate -1242,2,validate -763,4,validate -2366,3,validate -4020,4,validate -1455,2,validate -756,1,validate -3533,2,validate -2796,1,validate -1405,1,validate -2713,3,validate -3617,1,validate -1060,3,validate -2226,1,validate -2842,4,validate -2742,2,validate -94,2,validate -2564,1,validate -11,4,validate -3130,3,validate -1219,4,validate -2560,3,validate -4080,4,validate -1515,2,validate -3689,2,validate -1902,2,validate -428,4,validate -3556,3,validate -1728,2,validate -3685,4,validate -1812,1,validate -724,2,validate -2032,4,validate -2461,1,validate -379,4,validate -808,1,validate -546,1,validate -3323,2,validate -3502,4,validate -3669,1,validate -4023,4,validate -3627,4,validate -1283,1,validate -3536,2,validate -3973,3,validate -1671,3,validate -2320,3,validate -3620,1,validate -3141,3,validate -4052,3,validate -972,1,validate -2358,2,validate -2795,3,validate -493,3,validate -1538,3,validate -705,2,validate -2704,1,validate -3833,1,validate -3616,3,validate -2796,4,validate -1963,3,validate -1405,4,validate -3700,2,validate -3687,4,validate -819,1,validate -2564,4,validate -211,1,validate -390,3,validate -3122,2,validate -3468,1,validate -3072,1,validate -3984,3,validate -2381,3,validate -2627,1,validate -2806,3,validate -1852,4,validate -678,2,validate -3152,2,validate -108,2,validate -2544,2,validate -1449,1,validate -1886,2,validate -495,2,validate -674,4,validate -3406,3,validate -2232,1,validate -3843,4,validate -2411,3,validate -3144,3,validate -546,4,validate -841,1,validate -100,3,validate -3011,4,validate -405,1,validate -9,1,validate -2445,1,validate -2228,3,validate -2961,3,validate -1833,4,validate -3873,4,validate -2000,1,validate -871,1,validate -3916,2,validate -3470,1,validate -476,2,validate -1480,1,validate -1304,4,validate -264,2,validate -47,4,validate -3125,2,validate -1734,2,validate -2384,4,validate -477,2,validate -2293,2,validate -427,1,validate -31,1,validate -210,3,validate -1947,2,validate -3288,1,validate -4066,3,validate -294,2,validate -2547,3,validate -2718,1,validate -3888,2,validate -1764,2,validate -1065,1,validate -1240,2,validate -973,3,validate -3106,2,validate -2627,4,validate -3538,4,validate -62,2,validate -840,4,validate -1403,1,validate -3572,2,validate -1449,4,validate -275,2,validate -487,1,validate -3701,3,validate -1702,4,validate -2232,4,validate -841,4,validate -3177,3,validate -2091,1,validate -2132,2,validate -875,2,validate -262,4,validate -3390,3,validate -1221,1,validate -3257,4,validate -4082,1,validate -255,1,validate -2000,4,validate -871,4,validate -475,4,validate -3207,3,validate -1950,3,validate -996,4,validate -297,3,validate -3470,4,validate -3857,4,validate -2459,1,validate -1980,3,validate -2417,4,validate -4020,3,validate -1026,4,validate -31,4,validate -2713,2,validate -1281,1,validate -2842,3,validate -1148,2,validate -1585,3,validate -411,1,validate -1664,3,validate -11,3,validate -3485,1,validate -1403,4,validate -1219,3,validate -399,4,validate -3564,1,validate -4080,3,validate -745,3,validate -3689,1,validate -3868,3,validate -1778,2,validate -3556,2,validate -1728,1,validate -259,2,validate -2082,4,validate -1686,4,validate -3685,3,validate -3120,2,validate -2032,3,validate -1729,2,validate -379,3,validate -684,1,validate -3898,3,validate -3502,3,validate -2462,1,validate -205,3,validate -4023,3,validate -938,2,validate -2675,1,validate -1022,1,validate -1242,4,validate -1413,2,validate -2358,1,validate -493,2,validate -1538,2,validate -3616,2,validate -1455,4,validate -756,3,validate -3533,4,validate -2796,3,validate -1963,2,validate -968,2,validate -1405,3,validate -3700,1,validate -3617,3,validate -2443,1,validate -2226,3,validate -3355,2,validate -1527,1,validate -2742,4,validate -94,4,validate -2564,3,validate -1082,1,validate -390,2,validate -3122,1,validate -1994,2,validate -1515,4,validate -2381,2,validate -3689,4,validate -2078,1,validate -1902,4,validate -425,1,validate -511,4,validate -2806,2,validate -3152,1,validate -3110,4,validate -1633,1,validate -2544,1,validate -724,4,validate -3153,2,validate -2461,3,validate -674,3,validate -808,3,validate -2411,2,validate -546,3,validate -3323,4,validate -3669,3,validate -1283,3,validate -1062,4,validate -2228,2,validate -322,2,validate -3536,4,validate -3923,4,validate -3620,3,validate -1833,3,validate -972,3,validate -2358,4,validate -3916,1,validate -2921,1,validate -705,4,validate -2704,3,validate -3833,3,validate -1092,4,validate -264,1,validate -47,3,validate -3175,2,validate -3125,1,validate -3734,2,validate -477,1,validate -952,2,validate -1997,2,validate -2293,1,validate -210,2,validate -1947,1,validate -819,3,validate -294,1,validate -211,3,validate -2506,1,validate -3122,4,validate -120,1,validate -557,2,validate -1764,1,validate -3072,3,validate -903,1,validate -2719,1,validate -3106,1,validate -2627,3,validate -678,4,validate -3152,4,validate -1541,1,validate -3319,1,validate -108,4,validate -2544,4,validate -1449,3,validate -275,1,validate -1886,4,validate -495,4,validate -2232,3,validate -800,2,validate -841,3,validate -276,2,validate -3094,4,validate -488,1,validate -9,3,validate -2445,3,validate -3216,2,validate -2000,3,validate -871,3,validate -3999,2,validate -3470,3,validate -476,4,validate -3083,2,validate -264,4,validate -1168,2,validate -3125,4,validate -1734,4,validate -4029,2,validate -2293,4,validate -427,3,validate -31,3,validate -1947,4,validate -3288,3,validate -294,4,validate -2718,3,validate -3888,4,validate -1148,1,validate -1585,2,validate -1764,4,validate -153,1,validate -1065,3,validate -2327,1,validate -1240,4,validate -1889,4,validate -2194,2,validate -3106,4,validate -62,4,validate -1403,3,validate -3572,4,validate -275,4,validate -487,3,validate -3219,2,validate -1828,2,validate -3868,2,validate -134,1,validate -1778,1,validate -783,1,validate -2132,4,validate -259,1,validate -875,4,validate -2082,3,validate -1221,3,validate -388,2,validate -3120,1,validate -1729,1,validate -4082,3,validate -255,3,validate -3898,2,validate -1992,2,validate -205,2,validate -2076,1,validate -247,4,validate -764,1,validate -2938,1,validate -1413,1,validate -2459,3,validate -3067,2,validate -1455,3,validate -756,2,validate -3533,3,validate -2713,4,validate -1281,3,validate -2884,2,validate -3617,2,validate -1060,4,validate -2226,2,validate -1365,2,validate -411,3,validate -1577,1,validate -3355,1,validate -94,3,validate -4043,2,validate -2177,1,validate -2560,4,validate -3781,1,validate -3564,3,validate -1994,1,validate -1515,3,validate -3689,3,validate -1995,2,validate -1778,4,validate -3556,4,validate -1728,3,validate -1812,2,validate -3153,1,validate -2461,2,validate -1729,4,validate -1896,1,validate -3678,2,validate -2462,3,validate -1283,2,validate -2109,1,validate -322,1,validate -1671,4,validate -938,4,validate -2675,3,validate -3620,2,validate -1022,3,validate -3141,4,validate -931,1,validate -972,2,validate -1413,4,validate -2358,3,validate -2795,4,validate -493,4,validate -1538,4,validate -3833,2,validate -2704,2,validate -3616,4,validate -1963,4,validate -968,4,validate -3700,3,validate -2443,3,validate -3734,1,validate -3355,4,validate -790,2,validate -1997,1,validate -91,1,validate -819,2,validate -1082,3,validate -390,4,validate -3122,3,validate -557,1,validate -3468,2,validate -3984,4,validate -1994,4,validate -2423,1,validate -1166,1,validate -2381,4,validate -2078,3,validate -425,3,validate -2806,4,validate -899,2,validate -2636,1,validate -3152,3,validate -1633,3,validate -108,3,validate -2544,3,validate -3153,4,validate -1979,2,validate -2453,1,validate -2411,4,validate -800,1,validate -276,1,validate -4057,1,validate -405,2,validate -2445,2,validate -2142,1,validate -2228,4,validate -322,4,validate -2791,1,validate -3216,1,validate -2355,1,validate -3999,1,validate -3916,3,validate -2921,3,validate -3825,1,validate -356,1,validate -831,2,validate -1480,2,validate -3083,1,validate -3217,1,validate -264,3,validate -3175,4,validate -1168,1,validate -3125,3,validate -2385,1,validate -1734,3,validate -3734,4,validate -4029,1,validate -477,3,validate -952,4,validate -1997,4,validate -2293,3,validate -427,2,validate -210,4,validate -1947,3,validate -3288,2,validate -294,3,validate -2506,3,validate -337,1,validate -2718,2,validate -557,4,validate -2852,2,validate -1764,3,validate -1065,2,validate -1199,2,validate -2802,1,validate -2244,2,validate -2719,3,validate -2194,1,validate -3106,3,validate -3015,1,validate -2323,2,validate -62,3,validate -1066,2,validate -3319,3,validate -754,1,validate -3228,1,validate -275,3,validate -487,2,validate -276,4,validate -488,3,validate -2091,2,validate -875,3,validate -572,2,validate -3390,4,validate -1221,2,validate -3216,4,validate -4041,1,validate -4082,2,validate -2650,1,validate -255,2,validate -3999,4,validate -1992,1,validate -1950,4,validate -1168,4,validate -1597,1,validate -4029,4,validate -2459,2,validate -3463,1,validate -3067,1,validate -1980,4,validate -1281,2,validate -3280,1,validate -2884,1,validate -1627,1,validate -1365,1,validate -1148,3,validate -411,2,validate -1585,4,validate -153,3,validate -2327,3,validate -3231,1,validate -1840,1,validate -1578,1,validate -1664,4,validate -321,1,validate -4043,1,validate -3485,2,validate -1099,2,validate -3564,2,validate -745,4,validate -3219,4,validate -1050,2,validate -1828,4,validate -3868,4,validate -1262,1,validate -1995,1,validate -1778,3,validate -783,3,validate -259,3,validate -1079,1,validate -388,4,validate -3120,3,validate -1729,3,validate -3678,1,validate -684,2,validate -3898,4,validate -818,2,validate -2462,2,validate -205,4,validate -938,3,validate -2675,2,validate -981,1,validate -1022,2,validate -764,3,validate -2938,3,validate -1413,3,validate -756,4,validate -1581,1,validate -968,3,validate -2884,4,validate -2443,2,validate -3617,4,validate -2226,4,validate -1577,3,validate -3355,3,validate -1527,2,validate -790,1,validate -270,2,validate -3002,1,validate -4043,4,validate -2177,3,validate -1082,2,validate -3914,2,validate -2086,1,validate -3781,3,validate -1994,3,validate -3294,1,validate -3032,1,validate -2078,2,validate -1995,4,validate -425,2,validate -899,1,validate -1033,1,validate -1854,1,validate -1162,2,validate -1633,2,validate -1812,4,validate -3153,3,validate -1979,1,validate -2461,4,validate -1896,3,validate -808,4,validate -3669,4,validate -1283,4,validate -2109,3,validate -3712,2,validate -322,3,validate -3620,4,validate -972,4,validate -1143,2,validate -2921,2,validate -3833,4,validate -2704,4,validate -831,1,validate -3175,3,validate -3734,3,validate -3347,2,validate -952,3,validate -790,4,validate -1997,3,validate -91,3,validate -3035,1,validate -819,4,validate -211,4,validate -2506,2,validate -120,2,validate -557,3,validate -2852,1,validate -3468,4,validate -3072,4,validate -903,2,validate -1199,1,validate -2244,1,validate -3115,2,validate -2719,2,validate -2423,3,validate -1462,2,validate -1674,1,validate -1808,1,validate -1116,2,validate -2323,1,validate -899,4,validate -1066,1,validate -1541,2,validate -3319,2,validate -1979,4,validate -2453,3,validate -800,3,validate -276,3,validate -3878,1,validate -2749,1,validate -488,2,validate -405,4,validate -9,4,validate -1230,1,validate -2445,4,validate -2142,3,validate -572,1,validate -3216,3,validate -3999,3,validate -356,3,validate -3300,1,validate -998,1,validate -1480,4,validate -3083,3,validate -3217,3,validate -1168,3,validate -4029,3,validate -2335,2,validate -944,2,validate -427,4,validate -3464,1,validate -3288,4,validate -2718,4,validate -2852,4,validate -153,2,validate -1065,4,validate -2327,2,validate -1199,4,validate -2802,3,validate -2244,4,validate -3148,2,validate -2194,3,validate -3015,3,validate -2323,4,validate -450,1,validate -1099,1,validate -3099,2,validate -317,2,validate -754,3,validate -487,4,validate -3219,3,validate -1050,1,validate -1828,3,validate -134,2,validate -1871,1,validate -1179,2,validate -783,2,validate -2091,4,validate -1263,1,validate -572,4,validate -1221,4,validate -388,3,validate -2521,2,validate -1130,2,validate -4082,4,validate -255,4,validate -1992,3,validate -818,1,validate -2076,2,validate -1597,3,validate -764,2,validate -2938,2,validate -2459,4,validate -3067,3,validate -2368,2,validate -2022,2,validate -1281,4,validate -3280,3,validate -2884,3,validate -3972,2,validate -2106,1,validate -715,1,validate -1627,3,validate -1365,3,validate -411,4,validate -1577,2,validate -3231,3,validate -1840,3,validate -270,1,validate -1578,3,validate -4043,3,validate -2177,2,validate -3485,4,validate -3914,1,validate -1099,4,validate -3781,2,validate -3082,1,validate -3564,4,validate -1133,2,validate -1262,3,validate -1995,3,validate -513,1,validate -2949,1,validate -1728,4,validate -647,1,validate -1162,1,validate -1079,3,validate -1812,3,validate -1896,2,validate -3678,3,validate -684,4,validate -1247,1,validate -2462,4,validate -2109,2,validate -3712,1,validate -2675,4,validate -331,1,validate -981,3,validate -1022,4,validate -2322,2,validate -3925,1,validate -931,2,validate -1143,1,validate -1581,3,validate -3700,4,validate -2443,4,validate -3347,1,validate -1527,4,validate -790,3,validate -91,2,validate -270,4,validate -3002,3,validate -1082,4,validate -3914,4,validate -3468,3,validate -3115,1,validate -2423,2,validate -3294,3,validate -3032,3,validate -1166,2,validate -1462,1,validate -2078,4,validate -1116,1,validate -425,4,validate -899,3,validate -3590,1,validate -1033,3,validate -2636,2,validate -1937,1,validate -1854,3,validate -1162,4,validate -1633,4,validate -1979,3,validate -3541,1,validate -2453,2,validate -1330,2,validate -4057,2,validate -405,3,validate -3712,4,validate -2142,2,validate -2750,1,validate -2355,2,validate -3916,4,validate -2921,4,validate -356,2,validate -3825,2,validate -831,3,validate -2830,2,validate -1480,3,validate -3217,2,validate -2385,2,validate -477,4,validate -2335,1,validate -944,1,validate -83,1,validate -2598,2,validate -3035,3,validate -2944,1,validate -3381,2,validate -2506,4,validate -1291,1,validate -337,2,validate -120,4,validate -2852,3,validate -903,4,validate -1199,3,validate -2802,2,validate -2244,3,validate -2719,4,validate -3148,1,validate -1462,4,validate -1891,1,validate -1674,3,validate -3673,2,validate -1808,3,validate -1116,4,validate -3015,2,validate -2323,3,validate -3149,2,validate -1066,3,validate -1541,4,validate -2366,1,validate -3099,1,validate -3319,4,validate -317,1,validate -754,2,validate -3228,2,validate -530,1,validate -3878,3,validate -2749,3,validate -1179,1,validate -488,4,validate -2091,3,validate -1230,3,validate -572,3,validate -2521,1,validate -1130,1,validate -4041,2,validate -2650,2,validate -1605,1,validate -3300,3,validate -998,3,validate -1818,1,validate -1597,2,validate -3463,2,validate -2335,4,validate -2368,1,validate -944,4,validate -2206,2,validate -2022,1,validate -2631,2,validate -3972,1,validate -3280,2,validate -3676,2,validate -1627,2,validate -1324,1,validate -1148,4,validate -153,4,validate -2327,4,validate -3627,2,validate -3231,2,validate -1840,2,validate -3148,4,validate -1578,2,validate -146,1,validate -321,2,validate -2320,1,validate -3485,3,validate -450,3,validate -4052,1,validate -1099,3,validate -317,4,validate -1133,1,validate -613,2,validate -1050,3,validate -1262,2,validate -134,4,validate -1871,3,validate -1179,4,validate -783,4,validate -259,4,validate -1263,3,validate -1079,2,validate -3120,4,validate -3687,2,validate -1130,4,validate -684,3,validate -818,3,validate -1688,2,validate -2076,4,validate -981,2,validate -764,4,validate -2322,1,validate -2938,4,validate -2368,4,validate -1194,2,validate -2022,4,validate -1581,2,validate -2106,3,validate -715,3,validate -1577,4,validate -100,1,validate -1527,3,validate -3660,2,validate -270,3,validate -2961,1,validate -3002,2,validate -179,1,validate -2177,4,validate -3914,3,validate -2086,2,validate -3781,4,validate -3082,3,validate -3294,2,validate -1133,4,validate -3032,2,validate -2037,2,validate -1033,2,validate -513,3,validate -2949,3,validate -1854,2,validate -1162,3,validate -3853,1,validate -1896,4,validate -1330,1,validate -1247,3,validate -2109,4,validate -3712,3,validate -973,1,validate -2322,4,validate -3925,3,validate -1622,1,validate -931,4,validate -1143,3,validate -2830,1,validate -2964,1,validate -1702,2,validate -1440,2,validate -3826,1,validate -832,2,validate -3347,3,validate -91,4,validate -262,2,validate -2598,1,validate -3035,2,validate -3381,1,validate -120,3,validate -3856,1,validate -862,2,validate -903,3,validate -3115,3,validate -2423,4,validate -1166,4,validate -1462,3,validate -1674,2,validate -3673,1,validate -1808,2,validate -1116,3,validate -3590,3,validate -3149,1,validate -2636,4,validate -1937,3,validate -763,1,validate -1541,3,validate -2283,2,validate -3541,3,validate -2453,4,validate -800,4,validate -3878,2,validate -2749,2,validate -4057,4,validate -581,2,validate -1230,2,validate -2142,4,validate -2750,3,validate -2355,4,validate -356,4,validate -3825,4,validate -3300,2,validate -998,2,validate -3083,4,validate -3217,4,validate -2385,4,validate -2335,3,validate -428,1,validate -944,3,validate -2206,1,validate -1686,2,validate -2598,4,validate -3464,2,validate -2631,1,validate -33,2,validate -3381,4,validate -3676,1,validate -379,1,validate -1291,3,validate -337,4,validate -2802,4,validate -3627,1,validate -3148,3,validate -2194,4,validate -1891,3,validate -3015,4,validate -3149,4,validate -450,2,validate -3099,3,validate -317,3,validate -754,4,validate -3228,4,validate -613,1,validate -530,3,validate -134,3,validate -1871,2,validate -1179,3,validate -1263,2,validate -2521,3,validate -3687,1,validate -1130,3,validate -4041,4,validate -2650,4,validate -1992,4,validate -1688,1,validate -1605,3,validate -2076,3,validate -36,2,validate -1818,3,validate -1597,4,validate -511,2,validate -3463,4,validate -1852,1,validate -3067,4,validate -2368,3,validate -1194,1,validate -2206,4,validate -3110,2,validate -2022,3,validate -2631,4,validate -3972,3,validate -3280,4,validate -2106,2,validate -3676,4,validate -674,1,validate -715,2,validate -3843,1,validate -1627,4,validate -1324,3,validate -1365,4,validate -3011,1,validate -3231,4,validate -3660,1,validate -1062,2,validate -1840,4,validate -1578,4,validate -146,3,validate -321,4,validate -3923,2,validate -2532,2,validate -1833,1,validate -3873,1,validate -3082,2,validate -1092,2,validate -1133,3,validate -2037,1,validate -613,4,validate -1304,1,validate -47,1,validate -1262,4,validate -2562,2,validate -513,2,validate -2949,2,validate -647,2,validate -2384,1,validate -1079,4,validate -3770,2,validate -3678,4,validate -1688,4,validate -1247,2,validate -2330,2,validate -3375,2,validate -331,2,validate -981,4,validate -2322,3,validate -3925,2,validate -931,3,validate -3538,1,validate -1673,2,validate -840,1,validate -1194,4,validate -1581,4,validate -1702,1,validate -1440,1,validate -3094,2,validate -832,1,validate -3660,4,validate -3002,4,validate -262,1,validate -179,3,validate -3257,1,validate -2086,4,validate -475,1,validate -862,1,validate -996,1,validate -3294,4,validate -3032,4,validate -1166,3,validate -3857,1,validate -2037,4,validate -3590,2,validate -1033,4,validate -3724,2,validate -2636,3,validate -1937,2,validate -1854,4,validate -3853,3,validate -2283,1,validate -2417,1,validate -1026,1,validate -3541,2,validate -1155,2,validate -1330,3,validate -4057,3,validate -581,1,validate -3146,2,validate -2750,2,validate -1889,2,validate -1622,3,validate -2355,3,validate -3825,3,validate -831,4,validate -2830,3,validate -2964,3,validate -399,1,validate -1440,4,validate -2385,3,validate -3826,3,validate -832,4,validate -345,2,validate -83,2,validate -2082,1,validate -1686,1,validate -2598,3,validate -3035,4,validate -33,1,validate -3206,2,validate -2944,2,validate -3381,3,validate -1291,2,validate -337,3,validate -3856,3,validate -862,4,validate -3157,2,validate -1766,2,validate -247,2,validate -1891,2,validate -1674,4,validate -3673,3,validate -1808,4,validate -3149,3,validate -1242,1,validate -1066,4,validate -763,3,validate -2366,2,validate -2283,4,validate -3228,3,validate -1455,1,validate -3533,1,validate -530,2,validate -1060,2,validate -3878,4,validate -2749,4,validate -581,4,validate -1230,4,validate -2742,1,validate -94,1,validate -4041,3,validate -2650,3,validate -3130,2,validate -1605,2,validate -3300,4,validate -998,4,validate -2560,2,validate -36,1,validate -1818,2,validate -1515,1,validate -1902,1,validate -511,1,validate -3463,3,validate -428,3,validate -2206,3,validate -3110,1,validate -3464,4,validate -2631,3,validate -724,1,validate -33,4,validate -3676,3,validate -1324,2,validate -3323,1,validate -3627,3,validate -1062,1,validate -3536,1,validate -3973,2,validate -1671,2,validate -146,2,validate -321,3,validate -2320,2,validate -3923,1,validate -2532,1,validate -450,4,validate -3141,2,validate -4052,2,validate -2795,2,validate -705,1,validate -1092,1,validate -613,3,validate -1050,4,validate -2562,1,validate -1871,4,validate -1263,4,validate -3770,1,validate -3687,3,validate -818,4,validate -1688,3,validate -2330,1,validate -3375,1,validate -3984,2,validate -36,4,validate -1673,1,validate -1852,3,validate -678,1,validate -1194,3,validate -108,1,validate -1886,1,validate -2106,4,validate -495,1,validate -715,4,validate -3406,2,validate -3843,3,validate -3144,2,validate -3094,1,validate -100,2,validate -3011,3,validate -3660,3,validate -2961,2,validate -179,2,validate -2532,4,validate -3873,3,validate -2086,3,validate -3082,4,validate -476,1,validate -2037,3,validate -1304,3,validate -2562,4,validate -3724,1,validate -513,4,validate -2949,4,validate -1734,1,validate -647,4,validate -3853,2,validate -2384,3,validate -3770,4,validate -1155,1,validate -4066,2,validate -1247,4,validate -2547,2,validate -2330,4,validate -3888,1,validate -3375,4,validate -3146,1,validate -1240,1,validate -331,4,validate -1889,1,validate -973,2,validate -3925,4,validate -1622,2,validate -3538,3,validate -1143,4,validate -1673,4,validate -62,1,validate -840,3,validate -2964,2,validate -3572,1,validate -1702,3,validate -3701,2,validate -1440,3,validate -3177,2,validate -3826,2,validate -832,3,validate -2132,1,validate -3347,4,validate -345,1,validate -875,1,validate -262,3,validate -3390,2,validate -3206,1,validate -3257,3,validate -475,3,validate -3207,2,validate -3856,2,validate -1950,2,validate -862,3,validate -3157,1,validate -996,3,validate -1766,1,validate -297,2,validate -3115,4,validate -247,1,validate -3857,3,validate -3590,4,validate -3724,4,validate -1937,4,validate -763,2,validate -2283,3,validate -1980,2,validate -2417,3,validate -4020,2,validate -1026,3,validate -3541,4,validate -1155,4,validate -2713,1,validate -1060,1,validate -2842,2,validate -581,3,validate -3146,4,validate -2750,4,validate -1664,2,validate -11,2,validate -3130,1,validate -1219,2,validate -2560,1,validate -399,3,validate -4080,2,validate -745,2,validate -428,2,validate -3556,1,validate -345,4,validate -83,4,validate -1686,3,validate -3685,2,validate -3464,3,validate -33,3,validate -2032,2,validate -3206,4,validate -2944,4,validate -379,2,validate -1291,4,validate -3502,2,validate -3157,4,validate -1766,4,validate -3973,1,validate -1671,1,validate -938,1,validate -1891,4,validate -1242,3,validate -3141,1,validate -2366,4,validate -3099,4,validate -2795,1,validate -493,1,validate -1538,1,validate -3616,1,validate -2796,2,validate -1963,1,validate -968,1,validate -1405,2,validate -530,4,validate -2742,3,validate -2521,4,validate -2564,2,validate -3130,4,validate -390,1,validate -1605,4,validate -3984,1,validate -36,3,validate -1818,4,validate -2381,1,validate -1902,3,validate -511,3,validate -2806,1,validate -1852,2,validate -3110,3,validate -724,3,validate -3972,4,validate -674,2,validate -3843,2,validate -3406,1,validate -808,2,validate -3144,1,validate -2411,1,validate -546,2,validate -3323,3,validate -1324,4,validate -3669,2,validate -3011,2,validate -1062,3,validate -2228,1,validate -3536,3,validate -3973,4,validate -146,4,validate -2320,4,validate -3923,3,validate -2532,3,validate -1833,2,validate -3873,2,validate -4052,4,validate -705,3,validate -1092,3,validate -1304,2,validate -47,2,validate -3175,1,validate -2562,3,validate -647,3,validate -2384,2,validate -952,1,validate -3770,3,validate -210,1,validate -4066,1,validate -211,2,validate -2547,1,validate -2330,3,validate -3375,3,validate -3072,2,validate -331,3,validate -2627,2,validate -3538,2,validate -1673,3,validate -840,2,validate -678,3,validate -1449,2,validate -1886,3,validate -495,3,validate -3406,4,validate -2232,2,validate -3701,1,validate -3144,4,validate -841,2,validate -3177,1,validate -3094,3,validate -100,4,validate -9,2,validate -2961,4,validate -3390,1,validate -179,4,validate -3257,2,validate -2000,2,validate -871,2,validate -475,2,validate -3207,1,validate -1950,1,validate -996,2,validate -297,1,validate -3470,2,validate -476,3,validate -3857,2,validate -3724,3,validate -3853,4,validate -1980,1,validate -2417,2,validate -4020,1,validate -1026,2,validate -31,2,validate -1155,3,validate -1330,4,validate -4066,4,validate -2842,1,validate -2547,4,validate -3888,3,validate -1585,1,validate -3146,3,validate -1240,3,validate -1889,3,validate -1664,1,validate -973,4,validate -1622,4,validate -11,1,validate -1403,2,validate -2830,4,validate -1219,1,validate -2964,4,validate -399,2,validate -3572,3,validate -4080,1,validate -745,1,validate -3219,1,validate -3701,4,validate -1828,1,validate -3868,1,validate -3177,4,validate -3826,4,validate -782,4,test -3036,1,test -2519,3,test -825,2,test -1341,4,test -1553,3,test -3989,3,test -84,4,test -733,4,test -2732,3,test -2549,3,test -3849,1,test -3453,1,test -593,2,test -3807,4,test -4019,3,test -939,1,test -543,1,test -2628,3,test -2409,1,test -3624,4,test -3362,4,test -976,4,test -1272,2,test -1485,2,test -3442,4,test -1140,4,test -3950,2,test -1352,3,test -4001,4,test -2431,2,test -1739,3,test -1648,1,test -2997,4,test -694,2,test -2906,2,test -1952,3,test -1649,2,test -2298,2,test -2814,4,test -2081,4,test -645,2,test -2427,3,test -2857,2,test -1769,3,test -595,1,test -378,3,test -2115,2,test -3852,1,test -641,4,test -1982,3,test -1932,2,test -463,3,test -3324,3,test -1933,3,test -1537,3,test -3453,4,test -1191,3,test -3537,3,test -1234,1,test -1058,4,test -359,3,test -3437,1,test -2745,2,test -3395,4,test -918,2,test -3650,1,test -1093,3,test -2696,2,test -2393,1,test -2479,4,test -2217,4,test -1955,4,test -826,4,test -3221,3,test -1651,1,test -2775,2,test -1518,2,test -523,2,test -2597,1,test -3213,4,test -1335,2,test -3509,2,test -1252,4,test -2077,1,test -1681,1,test -686,1,test -2727,3,test -3934,2,test -1336,3,test -2939,2,test -382,4,test -2069,2,test -3455,3,test -3193,3,test -595,4,test -2840,1,test -3322,4,test -1669,4,test -192,1,test -362,3,test -3053,1,test -2495,2,test -1104,2,test -446,2,test -1054,1,test -575,3,test -4049,1,test -2524,1,test -1437,4,test -2482,4,test -1783,3,test -2828,3,test -3437,4,test -3952,4,test -3649,3,test -1996,3,test -2130,3,test -2779,3,test -2991,2,test -1297,1,test -639,1,test -943,3,test -3720,4,test -2463,4,test -2597,4,test -3071,3,test -1206,4,test -1552,3,test -423,3,test -3155,2,test -3671,4,test -2414,4,test -3022,3,test -1848,1,test -3459,4,test -3368,2,test -1977,2,test -324,2,test -3014,4,test -408,1,test -3622,3,test -2527,2,test -366,4,test -537,2,test -3093,4,test -1482,1,test -3918,1,test -1745,2,test -1612,3,test -825,1,test -84,3,test -2649,4,test -347,4,test -3815,2,test -559,3,test -2995,3,test -905,2,test -1817,4,test -3766,2,test -593,1,test -3674,4,test -639,4,test -3929,1,test -1797,2,test -3401,2,test -3442,3,test -1140,3,test -3139,2,test -3747,1,test -1352,2,test -3268,3,test -4001,3,test -2052,4,test -1656,4,test -96,3,test -2906,1,test -1482,4,test -1649,1,test -1566,3,test -392,1,test -2081,3,test -216,4,test -3777,1,test -2427,2,test -125,2,test -2857,1,test -3036,3,test -1170,2,test -1600,1,test -825,4,test -641,3,test -1383,2,test -463,2,test -1467,1,test -3324,2,test -1933,2,test -3849,3,test -3453,3,test -2499,4,test -593,4,test -3537,2,test -939,3,test -543,3,test -1151,2,test -1759,1,test -2409,3,test -4012,2,test -918,1,test -1272,4,test -3221,2,test -573,2,test -1485,4,test -523,1,test -481,4,test -2043,2,test -3172,2,test -3950,4,test -2431,4,test -2127,1,test -1648,3,test -1252,3,test -694,4,test -3123,2,test -2727,2,test -2906,4,test -1336,2,test -2298,4,test -645,4,test -1811,2,test -2857,4,test -595,3,test -2115,4,test -3852,3,test -3365,1,test -1932,4,test -3232,2,test -2495,1,test -1500,1,test -1104,1,test -3578,1,test -1233,2,test -2970,1,test -1105,2,test -1317,1,test -1234,3,test -3966,2,test -2138,1,test -3183,1,test -922,2,test -3437,3,test -2745,4,test -1354,4,test -3649,2,test -1397,2,test -2130,2,test -3000,1,test -918,4,test -3650,3,test -2476,1,test -1347,1,test -2696,4,test -2393,3,test -1651,3,test -1086,2,test -2775,4,test -1518,4,test -2597,3,test -3071,2,test -1206,3,test -3983,4,test -1511,1,test -1552,2,test -423,2,test -3155,1,test -1335,4,test -2160,1,test -3509,4,test -1681,3,test -3680,2,test -686,3,test -3022,2,test -3459,3,test -3934,4,test -2939,4,test -3764,1,test -3368,1,test -374,2,test -1977,1,test -2111,1,test -324,1,test -2069,4,test -3235,2,test -2840,3,test -537,1,test -671,1,test -192,3,test -1795,2,test -1929,2,test -1745,1,test -3053,3,test -1104,4,test -446,4,test -2008,2,test -1612,2,test -1054,3,test -3349,1,test -2354,1,test -1958,1,test -2524,3,test -347,3,test -1217,2,test -2995,2,test -905,1,test -1817,3,test -2559,2,test -3766,1,test -3167,1,test -2991,4,test -1297,3,test -639,3,test -1076,4,test -2808,4,test -1069,1,test -3634,2,test -2935,1,test -3155,4,test -3584,1,test -1848,3,test -3401,1,test -3139,1,test -324,4,test -887,1,test -3268,2,test -408,3,test -2011,2,test -2527,4,test -96,2,test -570,1,test -1482,3,test -3918,3,test -528,4,test -1962,2,test -1566,2,test -1745,4,test -3389,4,test -3036,2,test -3170,2,test -825,3,test -2387,1,test -2824,2,test -1383,1,test -2732,4,test -3815,4,test -3462,2,test -905,4,test -3849,2,test -593,3,test -3766,4,test -939,2,test -1151,1,test -2409,2,test -4012,1,test -3929,3,test -1797,4,test -573,1,test -1485,3,test -3401,4,test -3139,4,test -1528,1,test -2043,1,test -1352,4,test -2652,2,test -1648,2,test -3123,1,test -2865,2,test -2906,3,test -999,1,test -1649,3,test -2257,2,test -2298,3,test -392,3,test -3598,1,test -2207,1,test -2427,4,test -125,4,test -2857,3,test -1170,4,test -1600,3,test -3852,2,test -817,2,test -1982,4,test -1383,4,test -463,4,test -3232,1,test -634,2,test -3324,4,test -1933,4,test -1763,1,test -1105,1,test -3537,4,test -1234,2,test -3966,1,test -239,2,test -1151,4,test -4012,4,test -2838,2,test -56,2,test -1397,1,test -918,3,test -3650,2,test -4046,2,test -1093,4,test -2393,2,test -3001,1,test -7,2,test -3221,4,test -1086,1,test -573,4,test -1518,3,test -523,3,test -3172,4,test -2043,4,test -2127,3,test -2077,2,test -3680,1,test -2211,2,test -686,2,test -3123,4,test -1512,1,test -2727,4,test -1336,4,test -2939,3,test -1811,4,test -721,1,test -3844,1,test -192,2,test -3365,3,test -1196,1,test -1929,1,test -3053,2,test -3232,4,test -2495,3,test -1500,3,test -1104,3,test -2666,1,test -3578,3,test -2008,1,test -1054,2,test -1233,4,test -2970,3,test -1105,4,test -1317,3,test -4049,2,test -2221,1,test -3966,4,test -964,1,test -922,4,test -3649,4,test -1996,4,test -2130,4,test -3000,3,test -1826,1,test -2559,1,test -2779,4,test -2476,3,test -1347,3,test -1693,2,test -1297,2,test -1431,2,test -3684,2,test -3071,4,test -1594,1,test -3634,1,test -1332,1,test -1552,4,test -423,4,test -3155,3,test -2160,3,test -3680,4,test -3022,4,test -1848,2,test -3847,1,test -416,1,test -3368,3,test -374,4,test -1977,3,test -2111,3,test -324,3,test -3235,4,test -408,2,test -3622,4,test -2011,1,test -3927,2,test -537,3,test -671,3,test -1795,4,test -1962,1,test -967,1,test -1745,3,test -2008,4,test -1612,4,test -3170,1,test -3349,3,test -1180,1,test -1958,3,test -2824,1,test -651,2,test -3815,3,test -1217,4,test -559,4,test -2995,4,test -3462,1,test -905,3,test -2559,4,test -3725,2,test -3766,3,test -1993,1,test -2855,2,test -2072,1,test -207,2,test -1810,1,test -3929,2,test -1069,3,test -3584,3,test -1797,3,test -3401,3,test -3139,3,test -3048,1,test -2652,1,test -3268,4,test -1657,1,test -2011,4,test -96,4,test -570,3,test -2865,1,test -3261,1,test -3910,1,test -2257,1,test -1566,4,test -392,2,test -3777,2,test -125,3,test -3036,4,test -1170,3,test -3170,4,test -867,2,test -3599,1,test -1600,2,test -2824,4,test -817,1,test -1383,3,test -1080,2,test -2683,1,test -1467,2,test -634,1,test -3462,4,test -3849,4,test -939,4,test -543,4,test -239,1,test -1151,3,test -1759,2,test -2409,4,test -4012,3,test -2838,1,test -56,1,test -586,1,test -2268,1,test -4046,1,test -1794,1,test -7,1,test -573,3,test -354,1,test -3172,3,test -2043,3,test -2652,4,test -3081,1,test -2127,2,test -1648,4,test -2211,1,test -3123,3,test -1216,1,test -999,3,test -2474,2,test -2257,4,test -3598,3,test -2207,3,test -1811,3,test -3852,4,test -3365,2,test -1113,2,test -851,2,test -3232,3,test -634,4,test -1500,2,test -3578,2,test -1233,3,test -1763,3,test -2970,2,test -1105,3,test -1276,1,test -1317,2,test -1234,4,test -3966,3,test -2138,2,test -3183,2,test -922,3,test -2838,4,test -3267,1,test -56,4,test -1397,3,test -4088,1,test -3000,2,test -4046,4,test -3650,4,test -2476,2,test -1347,2,test -1044,1,test -2393,4,test -1693,1,test -3001,3,test -1431,1,test -7,4,test -436,1,test -1651,4,test -1086,3,test -1956,2,test -565,2,test -3684,1,test -1511,2,test -516,2,test -2160,2,test -2077,4,test -1681,4,test -3680,3,test -686,4,test -3764,2,test -374,3,test -2111,2,test -3235,3,test -3540,1,test -721,3,test -3927,1,test -2840,4,test -1067,2,test -671,2,test -3844,3,test -192,4,test -1795,3,test -1929,3,test -2537,2,test -3053,4,test -884,2,test -2883,1,test -2008,3,test -1054,4,test -3349,2,test -2354,2,test -1958,2,test -4049,4,test -2524,4,test -2221,3,test -651,1,test -1217,3,test -1260,1,test -1826,3,test -2559,3,test -3725,1,test -3167,2,test -1693,4,test -82,1,test -1297,4,test -2855,1,test -1431,4,test -3938,1,test -207,1,test -3118,2,test -1290,1,test -3330,1,test -1069,2,test -470,2,test -3684,4,test -1594,3,test -420,1,test -3634,3,test -1332,3,test -2935,2,test -3543,1,test -3584,2,test -1848,4,test -3847,3,test -416,3,test -887,2,test -408,4,test -2011,3,test -1920,1,test -3918,4,test -1962,3,test -55,1,test -967,3,test -2916,1,test -2654,1,test -3170,3,test -867,1,test -2387,2,test -2824,3,test -651,4,test -1080,1,test -3462,3,test -2855,4,test -115,1,test -3971,1,test -1810,3,test -3929,4,test -3314,1,test -1528,2,test -3747,4,test -3048,3,test -2652,3,test -1657,3,test -3394,2,test -2865,3,test -999,2,test -696,1,test -3910,3,test -2736,1,test -1649,4,test -2474,1,test -2257,3,test -392,4,test -1954,2,test -3598,2,test -3295,1,test -3777,4,test -2207,2,test -301,2,test -867,4,test -3599,3,test -1600,4,test -817,3,test -2683,3,test -1113,1,test -851,1,test -1467,4,test -634,3,test -2633,2,test -1763,2,test -69,1,test -239,3,test -1976,2,test -1759,4,test -4054,2,test -2838,3,test -56,3,test -2268,3,test -4046,3,test -1794,3,test -2960,1,test -3001,2,test -7,3,test -1956,1,test -565,1,test -523,4,test -2303,1,test -3081,3,test -2127,4,test -516,1,test -2036,2,test -2077,3,test -2211,3,test -1512,2,test -1216,3,test -721,2,test -1804,2,test -1067,1,test -3844,2,test -3365,4,test -1196,2,test -2537,1,test -851,4,test -2495,4,test -884,1,test -1500,4,test -2666,2,test -3578,4,test -2101,1,test -2970,4,test -1276,3,test -1317,4,test -4049,3,test -2221,2,test -2138,4,test -964,2,test -3183,4,test -1310,1,test -3267,3,test -3909,1,test -2914,1,test -3000,4,test -1826,2,test -1960,2,test -3563,1,test -2476,4,test -1261,1,test -1347,4,test -1044,3,test -2647,2,test -1693,3,test -1431,3,test -436,3,test -2731,1,test -782,2,test -1078,1,test -3118,1,test -565,4,test -470,1,test -3684,3,test -1553,1,test -1594,2,test -1332,2,test -1511,4,test -2160,4,test -683,1,test -3847,2,test -416,2,test -2415,1,test -3764,4,test -3368,4,test -1977,4,test -2111,4,test -2628,1,test -3927,3,test -537,4,test -671,4,test -3362,2,test -2537,4,test -967,2,test -884,4,test -3349,4,test -1442,2,test -2354,4,test -1180,2,test -1958,4,test -135,1,test -651,3,test -1739,1,test -1260,3,test -2863,2,test -2601,2,test -3725,3,test -3167,4,test -1993,2,test -2814,2,test -2855,3,test -3938,3,test -2072,2,test -207,3,test -1810,2,test -3118,4,test -378,1,test -1290,3,test -3330,3,test -1069,4,test -3414,2,test -420,3,test -2935,4,test -3543,3,test -3584,4,test -1537,1,test -1191,1,test -3747,3,test -3048,2,test -887,4,test -1657,2,test -3656,1,test -3394,1,test -3528,1,test -1920,3,test -3261,2,test -3395,2,test -3910,2,test -1742,2,test -55,3,test -1954,1,test -3777,3,test -697,1,test -301,1,test -2916,3,test -2654,3,test -1955,2,test -826,2,test -867,3,test -3599,2,test -2387,4,test -3637,1,test -1080,3,test -2683,2,test -1984,1,test -1467,3,test -2633,1,test -2197,1,test -3242,1,test -2980,1,test -1976,1,test -1759,3,test -4054,1,test -2585,2,test -1456,2,test -3193,1,test -3971,3,test -586,2,test -2268,2,test -1794,2,test -362,1,test -3314,3,test -3610,1,test -1528,4,test -354,2,test -3739,2,test -1437,2,test -3081,2,test -2036,1,test -1216,2,test -3952,2,test -3690,2,test -999,4,test -696,3,test -2736,3,test -2474,3,test -3598,4,test -3295,3,test -2207,4,test -301,4,test -122,1,test -1804,1,test -1938,1,test -943,1,test -3720,2,test -2067,2,test -1113,3,test -851,3,test -2633,4,test -1763,4,test -1276,2,test -1410,2,test -19,2,test -2751,1,test -2138,3,test -1976,4,test -3183,3,test -4054,4,test -103,1,test -3267,2,test -1397,4,test -4088,2,test -3093,2,test -1960,1,test -1044,2,test -2647,1,test -3001,4,test -436,2,test -1086,4,test -1956,3,test -782,1,test -565,3,test -1341,1,test -84,1,test -733,1,test -1511,3,test -516,3,test -2036,4,test -1512,4,test -3764,3,test -3807,1,test -3540,2,test -3674,2,test -721,4,test -3624,1,test -1804,4,test -1067,3,test -3066,2,test -3362,1,test -3844,4,test -976,1,test -1196,4,test -3491,2,test -1929,4,test -2537,3,test -884,3,test -2883,2,test -2666,4,test -1442,1,test -2354,3,test -1705,2,test -2221,4,test -3442,1,test -964,4,test -1310,3,test -1656,2,test -1260,2,test -2863,1,test -2997,1,test -2601,1,test -3909,3,test -1826,4,test -1960,4,test -3563,3,test -3167,3,test -1261,3,test -2647,4,test -82,2,test -2814,1,test -2081,1,test -216,2,test -2731,3,test -3938,2,test -1078,3,test -3118,3,test -1290,2,test -3330,2,test -470,3,test -641,1,test -3414,1,test -1594,4,test -420,2,test -3634,4,test -1332,4,test -2935,3,test -3543,2,test -683,3,test -3847,4,test -416,4,test -2415,3,test -3756,2,test -2499,2,test -887,3,test -1058,1,test -1920,2,test -3395,1,test -1742,1,test -1962,4,test -55,2,test -967,4,test -2479,1,test -2916,2,test -2217,1,test -2654,2,test -1955,1,test -826,1,test -1442,4,test -1180,4,test -2387,3,test -135,3,test -481,2,test -3213,1,test -2863,4,test -1252,1,test -2601,4,test -1993,4,test -382,1,test -115,2,test -2585,1,test -1456,1,test -2072,4,test -3971,2,test -1810,4,test -3322,1,test -66,2,test -1669,1,test -3414,4,test -3314,2,test -1528,3,test -3739,1,test -3048,4,test -1437,1,test -1657,4,test -3656,3,test -2482,1,test -3394,3,test -3528,3,test -3952,1,test -3261,4,test -1354,2,test -2865,4,test -3690,1,test -696,2,test -3910,4,test -2736,2,test -1742,4,test -1954,3,test -3295,2,test -697,3,test -301,3,test -3599,4,test -1692,2,test -817,4,test -3720,1,test -860,2,test -3637,3,test -2463,1,test -2067,1,test -2683,4,test -1984,3,test -1206,1,test -3983,2,test -2633,3,test -3671,1,test -3113,2,test -2414,1,test -2197,3,test -3459,1,test -69,2,test -3242,3,test -2980,3,test -1410,1,test -19,1,test -3192,2,test -239,4,test -1976,3,test -4054,3,test -2585,4,test -1456,4,test -3014,1,test -366,1,test -3143,2,test -586,4,test -2268,4,test -3093,1,test -1794,4,test -2960,2,test -3610,3,test -2911,2,test -354,4,test -3739,4,test -2303,2,test -3081,4,test -2649,1,test -347,1,test -2036,3,test -2211,4,test -1216,4,test -1512,3,test -3690,4,test -1817,1,test -3674,1,test -1076,2,test -122,3,test -1804,3,test -3066,1,test -1938,3,test -2808,2,test -1196,3,test -3491,1,test -2067,4,test -2666,3,test -2101,2,test -1276,4,test -1705,1,test -1410,4,test -19,4,test -2314,2,test -2751,3,test -964,3,test -103,3,test -1310,2,test -2052,1,test -1656,1,test -3267,4,test -3909,2,test -4088,4,test -2914,2,test -1960,3,test -3563,2,test -528,2,test -1261,2,test -1044,4,test -2647,3,test -216,1,test -3389,2,test -436,4,test -2731,2,test -782,3,test -1078,2,test -2519,2,test -1341,3,test -1553,2,test -3989,2,test -733,3,test -2732,2,test -683,2,test -2415,2,test -2549,2,test -3756,1,test -2499,1,test -3807,3,test -4019,2,test -2628,2,test -3540,4,test -3927,4,test -3624,3,test -3066,4,test -3362,3,test -976,3,test -3491,4,test -2883,4,test -1272,1,test -1442,3,test -1180,3,test -1485,1,test -1705,4,test -135,2,test -481,1,test -3950,1,test -2431,1,test -1739,2,test -1260,4,test -2863,3,test -2997,3,test -2601,3,test -694,1,test -3725,4,test -1993,3,test -2298,1,test -82,4,test -2814,3,test -645,1,test -3938,4,test -2072,3,test -207,4,test -1769,2,test -378,2,test -1290,4,test -3330,4,test -2115,1,test -66,1,test -3414,3,test -420,4,test -1982,2,test -3543,4,test -1932,1,test -1537,2,test -3756,4,test -1191,2,test -3656,2,test -1058,3,test -359,2,test -3528,2,test -1920,4,test -2745,1,test -3261,3,test -1354,1,test -3395,3,test -1742,3,test -55,4,test -1093,2,test -697,2,test -2696,1,test -2479,3,test -2916,4,test -2654,4,test -1955,3,test -826,3,test -1692,1,test -2775,1,test -1518,1,test -860,1,test -3637,2,test -1080,4,test -3213,3,test -1984,2,test -3983,1,test -1335,1,test -3509,1,test -3113,1,test -2197,2,test -3934,1,test -3242,2,test -2939,1,test -2980,2,test -382,3,test -3192,1,test -115,4,test -2069,1,test -2585,3,test -1456,3,test -3455,2,test -3193,2,test -3971,4,test -3143,1,test -586,3,test -3322,3,test -66,4,test -1669,3,test -362,2,test -3314,4,test -446,1,test -3610,2,test -575,2,test -2911,1,test -354,3,test -3739,3,test -1437,3,test -2482,3,test -1783,2,test -2828,2,test -3952,3,test -3690,3,test -696,4,test -2736,4,test -1996,2,test -2474,4,test -2779,2,test -3295,4,test -2991,1,test -1076,1,test -1692,4,test -122,2,test -1938,2,test -2808,1,test -943,2,test -3720,3,test -860,4,test -2463,3,test -2067,3,test -1113,4,test -3671,3,test -3113,4,test -2414,3,test -69,4,test -1410,3,test -19,3,test -2314,1,test -2751,2,test -3192,4,test -103,2,test -3014,3,test -3622,2,test -2527,1,test -366,3,test -3143,4,test -4088,3,test -3093,3,test -528,1,test -2960,4,test -3389,1,test -1956,4,test -2519,1,test -2911,4,test -1341,2,test -3989,1,test -84,2,test -2303,4,test -733,2,test -2732,1,test -516,4,test -2649,3,test -3815,1,test -559,2,test -2549,1,test -3807,2,test -4019,1,test -3540,3,test -3674,3,test -3624,2,test -1067,4,test -3066,3,test -976,2,test -3491,3,test -2883,3,test -2101,4,test -1797,1,test -1705,3,test -3442,2,test -2314,4,test -1140,2,test -1352,1,test -1310,4,test -4001,2,test -2052,3,test -1656,3,test -2997,2,test -3909,4,test -2914,4,test -3563,4,test -1952,1,test -1261,4,test -82,3,test -2081,2,test -216,3,test -2731,4,test -2427,1,test -125,1,test -1769,1,test -1078,4,test -1170,1,test -2519,4,test -470,4,test -641,2,test -1553,4,test -3989,4,test -1982,1,test -463,1,test -683,4,test -3324,1,test -1933,1,test -2415,4,test -2549,4,test -3756,3,test -3453,2,test -2499,3,test -3537,1,test -4019,4,test -543,2,test -2628,4,test -1058,2,test -359,1,test -1093,1,test -1272,3,test -2479,2,test -2217,2,test -3221,1,test -135,4,test -481,3,test -3172,1,test -3213,2,test -3950,3,test -2431,3,test -1739,4,test -1252,2,test -694,3,test -2727,1,test -1336,1,test -1952,4,test -382,2,test -115,3,test -645,3,test -1811,1,test -3455,1,test -1769,4,test -595,2,test -378,4,test -2115,3,test -3322,2,test -66,3,test -1669,2,test -1932,3,test -1537,4,test -1233,1,test -575,1,test -1191,4,test -3656,4,test -2482,2,test -3394,4,test -1783,1,test -359,4,test -3528,4,test -2828,1,test -922,1,test -3437,2,test -2745,3,test -1354,3,test -3649,1,test -1996,1,test -2130,1,test -1954,4,test -2779,1,test -697,4,test -2696,3,test -1651,2,test -1692,3,test -2775,3,test -860,3,test -3637,4,test -2463,2,test -2597,2,test -3071,1,test -1206,2,test -3983,3,test -1984,4,test -1552,1,test -423,1,test -1335,3,test -3671,2,test -3509,3,test -3113,3,test -1681,2,test -2414,2,test -2197,4,test -3459,2,test -3022,1,test -3934,3,test -69,3,test -3242,4,test -2980,4,test -374,1,test -3192,3,test -2069,3,test -3235,1,test -3455,4,test -3014,2,test -3193,4,test -3622,1,test -366,2,test -3143,3,test -2840,2,test -1795,1,test -2960,3,test -362,4,test -446,3,test -1612,1,test -3610,4,test -575,4,test -2911,3,test -2524,2,test -2303,3,test -1783,4,test -2649,2,test -347,2,test -2828,4,test -1217,1,test -559,1,test -2995,1,test -1817,2,test -2991,3,test -639,2,test -1076,3,test -122,4,test -1938,4,test -2808,3,test -943,4,test -2101,3,test -2314,3,test -2751,4,test -1140,1,test -103,4,test -3268,1,test -4001,1,test -2052,2,test -2527,3,test -96,1,test -2914,3,test -1482,2,test -3918,2,test -528,3,test -1566,1,test -3389,3,test -1695,2,calibrate -596,3,calibrate -1433,2,calibrate -2625,3,calibrate -624,3,calibrate -3150,4,calibrate -1988,4,calibrate -3591,3,calibrate -1737,4,calibrate -201,4,calibrate -3552,2,calibrate -273,1,calibrate -3446,2,calibrate -2336,3,calibrate -748,2,calibrate -2933,2,calibrate -1345,1,calibrate -3408,3,calibrate -2850,4,calibrate -2017,3,calibrate -1011,3,calibrate -603,1,calibrate -1941,4,calibrate -1264,3,calibrate -3397,2,calibrate -710,2,calibrate -3860,1,calibrate -1558,1,calibrate -4058,4,calibrate -907,3,calibrate -3191,1,calibrate -4069,4,calibrate -3119,3,calibrate -774,4,calibrate -75,3,calibrate -2500,3,calibrate -657,4,calibrate -2952,2,calibrate -3666,1,calibrate -209,3,calibrate -3131,4,calibrate -2671,1,calibrate -186,1,calibrate -858,3,calibrate -2869,4,calibrate -1299,2,calibrate -3332,3,calibrate -2233,4,calibrate -3070,3,calibrate -1238,4,calibrate -1667,1,calibrate -725,4,calibrate -2724,3,calibrate -2317,3,calibrate -2328,3,calibrate -1584,3,calibrate -3613,3,calibrate -2477,1,calibrate -2663,2,calibrate -76,3,calibrate -3731,4,calibrate -3346,4,calibrate -980,1,calibrate -49,4,calibrate -2014,1,calibrate -71,1,calibrate -2290,3,calibrate -2279,3,calibrate -3905,4,calibrate -888,3,calibrate -596,2,calibrate -637,3,calibrate -2625,2,calibrate -3810,4,calibrate -2837,1,calibrate -3715,1,calibrate -1644,4,calibrate -201,3,calibrate -3552,1,calibrate -1040,2,calibrate -2336,2,calibrate -748,1,calibrate -2933,1,calibrate -3408,2,calibrate -466,4,calibrate -2017,2,calibrate -3829,4,calibrate -1941,3,calibrate -1264,2,calibrate -3316,4,calibrate -710,1,calibrate -2825,4,calibrate -907,2,calibrate -2708,4,calibrate -3863,2,calibrate -3119,2,calibrate -177,4,calibrate -1758,3,calibrate -629,3,calibrate -774,3,calibrate -740,1,calibrate -75,2,calibrate -2500,2,calibrate -657,3,calibrate -2952,1,calibrate -1165,1,calibrate -858,2,calibrate -1613,2,calibrate -1299,1,calibrate -1385,4,calibrate -2536,4,calibrate -2199,1,calibrate -2233,3,calibrate -2210,1,calibrate -3574,2,calibrate -273,4,calibrate -3312,2,calibrate -725,3,calibrate -2317,2,calibrate -2328,2,calibrate -3613,2,calibrate -3658,1,calibrate -2663,1,calibrate -2016,1,calibrate -603,4,calibrate -4068,3,calibrate -3346,3,calibrate -4079,3,calibrate -2677,3,calibrate -2290,2,calibrate -2279,2,calibrate -3905,3,calibrate -3191,4,calibrate -3475,1,calibrate -888,2,calibrate -637,2,calibrate -2625,1,calibrate -375,2,calibrate -3779,3,calibrate -1644,3,calibrate -1142,3,calibrate -2297,1,calibrate -2734,2,calibrate -454,2,calibrate -1040,1,calibrate -2336,1,calibrate -3741,3,calibrate -747,4,calibrate -466,3,calibrate -3976,4,calibrate -496,4,calibrate -1941,2,calibrate -1264,1,calibrate -3316,3,calibrate -355,1,calibrate -71,4,calibrate -907,1,calibrate -960,4,calibrate -3714,3,calibrate -2825,3,calibrate -1400,1,calibrate -249,1,calibrate -2708,3,calibrate -3863,1,calibrate -177,3,calibrate -1758,2,calibrate -629,2,calibrate -1362,2,calibrate -3425,4,calibrate -2837,4,calibrate -1970,1,calibrate -1959,1,calibrate -553,3,calibrate -2882,3,calibrate -2190,4,calibrate -1005,2,calibrate -3715,4,calibrate -1613,1,calibrate -526,4,calibrate -2536,3,calibrate -1385,3,calibrate -3574,1,calibrate -2464,2,calibrate -2475,2,calibrate -3312,1,calibrate -2810,1,calibrate -2035,4,calibrate -4079,2,calibrate -4068,2,calibrate -2677,2,calibrate -1985,3,calibrate -3600,4,calibrate -2186,2,calibrate -3109,4,calibrate -637,1,calibrate -241,1,calibrate -375,1,calibrate -1590,4,calibrate -3779,2,calibrate -344,4,calibrate -1644,2,calibrate -283,3,calibrate -3049,4,calibrate -1165,4,calibrate -757,2,calibrate -1142,2,calibrate -2734,1,calibrate -454,1,calibrate -484,2,calibrate -1780,2,calibrate -3858,2,calibrate -1981,1,calibrate -830,1,calibrate -1312,4,calibrate -150,4,calibrate -161,4,calibrate -3741,2,calibrate -579,1,calibrate -2205,2,calibrate -747,3,calibrate -3976,3,calibrate -496,3,calibrate -731,4,calibrate -2016,4,calibrate -1776,4,calibrate -385,4,calibrate -2825,2,calibrate -960,3,calibrate -3714,2,calibrate -2604,3,calibrate -3475,4,calibrate -525,2,calibrate -2984,4,calibrate -1362,1,calibrate -3425,3,calibrate -553,2,calibrate -4063,3,calibrate -2190,3,calibrate -2220,4,calibrate -1005,1,calibrate -2882,2,calibrate -2923,3,calibrate -526,3,calibrate -2536,2,calibrate -1385,2,calibrate -1426,3,calibrate -913,3,calibrate -2475,1,calibrate -2464,1,calibrate -3679,4,calibrate -3573,4,calibrate -571,1,calibrate -1042,4,calibrate -4079,1,calibrate -4068,1,calibrate -2677,1,calibrate -1985,2,calibrate -3600,3,calibrate -3652,4,calibrate -2186,1,calibrate -1506,4,calibrate -355,4,calibrate -3109,3,calibrate -795,1,calibrate -1400,4,calibrate -1590,3,calibrate -3779,1,calibrate -837,3,calibrate -2003,1,calibrate -1072,4,calibrate -3049,3,calibrate -283,2,calibrate -757,1,calibrate -484,1,calibrate -1780,1,calibrate -1855,4,calibrate -3858,1,calibrate -3899,2,calibrate -1312,3,calibrate -161,3,calibrate -150,3,calibrate -3827,4,calibrate -2205,1,calibrate -3576,4,calibrate -496,2,calibrate -731,3,calibrate -2364,3,calibrate -906,4,calibrate -206,1,calibrate -385,3,calibrate -2604,2,calibrate -3382,4,calibrate -3265,4,calibrate -525,1,calibrate -2984,3,calibrate -1874,4,calibrate -734,4,calibrate -3425,2,calibrate -1623,4,calibrate -4063,2,calibrate -2923,2,calibrate -2220,3,calibrate -526,2,calibrate -1426,2,calibrate -913,2,calibrate -3679,3,calibrate -685,4,calibrate -1981,4,calibrate -830,4,calibrate -3573,3,calibrate -579,4,calibrate -3640,2,calibrate -1042,3,calibrate -328,4,calibrate -3412,4,calibrate -1695,1,calibrate -1433,1,calibrate -3944,4,calibrate -2804,4,calibrate -2060,4,calibrate -3652,3,calibrate -3933,4,calibrate -624,2,calibrate -1536,4,calibrate -3109,2,calibrate -3150,3,calibrate -1988,3,calibrate -3591,2,calibrate -1737,3,calibrate -3446,1,calibrate -837,2,calibrate -1072,3,calibrate -1258,4,calibrate -2850,3,calibrate -1855,3,calibrate -1011,2,calibrate -3899,1,calibrate -1683,4,calibrate -3827,3,calibrate -3397,1,calibrate -3576,3,calibrate -571,4,calibrate -4069,3,calibrate -2611,4,calibrate -2204,4,calibrate -4058,3,calibrate -2364,2,calibrate -2604,1,calibrate -209,2,calibrate -3382,3,calibrate -3131,3,calibrate -3265,3,calibrate -2869,3,calibrate -3332,2,calibrate -1874,3,calibrate -734,3,calibrate -3070,2,calibrate -1623,3,calibrate -1238,3,calibrate -4063,1,calibrate -2923,1,calibrate -2220,2,calibrate -2724,2,calibrate -2003,4,calibrate -1584,2,calibrate -1345,4,calibrate -76,2,calibrate -913,1,calibrate -3679,2,calibrate -3731,3,calibrate -685,3,calibrate -49,3,calibrate -3640,1,calibrate -3860,4,calibrate -3412,3,calibrate -1558,4,calibrate -596,1,calibrate -3810,3,calibrate -3933,3,calibrate -3944,3,calibrate -2804,3,calibrate -3652,2,calibrate -624,1,calibrate -1536,3,calibrate -3150,2,calibrate -1988,2,calibrate -3591,1,calibrate -3666,4,calibrate -186,4,calibrate -1737,2,calibrate -201,2,calibrate -2671,4,calibrate -1667,4,calibrate -3408,1,calibrate -1258,3,calibrate -2850,2,calibrate -2477,4,calibrate -2017,1,calibrate -1011,1,calibrate -3829,3,calibrate -1683,3,calibrate -980,4,calibrate -2014,4,calibrate -4058,2,calibrate -2611,3,calibrate -4069,2,calibrate -2204,3,calibrate -3119,1,calibrate -2364,1,calibrate -774,2,calibrate -75,1,calibrate -2500,1,calibrate -657,2,calibrate -209,1,calibrate -3382,2,calibrate -3131,2,calibrate -858,1,calibrate -2869,2,calibrate -3332,1,calibrate -2233,2,calibrate -3070,1,calibrate -3552,4,calibrate -1238,2,calibrate -273,3,calibrate -3446,4,calibrate -748,4,calibrate -2724,1,calibrate -2328,1,calibrate -1584,1,calibrate -725,2,calibrate -3613,1,calibrate -1345,3,calibrate -2317,1,calibrate -2933,4,calibrate -76,1,calibrate -3731,2,calibrate -3346,2,calibrate -603,3,calibrate -49,2,calibrate -3397,4,calibrate -710,4,calibrate -3860,3,calibrate -2290,1,calibrate -2279,1,calibrate -3905,2,calibrate -3191,3,calibrate -888,1,calibrate -3810,2,calibrate -3933,2,calibrate -2804,2,calibrate -3944,2,calibrate -740,4,calibrate -3666,3,calibrate -2952,4,calibrate -186,3,calibrate -201,1,calibrate -1299,4,calibrate -2199,4,calibrate -2210,4,calibrate -1667,3,calibrate -466,2,calibrate -3658,4,calibrate -2477,3,calibrate -2663,4,calibrate -3829,2,calibrate -1941,1,calibrate -980,3,calibrate -3316,2,calibrate -71,3,calibrate -4058,1,calibrate -4069,1,calibrate -2204,2,calibrate -2708,2,calibrate -596,4,calibrate -177,2,calibrate -2625,4,calibrate -1758,1,calibrate -629,1,calibrate -774,1,calibrate -2837,3,calibrate -3715,3,calibrate -657,1,calibrate -2233,1,calibrate -2297,4,calibrate -3552,3,calibrate -1238,1,calibrate -1040,4,calibrate -273,2,calibrate -2336,4,calibrate -748,3,calibrate -725,1,calibrate -2933,3,calibrate -603,2,calibrate -3731,1,calibrate -3346,1,calibrate -1264,4,calibrate -3905,1,calibrate -907,4,calibrate -3191,2,calibrate -249,4,calibrate -3810,1,calibrate -3863,4,calibrate -740,3,calibrate -344,3,calibrate -1970,4,calibrate -75,4,calibrate -1959,4,calibrate -1644,1,calibrate -186,2,calibrate -2952,3,calibrate -1165,3,calibrate -1142,1,calibrate -858,4,calibrate -1299,3,calibrate -1613,4,calibrate -2199,3,calibrate -2210,3,calibrate -3574,4,calibrate -1667,2,calibrate -3312,4,calibrate -3741,1,calibrate -2317,4,calibrate -2328,4,calibrate -747,2,calibrate -2810,4,calibrate -466,1,calibrate -3976,2,calibrate -3658,3,calibrate -2663,3,calibrate -3829,1,calibrate -2016,3,calibrate -1776,3,calibrate -3316,1,calibrate -71,2,calibrate -2825,1,calibrate -960,2,calibrate -3714,1,calibrate -2290,4,calibrate -2279,4,calibrate -2708,1,calibrate -3475,3,calibrate -888,4,calibrate -637,4,calibrate -241,4,calibrate -177,1,calibrate -375,4,calibrate -2837,2,calibrate -553,1,calibrate -3715,2,calibrate -2190,2,calibrate -2882,1,calibrate -2536,1,calibrate -1385,1,calibrate -2297,3,calibrate -2734,4,calibrate -454,4,calibrate -1040,3,calibrate -2035,2,calibrate -1985,1,calibrate -3600,2,calibrate -1506,3,calibrate -355,3,calibrate -1400,3,calibrate -249,3,calibrate -3863,3,calibrate -1590,2,calibrate -1758,4,calibrate -629,4,calibrate -1362,4,calibrate -740,2,calibrate -344,2,calibrate -1970,3,calibrate -1959,3,calibrate -1005,4,calibrate -283,1,calibrate -3049,2,calibrate -1613,3,calibrate -1165,2,calibrate -2210,2,calibrate -2199,2,calibrate -3574,3,calibrate -2464,4,calibrate -1312,2,calibrate -150,2,calibrate -3312,3,calibrate -161,2,calibrate -2475,4,calibrate -747,1,calibrate -2810,3,calibrate -3658,2,calibrate -3976,1,calibrate -496,1,calibrate -731,2,calibrate -2016,2,calibrate -906,3,calibrate -4079,4,calibrate -4068,4,calibrate -1776,2,calibrate -2677,4,calibrate -385,2,calibrate -960,1,calibrate -2186,4,calibrate -3475,2,calibrate -795,4,calibrate -241,3,calibrate -2984,2,calibrate -375,3,calibrate -3425,1,calibrate -3779,4,calibrate -2190,1,calibrate -526,1,calibrate -1426,1,calibrate -757,4,calibrate -1142,4,calibrate -2297,2,calibrate -454,3,calibrate -484,4,calibrate -2734,3,calibrate -1780,4,calibrate -3858,4,calibrate -1981,3,calibrate -830,3,calibrate -3573,2,calibrate -3741,4,calibrate -579,3,calibrate -2205,4,calibrate -1042,2,calibrate -328,3,calibrate -2035,1,calibrate -2060,3,calibrate -3600,1,calibrate -206,4,calibrate -1506,2,calibrate -355,2,calibrate -3109,1,calibrate -3714,4,calibrate -1400,2,calibrate -249,2,calibrate -1590,1,calibrate -525,4,calibrate -1362,3,calibrate -344,1,calibrate -1959,2,calibrate -1970,2,calibrate -837,1,calibrate -553,4,calibrate -2882,4,calibrate -1005,3,calibrate -1072,2,calibrate -3049,1,calibrate -1855,2,calibrate -2475,3,calibrate -1312,1,calibrate -150,1,calibrate -2464,3,calibrate -161,1,calibrate -3827,2,calibrate -3576,2,calibrate -2810,2,calibrate -571,3,calibrate -731,1,calibrate -1695,4,calibrate -906,2,calibrate -1776,1,calibrate -1433,4,calibrate -1985,4,calibrate -385,1,calibrate -2186,3,calibrate -795,3,calibrate -3265,2,calibrate -241,2,calibrate -2984,1,calibrate -1874,2,calibrate -734,2,calibrate -1623,2,calibrate -2220,1,calibrate -2003,3,calibrate -283,4,calibrate -757,3,calibrate -484,3,calibrate -1780,3,calibrate -3679,1,calibrate -685,2,calibrate -3858,3,calibrate -1981,2,calibrate -830,2,calibrate -3899,4,calibrate -3573,1,calibrate -579,2,calibrate -2205,3,calibrate -1042,1,calibrate -328,2,calibrate -3412,2,calibrate -1558,3,calibrate -2060,2,calibrate -206,3,calibrate -3652,1,calibrate -1506,1,calibrate -1536,2,calibrate -3150,1,calibrate -1988,1,calibrate -2604,4,calibrate -1737,1,calibrate -2671,3,calibrate -525,3,calibrate -4063,4,calibrate -2923,4,calibrate -1072,1,calibrate -1258,2,calibrate -2850,1,calibrate -1426,4,calibrate -1855,1,calibrate -913,4,calibrate -1683,2,calibrate -3827,1,calibrate -2014,3,calibrate -3576,1,calibrate -3640,4,calibrate -571,2,calibrate -2611,2,calibrate -1695,3,calibrate -906,1,calibrate -1433,3,calibrate -624,4,calibrate -3382,1,calibrate -795,2,calibrate -3131,1,calibrate -3591,4,calibrate -3265,1,calibrate -2869,1,calibrate -1874,1,calibrate -734,1,calibrate -1623,1,calibrate -3446,3,calibrate -837,4,calibrate -2003,2,calibrate -1345,2,calibrate -3408,4,calibrate -2017,4,calibrate -1011,4,calibrate -685,1,calibrate -3899,3,calibrate -49,1,calibrate -3397,3,calibrate -328,1,calibrate -3860,2,calibrate -3412,1,calibrate -1558,2,calibrate -710,3,calibrate -3119,4,calibrate -2364,4,calibrate -3933,1,calibrate -3944,1,calibrate -2804,1,calibrate -206,2,calibrate -2060,1,calibrate -1536,1,calibrate -2500,4,calibrate -3666,2,calibrate -209,4,calibrate -2671,2,calibrate -3332,4,calibrate -3070,4,calibrate -2724,4,calibrate -1584,4,calibrate -3613,4,calibrate -1258,1,calibrate -2477,2,calibrate -76,4,calibrate -1683,1,calibrate -980,2,calibrate -2014,2,calibrate -3640,3,calibrate -2611,1,calibrate -2204,1,calibrate diff --git a/models/hbr/metrics/eir_OOF_metrics_K10CV.csv b/models/hbr/metrics/eir_OOF_metrics_K10CV.csv deleted file mode 100644 index f60ae5c..0000000 --- a/models/hbr/metrics/eir_OOF_metrics_K10CV.csv +++ /dev/null @@ -1,3 +0,0 @@ -set,R2,bias,RMSE,MAE -OOF_uncalibrated,0.9937114678283258,0.1975426785792437,7.503367295849099,1.811916642783641 -OOF_calibrated,0.9938349462151069,-0.11396988957813733,7.429335951261748,1.7968831645347725 diff --git a/models/hbr/metrics/eir_test_metrics.csv b/models/hbr/metrics/eir_test_metrics.csv deleted file mode 100644 index ddc0eaa..0000000 --- a/models/hbr/metrics/eir_test_metrics.csv +++ /dev/null @@ -1,2 +0,0 @@ -set,R2,bias,RMSE,MAE -Test,0.9932201789731747,-0.1516625971494146,7.79412320408285,1.7008778672664435 diff --git a/models/hbr/metrics/hbr_OOF_metrics_K10CV.csv b/models/hbr/metrics/hbr_OOF_metrics_K10CV.csv deleted file mode 100644 index bf790a2..0000000 --- a/models/hbr/metrics/hbr_OOF_metrics_K10CV.csv +++ /dev/null @@ -1,3 +0,0 @@ -set,R2,bias,RMSE,MAE -OOF_uncalibrated,0.9998069592457883,-1107.6675606973777,23435.86049194724,2709.3842691018244 -OOF_calibrated,0.9998096907822673,119.85741076025299,23269.46044419048,3190.5668570747875 diff --git a/models/hbr/metrics/hbr_test_metrics.csv b/models/hbr/metrics/hbr_test_metrics.csv deleted file mode 100644 index fd64886..0000000 --- a/models/hbr/metrics/hbr_test_metrics.csv +++ /dev/null @@ -1,2 +0,0 @@ -set,R2,bias,RMSE,MAE -Test,0.9999753512398193,1533.1655993230922,8372.508464605351,2530.611551719603 diff --git a/models/prevalence/metrics/eir_OOF_metrics_K10CV.csv b/models/prevalence/metrics/eir_OOF_metrics_K10CV.csv deleted file mode 100644 index a0bacaa..0000000 --- a/models/prevalence/metrics/eir_OOF_metrics_K10CV.csv +++ /dev/null @@ -1,3 +0,0 @@ -set,R2,bias,RMSE,MAE -OOF_uncalibrated,0.9975448045299296,-0.29231003393205607,5.201173980502499,1.1974636177941054 -OOF_calibrated,0.9977198930437194,-0.04791886282845037,5.012287271853999,1.227147129492564 diff --git a/models/prevalence/metrics/eir_test_metrics.csv b/models/prevalence/metrics/eir_test_metrics.csv deleted file mode 100644 index 960fa08..0000000 --- a/models/prevalence/metrics/eir_test_metrics.csv +++ /dev/null @@ -1,2 +0,0 @@ -set,R2,bias,RMSE,MAE -Test,0.9988711174876289,0.10276439693521482,3.539759142317308,1.1724200075408078 From 43e1a1910579e908960950309668fe333fdffb5e Mon Sep 17 00:00:00 2001 From: Anmol Date: Thu, 13 Aug 2026 14:51:30 +0000 Subject: [PATCH 27/32] Update project installation step to include extra scenarios for testing --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d32b077..67c8d0b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -32,7 +32,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install project - run: uv sync --locked + run: uv sync --locked --extra train --extra scenarios - name: Run tests run: uv run pytest From ea79df2efa04227331d59e6f73c588e2f3b70511 Mon Sep 17 00:00:00 2001 From: Anmol Date: Thu, 13 Aug 2026 15:21:39 +0000 Subject: [PATCH 28/32] remove all related to old xgboost --- datasets/split_prev_y9-eir.csv | 12875 ++++++++++++++++ models/hbr/README.md | 17 - models/hbr/prepare.py | 38 - models/hbr/train_eir_to_hbr.py | 247 - models/hbr/train_hbr_to_eir.py | 252 - models/prevalence/README.md | 13 - models/prevalence/prepare.py | 30 - models/prevalence/train.py | 253 - pyproject.toml | 8 +- src/estimint/__init__.py | 48 - .../data/estiMINT_EIR_to_HBR_model.pkl | Bin 10801261 -> 0 bytes src/estimint/data/estiMINT_HBR_model.pkl | Bin 13473933 -> 0 bytes src/estimint/data/estiMINT_model.pkl | Bin 22572913 -> 0 bytes src/estimint/data/model_checksum.txt | 1 - src/estimint/data/models-checksums.csv | 2 - src/estimint/data/models-tag.txt | 1 - src/estimint/data_processing.py | 179 +- src/estimint/globals.py | 64 - src/estimint/models.py | 158 - src/estimint/run.py | 244 - src/estimint/scenarios.py | 1 - src/estimint/storage.py | 717 - src/estimint/train.py | 433 - src/estimint/utils.py | 92 +- tests/test_flows.py | 19 - uv.lock | 125 +- 26 files changed, 12886 insertions(+), 2931 deletions(-) create mode 100644 datasets/split_prev_y9-eir.csv delete mode 100644 models/hbr/README.md delete mode 100644 models/hbr/prepare.py delete mode 100644 models/hbr/train_eir_to_hbr.py delete mode 100644 models/hbr/train_hbr_to_eir.py delete mode 100644 models/prevalence/README.md delete mode 100644 models/prevalence/prepare.py delete mode 100644 models/prevalence/train.py delete mode 100644 src/estimint/data/estiMINT_EIR_to_HBR_model.pkl delete mode 100644 src/estimint/data/estiMINT_HBR_model.pkl delete mode 100644 src/estimint/data/estiMINT_model.pkl delete mode 100644 src/estimint/data/model_checksum.txt delete mode 100644 src/estimint/data/models-checksums.csv delete mode 100644 src/estimint/data/models-tag.txt delete mode 100644 src/estimint/globals.py delete mode 100644 src/estimint/models.py delete mode 100644 src/estimint/run.py delete mode 100644 src/estimint/storage.py delete mode 100644 src/estimint/train.py diff --git a/datasets/split_prev_y9-eir.csv b/datasets/split_prev_y9-eir.csv new file mode 100644 index 0000000..49a4fd7 --- /dev/null +++ b/datasets/split_prev_y9-eir.csv @@ -0,0 +1,12875 @@ +parameter_index,simulation_index,split +1128,4,train +2344,2,train +2478,2,train +1820,2,train +1999,4,train +1603,4,train +2295,2,train +1899,2,train +2033,2,train +1637,2,train +2508,2,train +2112,2,train +2945,3,train +2246,2,train +1850,2,train +2029,4,train +1767,4,train +2845,1,train +2325,2,train +2063,2,train +3058,1,train +64,2,train +3271,1,train +277,2,train +3009,1,train +3484,1,train +3088,1,train +3222,1,train +2826,1,train +3005,3,train +3046,4,train +2347,3,train +2784,4,train +2481,3,train +3301,1,train +307,2,train +348,3,train +744,3,train +2643,1,train +45,2,train +482,3,train +3039,1,train +3259,4,train +3655,4,train +2694,3,train +778,1,train +3514,1,train +3555,2,train +957,3,train +2856,1,train +299,3,train +2990,1,train +3076,4,train +2773,3,train +857,1,train +991,1,train +3768,2,train +3902,2,train +3506,2,train +512,3,train +3289,4,train +3027,4,train +2765,4,train +1070,1,train +3981,2,train +3585,2,train +1028,4,train +3282,1,train +766,4,train +3061,2,train +67,3,train +2844,4,train +3240,4,train +2978,4,train +625,1,train +1241,4,train +1375,4,train +979,4,train +3274,2,train +3670,2,train +676,3,train +1496,1,train +1275,2,train +1454,4,train +576,1,train +3353,2,train +3749,2,train +3790,3,train +796,4,train +3487,2,train +1051,1,train +1488,2,train +1185,1,train +3962,2,train +3566,2,train +4003,3,train +1009,4,train +706,3,train +1567,2,train +1701,2,train +1305,2,train +1484,4,train +606,1,train +1043,2,train +3820,3,train +3954,3,train +564,4,train +1914,2,train +1652,2,train +1256,2,train +4033,3,train +1435,4,train +3771,3,train +777,4,train +1731,2,train +1772,3,train +1032,1,train +1073,2,train +1944,2,train +1723,3,train +4018,1,train +1420,2,train +1203,4,train +2198,3,train +1802,3,train +1936,3,train +1103,2,train +2494,1,train +2015,3,train +2452,4,train +1712,2,train +1316,2,train +2149,3,train +1491,3,train +2311,1,train +2665,4,train +1966,3,train +2262,1,train +2699,2,train +2441,3,train +2878,4,train +2179,3,train +2616,4,train +2737,1,train +2912,2,train +2079,1,train +2609,1,train +2213,1,train +2695,4,train +3091,4,train +2829,4,train +2688,1,train +2292,1,train +131,3,train +2426,1,train +2030,1,train +2512,4,train +2646,4,train +2250,4,train +293,1,train +2639,1,train +2243,1,train +2680,2,train +3121,4,train +2201,4,train +244,1,train +3417,2,train +2759,2,train +202,4,train +2456,1,train +2893,2,train +2676,4,train +2280,4,train +719,1,train +457,1,train +61,1,train +591,1,train +3409,3,train +811,4,train +415,4,train +2710,2,train +2669,1,train +2493,4,train +3705,1,train +670,1,train +711,2,train +3488,3,train +12,1,train +232,4,train +621,1,train +662,2,train +3398,2,train +2740,2,train +142,3,train +183,4,train +741,2,train +3869,1,train +438,1,train +479,2,train +3256,3,train +4089,4,train +176,1,train +658,4,train +2953,2,train +396,4,train +3948,1,train +1350,2,train +3686,1,train +1088,2,train +692,2,train +3469,3,train +3865,3,train +389,1,train +3906,4,train +213,4,train +3765,1,train +1167,2,train +1208,3,train +468,1,train +509,2,train +3682,3,train +643,2,train +3420,3,train +3816,3,train +3554,3,train +560,4,train +1421,3,train +3716,1,train +1118,2,train +722,2,train +1159,3,train +1555,3,train +856,2,train +3633,3,train +4070,4,train +3454,1,train +3237,3,train +3936,4,train +1851,1,train +1768,3,train +935,2,train +539,2,train +3667,1,train +3846,3,train +3450,3,train +1668,1,train +1847,3,train +1451,3,train +3746,1,train +1189,3,train +1626,4,train +3704,4,train +3838,4,train +2143,1,train +1747,1,train +1881,1,train +1798,3,train +1839,4,train +3917,4,train +4051,4,train +2094,1,train +2135,2,train +1832,1,train +1436,1,train +1353,3,train +2045,1,train +2131,4,train +2265,4,train +1432,3,train +1869,4,train +2124,1,train +2561,2,train +1862,1,train +1466,1,train +2344,4,train +1820,4,train +2640,2,train +2378,2,train +2075,1,train +1679,1,train +2116,2,train +1813,1,train +1899,4,train +2295,4,train +2033,4,train +1637,4,train +2853,2,train +2591,2,train +2195,2,train +1892,1,train +2112,4,train +1850,4,train +27,1,train +2408,2,train +2845,3,train +2105,1,train +2146,2,train +2542,2,train +2325,4,train +1884,2,train +2063,4,train +106,1,train +147,2,train +2621,2,train +3058,3,train +64,4,train +2359,2,train +2097,2,train +3092,1,train +57,1,train +98,2,train +3271,3,train +277,4,train +2572,2,train +2176,2,train +2613,3,train +3009,3,train +3567,1,train +3305,1,train +311,2,train +3088,3,train +3222,3,train +2826,3,train +3780,1,train +3384,1,train +786,2,train +3518,1,train +87,1,train +128,2,train +2860,1,train +3301,3,train +307,4,train +2602,2,train +2643,3,train +3039,3,train +45,4,train +3080,4,train +3342,4,train +644,3,train +3335,1,train +341,2,train +778,3,train +3073,1,train +3555,4,train +2856,3,train +2990,3,train +1074,1,train +3851,2,train +857,3,train +3548,1,train +991,3,train +158,2,train +3372,4,train +3768,4,train +292,2,train +3506,4,train +4064,2,train +1070,3,train +3802,2,train +371,2,train +3103,1,train +3499,1,train +3585,4,train +3282,3,train +3981,4,train +3061,4,train +3881,2,train +842,1,train +3619,2,train +4015,2,train +625,3,train +3753,2,train +363,3,train +3140,4,train +3670,4,train +3274,4,train +1055,1,train +3832,2,train +1275,4,train +3570,2,train +576,3,train +3353,4,train +3749,4,train +3487,4,train +1571,2,train +872,1,train +4045,2,train +1051,3,train +1488,4,train +3783,2,train +393,3,train +3566,4,train +1481,1,train +1085,1,train +1567,4,train +3862,2,train +1701,4,train +823,1,train +1305,4,train +4037,3,train +606,3,train +1043,4,train +1560,1,train +1298,1,train +902,1,train +1735,2,train +1122,4,train +3813,2,train +1256,4,train +1814,2,train +1115,1,train +1249,1,train +1731,4,train +4026,2,train +4067,3,train +1032,3,train +1073,4,train +3805,3,train +2027,2,train +1765,2,train +1369,2,train +4018,3,train +1420,4,train +2240,2,train +1978,2,train +2019,3,train +1716,2,train +1103,4,train +2494,3,train +1399,2,train +1533,2,train +1316,4,train +2924,1,train +2528,1,train +2311,3,train +2049,3,train +1787,3,train +2607,1,train +3137,1,train +2741,1,train +2262,3,train +2699,4,train +2820,1,train +222,2,train +2954,1,train +1,3,train +2296,1,train +2737,3,train +2778,4,train +2912,4,train +2079,3,train +2213,3,train +3033,1,train +3208,2,train +2509,1,train +2688,3,train +2292,3,train +2426,3,train +2030,3,train +293,3,train +3025,2,train +3421,2,train +2722,1,train +2546,4,train +2243,3,train +2680,4,train +2801,1,train +3238,2,train +244,3,train +2539,1,train +2976,2,train +3417,4,train +2759,4,train +2456,3,train +2893,4,train +540,1,train +719,3,train +3451,2,train +3055,2,train +457,3,train +61,3,train +498,4,train +3189,2,train +2576,4,train +2710,4,train +753,1,train +491,1,train +3664,2,train +3705,3,train +670,3,train +711,4,train +2965,1,train +3006,2,train +12,3,train +2744,2,train +966,1,train +308,1,train +3481,2,train +662,4,train +2957,2,train +2740,4,train +917,1,train +521,1,train +958,2,train +655,1,train +741,4,train +3432,2,train +3473,3,train +438,3,train +479,4,train +3869,3,train +176,3,train +2953,4,train +338,1,train +3948,3,train +558,4,train +3686,3,train +1088,4,train +692,4,train +3383,2,train +1250,2,train +3982,1,train +947,1,train +551,1,train +988,2,train +3765,3,train +1167,4,train +3503,3,train +468,3,train +509,4,train +3241,3,train +643,4,train +1201,2,train +805,2,train +3716,3,train +722,4,train +3454,3,train +856,4,train +1676,2,train +1414,2,train +1018,2,train +1851,3,train +3750,1,train +1152,2,train +935,4,train +539,4,train +3667,3,train +1231,2,train +1668,3,train +3963,1,train +969,2,train +3746,3,train +3921,4,train +2143,3,train +1747,3,train +4042,1,train +1881,3,train +1182,2,train +1223,3,train +1915,1,train +2094,3,train +2135,4,train +1395,2,train +1436,3,train +1832,3,train +2390,1,train +2128,1,train +1732,1,train +2214,4,train +1253,3,train +2341,1,train +1945,1,train +2124,3,train +2561,4,train +1862,3,train +1466,3,train +1903,4,train +2420,1,train +2158,1,train +1762,1,train +2640,4,train +2378,4,train +1679,3,train +2116,4,train +2371,1,train +2412,2,train +2853,4,train +2591,4,train +2195,4,train +1892,3,train +110,1,train +2887,2,train +2491,2,train +2188,1,train +1792,1,train +2408,4,train +2542,4,train +2146,4,train +1884,4,train +189,1,train +323,1,train +106,3,train +147,4,train +2401,1,train +2442,2,train +2879,3,train +2621,4,train +2180,2,train +2359,4,train +2097,4,train +2917,2,train +2655,2,train +3092,3,train +98,4,train +2572,4,train +2176,4,train +3388,1,train +353,1,train +394,2,train +3567,3,train +3305,3,train +2909,3,train +311,4,train +2606,2,train +473,2,train +3601,1,train +170,1,train +607,2,train +3384,3,train +3780,3,train +3518,3,train +128,4,train +2819,2,train +2860,3,train +3814,1,train +820,2,train +861,3,train +3156,1,train +3335,3,train +341,4,train +3073,3,train +3893,1,train +4027,1,train +3631,1,train +1074,3,train +3851,4,train +771,2,train +3548,3,train +158,4,train +292,4,train +3448,1,train +3885,2,train +891,3,train +3186,1,train +3582,1,train +588,2,train +3802,4,train +4064,4,train +371,4,train +3103,3,train +667,2,train +3399,1,train +3795,1,train +3881,4,train +4015,4,train +842,3,train +3619,4,train +3753,4,train +3357,4,train +1138,1,train +3874,1,train +3915,2,train +921,3,train +3612,1,train +618,2,train +1055,3,train +3832,4,train +3570,4,train +1351,1,train +1571,4,train +3429,1,train +3866,2,train +872,3,train +4045,4,train +3783,4,train +1564,1,train +1085,3,train +689,3,train +3862,4,train +823,3,train +2039,1,train +1777,1,train +1381,1,train +1560,3,train +1119,1,train +3896,2,train +1298,3,train +902,3,train +1735,4,train +4030,2,train +3813,4,train +1856,1,train +2031,2,train +1198,1,train +1814,4,train +1418,4,train +1115,3,train +1249,3,train +4026,4,train +2110,2,train +1807,1,train +1411,1,train +1545,1,train +2027,4,train +3926,2,train +1765,4,train +1369,4,train +1107,4,train +1927,2,train +1624,1,train +1978,4,train +1716,4,train +1878,2,train +2315,3,train +1575,1,train +1616,2,train +1399,4,train +1533,4,train +2924,3,train +2528,3,train +2225,2,train +1829,2,train +2607,3,train +2304,2,train +2345,3,train +2741,3,train +2042,2,train +1646,2,train +3037,1,train +43,2,train +2820,3,train +2954,3,train +2255,2,train +2296,3,train +3250,1,train +2854,1,train +3033,3,train +2592,1,train +3208,4,train +2375,3,train +2509,3,train +73,2,train +2805,1,train +3201,1,train +3421,4,train +3025,4,train +2722,3,train +286,2,train +327,3,train +2622,1,train +24,2,train +2801,3,train +3238,4,train +2539,3,train +2976,4,train +3493,1,train +3097,1,train +3534,2,train +540,3,train +2835,1,train +237,2,train +2969,1,train +2573,1,train +3055,4,train +3451,4,train +3189,4,train +836,1,train +970,1,train +574,1,train +753,3,train +357,3,train +54,2,train +2786,1,train +95,3,train +491,3,train +3006,4,train +2744,4,train +1049,1,train +1183,1,train +787,1,train +3960,2,train +966,3,train +3302,2,train +308,3,train +2999,1,train +3481,4,train +2823,4,train +2957,4,train +866,1,train +604,1,train +3911,2,train +3515,2,train +521,3,train +958,4,train +3253,2,train +655,3,train +3432,4,train +1475,1,train +1213,1,train +1254,2,train +3990,2,train +4031,3,train +951,1,train +555,1,train +3728,2,train +3769,3,train +338,3,train +775,4,train +3466,2,train +1333,2,train +1030,1,train +1250,4,train +3545,2,train +3982,3,train +551,3,train +988,4,train +1546,2,train +1680,2,train +1284,2,train +585,1,train +3758,2,train +1201,4,train +805,4,train +1893,2,train +1497,2,train +798,1,train +1235,2,train +1414,4,train +1018,4,train +3750,3,train +1152,4,train +1972,2,train +1710,2,train +1314,2,train +1231,4,train +3963,3,train +969,4,train +1661,2,train +1265,2,train +4042,3,train +1182,4,train +2260,1,train +4076,1,train +1478,2,train +1915,3,train +2390,3,train +1691,2,train +1295,2,train +1732,3,train +2128,3,train +2686,1,train +2424,1,train +1945,3,train +2503,1,train +2637,1,train +2420,3,train +1721,2,train +1762,3,train +2158,3,train +2716,1,train +2454,1,train +2192,1,train +2412,4,train +1579,3,train +193,1,train +2929,1,train +2667,1,train +2271,1,train +110,3,train +2405,1,train +2491,4,train +2887,4,train +2188,3,train +1792,3,train +2229,4,train +1967,4,train +406,1,train +10,1,train +2787,2,train +189,3,train +2484,1,train +2088,1,train +3317,2,train +2222,1,train +2442,4,train +2180,4,train +223,1,train +3396,2,train +2697,1,train +2738,2,train +181,4,train +2917,4,train +2655,4,train +2259,4,train +40,1,train +174,1,train +2951,2,train +3388,3,train +394,4,train +2689,2,train +3085,2,train +2606,4,train +649,1,train +253,1,train +690,2,train +3467,3,train +473,4,train +2768,2,train +3164,2,train +170,3,train +607,4,train +2902,2,train +3205,3,train +3601,3,train +70,1,train +204,1,train +2981,2,train +3377,2,train +820,4,train +3814,3,train +3156,3,train +679,1,train +720,2,train +3893,3,train +417,1,train +458,2,train +3631,3,train +2932,2,train +1329,2,train +3665,1,train +3448,3,train +3885,4,train +368,1,train +3145,2,train +3186,3,train +3582,3,train +588,4,train +3744,1,train +1146,2,train +750,2,train +1187,3,train +3964,4,train +667,4,train +3399,3,train +3957,1,train +4091,1,train +1138,3,train +3874,3,train +3915,4,train +3612,3,train +3653,4,train +618,4,train +3512,1,train +1351,3,train +3646,1,train +3429,3,train +3866,4,train +1647,1,train +1127,2,train +1564,3,train +865,2,train +1726,1,train +1860,1,train +1464,1,train +1381,3,train +1119,3,train +3896,4,train +4030,4,train +2073,1,train +1677,1,train +1856,3,train +1415,1,train +2031,4,train +1198,3,train +936,3,train +2152,1,train +1890,1,train +1494,1,train +1628,1,train +2110,4,train +1411,3,train +1545,3,train +3926,4,train +2144,2,train +1841,1,train +1445,1,train +1927,4,train +1624,3,train +1665,4,train +2753,2,train +1658,1,train +1878,4,train +1575,3,train +1616,4,train +2012,4,train +2133,1,train +2308,2,train +1912,2,train +1829,4,train +6,1,train +2125,2,train +2304,4,train +2042,4,train +1646,4,train +85,1,train +126,2,train +3037,3,train +2641,3,train +43,4,train +1942,2,train +339,2,train +77,2,train +2854,3,train +3250,3,train +2155,2,train +2592,3,train +2289,2,train +3284,1,train +290,2,train +73,4,train +2805,3,train +3201,3,train +3363,1,train +765,2,train +369,2,train +3497,1,train +503,2,train +3321,4,train +286,4,train +2581,2,train +2622,3,train +3059,4,train +24,4,train +3180,1,train +582,2,train +623,3,train +320,2,train +3097,3,train +3534,4,train +2835,3,train +2969,3,train +2573,3,train +3789,1,train +836,3,train +3527,1,train +533,2,train +137,2,train +574,3,train +970,3,train +54,4,train +2786,3,train +1266,1,train +1049,3,train +653,3,train +2948,1,train +1183,3,train +3478,1,train +350,2,train +787,3,train +3344,1,train +88,2,train +3302,4,train +3960,4,train +2999,3,train +866,3,train +3161,1,train +3994,2,train +563,2,train +604,3,train +1041,4,train +3336,2,train +342,3,train +3515,4,train +3253,4,train +1296,1,train +900,1,train +4073,2,train +3990,4,train +1254,4,train +3549,2,train +951,3,train +555,3,train +3728,4,train +3466,4,train +1333,4,train +3628,2,train +4024,2,train +1030,3,train +3366,2,train +3545,4,train +1326,1,train +930,1,train +1460,1,train +1546,4,train +3841,2,train +1064,1,train +1680,4,train +1284,4,train +3579,2,train +3975,2,train +585,3,train +3758,4,train +1539,1,train +1580,2,train +1497,4,train +1101,4,train +3792,2,train +798,3,train +1235,4,train +2189,2,train +1793,2,train +1490,1,train +1094,1,train +1228,1,train +1314,4,train +1710,4,train +4005,2,train +1610,2,train +1307,1,train +911,1,train +1348,2,train +1744,2,train +1265,4,train +869,4,train +2219,2,train +1823,2,train +2260,3,train +1957,2,train +1561,2,train +4076,3,train +1478,4,train +1774,2,train +1378,2,train +1295,4,train +2507,1,train +2686,3,train +1987,2,train +2424,3,train +2720,1,train +2503,3,train +2107,3,train +2637,3,train +2799,1,train +2716,3,train +2275,1,train +2757,4,train +2454,3,train +2192,3,train +1796,3,train +3012,1,train +193,3,train +2488,1,train +2667,3,train +2271,3,train +2405,3,train +3225,1,train +3400,2,train +2567,1,train +3004,2,train +406,3,train +10,3,train +2305,1,train +2787,4,train +2701,1,train +2484,3,train +2088,3,train +2525,4,train +2222,3,train +89,3,train +2780,1,train +223,3,train +2518,1,train +3396,4,train +2738,4,train +519,1,train +3296,2,train +257,1,train +2993,1,train +3034,2,train +3430,2,train +40,3,train +3168,2,train +2772,2,train +174,3,train +2951,4,train +2689,4,train +732,1,train +3247,2,train +253,3,train +690,4,train +2548,1,train +2985,2,train +3164,4,train +2768,4,train +2902,4,train +549,1,train +287,1,train +3064,2,train +3460,2,train +70,3,train +507,4,train +2761,1,train +204,3,train +2981,4,train +896,1,train +500,1,train +238,1,train +720,4,train +3411,2,train +417,3,train +458,4,train +2932,4,train +975,1,train +1016,2,train +713,1,train +1150,2,train +451,1,train +3665,3,train +3961,1,train +926,1,train +1363,2,train +3744,3,train +664,1,train +750,4,train +1146,4,train +3441,2,train +4040,1,train +1046,2,train +784,2,train +3957,3,train +4091,3,train +1655,2,train +1259,2,train +997,2,train +1434,3,train +3729,1,train +1131,2,train +735,2,train +3512,3,train +3949,4,train +3646,3,train +1210,2,train +814,2,train +1647,3,train +1344,2,train +3942,1,train +865,4,train +1943,1,train +1726,3,train +4021,1,train +1860,3,train +1027,2,train +1464,3,train +3759,1,train +1161,2,train +1202,3,train +2156,1,train +2073,3,train +1677,3,train +1415,3,train +2152,3,train +1711,1,train +1890,3,train +1494,3,train +1931,4,train +1628,3,train +1232,3,train +4009,4,train +2448,1,train +2144,4,train +1841,3,train +1445,3,train +2399,1,train +2440,2,train +1741,1,train +2223,4,train +1961,4,train +1658,3,train +2653,2,train +2391,2,train +2308,4,train +1912,4,train +2866,2,train +2470,2,train +2167,1,train +1771,1,train +1991,4,train +2125,4,train +168,1,train +302,1,train +3079,2,train +126,4,train +2380,1,train +2421,2,train +2159,2,train +1942,4,train +381,1,train +339,4,train +2634,2,train +2238,2,train +77,4,train +2372,2,train +2155,4,train +2289,4,train +198,1,train +332,1,train +373,2,train +2847,2,train +2888,3,train +3284,3,train +290,4,train +452,2,train +3580,1,train +149,1,train +3363,3,train +369,4,train +2664,2,train +3497,3,train +3659,1,train +665,2,train +3793,1,train +799,2,train +3180,3,train +582,4,train +141,2,train +2877,2,train +2918,3,train +320,4,train +2656,3,train +3872,1,train +3476,1,train +878,2,train +4006,1,train +616,2,train +220,2,train +3348,1,train +3527,3,train +137,4,train +4085,1,train +1091,2,train +829,2,train +1266,3,train +3561,1,train +130,1,train +171,2,train +567,2,train +2948,3,train +350,4,train +3344,3,train +3385,4,train +88,4,train +4036,1,train +646,2,train +3378,1,train +3774,1,train +780,2,train +3994,4,train +3161,3,train +3336,4,train +1379,1,train +3894,2,train +859,2,train +900,3,train +1296,3,train +3195,1,train +597,2,train +638,3,train +3415,4,train +3811,4,train +4073,4,train +3549,4,train +1592,1,train +3804,1,train +3845,2,train +4024,4,train +3628,4,train +3366,4,train +1805,1,train +1409,1,train +1543,1,train +1326,3,train +930,3,train +1367,4,train +627,2,train +668,3,train +1064,3,train +3841,4,train +3975,4,train +3579,4,train +1360,1,train +1539,3,train +1580,4,train +3792,4,train +1835,1,train +1876,2,train +1793,4,train +915,1,train +1094,3,train +698,3,train +4005,4,train +2089,2,train +1786,1,train +1390,1,train +1827,2,train +1524,1,train +1128,1,train +1610,4,train +1307,3,train +911,3,train +1348,4,train +1744,4,train +2302,2,train +1906,2,train +1603,1,train +1207,1,train +2040,2,train +1823,4,train +1957,4,train +1561,4,train +2515,2,train +2119,2,train +2253,2,train +2294,3,train +1774,4,train +1378,4,train +2332,2,train +2070,2,train +2507,3,train +2803,1,train +2720,3,train +1887,2,train +2324,3,train +2021,2,train +1625,2,train +22,2,train +2799,3,train +2100,2,train +1838,2,train +2275,3,train +101,2,train +235,2,train +3012,3,train +2313,2,train +2051,2,train +2092,3,train +2488,3,train +314,2,train +3046,1,train +2784,1,train +3400,4,train +2567,3,train +3004,4,train +2264,2,train +2305,3,train +2701,3,train +3259,1,train +306,3,train +3,2,train +2780,3,train +2518,3,train +2122,3,train +3076,1,train +3513,2,train +519,3,train +3296,4,train +257,3,train +2552,1,train +2993,3,train +3034,4,train +3168,4,train +2772,4,train +3430,4,train +3289,1,train +3726,2,train +295,2,train +732,3,train +3027,1,train +74,3,train +2765,1,train +2851,4,train +3247,4,train +2548,3,train +2985,4,train +1028,1,train +766,1,train +3939,2,train +549,3,train +2844,1,train +3240,1,train +3677,2,train +287,3,train +2978,1,train +3064,4,train +3460,4,train +2761,3,train +1241,1,train +845,1,train +979,1,train +803,4,train +3494,2,train +500,3,train +104,3,train +238,3,train +3411,4,train +796,1,train +975,3,train +534,1,train +1016,4,train +3311,2,train +713,3,train +1150,4,train +3445,2,train +3707,2,train +451,3,train +3748,3,train +1009,1,train +1446,2,train +833,4,train +3961,3,train +1363,4,train +3262,2,train +3441,4,train +1659,2,train +4040,3,train +564,1,train +1046,4,train +3778,3,train +784,4,train +522,4,train +1738,2,train +1342,2,train +1476,2,train +777,1,train +1259,4,train +997,4,train +3688,2,train +3729,3,train +1131,4,train +735,4,train +1951,2,train +1689,2,train +1293,2,train +4025,1,train +1427,2,train +1210,4,train +814,4,train +3942,3,train +1943,3,train +1640,2,train +1244,2,train +4021,3,train +1027,4,train +3759,3,train +1161,4,train +1719,2,train +1323,2,train +2156,3,train +4055,1,train +1457,2,train +1061,2,train +2452,1,train +1670,2,train +1274,2,train +1711,3,train +2665,1,train +2269,1,train +2448,3,train +2007,1,train +1790,3,train +1487,2,train +2878,1,train +2616,1,train +2399,3,train +2440,4,train +1700,2,train +1741,3,train +2695,1,train +2299,1,train +2653,4,train +2391,4,train +2512,1,train +2646,1,train +2250,1,train +2687,2,train +2866,4,train +2470,4,train +2167,3,train +1771,3,train +2766,2,train +168,3,train +2900,2,train +2201,1,train +2287,4,train +2421,4,train +2159,4,train +202,1,train +381,3,train +2676,1,train +2280,1,train +2717,2,train +2455,2,train +2634,4,train +2238,4,train +2372,4,train +281,1,train +415,1,train +198,3,train +2493,1,train +2930,2,train +3326,2,train +373,4,train +2668,2,train +2847,4,train +232,1,train +669,2,train +3405,2,train +452,4,train +3580,3,train +149,3,train +2485,2,train +2664,4,train +882,2,train +3659,3,train +183,1,train +269,4,train +665,4,train +799,4,train +3793,3,train +2698,2,train +141,4,train +2877,4,train +4089,1,train +3693,1,train +658,1,train +699,2,train +1095,2,train +3872,3,train +396,1,train +437,2,train +878,4,train +3173,2,train +616,4,train +220,4,train +3348,3,train +3476,3,train +3906,1,train +912,2,train +4085,3,train +213,1,train +650,2,train +829,4,train +3124,2,train +3561,3,train +567,4,train +171,4,train +3723,1,train +729,2,train +3461,1,train +863,2,train +467,2,train +3244,3,train +646,4,train +3378,3,train +3936,1,train +942,2,train +1379,3,train +4070,1,train +3894,4,train +3195,3,train +3632,4,train +597,4,train +1592,3,train +893,2,train +497,2,train +3845,4,train +1626,1,train +1805,3,train +1409,3,train +3704,1,train +1543,3,train +3838,1,train +844,2,train +3662,4,train +627,4,train +1839,1,train +1443,1,train +1226,3,train +3917,1,train +923,2,train +1360,3,train +1835,3,train +1876,4,train +915,3,train +2131,1,train +1869,1,train +1473,1,train +2089,4,train +1390,3,train +1827,4,train +1524,3,train +1128,3,train +2344,1,train +1820,1,train +1424,1,train +1906,4,train +2302,4,train +1603,3,train +1207,3,train +2040,4,train +2202,2,train +1899,1,train +1503,1,train +1637,1,train +2119,4,train +2253,4,train +2112,1,train +2153,2,train +2590,3,train +1850,1,train +2332,4,train +2070,4,train +1412,4,train +2803,3,train +2104,2,train +1887,4,train +2021,4,train +1625,4,train +64,1,train +22,4,train +1921,2,train +2100,4,train +1838,4,train +101,4,train +235,4,train +2134,2,train +2313,4,train +2051,4,train +3129,1,train +2867,1,train +314,4,train +3046,3,train +2347,2,train +2784,3,train +3342,1,train +348,2,train +3080,1,train +482,2,train +86,2,train +3259,3,train +3,4,train +3555,1,train +2897,1,train +299,2,train +3076,3,train +3513,4,train +2552,3,train +3768,1,train +3372,1,train +3506,1,train +512,2,train +3726,4,train +2848,1,train +3289,3,train +295,4,train +3027,3,train +3068,4,train +2765,3,train +849,1,train +3585,1,train +1028,3,train +632,3,train +2927,1,train +766,3,train +3061,1,train +3939,4,train +67,2,train +2844,3,train +3677,4,train +2978,3,train +3839,2,train +1241,3,train +845,3,train +3140,1,train +3577,2,train +979,3,train +3274,1,train +3494,4,train +3098,4,train +2836,4,train +1275,1,train +3353,1,train +3790,2,train +796,3,train +534,3,train +3311,4,train +3707,4,train +3445,4,train +1488,1,train +4003,2,train +3566,1,train +3607,2,train +1009,3,train +1446,4,train +4044,3,train +3128,4,train +3262,4,train +1567,1,train +1305,1,train +909,1,train +1043,1,train +3820,2,train +1659,4,train +3954,2,train +430,3,train +3558,2,train +564,3,train +1122,1,train +1559,2,train +1256,1,train +1342,4,train +1738,4,train +4033,2,train +1476,4,train +3771,2,train +4074,3,train +777,3,train +1638,2,train +1772,2,train +1073,1,train +1689,4,train +1293,4,train +4025,3,train +1427,4,train +1723,2,train +890,1,train +1327,2,train +1110,4,train +1244,4,train +2198,2,train +1802,2,train +1936,2,train +1103,1,train +1719,4,train +1323,4,train +4055,3,train +1457,4,train +1061,4,train +2015,2,train +2056,3,train +2452,3,train +1316,1,train +1357,2,train +1491,2,train +1274,4,train +2665,3,train +2269,3,train +1966,2,train +1570,2,train +2007,3,train +1487,4,train +2565,1,train +2699,1,train +1387,2,train +2778,1,train +2912,1,train +2516,1,train +2695,3,train +2299,3,train +1775,3,train +2595,1,train +2512,3,train +2250,3,train +2687,4,train +2546,1,train +2983,2,train +2680,1,train +2284,1,train +2766,4,train +2900,4,train +2201,3,train +285,1,train +68,3,train +2363,1,train +2759,1,train +202,3,train +2893,1,train +3196,2,train +2280,3,train +2717,4,train +2455,4,train +498,1,train +281,3,train +2576,1,train +3013,2,train +415,3,train +2710,1,train +3409,2,train +2493,3,train +2534,4,train +2930,4,train +2668,4,train +577,1,train +711,1,train +3488,2,train +3226,2,train +232,3,train +669,4,train +2485,4,train +662,1,train +3043,2,train +3480,3,train +882,4,train +2740,1,train +2781,2,train +183,3,train +2698,4,train +741,1,train +479,1,train +3256,2,train +3693,3,train +1095,4,train +699,4,train +4089,3,train +396,3,train +437,4,train +3173,4,train +558,1,train +995,2,train +3772,3,train +692,1,train +296,1,train +3510,3,train +3469,2,train +912,4,train +34,1,train +2811,2,train +3906,3,train +213,3,train +650,4,train +1208,2,train +3940,1,train +509,1,train +946,2,train +3682,2,train +643,1,train +729,4,train +3420,2,train +3461,3,train +863,4,train +467,4,train +3723,3,train +1421,2,train +722,1,train +326,1,train +1159,2,train +3936,3,train +942,4,train +3237,2,train +4070,3,train +284,4,train +3970,1,train +539,1,train +714,2,train +3450,2,train +3928,4,train +893,4,train +497,4,train +1451,2,train +1189,2,train +793,2,train +1626,3,train +3921,1,train +3704,3,train +3838,3,train +844,4,train +1922,1,train +4000,1,train +1839,3,train +1006,2,train +1443,3,train +3738,1,train +3917,3,train +3958,4,train +923,4,train +2135,1,train +1522,3,train +3817,1,train +2214,1,train +2131,3,train +1690,1,train +1432,2,train +1473,3,train +1869,3,train +1910,4,train +1211,3,train +3988,4,train +1903,1,train +1820,3,train +1424,3,train +2640,1,train +2378,1,train +2419,2,train +2116,1,train +2202,4,train +1899,3,train +1503,3,train +1940,4,train +1637,3,train +2195,1,train +2153,4,train +1850,3,train +2711,2,train +2408,1,train +2449,2,train +2845,2,train +2146,1,train +1884,1,train +2104,4,train +147,1,train +3058,2,train +2359,1,train +2400,2,train +2097,1,train +2183,4,train +1921,4,train +98,1,train +2176,1,train +2613,2,train +2134,4,train +311,1,train +3088,2,train +3129,3,train +2826,2,train +2430,2,train +2867,3,train +2347,4,train +431,2,train +128,1,train +169,2,train +3342,3,train +348,4,train +2643,2,train +2247,2,train +3080,3,train +86,4,train +644,2,train +3376,1,train +778,2,train +3555,3,train +2856,2,train +2460,2,train +2897,3,train +299,4,train +2635,3,train +3851,1,train +857,2,train +158,1,train +3372,3,train +3506,3,train +2848,3,train +4064,1,train +1070,2,train +3802,1,train +412,2,train +849,3,train +3585,3,train +3626,4,train +2927,3,train +3364,4,train +3061,3,train +67,4,train +3881,1,train +3619,1,train +625,2,train +3357,1,train +3753,1,train +3839,4,train +363,2,train +3140,3,train +3577,4,train +3274,3,train +3832,1,train +3436,1,train +1275,3,train +442,2,train +3174,1,train +3570,1,train +576,2,train +180,2,train +617,3,train +3353,3,train +3790,4,train +1571,1,train +4086,2,train +1488,3,train +3783,1,train +3824,2,train +393,2,train +3607,4,train +4003,4,train +1567,3,train +1126,1,train +3862,1,train +3903,2,train +1305,3,train +909,3,train +3641,2,train +4037,2,train +606,2,train +1043,3,train +3820,4,train +3558,4,train +1735,1,train +1122,3,train +1559,4,train +3813,1,train +1256,3,train +3854,2,train +4033,4,train +3771,4,train +1814,1,train +1418,1,train +1156,1,train +1638,4,train +1772,4,train +894,1,train +1376,4,train +4067,2,train +1073,3,train +677,3,train +3805,2,train +2068,2,train +1765,1,train +1369,1,train +1806,2,train +1107,1,train +1723,4,train +890,3,train +1327,4,train +4018,2,train +1885,2,train +2019,2,train +1186,1,train +1802,4,train +1406,4,train +1103,3,train +2494,2,train +2098,2,train +1399,1,train +1836,2,train +1533,1,train +2015,4,train +1316,3,train +1357,4,train +1491,4,train +2311,2,train +2049,2,train +1653,2,train +1787,2,train +1570,4,train +1174,4,train +2565,3,train +2262,2,train +1866,2,train +2699,3,train +1604,2,train +1387,4,train +1,2,train +2778,3,train +2912,3,train +2079,2,train +2516,3,train +2213,2,train +80,2,train +2812,1,train +3208,1,train +2595,3,train +2292,2,train +2770,4,train +2030,2,train +2071,3,train +2891,1,train +293,2,train +3025,1,train +3421,1,train +2546,3,train +2983,4,train +2680,3,train +2284,3,train +3238,1,train +3279,2,train +244,2,train +285,3,train +2580,1,train +2976,1,train +2759,3,train +2363,3,train +2800,4,train +3196,4,train +3055,1,train +3492,2,train +61,2,train +498,3,train +3189,1,train +3409,4,train +2576,3,train +3013,4,train +2710,3,train +3705,2,train +577,3,train +2872,1,train +711,3,train +3006,1,train +3309,2,train +3488,4,train +12,2,train +53,3,train +2744,1,train +3226,4,train +3522,2,train +2823,1,train +3260,2,train +662,3,train +2957,1,train +3043,4,train +2740,3,train +2781,4,train +824,1,train +958,1,train +3339,2,train +741,3,train +3473,2,train +479,3,train +3256,4,train +775,1,train +3948,2,train +3686,2,train +558,3,train +995,4,train +3290,2,train +692,3,train +296,3,train +3028,2,train +3469,4,train +34,3,train +2811,4,train +1250,1,train +854,1,train +988,1,train +592,1,train +3765,2,train +1208,4,train +330,1,train +812,4,train +3503,2,train +509,3,train +946,4,train +3241,2,train +3940,3,train +1201,1,train +805,1,train +1421,4,train +3716,2,train +3320,2,train +3757,3,train +722,3,train +326,3,train +1159,4,train +3454,2,train +3237,4,train +1321,2,train +1018,1,train +622,1,train +1059,2,train +3970,3,train +539,3,train +3667,2,train +714,4,train +1534,2,train +1231,1,train +1668,2,train +4004,1,train +969,1,train +1010,2,train +1451,4,train +3746,2,train +1189,4,train +793,4,train +3787,3,train +3921,3,train +531,4,train +1747,2,train +1922,3,train +1089,2,train +1223,2,train +4000,3,train +1006,4,train +3738,3,train +2135,3,train +1302,2,train +1436,2,train +3817,3,train +2214,3,train +1253,2,train +1690,3,train +2248,1,train +1986,1,train +1466,2,train +1507,3,train +1903,3,train +2378,3,train +2419,4,train +2116,3,train +2278,1,train +2412,1,train +2195,3,train +2236,4,train +2491,1,train +2229,1,train +2711,4,train +2408,3,train +1967,1,train +2449,4,train +2845,4,train +2146,3,train +1884,3,train +147,3,train +2442,1,train +2046,1,train +2879,2,train +2180,1,train +2266,4,train +2400,4,train +181,1,train +2958,2,train +2655,1,train +2259,1,train +3092,2,train +98,3,train +2176,3,train +2613,4,train +260,1,train +394,1,train +218,4,train +2909,2,train +2826,4,train +2430,4,train +473,1,train +607,1,train +3384,2,train +431,4,train +2726,2,train +3163,3,train +128,3,train +169,4,train +2860,2,train +2643,4,train +2247,4,train +861,2,train +644,4,train +248,4,train +2543,2,train +778,4,train +3073,2,train +3376,3,train +2460,4,train +3672,1,train +1074,2,train +3851,3,train +857,4,train +2756,2,train +158,3,train +2931,3,train +3751,1,train +3885,1,train +891,2,train +3802,3,train +412,4,train +3103,2,train +3964,1,train +3702,1,train +667,1,train +708,2,train +3922,4,train +1145,3,train +842,2,train +3619,3,train +3223,3,train +3440,1,train +625,4,train +3357,3,train +3881,3,train +363,4,train +3915,1,train +921,2,train +3653,1,train +1055,2,train +3832,3,train +3436,3,train +442,4,train +3174,3,train +3570,3,train +576,4,train +180,4,train +1571,3,train +738,2,train +1175,3,train +3866,1,train +872,2,train +4086,4,train +3824,4,train +393,4,train +1085,2,train +689,2,train +1126,3,train +3862,3,train +823,2,train +4037,4,train +3641,4,train +3903,4,train +606,4,train +1684,1,train +1422,1,train +1205,3,train +3500,1,train +3896,1,train +902,2,train +3854,4,train +2031,1,train +1814,3,train +1418,3,train +1156,3,train +894,3,train +4067,4,train +3805,4,train +2110,1,train +1714,1,train +1452,1,train +2068,4,train +3926,1,train +1369,3,train +1806,4,train +1107,3,train +4018,4,train +1927,1,train +1665,1,train +2102,2,train +1885,4,train +2019,4,train +1186,3,train +2181,2,train +1878,1,train +2315,2,train +1616,1,train +1220,1,train +2098,4,train +1399,3,train +1836,4,train +2528,2,train +1829,1,train +1870,2,train +2311,4,train +2049,4,train +1653,4,train +1787,4,train +1391,4,train +2607,2,train +2345,2,train +1646,1,train +2083,2,train +2262,4,train +1866,4,train +1604,4,train +43,1,train +2820,2,train +1,4,train +2296,2,train +2079,4,train +80,4,train +2375,2,train +2812,3,train +3208,3,train +2509,2,train +2113,2,train +2030,4,train +3108,1,train +73,1,train +114,2,train +2891,3,train +293,4,train +3025,3,train +2629,3,train +2367,3,train +3187,1,train +3321,1,train +327,2,train +3059,1,train +65,2,train +3238,3,train +3279,4,train +2539,2,train +2580,3,train +2976,3,train +3534,1,train +3138,1,train +540,2,train +144,2,train +2876,1,train +3055,3,train +2659,3,train +3492,4,train +61,4,train +2397,3,train +357,2,train +491,2,train +95,2,train +2872,3,train +3309,4,train +3705,4,train +3006,3,train +3047,4,train +12,4,train +2744,3,train +3605,2,train +3302,1,train +308,2,train +349,3,train +3522,4,train +2823,3,train +3260,4,train +2957,3,train +1041,1,train +824,3,train +3515,1,train +521,2,train +958,3,train +3253,1,train +3339,4,train +3473,4,train +3077,4,train +2815,4,train +1120,1,train +1254,1,train +4031,2,train +3635,2,train +3769,2,train +2936,1,train +338,2,train +775,3,train +3686,4,train +3290,4,train +3028,4,train +1333,1,train +1250,3,train +854,3,train +3545,1,train +3586,2,train +551,2,train +592,3,train +988,3,train +3765,4,train +3982,2,train +330,3,train +3503,4,train +3241,4,train +1546,1,train +1284,1,train +1108,4,train +805,3,train +409,3,train +3716,4,train +3320,4,train +3454,4,train +1497,1,train +1101,1,train +1235,1,train +839,1,train +1321,4,train +1018,3,train +622,3,train +1059,4,train +3750,2,train +1617,2,train +1314,1,train +1534,4,train +656,1,train +1668,4,train +3963,2,train +4004,3,train +1010,4,train +3746,4,train +1830,2,train +1568,2,train +1265,1,train +869,1,train +1747,4,train +4042,2,train +1089,4,train +1223,4,train +1915,2,train +1519,2,train +1302,4,train +1436,4,train +1598,2,train +1295,1,train +1732,2,train +1253,4,train +2248,3,train +1945,2,train +1549,2,train +1986,3,train +1466,4,train +2065,3,train +1762,2,train +2757,1,train +2278,3,train +2412,3,train +1579,2,train +2574,1,train +2312,1,train +2491,3,train +1792,2,train +2229,3,train +1967,3,train +2787,1,train +2525,1,train +2263,1,train +2442,3,train +2046,3,train +2879,4,train +2180,3,train +2738,1,train +2342,1,train +181,3,train +2958,4,train +3092,4,train +2259,3,train +1863,3,train +260,3,train +2951,1,train +2992,2,train +394,3,train +2689,1,train +3388,2,train +2909,4,train +2513,4,train +690,1,train +3467,2,train +473,3,train +2768,1,train +3205,2,train +3601,2,train +2726,4,train +2860,4,train +507,1,train +245,1,train +2981,1,train +861,4,train +465,4,train +2760,2,train +3156,2,train +2543,4,train +720,1,train +458,1,train +3631,2,train +3672,3,train +1074,4,train +2756,4,train +3968,1,train +3751,3,train +3448,2,train +3052,2,train +3489,3,train +891,4,train +3186,2,train +2790,2,train +3885,3,train +233,4,train +750,1,train +1187,2,train +3964,3,train +3702,3,train +708,4,train +3003,2,train +3399,2,train +842,4,train +3440,3,train +1004,2,train +3736,1,train +1138,2,train +742,2,train +3915,3,train +921,4,train +3653,3,train +263,4,train +3949,1,train +1351,2,train +955,2,train +738,4,train +3429,2,train +3866,3,train +872,4,train +4028,1,train +1034,2,train +1471,3,train +772,2,train +510,2,train +689,4,train +1684,3,train +1381,2,train +1422,3,train +3717,1,train +1119,2,train +723,2,train +3500,3,train +3896,3,train +902,4,train +3937,4,train +1718,1,train +1501,3,train +3796,1,train +1198,2,train +802,2,train +936,2,train +1931,1,train +2110,3,train +1714,3,train +4009,1,train +1411,2,train +1452,3,train +1190,3,train +3926,3,train +3967,4,train +2144,1,train +1748,1,train +1927,3,train +2102,4,train +1665,3,train +1269,3,train +2223,1,train +1961,1,train +2398,2,train +2181,4,train +1878,3,train +1919,4,train +2315,4,train +1616,3,train +1220,3,train +2308,1,train +1912,1,train +2528,4,train +1829,3,train +1870,4,train +1991,1,train +2428,2,train +2125,1,train +2166,2,train +2607,4,train +2345,4,train +1646,3,train +2083,4,train +126,1,train +3037,2,train +2641,2,train +1942,1,train +2379,2,train +2296,4,train +339,1,train +77,1,train +2854,2,train +2458,2,train +2895,3,train +2155,1,train +2592,2,train +2375,4,train +2113,4,train +1717,4,train +3108,3,train +114,4,train +2805,2,train +2147,2,train +369,1,train +3187,3,train +148,2,train +3321,3,train +327,4,train +2622,2,train +3059,3,train +65,4,train +623,2,train +361,2,train +3138,3,train +3534,3,train +540,4,train +144,4,train +2835,2,train +2876,3,train +2573,2,train +836,2,train +137,1,train +178,2,train +574,2,train +357,4,train +95,4,train +653,2,train +3385,1,train +787,2,train +391,2,train +3605,4,train +88,1,train +129,2,train +3302,3,train +3343,4,train +308,4,train +2644,3,train +866,2,train +3202,1,train +604,2,train +1041,3,train +3336,1,train +342,2,train +3253,3,train +1337,1,train +4073,1,train +1120,3,train +3415,1,train +1254,3,train +3549,1,train +4031,4,train +421,2,train +555,2,train +3635,4,train +2936,3,train +3373,4,train +338,4,train +3769,4,train +1333,3,train +937,3,train +3628,1,train +4065,2,train +3366,1,train +3982,4,train +3586,4,train +1367,1,train +1546,3,train +3841,1,train +3882,2,train +847,2,train +1284,3,train +1325,4,train +3579,1,train +585,2,train +626,3,train +3403,4,train +1580,1,train +1184,1,train +4095,2,train +1101,3,train +3792,1,train +1235,3,train +839,3,train +3750,4,train +1793,1,train +1834,2,train +1135,1,train +1617,4,train +3912,2,train +1314,3,train +1355,4,train +656,3,train +1610,1,train +1214,1,train +2047,2,train +1744,1,train +1348,1,train +1830,4,train +1568,4,train +1265,3,train +869,3,train +4042,4,train +1823,1,train +1864,2,train +2260,2,train +1561,1,train +1602,2,train +4076,2,train +1519,4,train +1123,4,train +1378,1,train +1598,4,train +1295,3,train +1732,4,train +2331,3,train +1632,2,train +1549,4,train +2503,2,train +2107,2,train +1845,2,train +1762,4,train +2757,3,train +1796,2,train +1579,4,train +193,2,train +2574,3,train +2271,2,train +1875,2,train +2312,3,train +1792,4,train +2870,1,train +3004,1,train +10,2,train +2787,3,train +2088,2,train +2525,3,train +2263,3,train +89,2,train +3258,2,train +223,2,train +2738,3,train +2342,3,train +3296,1,train +3034,1,train +3471,2,train +40,2,train +2772,1,train +3168,1,train +3388,4,train +2992,4,train +2689,3,train +3247,1,train +253,2,train +690,3,train +2985,1,train +3467,4,train +32,3,train +2768,3,train +2809,4,train +3205,4,train +3064,1,train +70,2,train +507,3,train +3239,2,train +245,3,train +3156,4,train +2760,4,train +803,1,train +541,1,train +720,3,train +761,4,train +2619,1,train +3056,2,train +458,3,train +2839,4,train +1016,1,train +620,1,train +1150,1,train +3531,2,train +3968,3,train +3665,2,train +3269,2,train +3448,4,train +3052,4,train +3186,4,train +2790,4,train +833,1,train +3744,2,train +750,3,train +791,4,train +1187,4,train +3003,4,train +1046,1,train +784,1,train +3957,2,train +522,1,train +3736,3,train +1004,4,train +3299,2,train +1138,4,train +742,4,train +1259,1,train +1300,2,train +997,1,train +1038,2,train +1434,2,train +735,1,train +821,4,train +3512,2,train +3949,3,train +955,4,train +1647,2,train +814,1,train +1251,2,train +4028,3,train +1034,4,train +772,4,train +3504,3,train +510,4,train +1726,2,train +1027,1,train +1068,2,train +1464,2,train +1202,2,train +589,4,train +3717,3,train +1119,4,train +723,4,train +1677,2,train +1718,3,train +4013,1,train +1415,2,train +3796,3,train +1198,4,train +802,4,train +936,4,train +1494,2,train +1098,2,train +1931,3,train +1232,2,train +4009,3,train +2227,1,train +2144,3,train +1748,3,train +2185,4,train +1445,2,train +1486,3,train +2306,1,train +2440,1,train +2223,3,train +1961,3,train +2398,4,train +2653,1,train +2391,1,train +2215,4,train +1912,3,train +1516,3,train +2470,1,train +1991,3,train +2428,4,train +2125,3,train +2166,4,train +2287,1,train +126,3,train +2421,1,train +2025,1,train +2159,1,train +2641,4,train +1942,3,train +2379,4,train +2937,2,train +2634,1,train +2238,1,train +77,3,train +2372,1,train +2458,4,train +2854,4,train +2155,3,train +2592,4,train +1934,4,train +373,1,train +197,4,train +2055,1,train +2888,2,train +2147,4,train +452,1,train +3363,2,train +2967,2,train +2664,1,train +2705,2,train +148,4,train +2622,4,train +665,1,train +269,1,train +444,2,train +3180,2,train +141,1,train +227,4,train +623,4,train +2522,2,train +361,4,train +2656,2,train +2918,2,train +2573,4,train +3651,1,train +616,1,train +220,1,train +836,4,train +137,3,train +178,4,train +574,4,train +3730,1,train +736,2,train +171,1,train +653,4,train +2948,2,train +3385,3,train +391,4,train +129,4,train +3681,1,train +646,1,train +687,2,train +866,4,train +3161,2,train +3202,3,train +604,4,train +3336,3,train +342,4,train +3894,1,train +900,2,train +504,2,train +1337,3,train +3632,1,train +638,2,train +3415,3,train +421,4,train +25,4,train +3549,3,train +555,4,train +717,2,train +3845,1,train +3931,4,train +3628,3,train +4065,4,train +3366,3,train +930,2,train +1367,3,train +3662,1,train +668,2,train +3882,4,train +3841,3,train +3579,3,train +585,4,train +1401,1,train +1580,3,train +1184,3,train +485,2,train +3699,4,train +4095,4,train +1876,1,train +1793,3,train +1834,4,train +698,2,train +1135,3,train +3912,4,train +2089,1,train +1827,1,train +1610,3,train +1214,3,train +2047,4,train +911,2,train +1348,3,train +1906,1,train +2040,1,train +2260,4,train +1864,4,train +1561,3,train +1602,4,train +4076,4,train +2119,1,train +2294,2,train +1378,3,train +982,3,train +2070,1,train +2507,2,train +1412,1,train +1632,4,train +1370,4,train +1887,1,train +1928,2,train +2324,2,train +1625,1,train +2107,4,train +1845,4,train +22,1,train +2799,2,train +2100,1,train +2141,2,train +1838,1,train +2275,2,train +1796,4,train +101,1,train +2488,2,train +2092,2,train +1875,4,train +3087,1,train +93,2,train +2870,3,train +2567,2,train +2171,2,train +2608,3,train +10,4,train +2305,2,train +1909,2,train +2346,3,train +3004,3,train +2088,4,train +172,2,train +306,2,train +89,4,train +3258,4,train +2518,2,train +2122,2,train +3513,1,train +3117,1,train +519,2,train +3296,3,train +257,2,train +3034,3,train +3471,4,train +40,4,train +2772,3,train +2376,3,train +3726,1,train +3068,1,train +74,2,train +2851,3,train +3247,3,train +2985,3,train +549,2,train +2885,1,train +3367,4,train +287,2,train +3064,3,train +2623,1,train +3105,4,train +70,4,train +3239,4,train +2406,3,train +3797,2,train +803,3,train +3098,1,train +3494,1,train +104,2,train +541,3,train +2836,1,train +238,2,train +2619,3,train +3056,4,train +3614,2,train +1016,3,train +620,3,train +2915,1,train +3311,1,train +3748,2,train +358,3,train +3531,4,train +3665,4,train +3269,4,train +1446,1,train +833,3,train +3128,1,train +3961,2,train +3262,1,train +3303,2,train +3744,4,train +4040,2,train +1046,3,train +605,1,train +1087,4,train +3778,2,train +784,3,train +3516,2,train +522,3,train +3299,4,train +1342,1,train +1476,1,train +1517,2,train +1259,3,train +1300,4,train +997,3,train +1038,4,train +1434,4,train +3729,2,train +735,3,train +3512,4,train +1596,2,train +1293,1,train +897,1,train +635,1,train +1117,4,train +1647,4,train +814,3,train +1251,4,train +3942,2,train +1809,2,train +1943,2,train +1110,1,train +1547,2,train +1244,1,train +1726,4,train +4021,2,train +4062,3,train +1027,3,train +1068,4,train +1464,4,train +3759,2,train +1202,4,train +806,4,train +3800,3,train +1323,1,train +1364,2,train +1061,1,train +4013,3,train +1415,4,train +1274,1,train +1315,2,train +1711,2,train +4092,3,train +1494,4,train +1098,4,train +1232,4,train +1790,2,train +2227,3,train +1445,4,train +2523,1,train +2306,3,train +2440,3,train +2044,3,train +1741,2,train +1782,3,train +2653,3,train +2391,3,train +2553,1,train +2687,1,train +2291,1,train +2470,3,train +1771,2,train +2766,1,train +2900,1,train +2287,3,train +2421,3,train +2025,3,train +2159,3,train +2583,1,train +3020,2,train +26,3,train +2321,1,train +2717,1,train +2937,4,train +2455,1,train +2541,4,train +2238,3,train +1842,3,train +3233,2,train +2930,1,train +2534,1,train +373,3,train +2668,1,train +2888,4,train +2055,3,train +669,1,train +452,3,train +2351,1,train +2485,1,train +2967,4,train +2705,4,train +882,1,train +3659,2,train +665,3,train +269,3,train +3438,3,train +444,4,train +2698,1,train +2739,2,train +141,3,train +2918,4,train +2522,4,train +3180,4,train +2656,4,train +699,1,train +303,1,train +3476,2,train +437,1,train +41,1,train +3651,3,train +220,3,train +3348,2,train +912,1,train +953,2,train +3730,3,train +650,1,train +736,4,train +3031,2,train +2769,2,train +171,3,train +2948,4,train +729,1,train +467,1,train +3244,2,train +3681,3,train +687,4,train +3378,2,train +3977,1,train +942,1,train +983,2,train +1379,2,train +284,1,train +3498,3,train +3894,3,train +900,4,train +504,4,train +3195,2,train +3236,3,train +638,4,train +242,4,train +3632,3,train +3928,1,train +497,1,train +934,2,train +717,4,train +3845,3,train +4007,1,train +1409,2,train +1013,2,train +3745,1,train +751,2,train +930,4,train +489,2,train +3662,3,train +668,4,train +1226,2,train +3958,1,train +1360,2,train +1401,3,train +3696,1,train +702,2,train +485,4,train +1697,1,train +1876,3,train +781,2,train +915,2,train +698,4,train +1910,1,train +2089,3,train +3988,1,train +1390,2,train +1827,3,train +1128,2,train +3946,4,train +911,4,train +1989,1,train +1727,1,train +1906,3,train +1207,2,train +1248,3,train +2202,1,train +1940,1,train +2119,3,train +1678,1,train +2294,4,train +2153,1,train +1757,1,train +2590,2,train +2507,4,train +1412,3,train +2803,2,train +2104,1,train +1708,1,train +1887,3,train +1928,4,train +2324,4,train +1625,3,train +1666,4,train +2486,2,train +1921,1,train +2141,4,train +2275,4,train +101,3,train +2437,2,train +2874,3,train +2134,1,train +2175,2,train +2092,4,train +1696,4,train +3087,3,train +93,4,train +2388,2,train +2784,2,train +2567,4,train +2171,4,train +2305,4,train +1909,4,train +348,1,train +86,1,train +172,4,train +2904,3,train +306,4,train +2122,4,train +3513,3,train +3117,3,train +519,4,train +257,4,train +2552,2,train +419,2,train +3151,1,train +3068,3,train +74,4,train +3626,1,train +632,2,train +3364,1,train +766,2,train +370,2,train +67,1,train +2844,2,train +2885,3,train +287,4,train +2623,3,train +3839,1,train +845,2,train +449,2,train +3577,1,train +187,2,train +3797,4,train +3098,3,train +2702,3,train +104,4,train +2836,3,train +3790,1,train +3831,2,train +796,2,train +3132,1,train +3614,4,train +534,2,train +138,2,train +2915,3,train +3311,3,train +3352,4,train +3748,4,train +916,3,train +3211,1,train +3607,1,train +4044,2,train +3961,4,train +3128,3,train +3262,3,train +3303,4,train +3820,1,train +3861,2,train +4040,4,train +430,2,train +3558,1,train +564,2,train +605,3,train +3778,4,train +3516,4,train +1425,1,train +1559,1,train +1342,3,train +4074,2,train +1517,4,train +3812,2,train +3729,4,train +1638,1,train +1772,1,train +1376,1,train +1114,1,train +1596,4,train +1293,3,train +897,3,train +4025,2,train +635,3,train +1193,1,train +1327,1,train +1809,4,train +1943,4,train +1110,3,train +1547,4,train +1244,3,train +1285,4,train +4021,4,train +3759,4,train +1802,1,train +1406,1,train +1843,2,train +1323,3,train +1364,4,train +4055,2,train +1061,3,train +1102,4,train +2452,2,train +2056,2,train +1357,1,train +961,1,train +1491,1,train +1711,4,train +1315,4,train +2269,2,train +1873,2,train +1570,1,train +1174,1,train +2007,2,train +1790,4,train +2523,3,train +1387,1,train +1824,2,train +1741,4,train +2299,2,train +2340,3,train +1641,2,train +1775,2,train +2770,1,train +2553,3,train +2250,2,train +2291,3,train +2687,3,train +1771,4,train +2983,1,train +2766,3,train +2370,3,train +68,2,train +2800,1,train +3196,1,train +202,2,train +2583,3,train +3020,4,train +2280,2,train +2321,3,train +2717,3,train +2455,3,train +2059,3,train +281,2,train +3013,1,train +2617,1,train +3233,4,train +2534,3,train +2668,3,train +3488,1,train +3226,1,train +232,2,train +669,3,train +2568,1,train +2351,3,train +2788,4,train +2485,3,train +569,1,train +352,3,train +3043,1,train +3480,2,train +90,3,train +2781,1,train +2698,3,train +2739,4,train +3559,2,train +3693,2,train +3256,1,train +3297,2,train +699,3,train +303,3,train +3476,4,train +437,3,train +41,3,train +2818,4,train +995,1,train +599,1,train +3772,2,train +3906,2,train +3510,2,train +953,4,train +2811,1,train +650,3,train +3031,4,train +2769,4,train +1208,1,train +812,1,train +946,1,train +550,1,train +3327,2,train +3723,2,train +729,3,train +770,4,train +3065,2,train +3461,2,train +467,3,train +508,4,train +3244,4,train +3936,2,train +3977,3,train +1379,4,train +983,4,train +3278,2,train +284,3,train +3195,4,train +1279,2,train +1017,2,train +3794,3,train +714,1,train +318,1,train +3095,2,train +3928,3,train +497,3,train +934,4,train +1626,2,train +793,1,train +4007,3,train +1409,4,train +531,1,train +1013,4,train +3308,2,train +3704,2,train +751,4,train +3745,3,train +489,4,train +1006,1,train +1047,2,train +1443,2,train +1226,4,train +3958,3,train +568,4,train +3696,3,train +702,4,train +1522,2,train +1697,3,train +3992,1,train +781,4,train +915,4,train +4071,1,train +1473,2,train +1077,2,train +1910,3,train +1211,2,train +3988,3,train +1989,3,train +1727,3,train +4022,1,train +1424,2,train +1465,3,train +1207,4,train +2285,1,train +2419,1,train +2202,3,train +1503,2,train +1940,3,train +1678,3,train +2236,1,train +1974,1,train +2153,3,train +1757,3,train +2590,4,train +1495,3,train +2711,1,train +2449,1,train +2053,1,train +2803,4,train +2104,3,train +1708,3,train +2266,1,train +2703,2,train +2400,1,train +2004,1,train +2486,4,train +2224,4,train +1921,3,train +5,1,train +2782,2,train +2613,1,train +2437,4,train +2134,3,train +2175,4,train +218,1,train +3129,2,train +2733,2,train +2430,1,train +2034,1,train +2471,2,train +2867,2,train +2254,4,train +2388,4,train +431,1,train +35,1,train +169,1,train +3342,2,train +3080,2,train +2247,1,train +2684,2,train +86,3,train +644,1,train +248,1,train +2763,2,train +3200,3,train +2460,1,train +2501,2,train +2897,2,train +2635,2,train +2552,4,train +636,2,train +3372,2,train +419,4,train +3151,3,train +2848,2,train +3709,1,train +412,1,train +3626,3,train +16,1,train +453,2,train +849,2,train +236,4,train +632,4,train +2927,2,train +370,4,train +3230,3,train +3364,3,train +3922,1,train +666,2,train +3839,3,train +363,1,train +449,4,train +845,4,train +3140,2,train +3618,4,train +187,4,train +2919,3,train +3577,3,train +442,1,train +180,1,train +617,2,train +3831,4,train +4,4,train +3132,3,train +534,4,train +138,4,train +4086,1,train +3824,1,train +3428,1,train +393,1,train +434,2,train +3211,3,train +3607,3,train +3648,4,train +4044,4,train +1212,3,train +3507,1,train +3903,1,train +909,2,train +3641,1,train +4037,1,train +251,2,train +3861,4,train +430,4,train +3558,3,train +1642,1,train +1425,3,train +1122,2,train +1559,3,train +3458,1,train +3854,1,train +3895,2,train +901,3,train +4074,4,train +3812,4,train +1638,3,train +1376,3,train +4067,1,train +677,2,train +1114,3,train +3805,1,train +4025,4,train +2068,1,train +1806,1,train +1193,3,train +890,2,train +1327,3,train +1885,1,train +1489,1,train +2019,1,train +1406,3,train +1843,4,train +3876,2,train +4055,4,train +2098,1,train +2139,2,train +1836,1,train +2056,4,train +1178,1,train +3955,2,train +1357,3,train +961,3,train +2352,2,train +2049,1,train +1653,1,train +2269,4,train +1391,1,train +1873,4,train +1787,1,train +1570,3,train +1174,3,train +2007,4,train +2565,2,train +2169,2,train +1866,1,train +1470,1,train +1907,2,train +1604,1,train +1387,3,train +1824,4,train +1,1,train +2778,2,train +2516,2,train +2299,4,train +1858,2,train +1641,4,train +1775,4,train +80,1,train +2595,2,train +2770,3,train +2071,2,train +1458,4,train +72,2,train +2546,2,train +2983,3,train +2284,2,train +1888,2,train +151,2,train +3279,1,train +285,2,train +68,4,train +2363,2,train +2800,3,train +3196,3,train +3492,1,train +3096,1,train +498,2,train +2834,1,train +281,4,train +2576,2,train +2617,3,train +3013,3,train +3054,4,train +577,2,train +3309,1,train +3047,1,train +53,2,train +3226,3,train +2568,3,train +3522,1,train +132,2,train +569,3,train +2864,1,train +3260,1,train +3043,3,train +3084,4,train +3480,4,train +2781,3,train +3339,1,train +2943,1,train +3776,2,train +3473,1,train +3077,1,train +3559,4,train +3693,4,train +2815,1,train +3297,4,train +3593,2,train +558,2,train +599,3,train +995,3,train +3290,1,train +296,2,train +3510,4,train +3028,1,train +3114,4,train +34,2,train +2811,3,train +3772,4,train +3806,2,train +3940,2,train +812,3,train +3503,1,train +3544,2,train +3723,4,train +946,3,train +550,3,train +3241,1,train +3327,4,train +3461,4,train +3065,4,train +1108,1,train +846,1,train +3757,2,train +3320,1,train +3361,2,train +326,2,train +367,3,train +105,3,train +3278,4,train +1321,1,train +1059,1,train +1279,4,train +4011,3,train +3970,2,train +1017,4,train +714,3,train +318,3,train +3095,4,train +1534,1,train +876,1,train +1313,2,train +1010,1,train +614,1,train +1096,4,train +3391,2,train +793,3,train +397,3,train +3787,2,train +3921,2,train +531,3,train +3308,4,train +1788,2,train +1922,2,train +1089,1,train +1526,2,train +1223,1,train +4000,2,train +3604,2,train +1006,3,train +1047,4,train +1443,4,train +3738,2,train +785,4,train +1302,1,train +1343,2,train +1522,4,train +3817,2,train +3992,3,train +2214,2,train +1253,1,train +1690,2,train +4071,3,train +1473,4,train +1077,4,train +1211,4,train +1903,2,train +1507,2,train +4022,3,train +1424,4,train +2285,3,train +2419,3,train +1586,2,train +1503,4,train +2236,3,train +1974,3,train +2711,3,train +2449,3,train +2053,3,train +2490,4,train +1791,3,train +2879,1,train +2266,3,train +2703,4,train +2400,3,train +2004,3,train +2958,1,train +5,3,train +2300,1,train +2782,4,train +2038,1,train +2520,4,train +218,3,train +2513,1,train +2909,1,train +2950,2,train +3129,4,train +2733,4,train +2867,4,train +2471,4,train +2430,3,train +2034,3,train +252,1,train +3029,2,train +431,3,train +35,3,train +2726,1,train +3163,2,train +169,3,train +2247,3,train +2684,4,train +861,1,train +465,1,train +248,3,train +2543,1,train +3376,2,train +2763,4,train +2460,3,train +2501,4,train +2897,4,train +2635,4,train +2239,4,train +544,1,train +282,1,train +20,1,train +2756,1,train +2797,2,train +636,4,train +2931,2,train +2848,4,train +891,1,train +932,2,train +3709,3,train +233,1,train +3010,2,train +412,3,train +16,3,train +453,4,train +849,4,train +2748,2,train +2927,4,train +708,1,train +312,1,train +1145,2,train +3922,3,train +532,4,train +2827,2,train +3223,2,train +666,4,train +3357,2,train +3956,1,train +921,1,train +962,2,train +263,1,train +700,2,train +3436,2,train +442,3,train +3174,2,train +3215,3,train +3477,3,train +180,3,train +617,4,train +4035,1,train +738,1,train +779,2,train +1175,2,train +4086,3,train +3824,3,train +3428,3,train +434,4,train +3986,1,train +992,2,train +1429,3,train +689,1,train +730,2,train +1126,2,train +3507,3,train +909,4,train +3641,3,train +3245,3,train +3903,3,train +251,4,train +1205,2,train +1642,3,train +3937,1,train +681,2,train +3458,3,train +3854,3,train +3895,4,train +4016,1,train +1418,2,train +3754,1,train +1156,2,train +760,2,train +894,2,train +677,4,train +2068,3,train +3967,1,train +1806,3,train +1107,2,train +890,4,train +3663,4,train +2102,1,train +1706,1,train +1885,3,train +1489,3,train +3784,1,train +1186,2,train +1227,3,train +3876,4,train +2181,1,train +2315,1,train +1919,1,train +2098,3,train +2139,4,train +1836,3,train +1178,3,train +3955,4,train +1870,1,train +2352,4,train +1653,3,train +1257,3,train +1391,3,train +2345,1,train +2386,2,train +2565,4,train +2083,1,train +2169,4,train +1866,3,train +1470,3,train +1907,4,train +1604,3,train +2465,2,train +1504,1,train +2516,4,train +1858,4,train +2678,2,train +80,3,train +2375,1,train +2812,2,train +2113,1,train +1717,1,train +2154,2,train +2595,4,train +2071,4,train +1675,4,train +114,1,train +2891,2,train +2629,2,train +72,4,train +2367,2,train +2284,4,train +1888,4,train +327,1,train +65,1,train +151,4,train +2446,2,train +3279,3,train +285,4,train +2580,2,train +2363,4,train +144,1,train +3492,3,train +2659,2,train +3096,3,train +2397,2,train +2834,3,train +3392,1,train +357,1,train +398,2,train +95,1,train +136,2,train +577,4,train +2872,2,train +2913,3,train +3047,3,train +2651,3,train +3309,3,train +53,4,train +3605,1,train +215,2,train +3343,1,train +349,2,train +3522,3,train +132,4,train +2823,2,train +2864,3,train +3260,3,train +3422,1,train +824,2,train +166,2,train +2943,3,train +3339,3,train +3776,4,train +3077,3,train +2815,3,train +4031,1,train +3635,1,train +3769,1,train +3373,1,train +775,2,train +3111,1,train +3593,4,train +117,2,train +3290,3,train +296,4,train +3028,3,train +34,4,train +3889,2,train +854,2,train +895,3,train +3586,1,train +592,2,train +196,2,train +633,3,train +3410,4,train +330,2,train +3544,4,train +3806,4,train +3940,4,train +1325,1,train +1108,3,train +3403,1,train +3840,2,train +409,2,train +846,3,train +3320,3,train +3361,4,train +3757,4,train +326,4,train +3919,2,train +1321,3,train +622,2,train +1059,3,train +3970,4,train +1617,1,train +1355,1,train +1534,3,train +3870,2,train +876,3,train +1313,4,train +4004,2,train +1010,3,train +614,3,train +3391,4,train +3787,4,train +1830,1,train +1568,1,train +1172,1,train +1788,4,train +910,1,train +1392,4,train +1922,4,train +1089,3,train +1526,4,train +3821,2,train +4000,4,train +3604,4,train +3738,4,train +1519,1,train +1123,1,train +3900,2,train +1302,3,train +1343,4,train +1081,4,train +3817,4,train +1598,1,train +1690,4,train +2248,2,train +1549,1,train +1986,2,train +1507,4,train +2065,2,train +1803,2,train +1586,4,train +2278,2,train +1882,2,train +2319,3,train +1579,1,train +1620,2,train +2057,3,train +2229,2,train +1967,2,train +2349,3,train +2046,2,train +1650,2,train +181,2,train +2958,3,train +2259,2,train +1863,2,train +2300,3,train +2038,3,train +2858,1,train +260,2,train +2992,1,train +2596,1,train +39,3,train +2513,3,train +2950,4,train +3467,1,train +3205,1,train +2809,1,train +252,3,train +3029,4,train +2726,3,train +2767,4,train +3163,4,train +548,1,train +3325,2,train +2626,1,train +465,3,train +2760,1,train +2846,4,train +3376,4,train +2543,3,train +761,1,train +544,3,train +3276,2,train +2839,1,train +3672,2,train +282,3,train +2577,1,train +20,3,train +2756,3,train +2797,4,train +2931,4,train +578,1,train +3751,2,train +3052,1,train +3489,2,train +932,4,train +3227,2,train +99,3,train +2790,1,train +233,3,train +3010,4,train +2748,4,train +1187,1,train +791,1,train +3964,2,train +529,1,train +3306,2,train +3702,2,train +708,3,train +3440,2,train +312,3,train +1145,4,train +3003,1,train +3044,2,train +2827,4,train +3223,4,train +1004,1,train +742,1,train +346,1,train +3956,3,train +962,4,train +3653,2,train +263,3,train +700,4,train +3436,4,train +3174,4,train +821,1,train +4035,3,train +955,1,train +738,3,train +779,4,train +1175,4,train +517,4,train +1034,1,train +1471,2,train +772,1,train +3986,3,train +376,1,train +1209,2,train +510,1,train +992,4,train +3287,2,train +1126,4,train +730,4,train +1684,2,train +1288,2,train +1422,2,train +589,1,train +3803,3,train +723,1,train +1205,4,train +3500,2,train +3937,3,train +547,4,train +681,4,train +1501,2,train +802,1,train +1239,2,train +4016,3,train +936,1,train +977,2,train +3754,3,train +1156,4,train +760,4,train +894,4,train +1714,2,train +1755,3,train +1452,2,train +1056,2,train +1190,2,train +794,2,train +3571,3,train +3967,3,train +2185,1,train +2102,3,train +1706,3,train +1665,2,train +1269,2,train +1007,2,train +3784,3,train +1186,4,train +3959,4,train +2398,1,train +2002,1,train +2181,3,train +1785,3,train +1919,3,train +1220,2,train +2215,1,train +1870,3,train +2428,1,train +2166,1,train +2386,4,train +2083,3,train +2641,1,train +2682,2,train +2379,1,train +1983,1,train +2465,4,train +2203,4,train +1504,3,train +2458,1,train +2062,1,train +2895,2,train +2678,4,train +2812,4,train +1934,1,train +2113,3,train +1717,3,train +2154,4,train +197,1,train +2974,2,train +3108,2,train +2712,2,train +114,3,train +2891,4,train +2013,1,train +2450,2,train +2147,1,train +2629,4,train +2367,4,train +1971,4,train +3187,2,train +148,1,train +3321,2,train +3059,2,train +65,3,train +2446,4,train +2580,4,train +623,1,train +227,1,train +361,1,train +3138,2,train +3179,3,train +144,3,train +2876,2,train +2659,4,train +2218,2,train +2397,4,train +44,1,train +178,1,train +3392,3,train +398,4,train +2693,2,train +136,4,train +2872,4,train +653,1,train +391,1,train +3605,3,train +3209,3,train +129,1,train +215,4,train +2510,2,train +3343,3,train +349,4,train +2644,2,train +1041,2,train +3422,3,train +342,1,train +824,4,train +2723,2,train +166,4,train +3718,1,train +1120,2,train +421,1,train +25,1,train +462,2,train +3635,3,train +2936,2,train +3373,3,train +3111,3,train +117,4,train +3931,1,train +937,2,train +4065,1,train +675,2,train +3407,1,train +3889,4,train +854,4,train +413,2,train +3586,3,train +592,4,train +196,4,train +330,4,train +1408,1,train +3882,1,train +3486,1,train +1325,3,train +492,2,train +626,2,train +3403,3,train +3840,4,train +230,2,train +409,4,train +4095,1,train +3699,1,train +1101,2,train +3919,4,train +839,2,train +3657,4,train +622,4,train +1834,1,train +1438,1,train +1617,3,train +3912,1,train +1355,3,train +959,3,train +656,2,train +3870,4,train +4004,4,train +2047,1,train +1830,3,train +1568,3,train +1172,3,train +1609,4,train +3904,2,train +869,2,train +910,3,train +3821,4,train +1864,1,train +1468,1,train +1602,1,train +989,3,train +1519,3,train +1123,3,train +3900,4,train +2118,2,train +1419,1,train +1598,3,train +1157,1,train +1639,4,train +1377,4,train +2331,2,train +1632,1,train +2248,4,train +1370,1,train +1549,3,train +1986,4,train +2107,1,train +1845,1,train +2065,4,train +1803,4,train +2757,2,train +1796,1,train +2278,4,train +1882,4,train +1620,4,train +2574,2,train +2178,2,train +2615,3,train +1875,1,train +1916,2,train +2312,2,train +51,2,train +2525,2,train +2129,2,train +2263,2,train +1867,2,train +2046,4,train +1650,4,train +89,1,train +3258,1,train +2645,3,train +2342,2,train +1946,2,train +1863,4,train +3471,1,train +2858,3,train +260,4,train +2992,3,train +2596,3,train +2334,3,train +3154,1,train +32,2,train +2809,3,train +3367,1,train +3105,1,train +3542,2,train +507,2,train +111,2,train +548,3,train +2843,1,train +245,2,train +3239,1,train +2626,3,train +3325,4,train +2760,3,train +3755,2,train +2922,1,train +761,3,train +3056,1,train +3672,4,train +2839,3,train +3276,4,train +2577,3,train +3531,1,train +3968,2,train +578,3,train +2873,1,train +3269,1,train +3310,2,train +316,3,train +3052,3,train +3489,4,train +3751,4,train +2790,3,train +2831,4,train +3227,4,train +874,1,train +791,3,train +529,3,train +3306,4,train +3702,4,train +3003,3,train +3440,4,train +3044,4,train +1087,1,train +3602,2,train +4039,3,train +1004,3,train +1045,4,train +2903,1,train +3299,1,train +742,3,train +346,3,train +3340,2,train +3736,2,train +1300,1,train +904,1,train +1434,1,train +1038,1,train +821,3,train +3553,2,train +3949,2,train +955,3,train +3291,2,train +1117,1,train +1251,1,train +855,1,train +1292,2,train +4028,2,train +1034,3,train +1075,4,train +1471,4,train +772,3,train +376,3,train +813,4,train +3504,2,train +510,3,train +3287,4,train +1209,4,train +1068,1,train +1505,2,train +1202,1,train +806,1,train +1288,4,train +1684,4,train +1422,4,train +589,3,train +3717,2,train +3583,2,train +723,3,train +3500,4,train +1718,2,train +885,1,train +1322,2,train +1501,4,train +3796,2,train +802,3,train +1239,4,train +843,4,train +977,4,train +1931,2,train +1098,1,train +1714,4,train +1232,1,train +4009,2,train +1452,4,train +1056,4,train +3788,3,train +1190,4,train +794,4,train +1748,2,train +2185,3,train +1486,2,train +1269,4,train +873,4,train +1007,4,train +2223,2,train +1961,2,train +2002,3,train +2398,3,train +1303,2,train +1220,4,train +2215,3,train +1516,2,train +2511,1,train +2249,1,train +1991,2,train +2428,3,train +2469,4,train +2166,3,train +1770,3,train +2682,4,train +2379,3,train +1983,3,train +2937,1,train +2541,1,train +2458,3,train +2062,3,train +2895,4,train +1800,3,train +1934,3,train +197,3,train +2888,1,train +2974,4,train +3108,4,train +2712,4,train +2013,3,train +2450,4,train +2147,3,train +2967,1,train +3008,2,train +2705,1,train +2309,1,train +2746,2,train +148,3,train +3187,4,train +2529,4,train +310,1,train +444,1,train +227,3,train +2522,1,train +2918,1,train +361,3,train +2656,1,train +2959,2,train +3138,4,train +2876,4,train +2218,4,train +261,1,train +3038,2,train +44,3,train +178,3,train +2693,4,train +736,1,train +3385,2,train +2989,2,train +3426,3,train +391,3,train +129,3,train +2510,4,train +2644,4,train +687,1,train +291,1,train +29,1,train +3202,2,train +2723,4,train +3935,1,train +1337,2,train +504,1,train +941,2,train +3718,3,train +638,1,train +242,1,train +1120,4,train +3019,2,train +421,3,train +25,3,train +462,4,train +3194,3,train +3415,2,train +2936,4,train +4014,1,train +1020,2,train +717,1,train +758,2,train +3931,3,train +937,4,train +59,1,train +4065,3,train +675,4,train +3407,3,train +413,4,train +3965,1,train +1367,2,train +971,2,train +1408,3,train +3703,1,train +668,1,train +709,2,train +3486,3,train +3882,3,train +492,4,train +3224,3,train +626,4,train +230,4,train +1184,2,train +788,2,train +485,1,train +3699,3,train +4095,3,train +839,4,train +1834,3,train +1438,3,train +698,1,train +1135,2,train +1176,3,train +3912,3,train +3953,4,train +656,4,train +2047,3,train +1214,2,train +3946,1,train +556,2,train +3904,4,train +1864,3,train +1468,3,train +1905,4,train +3763,1,train +1602,3,train +2294,1,train +2118,4,train +982,2,train +1419,3,train +1157,3,train +2331,4,train +1453,1,train +1935,4,train +1632,3,train +1236,3,train +1370,3,train +2324,1,train +1928,1,train +2365,2,train +1666,1,train +1845,3,train +2444,2,train +2141,1,train +2182,2,train +1483,1,train +1965,4,train +2657,2,train +2395,2,train +2092,1,train +1696,1,train +2178,4,train +2574,4,train +1875,3,train +1916,4,train +2312,4,train +1654,4,train +93,1,train +2870,2,train +2171,1,train +2212,2,train +2608,2,train +51,4,train +1909,1,train +2346,2,train +2129,4,train +1733,4,train +2263,4,train +1867,4,train +172,1,train +306,1,train +3258,3,train +2425,2,train +2122,1,train +2163,2,train +2342,4,train +1946,4,train +164,2,train +3471,3,train +2242,2,train +2376,2,train +3371,1,train +377,2,train +3154,3,train +74,1,train +2851,2,train +3329,4,train +2193,2,train +32,4,train +194,2,train +3367,3,train +3105,3,train +3542,4,train +111,4,train +2406,2,train +2843,3,train +245,4,train +3239,3,train +3797,1,train +803,2,train +407,2,train +104,1,train +145,2,train +541,2,train +2922,3,train +3755,4,train +2619,2,train +2660,3,train +3056,3,train +3614,1,train +620,2,train +224,2,train +3352,1,train +3748,1,train +358,2,train +3531,3,train +3968,4,train +3269,3,train +2873,3,train +3310,4,train +3431,1,train +833,2,train +874,3,train +175,2,train +612,3,train +2907,1,train +3303,1,train +4081,2,train +1087,3,train +3778,1,train +3819,2,train +3516,1,train +3602,4,train +522,2,train +3299,3,train +2903,3,train +3340,4,train +3736,4,train +1517,1,train +1121,1,train +1300,3,train +904,3,train +1038,3,train +3553,4,train +3291,4,train +1596,1,train +1117,3,train +1251,3,train +855,3,train +1292,4,train +3587,2,train +4028,4,train +3504,4,train +1809,1,train +1547,1,train +1285,1,train +889,1,train +1371,4,train +4062,2,train +1068,3,train +1505,4,train +3800,2,train +806,3,train +3583,4,train +3717,4,train +1364,1,train +1801,2,train +1102,1,train +3879,2,train +1718,4,train +885,3,train +1322,4,train +4013,2,train +3796,4,train +1880,2,train +1181,1,train +1618,2,train +1315,1,train +4092,2,train +1098,3,train +2093,2,train +1790,1,train +1831,2,train +2227,2,train +1569,2,train +1748,4,train +4084,3,train +1486,4,train +1090,4,train +2306,2,train +2044,2,train +1782,2,train +1169,4,train +1303,4,train +1861,2,train +1599,2,train +1516,4,train +2377,3,train +2511,3,train +2249,3,train +2807,1,train +2287,2,train +2025,2,train +1629,2,train +2066,3,train +3020,1,train +26,2,train +2937,3,train +2541,3,train +1842,2,train +3233,1,train +2575,1,train +2055,2,train +2096,3,train +2788,1,train +2967,3,train +3008,4,train +2705,3,train +2309,3,train +2746,4,train +527,1,train +3304,2,train +269,2,train +310,3,train +3438,2,train +444,3,train +48,3,train +2343,1,train +2739,1,train +2522,3,train +2126,3,train +2959,4,train +3651,2,train +2818,1,train +261,3,train +3038,4,train +2514,4,train +953,1,train +3730,2,train +736,3,train +3031,1,train +78,3,train +2769,1,train +2989,4,train +770,1,train +3547,2,train +508,1,train +3722,3,train +3244,1,train +3285,2,train +687,3,train +291,3,train +3023,2,train +3681,2,train +29,3,train +3202,4,train +2940,4,train +983,1,train +587,1,train +3498,2,train +3935,3,train +325,1,train +807,4,train +1337,4,train +504,3,train +941,4,train +3102,2,train +242,3,train +3019,4,train +3236,2,train +3632,2,train +1237,2,train +4014,3,train +934,1,train +1020,4,train +3752,3,train +717,3,train +758,4,train +59,3,train +1013,1,train +751,1,train +3965,3,train +489,1,train +971,4,train +3662,2,train +3703,3,train +709,4,train +1226,1,train +1401,2,train +568,1,train +3782,3,train +702,1,train +788,4,train +1184,4,train +3520,3,train +485,3,train +781,1,train +1135,4,train +1035,2,train +1472,3,train +1214,4,train +773,2,train +3550,3,train +3946,3,train +556,4,train +1248,2,train +3980,1,train +986,2,train +3763,3,train +1502,3,train +982,4,train +2590,1,train +1412,2,train +1453,3,train +2273,1,train +1928,3,train +1532,3,train +2365,4,train +2486,1,train +2224,1,train +2661,2,train +2444,4,train +2141,3,train +2182,4,train +1483,3,train +2437,1,train +2041,1,train +2874,2,train +2175,1,train +1779,1,train +2261,4,train +2657,4,train +2395,4,train +1696,3,train +3087,2,train +2254,1,train +2691,2,train +93,3,train +2388,1,train +2429,2,train +2870,4,train +2171,3,train +2212,4,train +2608,4,train +1909,3,train +2346,4,train +172,3,train +2904,2,train +2642,2,train +2425,4,train +2163,4,train +3117,2,train +2721,2,train +164,4,train +2242,4,train +2376,4,train +419,1,train +23,1,train +3371,3,train +2538,2,train +377,4,train +2672,2,train +3068,2,train +2193,4,train +632,1,train +236,1,train +673,2,train +370,1,train +194,4,train +2489,2,train +2885,2,train +2926,3,train +2623,2,train +2406,4,train +449,1,train +3618,1,train +3797,3,train +187,1,train +407,4,train +2702,2,train +3098,2,train +541,4,train +145,4,train +2836,2,train +2619,4,train +3697,1,train +3831,1,train +3435,1,train +3614,3,train +4,1,train +441,2,train +3218,3,train +138,1,train +224,4,train +620,4,train +2915,2,train +358,4,train +2956,3,train +3352,3,train +916,2,train +520,2,train +3648,1,train +4044,1,train +3431,3,train +3128,2,train +3606,4,train +175,4,train +2907,3,train +3303,3,train +3727,1,train +3861,1,train +430,1,train +471,2,train +908,3,train +4081,4,train +605,2,train +3819,4,train +2986,3,train +3516,3,train +4074,1,train +1517,3,train +1121,3,train +3416,1,train +3812,1,train +3636,4,train +3374,4,train +1417,1,train +1596,3,train +1200,3,train +897,2,train +635,2,train +3587,4,train +1809,3,train +1110,2,train +1547,3,train +1588,4,train +3883,2,train +889,3,train +4062,4,train +3800,4,train +1709,1,train +1843,1,train +1364,3,train +1801,4,train +4096,2,train +1102,3,train +3879,4,train +4013,4,train +2056,1,train +1398,1,train +1880,4,train +1181,3,train +1618,4,train +3913,2,train +1315,3,train +1356,4,train +4092,4,train +1873,1,train +1477,1,train +2093,4,train +1215,1,train +2227,4,train +1831,4,train +1569,4,train +2523,2,train +1824,1,train +2306,4,train +2044,4,train +1782,4,train +2340,2,train +1641,1,train +1775,1,train +1861,4,train +1599,4,train +2553,2,train +2291,2,train +1458,1,train +1895,2,train +1416,4,train +2370,2,train +2807,3,train +2108,2,train +1846,2,train +2025,4,train +1629,4,train +68,1,train +2841,1,train +2583,2,train +2624,3,train +3020,3,train +26,4,train +2321,2,train +2059,2,train +1842,4,train +3054,1,train +3233,3,train +2534,2,train +2575,3,train +2055,4,train +3133,1,train +139,2,train +2871,1,train +2351,2,train +2392,3,train +2788,3,train +352,2,train +3084,1,train +3480,1,train +90,2,train +527,3,train +2822,1,train +3304,4,train +3438,4,train +3042,4,train +2739,3,train +2343,3,train +3559,1,train +3297,1,train +2901,1,train +303,2,train +41,2,train +2818,3,train +2422,3,train +3651,4,train +3772,1,train +3510,1,train +3114,1,train +3551,2,train +953,3,train +3730,4,train +3031,3,train +2769,3,train +853,1,train +3327,1,train +770,3,train +3065,1,train +3547,4,train +508,3,train +3285,4,train +3681,4,train +3023,4,train +804,1,train +3581,2,train +3977,2,train +983,3,train +587,3,train +3278,1,train +284,2,train +325,3,train +3102,4,train +3498,4,train +3236,4,train +1279,1,train +1017,1,train +3794,2,train +1237,4,train +404,3,train +3095,1,train +934,3,train +3928,2,train +1096,1,train +834,1,train +4007,2,train +4048,3,train +1013,3,train +3308,1,train +3745,2,train +751,3,train +792,4,train +489,3,train +1047,1,train +785,1,train +3562,2,train +3958,2,train +1401,4,train +568,3,train +3696,2,train +702,3,train +1522,1,train +1697,2,train +4078,3,train +3379,2,train +781,3,train +822,4,train +1910,2,train +1077,1,train +1211,1,train +3988,2,train +3592,2,train +1035,4,train +3767,3,train +773,4,train +1989,2,train +1727,2,train +1331,2,train +1465,2,train +1248,4,train +3980,3,train +986,4,train +1940,2,train +1678,2,train +1282,2,train +2277,1,train +1757,2,train +1361,2,train +1495,2,train +2490,1,train +2273,3,train +1708,2,train +2569,1,train +2703,1,train +2486,3,train +2224,3,train +2661,4,train +2782,1,train +2520,1,train +2258,1,train +2437,3,train +2041,3,train +2478,4,train +2874,4,train +2175,3,train +1779,3,train +2733,1,train +2337,1,train +2471,1,train +3087,4,train +2254,3,train +2691,4,train +2388,3,train +2429,4,train +2684,1,train +2288,1,train +2725,2,train +2904,4,train +2026,1,train +2508,4,train +2642,4,train +2246,4,train +289,1,train +2763,1,train +3200,2,train +2501,1,train +2635,1,train +2239,1,train +2721,4,train +3117,4,train +636,1,train +3017,2,train +419,3,train +23,3,train +2755,2,train +3151,2,train +2538,4,train +2672,4,train +319,1,train +453,1,train +3230,2,train +3626,2,train +236,3,train +673,4,train +2968,2,train +370,3,train +3364,2,train +2706,2,train +2885,4,train +2489,4,train +2623,4,train +532,1,train +666,1,train +707,2,train +3484,3,train +449,3,train +8,1,train +2785,2,train +3618,3,train +187,3,train +2919,2,train +2702,4,train +920,2,train +3697,3,train +617,1,train +3831,3,train +2998,2,train +3435,3,train +4,3,train +441,4,train +3132,2,train +138,3,train +2915,4,train +3993,1,train +300,1,train +737,2,train +3514,3,train +434,1,train +38,1,train +520,4,train +916,4,train +3211,2,train +3648,3,train +1212,2,train +3727,3,train +251,1,train +3861,3,train +3902,4,train +471,4,train +605,4,train +1425,2,train +767,2,train +3895,1,train +901,2,train +3812,3,train +3416,3,train +1376,2,train +1417,3,train +677,1,train +718,2,train +1114,2,train +897,4,train +635,4,train +1713,1,train +1496,3,train +3791,1,train +1193,2,train +535,2,train +3663,1,train +3883,4,train +1709,3,train +1406,2,train +1843,3,train +1185,3,train +3876,1,train +3962,4,train +4096,4,train +2139,1,train +1743,1,train +3955,1,train +961,2,train +1398,3,train +3913,4,train +2352,1,train +1873,3,train +1477,3,train +1914,4,train +1174,2,train +1215,3,train +1652,4,train +2169,1,train +1907,1,train +2523,4,train +1824,3,train +2161,2,train +1858,1,train +1944,4,train +2340,4,train +1641,3,train +2770,2,train +2374,2,train +2071,1,train +1675,1,train +2553,4,train +2291,4,train +1458,3,train +1895,4,train +72,1,train +2191,2,train +1888,1,train +2370,4,train +2108,4,train +1712,4,train +1846,4,train +151,1,train +2800,2,train +2404,2,train +2841,3,train +2583,4,train +2321,4,train +2059,4,train +2617,2,train +3054,3,train +3133,3,train +53,1,train +139,4,train +2434,2,train +2871,3,train +2568,2,train +2172,2,train +2609,3,train +2351,4,train +435,2,train +132,1,train +173,2,train +569,2,train +352,4,train +3084,3,train +90,4,train +2822,3,train +3776,1,train +386,2,train +3559,3,train +124,2,train +2901,3,train +3297,3,train +303,4,train +2639,3,train +41,4,train +3593,1,train +3197,1,train +599,2,train +203,2,train +3114,3,train +3551,4,train +3806,1,train +3410,1,train +812,2,train +3544,1,train +853,3,train +550,2,train +154,2,train +591,3,train +2886,1,train +3327,3,train +3065,3,train +2669,3,train +4060,2,train +3757,1,train +3361,1,train +367,2,train +804,3,train +3581,4,train +3977,4,train +105,2,train +3278,3,train +1100,1,train +3877,2,train +1279,3,train +4011,2,train +3615,2,train +1017,3,train +184,2,train +621,3,train +3398,4,train +318,2,train +3095,3,train +3794,4,train +1313,1,train +4090,2,train +1096,3,train +3391,1,train +3787,1,train +3828,2,train +397,2,train +834,3,train +4007,4,train +531,2,train +3308,3,train +3745,4,train +1788,1,train +1392,1,train +1526,1,train +3907,2,train +868,1,train +1350,4,train +3604,1,train +1047,3,train +3645,2,train +785,3,train +389,3,train +3562,4,train +3696,4,train +1343,1,train +1081,1,train +1697,4,train +3992,2,train +3596,2,train +3379,4,train +1859,2,train +1160,1,train +898,1,train +3675,2,train +4071,2,train +1077,3,train +1118,4,train +3592,4,train +1507,1,train +1989,4,train +1727,4,train +1331,4,train +4022,2,train +1465,4,train +2285,2,train +1586,1,train +1678,4,train +1282,4,train +2236,2,train +2277,3,train +1974,2,train +1757,4,train +1361,4,train +1495,4,train +2053,2,train +2490,3,train +1791,2,train +1708,4,train +2569,3,train +2266,2,train +2703,3,train +2004,2,train +2045,3,train +5,2,train +2782,3,train +2520,3,train +2258,3,train +218,2,train +2950,1,train +2554,1,train +2733,3,train +2337,3,train +2034,2,train +2075,3,train +2471,3,train +1813,3,train +3029,1,train +35,2,train +2767,1,train +3163,1,train +2684,3,train +2288,3,train +2725,4,train +2026,3,train +2846,1,train +248,2,train +289,3,train +2584,1,train +3021,2,train +27,3,train +2763,3,train +3200,4,train +2501,3,train +2105,3,train +2239,3,train +3496,2,train +2797,1,train +3234,2,train +636,3,train +2931,1,train +3017,4,train +3151,4,train +2755,4,train +932,1,train +536,1,train +3709,2,train +319,3,train +3010,1,train +3051,2,train +16,2,train +57,3,train +453,3,train +2748,1,train +3230,4,train +2968,4,train +2706,4,train +615,1,train +1145,1,train +3922,2,train +532,3,train +2827,1,train +3223,1,train +666,3,train +707,4,train +3264,2,train +8,3,train +2785,4,train +2919,4,train +962,1,train +566,1,train +1003,2,train +700,1,train +304,1,train +786,4,train +3477,2,train +920,4,train +87,3,train +3215,2,train +2998,4,train +2602,4,train +3132,4,train +1175,1,train +779,1,train +3993,3,train +517,1,train +300,3,train +737,4,train +3428,2,train +434,3,train +38,3,train +3211,4,train +992,1,train +1429,2,train +730,1,train +1212,4,train +3507,2,train +3245,2,train +251,3,train +1205,1,train +1246,2,train +1642,2,train +3978,1,train +1425,4,train +547,1,train +681,1,train +767,4,train +3458,2,train +3499,3,train +901,4,train +3895,3,train +760,1,train +1114,4,train +718,4,train +1713,3,train +1014,2,train +3791,3,train +1193,4,train +752,2,train +535,4,train +3663,3,train +1489,2,train +1227,2,train +3959,1,train +965,2,train +3876,3,train +2139,3,train +1743,3,train +4038,1,train +1481,3,train +1178,2,train +3955,3,train +961,4,train +2352,3,train +1257,2,train +1391,2,train +2252,1,train +2386,1,train +1990,1,train +2169,3,train +1470,2,train +1907,3,train +2465,1,train +2203,1,train +2161,4,train +1858,3,train +2678,1,train +2020,1,train +2154,1,train +2240,4,train +2374,4,train +1675,3,train +2629,1,train +2670,2,train +72,3,train +2367,1,train +1971,1,train +2191,4,train +1888,3,train +151,3,train +2446,1,train +2487,2,train +2404,4,train +2962,2,train +2659,1,train +2700,2,train +3096,2,train +3137,3,train +2397,1,train +2438,2,train +2834,2,train +2617,4,train +398,1,train +136,1,train +222,4,train +2517,2,train +2913,2,train +3047,2,train +2651,2,train +2434,4,train +2568,4,train +2172,4,train +215,1,train +349,1,train +435,4,train +2730,2,train +132,3,train +173,4,train +569,4,train +2468,2,train +2864,2,train +469,2,train +166,1,train +2943,2,train +3776,3,train +386,4,train +3077,2,train +124,4,train +2815,2,train +682,2,train +3593,3,train +3197,3,train +117,1,train +203,4,train +599,4,train +3889,1,train +895,2,train +499,2,train +196,1,train +633,2,train +3410,3,train +3806,3,train +3544,3,train +550,4,train +154,4,train +2886,3,train +1108,2,train +712,2,train +3444,1,train +3840,1,train +409,1,train +4060,4,train +846,2,train +3664,4,train +188,2,train +2965,3,train +3361,3,train +367,4,train +105,4,train +3919,1,train +3657,1,train +1100,3,train +3877,4,train +401,2,train +3615,4,train +4011,4,train +184,4,train +318,4,train +1396,1,train +3870,1,train +3474,1,train +876,2,train +480,2,train +917,3,train +1313,3,train +614,2,train +3212,1,train +3391,3,train +3828,4,train +397,4,train +4090,4,train +1609,1,train +1788,3,train +1392,3,train +1526,3,train +3821,1,train +3907,4,train +868,3,train +3604,3,train +3645,4,train +3383,4,train +1164,1,train +3900,1,train +1343,3,train +947,3,train +4075,2,train +1081,3,train +3992,4,train +3596,4,train +1639,1,train +1377,1,train +1859,4,train +1160,3,train +898,3,train +3675,4,train +4071,4,train +1676,4,train +4022,4,train +2065,1,train +1803,1,train +1844,2,train +2285,4,train +1586,3,train +1882,1,train +1923,2,train +2319,2,train +1620,1,train +1224,1,train +2057,2,train +1974,4,train +2136,2,train +2053,4,train +1791,4,train +1395,4,train +2349,2,train +1953,2,train +1650,1,train +1825,2,train +2004,4,train +5,4,train +1863,1,train +1904,2,train +2300,2,train +2341,3,train +2038,2,train +39,2,train +2513,2,train +2554,3,train +2950,3,train +2034,4,train +118,2,train +252,2,train +3029,3,train +35,4,train +2767,3,train +2371,3,train +3325,1,train +465,2,train +2846,3,train +2584,3,train +3021,4,train +3142,1,train +544,2,train +3276,1,train +2880,1,train +282,2,train +323,3,train +3496,4,train +20,2,train +2797,3,train +2401,3,train +3234,4,train +3489,1,train +3530,2,train +932,3,train +99,2,train +536,3,train +2831,1,train +233,2,train +3010,3,train +3051,4,train +3227,1,train +16,4,train +2748,3,train +3709,4,train +615,3,train +2910,1,train +3306,1,train +312,2,train +353,3,train +2648,1,train +3044,1,train +3743,2,train +2827,3,train +3264,4,train +1045,1,train +3822,2,train +3956,2,train +962,3,train +566,3,train +1003,4,train +263,2,train +304,3,train +700,3,train +3477,4,train +3215,4,train +2819,4,train +4035,2,train +779,3,train +3511,2,train +517,3,train +3428,4,train +1471,1,train +1075,1,train +1209,1,train +813,1,train +4027,3,train +3986,2,train +992,3,train +1429,4,train +3287,1,train +3328,2,train +730,3,train +771,4,train +3507,4,train +3245,4,train +1288,1,train +3803,2,train +1642,4,train +1246,4,train +3937,2,train +3978,3,train +547,3,train +681,3,train +3458,4,train +1501,1,train +1542,2,train +1239,1,train +843,1,train +4016,2,train +977,1,train +1459,4,train +3358,2,train +3754,2,train +760,3,train +3795,3,train +1755,2,train +1359,2,train +1056,1,train +660,1,train +1493,2,train +1190,1,train +794,1,train +3571,2,train +3967,2,train +1014,4,train +752,4,train +1572,2,train +1269,1,train +873,1,train +1706,2,train +1007,1,train +1489,4,train +3784,2,train +1227,4,train +3959,3,train +965,4,train +1785,2,train +1919,2,train +4038,3,train +1178,4,train +2256,1,train +2039,3,train +1340,2,train +1777,3,train +1257,4,train +2469,1,train +2252,3,train +2386,3,train +1990,3,train +1470,4,train +2682,1,train +2286,1,train +2465,3,train +2203,3,train +1807,3,train +1504,2,train +2895,1,train +2678,3,train +2237,1,train +2020,3,train +1717,2,train +2154,3,train +2974,1,train +2712,1,train +2316,1,train +2450,1,train +2670,4,train +1971,3,train +2529,1,train +2966,2,train +2267,1,train +2446,3,train +2487,4,train +2225,4,train +268,1,train +3045,2,train +3179,2,train +2962,4,train +2084,1,train +3096,4,train +2218,1,train +2700,4,train +2834,4,train +2438,4,train +219,1,train +2996,2,train +3392,2,train +398,3,train +2693,1,train +136,3,train +2913,4,train +2517,4,train +2651,4,train +2255,4,train +3209,2,train +215,3,train +2510,1,train +2947,2,train +3343,2,train +2644,1,train +2730,4,train +2864,4,train +2468,4,train +3422,2,train +3026,2,train +469,4,train +2723,1,train +166,3,train +2943,4,train +2502,2,train +462,1,train +682,4,train +3373,2,train +3111,2,train +2715,2,train +117,3,train +937,1,train +978,2,train +675,1,train +3889,3,train +3493,3,train +413,1,train +17,1,train +499,4,train +895,4,train +196,3,train +237,4,train +633,4,train +2794,2,train +1325,2,train +492,1,train +626,1,train +230,1,train +712,4,train +3403,2,train +846,4,train +3444,3,train +3840,3,train +188,4,train +4002,1,train +1008,2,train +746,2,train +3919,3,train +3657,3,train +401,4,train +3953,1,train +1355,2,train +959,2,train +1396,3,train +3691,1,train +3870,3,train +3474,3,train +3911,4,train +876,4,train +480,4,train +3212,3,train +614,4,train +1475,3,train +1172,2,train +1213,3,train +1609,3,train +3904,1,train +910,2,train +514,2,train +3821,3,train +1905,1,train +989,2,train +3721,1,train +1123,2,train +1164,3,train +3900,3,train +4075,4,train +2118,1,train +1722,1,train +1639,3,train +1377,3,train +2331,1,train +1935,1,train +1893,4,train +1752,1,train +1972,4,train +1803,3,train +1844,4,train +1965,1,train +1703,1,train +1882,3,train +1441,1,train +1923,4,train +2319,4,train +1620,3,train +1224,3,train +1661,4,train +2057,4,train +2178,1,train +2615,2,train +1916,1,train +1520,1,train +2353,2,train +1654,1,train +2136,4,train +51,1,train +2432,2,train +2129,1,train +1733,1,train +2170,2,train +1867,1,train +1953,4,train +2349,4,train +1650,3,train +1691,4,train +1825,4,train +2645,2,train +1946,1,train +2300,4,train +1904,4,train +2038,4,train +2858,2,train +2596,2,train +39,4,train +2334,2,train +1721,4,train +3329,1,train +335,2,train +32,1,train +118,4,train +2413,2,train +2809,2,train +252,4,train +2151,2,train +3542,1,train +111,1,train +152,2,train +548,2,train +2929,3,train +3325,3,train +2626,2,train +3755,1,train +761,2,train +3142,3,train +544,4,train +2839,2,train +2880,3,train +3276,3,train +282,4,train +2577,2,train +3317,4,train +20,4,train +3176,1,train +578,2,train +182,2,train +3310,1,train +316,2,train +3530,4,train +2697,3,train +99,4,train +2831,3,train +3227,3,train +791,2,train +395,2,train +3127,1,train +529,2,train +133,2,train +2910,3,train +3306,3,train +312,4,train +3044,3,train +2648,3,train +3085,4,train +3743,4,train +1349,3,train +3602,1,train +4039,2,train +1045,3,train +649,3,train +3340,1,train +3822,4,train +346,2,train +3956,4,train +821,2,train +4035,4,train +3553,1,train +3594,2,train +3291,1,train +3377,4,train +3511,4,train +1292,1,train +1075,3,train +679,3,train +1209,3,train +376,2,train +813,3,train +3504,1,train +3986,4,train +3287,3,train +3328,4,train +1371,1,train +1505,1,train +1109,1,train +3886,2,train +1288,3,train +1329,4,train +3583,1,train +589,2,train +3803,4,train +368,3,train +3145,4,train +1188,1,train +1322,1,train +1542,4,train +3837,2,train +1239,3,train +843,3,train +3575,2,train +4016,4,train +977,3,train +3754,4,train +3358,4,train +1576,2,train +1755,4,train +877,1,train +1359,4,train +1056,3,train +660,3,train +1493,4,train +3788,2,train +794,3,train +3571,4,train +2185,2,train +1789,2,train +1486,1,train +1090,1,train +1572,4,train +3867,2,train +1706,4,train +873,3,train +1007,3,train +3784,4,train +1868,2,train +2002,2,train +1169,1,train +1303,1,train +1785,4,train +1127,4,train +2215,2,train +1819,2,train +2256,3,train +1516,1,train +1557,2,train +1340,4,train +2469,3,train +1636,2,train +1770,2,train +1374,2,train +2682,3,train +1849,2,train +2286,3,train +1983,2,train +1587,2,train +1504,4,train +2062,2,train +1800,2,train +2237,3,train +1934,2,train +197,2,train +2974,3,train +2533,1,train +2712,3,train +2316,3,train +2753,4,train +2013,2,train +2450,3,train +3008,1,train +2746,1,train +2529,3,train +2133,3,train +2966,4,train +2267,3,train +227,2,train +268,3,train +2563,1,train +2959,1,train +3045,4,train +6,3,train +2301,1,train +3179,4,train +2084,3,train +2218,3,train +3038,1,train +44,2,train +85,3,train +219,3,train +2514,1,train +2996,4,train +3392,4,train +2693,3,train +515,1,train +3292,2,train +2989,1,train +2593,1,train +3030,2,train +3426,2,train +3209,4,train +2510,3,train +2947,4,train +594,1,train +3243,2,train +3422,4,train +3026,4,train +2723,3,train +2502,4,train +807,1,train +941,1,train +545,1,train +3718,2,train +765,4,train +3019,1,train +3060,2,train +25,2,train +462,3,train +503,4,train +3194,2,train +2581,4,train +3111,4,train +2715,4,train +1020,1,train +758,1,train +1195,2,train +3931,2,train +978,4,train +3273,2,train +675,3,train +3407,2,train +413,3,train +17,3,train +2794,4,train +971,1,train +1408,2,train +3789,3,train +709,1,train +313,1,train +3486,2,train +492,3,train +533,4,train +3224,2,train +230,3,train +788,1,train +4002,3,train +1008,4,train +3699,2,train +746,4,train +3478,3,train +1438,2,train +1176,2,train +3953,3,train +959,4,train +563,4,train +3691,3,train +1255,2,train +3987,1,train +556,1,train +993,2,train +1172,4,train +3904,3,train +910,4,train +514,4,train +1468,2,train +1905,3,train +810,2,train +989,4,train +3721,3,train +2118,3,train +1722,3,train +4017,1,train +982,1,train +1023,2,train +1419,2,train +1460,3,train +1157,2,train +2018,1,train +1935,3,train +1236,2,train +1370,2,train +2365,1,train +1969,1,train +1752,3,train +2189,4,train +4047,1,train +1490,3,train +1228,3,train +2444,1,train +2048,1,train +2182,1,train +1965,3,train +1703,3,train +1441,3,train +2657,1,train +2261,1,train +2395,1,train +1999,1,train +2178,3,train +2219,4,train +2615,4,train +1916,3,train +1520,3,train +2353,4,train +1654,3,train +2608,1,train +2212,1,train +51,3,train +2346,1,train +2432,4,train +2129,3,train +1733,3,train +2170,4,train +1867,3,train +2728,2,train +2425,1,train +2029,1,train +2466,2,train +2163,1,train +1767,1,train +2645,4,train +1946,3,train +1987,4,train +164,1,train +2242,1,train +2679,2,train +2376,1,train +2858,4,train +2596,4,train +2334,4,train +377,1,train +3154,2,train +3329,3,train +2496,2,train +335,4,train +2193,1,train +2413,4,train +2151,4,train +194,1,train +3367,2,train +3542,3,train +3105,2,train +2709,2,train +111,3,train +152,4,train +548,4,train +2406,1,train +2447,2,train +2626,4,train +2843,2,train +407,1,train +3225,3,train +145,1,train +2922,2,train +3755,3,train +2660,2,train +2577,4,train +3655,1,train +224,1,train +661,2,train +358,1,train +3176,3,train +578,4,train +182,4,train +2873,2,train +3310,3,train +316,4,train +874,2,train +478,2,train +3606,1,train +612,2,train +175,1,train +395,4,train +3127,3,train +529,4,train +133,4,train +4081,1,train +1087,2,train +3819,1,train +3602,3,train +4039,4,train +167,2,train +2903,2,train +3340,3,train +346,4,train +904,2,train +3636,1,train +246,2,train +3374,1,train +380,2,train +3553,3,train +3594,4,train +3291,3,train +1375,1,train +1117,2,train +3890,2,train +855,2,train +896,3,train +1292,3,train +3587,1,train +376,4,train +1454,1,train +1588,1,train +1371,3,train +4062,1,train +1505,3,train +1109,3,train +3800,1,train +3886,4,train +806,2,train +3583,3,train +1801,1,train +1188,3,train +3879,1,train +3920,2,train +885,2,train +926,3,train +1322,3,train +664,3,train +3837,4,train +3575,4,train +1880,1,train +1484,1,train +1618,1,train +1356,1,train +4092,1,train +1576,4,train +3871,2,train +877,3,train +3788,4,train +2093,1,train +1831,1,train +1435,1,train +1872,2,train +1569,1,train +1655,4,train +1789,4,train +4084,2,train +1090,3,train +3867,4,train +2044,1,train +2085,2,train +1782,1,train +1868,4,train +2002,4,train +1169,3,train +3901,2,train +1303,3,train +1344,4,train +2164,2,train +1861,1,train +1599,1,train +1203,1,train +1819,4,train +1557,4,train +2377,2,train +2511,2,train +2249,2,train +1416,1,train +1636,4,train +1770,4,train +1374,4,train +1629,1,train +2066,2,train +1849,4,train +1983,4,train +1587,4,train +26,1,train +2541,2,train +2145,2,train +1842,1,train +1883,2,train +2062,4,train +1800,4,train +2096,2,train +2533,3,train +2013,4,train +3091,1,train +2829,1,train +3008,3,train +2309,2,train +2746,3,train +3304,1,train +310,2,train +3042,1,train +3438,1,train +48,2,train +2959,3,train +2126,2,train +2563,3,train +2301,3,train +3121,1,train +127,2,train +261,2,train +302,3,train +3038,3,train +3079,4,train +44,4,train +2380,3,train +2514,3,train +78,2,train +515,3,train +3292,4,train +2989,3,train +2593,3,train +3030,4,train +3426,4,train +811,1,train +3547,1,train +594,3,train +3285,1,train +3722,2,train +291,2,train +332,3,train +3023,1,train +29,2,train +3243,4,train +3801,2,train +807,3,train +3539,2,train +3102,1,train +3498,1,train +3718,4,train +941,3,train +545,3,train +242,2,train +3019,3,train +3060,4,train +3236,1,train +3194,4,train +1237,1,train +4014,2,train +1020,3,train +3752,2,train +758,3,train +1195,4,train +59,2,train +3273,4,train +3407,4,train +792,1,train +4006,3,train +3569,2,train +3965,2,train +971,3,train +1408,4,train +3307,2,train +709,3,train +313,3,train +3486,4,train +3703,2,train +3224,4,train +1091,4,train +3386,2,train +3782,2,train +788,3,train +3520,2,train +130,3,train +1521,2,train +822,1,train +4036,3,train +1438,4,train +560,1,train +3337,2,train +3774,3,train +1176,4,train +780,4,train +1338,2,train +1035,1,train +1472,2,train +773,1,train +859,4,train +1255,4,train +3550,2,train +556,3,train +993,4,train +3946,2,train +3987,3,train +1551,2,train +1248,1,train +1289,2,train +986,1,train +1468,4,train +3763,2,train +3804,3,train +810,4,train +1368,2,train +1502,2,train +4017,3,train +1419,4,train +1023,4,train +1157,4,train +2018,3,train +4051,1,train +1453,2,train +1057,2,train +1236,4,train +2365,3,train +1532,2,train +1969,3,train +1270,2,train +4047,3,train +2661,1,train +2265,1,train +2444,3,train +2048,3,train +2182,3,train +1349,2,train +1786,3,train +1483,2,train +2874,1,train +2478,1,train +2657,3,train +2261,3,train +2395,3,train +1999,3,train +1696,2,train +2691,1,train +2295,1,train +2429,1,train +2033,1,train +2515,4,train +2212,3,train +2904,1,train +2508,1,train +2945,2,train +2642,1,train +2246,1,train +2728,4,train +2425,3,train +2029,3,train +2466,4,train +2163,3,train +1767,3,train +2721,1,train +2325,1,train +164,3,train +2063,1,train +2242,3,train +2679,4,train +3371,2,train +2538,1,train +377,3,train +2672,1,train +3154,4,train +2496,4,train +2193,3,train +673,1,train +277,1,train +194,3,train +2489,1,train +2926,2,train +2709,4,train +2843,4,train +2447,4,train +3005,2,train +407,3,train +2702,1,train +145,3,train +2922,4,train +2481,2,train +2660,4,train +2264,4,train +307,1,train +744,2,train +441,1,train +45,1,train +3218,2,train +3655,3,train +224,3,train +661,4,train +2956,2,train +3352,2,train +2694,2,train +2873,4,train +916,1,train +520,1,train +957,2,train +3431,2,train +874,4,train +478,4,train +2773,2,train +3606,3,train +175,3,train +612,4,train +2907,2,train +3902,1,train +4081,3,train +471,1,train +908,2,train +3819,3,train +2986,2,train +167,4,train +2903,4,train +3981,1,train +1121,2,train +904,4,train +3636,3,train +3240,3,train +246,4,train +3374,3,train +380,4,train +1200,2,train +1375,3,train +3670,1,train +676,2,train +3890,4,train +855,4,train +3587,3,train +1454,3,train +3749,1,train +1588,3,train +3883,1,train +3487,1,train +889,2,train +3962,1,train +1801,3,train +4096,1,train +1102,2,train +706,2,train +3879,3,train +3920,4,train +885,4,train +1701,1,train +1880,3,train +1484,3,train +1181,2,train +1618,3,train +3913,1,train +1356,3,train +3871,4,train +1914,1,train +2093,3,train +1652,1,train +1831,3,train +1435,3,train +1872,4,train +1569,3,train +4084,4,train +3688,4,train +1731,1,train +1951,4,train +2085,4,train +3901,4,train +2340,1,train +1944,1,train +2164,4,train +1861,3,train +1420,1,train +1599,3,train +1203,3,train +1640,4,train +1895,1,train +2377,4,train +2511,4,train +2249,4,train +1416,3,train +2370,1,train +2807,2,train +2108,1,train +1712,1,train +2149,2,train +1846,1,train +1629,3,train +1670,4,train +2066,4,train +2624,2,train +2059,1,train +2145,4,train +1883,4,train +2441,2,train +2878,3,train +2575,2,train +2179,2,train +2616,3,train +2096,4,train +1700,4,train +139,1,train +3091,3,train +2788,2,train +2392,2,train +2829,3,train +2309,4,train +352,1,train +90,1,train +131,2,train +527,2,train +3304,3,train +310,4,train +3042,3,train +2646,3,train +48,4,train +2343,2,train +2126,4,train +3121,3,train +127,4,train +2422,2,train +2818,2,train +261,4,train +3417,1,train +3551,1,train +2676,3,train +78,4,train +770,2,train +811,3,train +3547,3,train +508,2,train +3285,3,train +3326,4,train +3722,4,train +291,4,train +3023,3,train +29,4,train +3581,1,train +587,2,train +3801,4,train +3405,4,train +325,2,train +3102,3,train +3539,4,train +3935,4,train +3794,1,train +3398,1,train +1237,3,train +404,2,train +4014,4,train +142,2,train +3752,4,train +59,4,train +4048,2,train +658,3,train +2953,1,train +792,3,train +3569,4,train +3965,4,train +3703,4,train +3307,4,train +1350,1,train +1088,1,train +3865,2,train +3562,1,train +568,2,train +3782,4,train +3386,4,train +3520,4,train +3124,4,train +1167,1,train +4078,2,train +1521,4,train +3379,1,train +3816,2,train +822,3,train +3554,2,train +560,3,train +3337,4,train +1118,1,train +1555,2,train +856,1,train +1338,4,train +3592,1,train +1035,3,train +1472,4,train +3633,2,train +3767,2,train +773,3,train +3550,4,train +1331,1,train +935,1,train +1768,2,train +1465,1,train +1551,4,train +3846,2,train +1289,4,train +3980,2,train +986,3,train +3763,4,train +1847,2,train +1282,1,train +1368,4,train +1502,4,train +1361,1,train +1798,2,train +1495,1,train +4051,3,train +1453,4,train +1057,4,train +2273,2,train +1353,2,train +1532,4,train +1270,4,train +2224,2,train +2265,3,train +2661,3,train +1349,4,train +1483,4,train +2561,1,train +2344,3,train +2041,2,train +2478,3,train +1779,2,train +2254,2,train +2295,3,train +2691,3,train +2429,3,train +2033,3,train +2853,1,train +2591,1,train +2725,1,train +2508,3,train +2112,3,train +2945,4,train +2642,3,train +2246,3,train +3200,1,train +2542,1,train +2721,3,train +2325,3,train +2063,3,train +3017,1,train +2621,1,train +23,2,train +64,3,train +2755,1,train +3371,4,train +2538,3,train +2672,3,train +3230,1,train +3271,2,train +236,2,train +277,3,train +673,3,train +2572,1,train +2968,1,train +2706,1,train +3009,2,train +2489,3,train +2926,4,train +707,1,train +3484,2,train +3618,2,train +2785,1,train +3222,2,train +2919,1,train +3005,4,train +2481,4,train +786,1,train +920,1,train +3697,2,train +3301,2,train +307,3,train +744,4,train +2602,1,train +4,2,train +45,3,train +441,3,train +482,4,train +2998,1,train +2956,4,train +3039,2,train +3218,4,train +2694,4,train +737,1,train +341,1,train +3514,2,train +520,3,train +957,4,train +3648,2,train +3431,4,train +2990,2,train +2773,4,train +2907,4,train +1212,1,train +991,2,train +3727,2,train +3768,3,train +292,1,train +3902,3,train +471,3,train +512,4,train +908,4,train +2986,4,train +767,1,train +371,1,train +3981,3,train +901,1,train +3282,2,train +1121,4,train +3416,2,train +4015,1,train +1417,2,train +718,1,train +1200,4,train +3670,3,train +676,4,train +1496,2,train +535,1,train +3749,3,train +3883,3,train +3487,3,train +889,4,train +1709,2,train +4045,1,train +1051,2,train +1185,2,train +3962,3,train +3566,3,train +4096,3,train +706,4,train +1701,3,train +1398,2,train +1181,4,train +3913,3,train +3954,4,train +1477,2,train +1914,3,train +1215,2,train +1652,3,train +3743,3,train +1731,3,train +4026,1,train +1032,2,train +2027,1,train +2161,1,train +1944,3,train +1420,3,train +2240,1,train +2374,1,train +1978,1,train +1716,1,train +2198,4,train +1458,2,train +1895,3,train +1936,4,train +2191,1,train +2807,4,train +2108,3,train +1712,3,train +2149,4,train +1846,3,train +2404,1,train +2841,2,train +2624,4,train +1966,4,train +3054,2,train +2441,4,train +2575,4,train +2179,4,train +222,1,train +3133,2,train +2737,2,train +139,3,train +2434,1,train +2871,2,train +2172,1,train +2609,2,train +2392,4,train +435,1,train +173,1,train +3084,2,train +2688,2,train +527,4,train +131,4,train +2426,2,train +2822,2,train +2343,4,train +386,1,train +124,1,train +2901,2,train +2639,2,train +2243,2,train +2422,4,train +203,1,train +3417,3,train +3114,2,train +3551,3,train +2456,2,train +2893,3,train +719,2,train +3451,1,train +853,2,train +457,2,train +154,1,train +591,2,train +2669,2,train +4060,1,train +3664,1,train +670,2,train +367,1,train +804,2,train +3581,3,train +105,1,train +587,4,train +325,4,train +3877,1,train +3481,1,train +4011,1,train +3615,1,train +184,1,train +621,2,train +3398,3,train +404,4,train +142,4,train +4090,1,train +1096,2,train +3828,1,train +3432,1,train +3869,2,train +397,1,train +4048,4,train +438,2,train +834,2,train +176,2,train +2953,3,train +3907,1,train +1350,3,train +3645,1,train +1088,3,train +3383,1,train +3865,4,train +785,2,train +389,2,train +3562,3,train +1167,3,train +468,2,train +3596,1,train +3682,4,train +4078,4,train +643,3,train +3379,3,train +3420,4,train +3816,4,train +3554,4,train +1859,1,train +3675,1,train +1118,3,train +1555,4,train +856,3,train +3592,3,train +3633,4,train +3767,4,train +1676,1,train +1414,1,train +1851,2,train +1152,1,train +1331,3,train +935,3,train +1768,4,train +3846,4,train +3450,4,train +3980,4,train +1847,4,train +1282,3,train +2143,2,train +2277,2,train +1881,2,train +1182,1,train +1361,3,train +1798,4,train +2490,2,train +2094,2,train +1791,1,train +1395,1,train +1832,2,train +2273,4,train +1353,4,train +2569,2,train +2045,2,train +1432,4,train +2520,2,train +2124,2,train +2561,3,train +2258,2,train +1862,2,train +2041,4,train +1779,4,train +2640,3,train +2337,2,train +2075,2,train +1679,2,train +1813,2,train +2853,3,train +2591,3,train +2288,2,train +1892,2,train +2725,3,train +2026,2,train +2887,1,train +289,2,train +3021,1,train +27,2,train +2105,2,train +2542,3,train +2239,2,train +3496,1,train +106,2,train +3234,1,train +3017,3,train +2621,3,train +3058,4,train +23,4,train +2755,3,train +2359,3,train +2097,3,train +2917,1,train +319,2,train +3051,1,train +57,2,train +3271,4,train +2968,3,train +2572,3,train +3009,4,train +2706,3,train +3567,2,train +532,2,train +3264,1,train +3305,2,train +707,3,train +311,3,train +2606,1,train +3088,4,train +8,2,train +2785,3,train +3222,4,train +3484,4,train +1003,1,train +3780,2,train +786,3,train +3518,2,train +3477,1,train +920,3,train +87,2,train +2819,1,train +3215,1,train +3301,4,train +2998,3,train +2602,3,train +3039,4,train +3435,4,train +3697,4,train +820,1,train +3993,2,train +3335,2,train +300,2,train +341,3,train +737,3,train +3514,4,train +38,2,train +2856,4,train +2990,4,train +1429,1,train +771,1,train +3548,2,train +991,4,train +3245,1,train +3727,4,train +292,3,train +1246,1,train +4064,3,train +588,1,train +1070,4,train +767,3,train +371,3,train +3499,2,train +3282,4,train +3416,4,train +4015,3,train +1417,4,train +3753,3,train +718,3,train +1713,2,train +1014,1,train +618,1,train +1496,4,train +3791,2,train +752,1,train +535,3,train +3663,2,train +1227,1,train +1709,4,train +4045,3,train +965,1,train +1051,4,train +3783,3,train +1185,4,train +1743,2,train +1481,2,train +1398,4,train +1560,2,train +1257,1,train +1298,2,train +1735,3,train +4030,1,train +1477,4,train +3813,3,train +1215,4,train +1115,2,train +1249,2,train +4026,3,train +1032,4,train +2027,3,train +2161,3,train +1765,3,train +2240,3,train +2374,3,train +1978,3,train +1675,2,train +1716,3,train +2670,1,train +2494,4,train +2191,3,train +1533,3,train +2487,1,train +2924,2,train +2225,1,train +2404,3,train +2841,4,train +2962,1,train +2700,1,train +2304,1,train +2741,2,train +3137,2,train +2438,1,train +2042,1,train +222,3,train +2517,1,train +2913,1,train +2954,2,train +2651,1,train +2255,1,train +2737,4,train +3133,4,train +2434,3,train +2871,4,train +2172,3,train +2213,4,train +2609,4,train +3033,2,train +435,3,train +2730,1,train +173,3,train +2468,1,train +2688,4,train +2292,4,train +2822,4,train +2426,4,train +469,1,train +3421,3,train +386,3,train +2722,2,train +124,3,train +2901,4,train +2639,4,train +2243,4,train +682,1,train +286,1,train +24,1,train +2801,2,train +3197,2,train +203,3,train +244,4,train +2456,4,train +895,1,train +499,1,train +633,1,train +237,1,train +3451,3,train +719,4,train +3410,2,train +457,4,train +853,4,train +3189,3,train +154,3,train +591,4,train +2886,2,train +2669,4,train +712,1,train +753,2,train +4060,3,train +54,1,train +3664,3,train +188,1,train +670,4,train +2965,2,train +804,4,train +3960,1,train +966,2,train +1100,2,train +3877,3,train +3481,3,train +401,1,train +3615,3,train +184,3,train +621,4,train +3911,1,train +480,1,train +917,2,train +4090,3,train +655,2,train +3432,3,train +3828,3,train +834,4,train +438,4,train +3869,4,train +176,4,train +3990,1,train +1392,2,train +3728,1,train +3907,3,train +3466,1,train +3948,4,train +868,2,train +3645,3,train +3383,3,train +389,4,train +947,2,train +4075,1,train +1081,2,train +468,4,train +3596,3,train +1680,1,train +1859,3,train +3758,1,train +1160,2,train +1201,3,train +898,2,train +3675,3,train +1893,1,train +1676,3,train +1414,3,train +1851,4,train +1152,3,train +3667,4,train +1972,1,train +1710,1,train +1844,1,train +1231,3,train +969,3,train +2319,1,train +1923,1,train +2057,1,train +1661,1,train +2143,4,train +2277,4,train +1881,4,train +1182,3,train +2136,1,train +1478,1,train +2094,4,train +1395,3,train +1832,4,train +2349,1,train +1953,1,train +2390,2,train +2569,4,train +1691,1,train +2128,2,train +1825,1,train +2045,4,train +1904,1,train +2341,2,train +2124,4,train +2258,4,train +1862,4,train +39,1,train +2420,2,train +2554,2,train +1721,1,train +2158,2,train +2337,4,train +2075,4,train +1679,4,train +1813,4,train +118,1,train +2767,2,train +2371,2,train +2288,4,train +1892,4,train +2026,4,train +110,2,train +2846,2,train +2887,3,train +289,4,train +2584,2,train +2188,2,train +3021,3,train +27,4,train +2105,4,train +3435,2,train +189,2,train +3317,1,train +323,2,train +3496,3,train +106,4,train +2401,2,train +3234,3,train +3396,1,train +3530,1,train +99,1,train +536,2,train +2917,3,train +319,4,train +3051,3,train +2655,3,train +57,4,train +615,2,train +3743,1,train +353,2,train +3085,1,train +3567,4,train +3264,3,train +3305,4,train +2606,3,train +8,4,train +3822,1,train +3164,1,train +566,2,train +170,2,train +607,3,train +1003,3,train +304,2,train +2902,1,train +3384,4,train +3518,4,train +87,4,train +2819,3,train +3780,4,train +3377,1,train +3814,2,train +3993,4,train +820,3,train +3511,1,train +517,2,train +3335,4,train +300,4,train +3073,4,train +38,4,train +3893,2,train +4027,2,train +3328,1,train +2932,1,train +771,3,train +3548,4,train +1329,1,train +3803,1,train +1246,3,train +3978,2,train +3145,1,train +3582,2,train +547,2,train +588,3,train +3499,4,train +3103,4,train +1542,1,train +1146,1,train +667,3,train +3358,1,train +3795,2,train +1755,1,train +1359,1,train +1493,1,train +3874,2,train +1713,4,train +3571,1,train +3612,2,train +1014,3,train +618,3,train +1055,4,train +3791,4,train +752,3,train +1572,1,train +3959,2,train +965,3,train +1785,1,train +1127,1,train +1564,2,train +1743,4,train +865,1,train +4038,2,train +1481,4,train +1085,4,train +823,4,train +2039,2,train +1340,1,train +1777,2,train +1560,4,train +1298,4,train +4030,3,train +2252,2,train +1856,2,train +1990,2,train +2031,3,train +1115,4,train +1249,4,train +2203,2,train +1807,2,train +1545,2,train +2020,2,train +1624,2,train +2753,1,train +2670,3,train +1837,2,train +1971,2,train +1575,2,train +2966,1,train +2487,3,train +2924,4,train +2225,3,train +3045,1,train +3179,1,train +2962,3,train +2700,3,train +2304,3,train +2741,4,train +3137,4,train +2438,3,train +2042,3,train +2996,1,train +43,3,train +2820,4,train +2517,3,train +2954,4,train +2255,3,train +3209,1,train +3250,2,train +2947,1,train +3033,4,train +2730,3,train +2289,1,train +2468,3,train +2509,4,train +290,1,train +3026,1,train +469,3,train +73,3,train +3201,2,train +2502,1,train +2722,4,train +765,1,train +503,1,train +682,3,train +286,3,train +2581,1,train +24,3,train +2715,1,train +2801,4,train +3197,4,train +2539,4,train +978,1,train +582,1,train +320,1,train +3097,2,train +3493,2,train +499,3,train +2794,1,train +237,3,train +2969,2,train +2886,4,train +533,1,train +970,2,train +712,3,train +753,4,train +3444,2,train +54,3,train +491,4,train +2786,2,train +188,3,train +2965,4,train +1008,1,train +1049,2,train +746,1,train +350,1,train +1183,2,train +3960,3,train +966,4,train +3657,2,train +1100,4,train +2999,2,train +401,3,train +3994,1,train +959,1,train +563,1,train +1396,2,train +3911,3,train +3474,2,train +3515,3,train +480,3,train +521,4,train +917,4,train +3212,2,train +655,4,train +1475,2,train +1609,2,train +1213,2,train +3990,3,train +514,1,train +951,2,train +3728,3,train +3466,3,train +868,4,train +4024,1,train +989,1,train +1030,2,train +1164,2,train +3545,3,train +947,4,train +551,4,train +4075,3,train +1639,2,train +1680,3,train +3975,1,train +1377,2,train +3758,3,train +1160,4,train +898,4,train +1893,3,train +1497,3,train +798,2,train +2189,1,train +1972,3,train +1710,3,train +4005,1,train +1844,3,train +3963,4,train +1923,3,train +1224,2,train +1661,3,train +2615,1,train +2219,1,train +2353,1,train +1957,1,train +2136,3,train +1478,3,train +1915,4,train +2432,1,train +2170,1,train +1774,1,train +1953,3,train +2390,4,train +1691,3,train +2128,4,train +1825,3,train +2645,1,train +2686,2,train +1987,1,train +2424,2,train +1904,3,train +1945,4,train +2341,4,train +2637,2,train +2334,1,train +2420,4,train +2554,4,train +1721,3,train +2158,4,train +335,1,train +2716,2,train +118,3,train +2413,1,train +2454,2,train +2151,1,train +2192,2,train +2371,4,train +152,1,train +2929,2,train +2667,2,train +110,4,train +2405,2,train +2584,4,train +2188,4,train +3400,1,train +406,2,train +3142,2,train +189,4,train +2484,2,train +2880,2,train +323,4,train +3317,3,train +2222,2,train +2401,4,train +182,1,train +3396,3,train +316,1,train +3530,3,train +2697,2,train +536,4,train +2831,2,train +3430,1,train +395,1,train +133,1,train +174,2,train +615,4,train +2910,2,train +353,4,train +2648,2,train +2951,3,train +3085,3,train +4039,1,train +1045,2,train +649,2,train +3822,3,train +3164,3,train +3601,4,train +566,4,train +170,4,train +2902,3,train +304,4,train +3460,1,train +3594,1,train +204,2,train +2981,3,train +3377,3,train +3511,3,train +3814,4,train +1075,2,train +679,2,train +3893,4,train +3411,1,train +813,2,train +417,2,train +3631,4,train +4027,4,train +3328,3,train +2932,3,train +3886,1,train +1329,3,train +368,2,train +3145,3,train +3582,4,train +3978,4,train +1363,1,train +1542,3,train +1146,3,train +3441,1,train +3837,1,train +843,2,train +3575,1,train +3358,3,train +3399,4,train +3795,4,train +1576,1,train +1359,3,train +4091,2,train +1493,3,train +660,2,train +3788,1,train +3874,4,train +3612,4,train +1655,1,train +1789,1,train +1572,3,train +1131,1,train +3867,1,train +873,2,train +1351,4,train +3646,2,train +3429,4,train +1868,1,train +1210,1,train +1344,1,train +1127,3,train +1564,4,train +865,3,train +4038,4,train +1819,1,train +1860,2,train +2256,2,train +1557,1,train +1161,1,train +2039,4,train +1340,3,train +1381,4,train +1777,4,train +2469,2,train +1636,1,train +2073,2,train +1770,1,train +1374,1,train +1856,4,train +2252,4,train +1990,4,train +2152,2,train +1849,1,train +1890,2,train +2286,2,train +1587,1,train +1628,2,train +1807,4,train +1411,4,train +1545,4,train +1800,1,train +1841,2,train +2237,2,train +2020,4,train +1624,4,train +2316,2,train +2753,3,train +1658,2,train +1575,4,train +2529,2,train +2133,2,train +2966,3,train +2267,2,train +2308,3,train +2866,1,train +268,2,train +3045,3,train +6,2,train +2084,2,train +3079,1,train +85,2,train +219,2,train +2996,3,train +3037,4,train +3292,1,train +339,3,train +3030,1,train +3250,4,train +2947,3,train +2289,3,train +3243,1,train +3284,2,train +2847,1,train +290,3,train +3026,3,train +3201,4,train +2805,4,train +2502,3,train +765,3,train +369,3,train +3060,1,train +3497,2,train +503,3,train +3194,1,train +2581,3,train +2715,3,train +1195,1,train +799,1,train +978,3,train +582,3,train +2877,1,train +3273,1,train +320,3,train +3097,4,train +3493,4,train +17,2,train +2794,3,train +2835,4,train +2969,4,train +878,1,train +3789,2,train +3527,2,train +533,3,train +970,4,train +3224,1,train +3444,4,train +2786,4,train +1091,1,train +829,1,train +1266,2,train +4002,2,train +1008,3,train +567,1,train +1049,4,train +3344,2,train +746,3,train +350,3,train +787,4,train +1183,4,train +3478,2,train +88,3,train +2999,4,train +1176,1,train +780,1,train +3953,2,train +3994,3,train +1396,4,train +563,3,train +3691,2,train +3474,4,train +3212,4,train +1255,1,train +859,1,train +1296,2,train +4073,3,train +993,1,train +597,1,train +1475,4,train +1213,4,train +514,3,train +951,4,train +1905,2,train +810,1,train +4024,3,train +1030,4,train +3721,2,train +1164,4,train +1722,2,train +1326,2,train +1023,1,train +627,1,train +1064,2,train +1460,2,train +847,4,train +3975,3,train +1935,2,train +1539,2,train +1236,1,train +3792,3,train +798,4,train +1752,2,train +2189,3,train +1490,2,train +1094,2,train +1228,2,train +4005,3,train +1965,2,train +1703,2,train +1307,2,train +1744,3,train +1441,2,train +1224,4,train +2302,1,train +2219,3,train +1823,3,train +2353,3,train +1520,2,train +1957,3,train +1654,2,train +2515,1,train +2253,1,train +2432,3,train +1733,2,train +1774,3,train +2170,3,train +2728,1,train +2332,1,train +2466,1,train +2686,4,train +1987,3,train +2424,4,train +2679,1,train +2720,2,train +2021,1,train +2503,4,train +2637,4,train +3329,2,train +2496,1,train +335,3,train +2716,4,train +2413,3,train +2454,4,train +2151,3,train +2192,4,train +235,1,train +3012,2,train +2709,1,train +2313,1,train +152,3,train +193,4,train +2051,1,train +2447,1,train +2929,4,train +2667,4,train +2271,4,train +2405,4,train +314,1,train +3225,2,train +3400,3,train +406,4,train +2264,1,train +2660,1,train +2701,2,train +2880,4,train +2484,4,train +3142,4,train +2222,4,train +661,1,train +3,1,train +2780,2,train +3176,2,train +182,3,train +223,4,train +2697,4,train +478,1,train +612,1,train +3430,3,train +2993,2,train +395,3,train +3127,2,train +3168,3,train +133,3,train +174,4,train +2910,4,train +2648,4,train +295,1,train +732,2,train +167,1,train +253,4,train +649,4,train +2548,2,train +3939,1,train +3677,1,train +246,1,train +3460,3,train +380,1,train +3594,3,train +2761,2,train +204,4,train +3890,1,train +896,2,train +500,2,train +679,4,train +3411,3,train +417,4,train +1371,2,train +975,2,train +3707,1,train +1109,2,train +713,2,train +1150,3,train +3445,1,train +3886,3,train +451,2,train +368,4,train +1188,2,train +3920,1,train +926,2,train +1363,3,train +664,2,train +3441,3,train +3837,3,train +3575,3,train +1659,1,train +3935,2,train +1576,3,train +3871,1,train +3957,4,train +877,2,train +4091,4,train +3695,4,train +660,4,train +1738,1,train +1872,1,train +1655,3,train +1789,3,train +4084,1,train +3688,1,train +1090,2,train +1131,3,train +3867,3,train +3646,4,train +1951,1,train +2085,1,train +1689,1,train +1868,3,train +1427,1,train +1169,2,train +1210,3,train +3901,1,train +1344,3,train +2164,1,train +1640,1,train +1819,3,train +1860,4,train +2256,4,train +1557,3,train +1161,3,train +2377,1,train +1719,1,train +2156,2,train +1457,1,train +1636,3,train +1677,4,train +2073,4,train +1374,3,train +2066,1,train +1670,1,train +2152,4,train +1849,3,train +1890,4,train +2286,4,train +1587,3,train +1628,4,train +2448,2,train +2145,1,train +1883,1,train +1487,1,train +2237,4,train +1841,4,train +2399,2,train +2096,1,train +1700,1,train +2533,2,train +2316,4,train +1658,4,train +2133,4,train +2267,4,train +48,1,train +2866,3,train +268,4,train +2126,1,train +2167,2,train +2563,2,train +6,4,train +2301,2,train +2084,4,train +127,1,train +168,2,train +302,2,train +3079,3,train +85,4,train +2380,2,train +219,4,train +2514,2,train +381,2,train +78,1,train +515,2,train +3292,3,train +2593,2,train +2634,3,train +3030,3,train +2372,3,train +594,2,train +198,2,train +3326,1,train +3722,1,train +332,2,train +3243,3,train +2847,3,train +3284,4,train +3801,1,train +3405,1,train +807,2,train +3539,1,train +3580,2,train +545,2,train +149,2,train +3363,4,train +3060,3,train +2664,3,train +3497,4,train +3752,1,train +3793,2,train +1195,3,train +799,3,train +3273,3,train +2877,3,train +17,4,train +1095,1,train +3872,2,train +4006,2,train +878,3,train +3173,1,train +616,3,train +3307,1,train +3789,4,train +313,2,train +3527,4,train +4085,2,train +1091,3,train +3386,1,train +3782,1,train +4002,4,train +829,3,train +1266,4,train +3124,1,train +130,2,train +567,3,train +3344,4,train +3520,1,train +3478,4,train +3561,2,train +1521,1,train +863,1,train +4036,2,train +646,3,train +3337,1,train +3774,2,train +780,3,train +3161,4,train +3691,4,train +1338,1,train +1472,1,train +1255,3,train +859,3,train +1296,4,train +3550,1,train +993,3,train +597,3,train +3987,2,train +1551,1,train +1592,2,train +1289,1,train +893,1,train +3804,2,train +810,3,train +3721,4,train +1368,1,train +1805,2,train +1502,1,train +1543,2,train +1722,4,train +844,1,train +1326,4,train +4017,2,train +1023,3,train +627,3,train +1064,4,train +1460,4,train +2018,2,train +923,1,train +1057,1,train +1539,4,train +1835,2,train +1532,1,train +1969,2,train +1270,1,train +1752,4,train +4047,2,train +1490,4,train +1094,4,train +1228,4,train +2048,2,train +1349,1,train +1786,2,train +1524,2,train +1703,4,train +1307,4,train +1441,4,train +2261,2,train +2302,3,train +1999,2,train +1603,2,train +2040,3,train +1520,4,train +2515,3,train +2253,3,train +2945,1,train +2728,3,train +2332,3,train +2029,2,train +2070,3,train +2466,3,train +1767,2,train +2679,3,train +2720,4,train +2021,3,train +22,3,train +2799,4,train +2496,3,train +2100,3,train +1838,3,train +235,3,train +2926,1,train +3012,4,train +2709,3,train +2313,3,train +2447,3,train +2051,3,train +2488,4,train +314,3,train +3005,1,train +3046,2,train +3225,4,train +2347,1,train +2481,1,train +2264,3,train +2701,4,train +744,1,train +3655,2,train +482,1,train +3218,1,train +3259,2,train +661,3,train +2956,1,train +3,3,train +2694,1,train +2780,4,train +3176,4,train +2518,4,train +957,1,train +299,1,train +3076,2,train +478,3,train +2773,1,train +3606,2,train +2993,4,train +3127,4,train +908,1,train +512,1,train +3289,2,train +3726,3,train +295,3,train +732,4,train +2986,1,train +3027,2,train +2765,2,train +167,3,train +2548,4,train +1028,2,train +3939,3,train +3636,2,train +3677,3,train +549,4,train +3240,2,train +246,3,train +2978,2,train +3374,2,train +380,3,train +2761,4,train +1200,1,train +1241,2,train +1375,2,train +979,2,train +676,1,train +3890,3,train +3494,3,train +896,4,train +500,4,train +238,4,train +1454,2,train +1588,2,train +975,4,train +3707,3,train +1109,4,train +713,4,train +3445,3,train +451,4,train +4003,1,train +1009,2,train +1446,3,train +706,1,train +1188,4,train +3920,3,train +926,4,train +664,4,train +1484,2,train +1659,3,train +3954,1,train +1356,2,train +3871,3,train +877,4,train +1738,3,train +4033,1,train +1435,2,train +1476,3,train +1872,3,train +3771,1,train +777,2,train +3688,3,train +1951,3,train +2085,3,train +1689,3,train +1427,3,train +3901,3,train +3942,4,train +2164,3,train +1723,1,train +1203,2,train +1640,3,train +2198,1,train +1936,1,train +1719,3,train +2156,4,train +1416,2,train +1457,3,train +2015,1,train +2149,1,train +1670,3,train +1274,3,train +2624,1,train +2665,2,train +1966,1,train +2448,4,train +2145,3,train +1883,3,train +1487,3,train +2441,1,train +2878,2,train +2179,1,train +2616,2,train +2399,4,train +2533,4,train +1700,3,train +3091,2,train +2695,2,train +2392,1,train +2829,2,train +131,1,train +2512,2,train +3042,2,train +2646,2,train +2563,4,train +2167,4,train +2301,4,train +3121,2,train +127,3,train +168,4,train +2422,1,train +2900,3,train +302,4,train +2201,2,train +2380,4,train +381,4,train +2676,2,train +515,4,train +2593,4,train +3409,1,train +811,2,train +415,2,train +594,4,train +198,4,train +2493,2,train +2930,3,train +332,4,train +3326,3,train +3801,3,train +3405,3,train +3539,3,train +3580,4,train +545,4,train +149,4,train +404,1,train +882,3,train +3659,4,train +142,1,train +183,2,train +3793,4,train +4048,1,train +4089,2,train +658,2,train +3872,4,train +1095,3,train +792,2,train +396,2,train +3173,3,train +4006,4,train +3307,3,train +3348,4,train +313,4,train +3865,1,train +3469,1,train +912,3,train +4085,4,train +213,2,train +3386,3,train +3124,3,train +3561,4,train +130,4,train +4078,1,train +3682,1,train +1521,3,train +3816,1,train +3420,1,train +822,2,train +863,3,train +3554,1,train +4036,4,train +560,2,train +3337,3,train +3378,4,train +3774,4,train +1421,1,train +1555,1,train +1159,1,train +1338,3,train +942,3,train +3237,1,train +3633,1,train +3767,1,train +4070,2,train +3987,4,train +1768,1,train +1551,3,train +1592,4,train +3450,1,train +3846,1,train +1289,3,train +893,3,train +3804,4,train +1847,1,train +1451,1,train +1189,1,train +1368,3,train +1805,4,train +1543,4,train +3838,2,train +844,3,train +4017,4,train +1798,1,train +1839,2,train +2018,4,train +3917,2,train +923,3,train +1360,4,train +4051,2,train +1057,3,train +1353,1,train +1835,4,train +1969,4,train +1270,3,train +4047,4,train +2131,2,train +2265,2,train +1432,1,train +1869,2,train +2048,4,train +1786,4,train +1390,4,train +1524,4,train +2132,3,validate +345,3,validate +83,3,validate +2082,2,validate +3685,1,validate +388,1,validate +3206,3,validate +2032,1,validate +2944,3,validate +3898,1,validate +3207,4,validate +3502,1,validate +205,1,validate +3856,4,validate +3157,3,validate +1766,3,validate +297,4,validate +247,3,validate +3673,4,validate +1242,2,validate +763,4,validate +2366,3,validate +4020,4,validate +1455,2,validate +756,1,validate +3533,2,validate +2796,1,validate +1405,1,validate +2713,3,validate +3617,1,validate +1060,3,validate +2226,1,validate +2842,4,validate +2742,2,validate +94,2,validate +2564,1,validate +11,4,validate +3130,3,validate +1219,4,validate +2560,3,validate +4080,4,validate +1515,2,validate +3689,2,validate +1902,2,validate +428,4,validate +3556,3,validate +1728,2,validate +3685,4,validate +1812,1,validate +724,2,validate +2032,4,validate +2461,1,validate +379,4,validate +808,1,validate +546,1,validate +3323,2,validate +3502,4,validate +3669,1,validate +4023,4,validate +3627,4,validate +1283,1,validate +3536,2,validate +3973,3,validate +1671,3,validate +2320,3,validate +3620,1,validate +3141,3,validate +4052,3,validate +972,1,validate +2358,2,validate +2795,3,validate +493,3,validate +1538,3,validate +705,2,validate +2704,1,validate +3833,1,validate +3616,3,validate +2796,4,validate +1963,3,validate +1405,4,validate +3700,2,validate +3687,4,validate +819,1,validate +2564,4,validate +211,1,validate +390,3,validate +3122,2,validate +3468,1,validate +3072,1,validate +3984,3,validate +2381,3,validate +2627,1,validate +2806,3,validate +1852,4,validate +678,2,validate +3152,2,validate +108,2,validate +2544,2,validate +1449,1,validate +1886,2,validate +495,2,validate +674,4,validate +3406,3,validate +2232,1,validate +3843,4,validate +2411,3,validate +3144,3,validate +546,4,validate +841,1,validate +100,3,validate +3011,4,validate +405,1,validate +9,1,validate +2445,1,validate +2228,3,validate +2961,3,validate +1833,4,validate +3873,4,validate +2000,1,validate +871,1,validate +3916,2,validate +3470,1,validate +476,2,validate +1480,1,validate +1304,4,validate +264,2,validate +47,4,validate +3125,2,validate +1734,2,validate +2384,4,validate +477,2,validate +2293,2,validate +427,1,validate +31,1,validate +210,3,validate +1947,2,validate +3288,1,validate +4066,3,validate +294,2,validate +2547,3,validate +2718,1,validate +3888,2,validate +1764,2,validate +1065,1,validate +1240,2,validate +973,3,validate +3106,2,validate +2627,4,validate +3538,4,validate +62,2,validate +840,4,validate +1403,1,validate +3572,2,validate +1449,4,validate +275,2,validate +487,1,validate +3701,3,validate +1702,4,validate +2232,4,validate +841,4,validate +3177,3,validate +2091,1,validate +2132,2,validate +875,2,validate +262,4,validate +3390,3,validate +1221,1,validate +3257,4,validate +4082,1,validate +255,1,validate +2000,4,validate +871,4,validate +475,4,validate +3207,3,validate +1950,3,validate +996,4,validate +297,3,validate +3470,4,validate +3857,4,validate +2459,1,validate +1980,3,validate +2417,4,validate +4020,3,validate +1026,4,validate +31,4,validate +2713,2,validate +1281,1,validate +2842,3,validate +1148,2,validate +1585,3,validate +411,1,validate +1664,3,validate +11,3,validate +3485,1,validate +1403,4,validate +1219,3,validate +399,4,validate +3564,1,validate +4080,3,validate +745,3,validate +3689,1,validate +3868,3,validate +1778,2,validate +3556,2,validate +1728,1,validate +259,2,validate +2082,4,validate +1686,4,validate +3685,3,validate +3120,2,validate +2032,3,validate +1729,2,validate +379,3,validate +684,1,validate +3898,3,validate +3502,3,validate +2462,1,validate +205,3,validate +4023,3,validate +938,2,validate +2675,1,validate +1022,1,validate +1242,4,validate +1413,2,validate +2358,1,validate +493,2,validate +1538,2,validate +3616,2,validate +1455,4,validate +756,3,validate +3533,4,validate +2796,3,validate +1963,2,validate +968,2,validate +1405,3,validate +3700,1,validate +3617,3,validate +2443,1,validate +2226,3,validate +3355,2,validate +1527,1,validate +2742,4,validate +94,4,validate +2564,3,validate +1082,1,validate +390,2,validate +3122,1,validate +1994,2,validate +1515,4,validate +2381,2,validate +3689,4,validate +2078,1,validate +1902,4,validate +425,1,validate +511,4,validate +2806,2,validate +3152,1,validate +3110,4,validate +1633,1,validate +2544,1,validate +724,4,validate +3153,2,validate +2461,3,validate +674,3,validate +808,3,validate +2411,2,validate +546,3,validate +3323,4,validate +3669,3,validate +1283,3,validate +1062,4,validate +2228,2,validate +322,2,validate +3536,4,validate +3923,4,validate +3620,3,validate +1833,3,validate +972,3,validate +2358,4,validate +3916,1,validate +2921,1,validate +705,4,validate +2704,3,validate +3833,3,validate +1092,4,validate +264,1,validate +47,3,validate +3175,2,validate +3125,1,validate +3734,2,validate +477,1,validate +952,2,validate +1997,2,validate +2293,1,validate +210,2,validate +1947,1,validate +819,3,validate +294,1,validate +211,3,validate +2506,1,validate +3122,4,validate +120,1,validate +557,2,validate +1764,1,validate +3072,3,validate +903,1,validate +2719,1,validate +3106,1,validate +2627,3,validate +678,4,validate +3152,4,validate +1541,1,validate +3319,1,validate +108,4,validate +2544,4,validate +1449,3,validate +275,1,validate +1886,4,validate +495,4,validate +2232,3,validate +800,2,validate +841,3,validate +276,2,validate +3094,4,validate +488,1,validate +9,3,validate +2445,3,validate +3216,2,validate +2000,3,validate +871,3,validate +3999,2,validate +3470,3,validate +476,4,validate +3083,2,validate +264,4,validate +1168,2,validate +3125,4,validate +1734,4,validate +4029,2,validate +2293,4,validate +427,3,validate +31,3,validate +1947,4,validate +3288,3,validate +294,4,validate +2718,3,validate +3888,4,validate +1148,1,validate +1585,2,validate +1764,4,validate +153,1,validate +1065,3,validate +2327,1,validate +1240,4,validate +1889,4,validate +2194,2,validate +3106,4,validate +62,4,validate +1403,3,validate +3572,4,validate +275,4,validate +487,3,validate +3219,2,validate +1828,2,validate +3868,2,validate +134,1,validate +1778,1,validate +783,1,validate +2132,4,validate +259,1,validate +875,4,validate +2082,3,validate +1221,3,validate +388,2,validate +3120,1,validate +1729,1,validate +4082,3,validate +255,3,validate +3898,2,validate +1992,2,validate +205,2,validate +2076,1,validate +247,4,validate +764,1,validate +2938,1,validate +1413,1,validate +2459,3,validate +3067,2,validate +1455,3,validate +756,2,validate +3533,3,validate +2713,4,validate +1281,3,validate +2884,2,validate +3617,2,validate +1060,4,validate +2226,2,validate +1365,2,validate +411,3,validate +1577,1,validate +3355,1,validate +94,3,validate +4043,2,validate +2177,1,validate +2560,4,validate +3781,1,validate +3564,3,validate +1994,1,validate +1515,3,validate +3689,3,validate +1995,2,validate +1778,4,validate +3556,4,validate +1728,3,validate +1812,2,validate +3153,1,validate +2461,2,validate +1729,4,validate +1896,1,validate +3678,2,validate +2462,3,validate +1283,2,validate +2109,1,validate +322,1,validate +1671,4,validate +938,4,validate +2675,3,validate +3620,2,validate +1022,3,validate +3141,4,validate +931,1,validate +972,2,validate +1413,4,validate +2358,3,validate +2795,4,validate +493,4,validate +1538,4,validate +3833,2,validate +2704,2,validate +3616,4,validate +1963,4,validate +968,4,validate +3700,3,validate +2443,3,validate +3734,1,validate +3355,4,validate +790,2,validate +1997,1,validate +91,1,validate +819,2,validate +1082,3,validate +390,4,validate +3122,3,validate +557,1,validate +3468,2,validate +3984,4,validate +1994,4,validate +2423,1,validate +1166,1,validate +2381,4,validate +2078,3,validate +425,3,validate +2806,4,validate +899,2,validate +2636,1,validate +3152,3,validate +1633,3,validate +108,3,validate +2544,3,validate +3153,4,validate +1979,2,validate +2453,1,validate +2411,4,validate +800,1,validate +276,1,validate +4057,1,validate +405,2,validate +2445,2,validate +2142,1,validate +2228,4,validate +322,4,validate +2791,1,validate +3216,1,validate +2355,1,validate +3999,1,validate +3916,3,validate +2921,3,validate +3825,1,validate +356,1,validate +831,2,validate +1480,2,validate +3083,1,validate +3217,1,validate +264,3,validate +3175,4,validate +1168,1,validate +3125,3,validate +2385,1,validate +1734,3,validate +3734,4,validate +4029,1,validate +477,3,validate +952,4,validate +1997,4,validate +2293,3,validate +427,2,validate +210,4,validate +1947,3,validate +3288,2,validate +294,3,validate +2506,3,validate +337,1,validate +2718,2,validate +557,4,validate +2852,2,validate +1764,3,validate +1065,2,validate +1199,2,validate +2802,1,validate +2244,2,validate +2719,3,validate +2194,1,validate +3106,3,validate +3015,1,validate +2323,2,validate +62,3,validate +1066,2,validate +3319,3,validate +754,1,validate +3228,1,validate +275,3,validate +487,2,validate +276,4,validate +488,3,validate +2091,2,validate +875,3,validate +572,2,validate +3390,4,validate +1221,2,validate +3216,4,validate +4041,1,validate +4082,2,validate +2650,1,validate +255,2,validate +3999,4,validate +1992,1,validate +1950,4,validate +1168,4,validate +1597,1,validate +4029,4,validate +2459,2,validate +3463,1,validate +3067,1,validate +1980,4,validate +1281,2,validate +3280,1,validate +2884,1,validate +1627,1,validate +1365,1,validate +1148,3,validate +411,2,validate +1585,4,validate +153,3,validate +2327,3,validate +3231,1,validate +1840,1,validate +1578,1,validate +1664,4,validate +321,1,validate +4043,1,validate +3485,2,validate +1099,2,validate +3564,2,validate +745,4,validate +3219,4,validate +1050,2,validate +1828,4,validate +3868,4,validate +1262,1,validate +1995,1,validate +1778,3,validate +783,3,validate +259,3,validate +1079,1,validate +388,4,validate +3120,3,validate +1729,3,validate +3678,1,validate +684,2,validate +3898,4,validate +818,2,validate +2462,2,validate +205,4,validate +938,3,validate +2675,2,validate +981,1,validate +1022,2,validate +764,3,validate +2938,3,validate +1413,3,validate +756,4,validate +1581,1,validate +968,3,validate +2884,4,validate +2443,2,validate +3617,4,validate +2226,4,validate +1577,3,validate +3355,3,validate +1527,2,validate +790,1,validate +270,2,validate +3002,1,validate +4043,4,validate +2177,3,validate +1082,2,validate +3914,2,validate +2086,1,validate +3781,3,validate +1994,3,validate +3294,1,validate +3032,1,validate +2078,2,validate +1995,4,validate +425,2,validate +899,1,validate +1033,1,validate +1854,1,validate +1162,2,validate +1633,2,validate +1812,4,validate +3153,3,validate +1979,1,validate +2461,4,validate +1896,3,validate +808,4,validate +3669,4,validate +1283,4,validate +2109,3,validate +3712,2,validate +322,3,validate +3620,4,validate +972,4,validate +1143,2,validate +2921,2,validate +3833,4,validate +2704,4,validate +831,1,validate +3175,3,validate +3734,3,validate +3347,2,validate +952,3,validate +790,4,validate +1997,3,validate +91,3,validate +3035,1,validate +819,4,validate +211,4,validate +2506,2,validate +120,2,validate +557,3,validate +2852,1,validate +3468,4,validate +3072,4,validate +903,2,validate +1199,1,validate +2244,1,validate +3115,2,validate +2719,2,validate +2423,3,validate +1462,2,validate +1674,1,validate +1808,1,validate +1116,2,validate +2323,1,validate +899,4,validate +1066,1,validate +1541,2,validate +3319,2,validate +1979,4,validate +2453,3,validate +800,3,validate +276,3,validate +3878,1,validate +2749,1,validate +488,2,validate +405,4,validate +9,4,validate +1230,1,validate +2445,4,validate +2142,3,validate +572,1,validate +3216,3,validate +3999,3,validate +356,3,validate +3300,1,validate +998,1,validate +1480,4,validate +3083,3,validate +3217,3,validate +1168,3,validate +4029,3,validate +2335,2,validate +944,2,validate +427,4,validate +3464,1,validate +3288,4,validate +2718,4,validate +2852,4,validate +153,2,validate +1065,4,validate +2327,2,validate +1199,4,validate +2802,3,validate +2244,4,validate +3148,2,validate +2194,3,validate +3015,3,validate +2323,4,validate +450,1,validate +1099,1,validate +3099,2,validate +317,2,validate +754,3,validate +487,4,validate +3219,3,validate +1050,1,validate +1828,3,validate +134,2,validate +1871,1,validate +1179,2,validate +783,2,validate +2091,4,validate +1263,1,validate +572,4,validate +1221,4,validate +388,3,validate +2521,2,validate +1130,2,validate +4082,4,validate +255,4,validate +1992,3,validate +818,1,validate +2076,2,validate +1597,3,validate +764,2,validate +2938,2,validate +2459,4,validate +3067,3,validate +2368,2,validate +2022,2,validate +1281,4,validate +3280,3,validate +2884,3,validate +3972,2,validate +2106,1,validate +715,1,validate +1627,3,validate +1365,3,validate +411,4,validate +1577,2,validate +3231,3,validate +1840,3,validate +270,1,validate +1578,3,validate +4043,3,validate +2177,2,validate +3485,4,validate +3914,1,validate +1099,4,validate +3781,2,validate +3082,1,validate +3564,4,validate +1133,2,validate +1262,3,validate +1995,3,validate +513,1,validate +2949,1,validate +1728,4,validate +647,1,validate +1162,1,validate +1079,3,validate +1812,3,validate +1896,2,validate +3678,3,validate +684,4,validate +1247,1,validate +2462,4,validate +2109,2,validate +3712,1,validate +2675,4,validate +331,1,validate +981,3,validate +1022,4,validate +2322,2,validate +3925,1,validate +931,2,validate +1143,1,validate +1581,3,validate +3700,4,validate +2443,4,validate +3347,1,validate +1527,4,validate +790,3,validate +91,2,validate +270,4,validate +3002,3,validate +1082,4,validate +3914,4,validate +3468,3,validate +3115,1,validate +2423,2,validate +3294,3,validate +3032,3,validate +1166,2,validate +1462,1,validate +2078,4,validate +1116,1,validate +425,4,validate +899,3,validate +3590,1,validate +1033,3,validate +2636,2,validate +1937,1,validate +1854,3,validate +1162,4,validate +1633,4,validate +1979,3,validate +3541,1,validate +2453,2,validate +1330,2,validate +4057,2,validate +405,3,validate +3712,4,validate +2142,2,validate +2750,1,validate +2355,2,validate +3916,4,validate +2921,4,validate +356,2,validate +3825,2,validate +831,3,validate +2830,2,validate +1480,3,validate +3217,2,validate +2385,2,validate +477,4,validate +2335,1,validate +944,1,validate +83,1,validate +2598,2,validate +3035,3,validate +2944,1,validate +3381,2,validate +2506,4,validate +1291,1,validate +337,2,validate +120,4,validate +2852,3,validate +903,4,validate +1199,3,validate +2802,2,validate +2244,3,validate +2719,4,validate +3148,1,validate +1462,4,validate +1891,1,validate +1674,3,validate +3673,2,validate +1808,3,validate +1116,4,validate +3015,2,validate +2323,3,validate +3149,2,validate +1066,3,validate +1541,4,validate +2366,1,validate +3099,1,validate +3319,4,validate +317,1,validate +754,2,validate +3228,2,validate +530,1,validate +3878,3,validate +2749,3,validate +1179,1,validate +488,4,validate +2091,3,validate +1230,3,validate +572,3,validate +2521,1,validate +1130,1,validate +4041,2,validate +2650,2,validate +1605,1,validate +3300,3,validate +998,3,validate +1818,1,validate +1597,2,validate +3463,2,validate +2335,4,validate +2368,1,validate +944,4,validate +2206,2,validate +2022,1,validate +2631,2,validate +3972,1,validate +3280,2,validate +3676,2,validate +1627,2,validate +1324,1,validate +1148,4,validate +153,4,validate +2327,4,validate +3627,2,validate +3231,2,validate +1840,2,validate +3148,4,validate +1578,2,validate +146,1,validate +321,2,validate +2320,1,validate +3485,3,validate +450,3,validate +4052,1,validate +1099,3,validate +317,4,validate +1133,1,validate +613,2,validate +1050,3,validate +1262,2,validate +134,4,validate +1871,3,validate +1179,4,validate +783,4,validate +259,4,validate +1263,3,validate +1079,2,validate +3120,4,validate +3687,2,validate +1130,4,validate +684,3,validate +818,3,validate +1688,2,validate +2076,4,validate +981,2,validate +764,4,validate +2322,1,validate +2938,4,validate +2368,4,validate +1194,2,validate +2022,4,validate +1581,2,validate +2106,3,validate +715,3,validate +1577,4,validate +100,1,validate +1527,3,validate +3660,2,validate +270,3,validate +2961,1,validate +3002,2,validate +179,1,validate +2177,4,validate +3914,3,validate +2086,2,validate +3781,4,validate +3082,3,validate +3294,2,validate +1133,4,validate +3032,2,validate +2037,2,validate +1033,2,validate +513,3,validate +2949,3,validate +1854,2,validate +1162,3,validate +3853,1,validate +1896,4,validate +1330,1,validate +1247,3,validate +2109,4,validate +3712,3,validate +973,1,validate +2322,4,validate +3925,3,validate +1622,1,validate +931,4,validate +1143,3,validate +2830,1,validate +2964,1,validate +1702,2,validate +1440,2,validate +3826,1,validate +832,2,validate +3347,3,validate +91,4,validate +262,2,validate +2598,1,validate +3035,2,validate +3381,1,validate +120,3,validate +3856,1,validate +862,2,validate +903,3,validate +3115,3,validate +2423,4,validate +1166,4,validate +1462,3,validate +1674,2,validate +3673,1,validate +1808,2,validate +1116,3,validate +3590,3,validate +3149,1,validate +2636,4,validate +1937,3,validate +763,1,validate +1541,3,validate +2283,2,validate +3541,3,validate +2453,4,validate +800,4,validate +3878,2,validate +2749,2,validate +4057,4,validate +581,2,validate +1230,2,validate +2142,4,validate +2750,3,validate +2355,4,validate +356,4,validate +3825,4,validate +3300,2,validate +998,2,validate +3083,4,validate +3217,4,validate +2385,4,validate +2335,3,validate +428,1,validate +944,3,validate +2206,1,validate +1686,2,validate +2598,4,validate +3464,2,validate +2631,1,validate +33,2,validate +3381,4,validate +3676,1,validate +379,1,validate +1291,3,validate +337,4,validate +2802,4,validate +3627,1,validate +3148,3,validate +2194,4,validate +1891,3,validate +3015,4,validate +3149,4,validate +450,2,validate +3099,3,validate +317,3,validate +754,4,validate +3228,4,validate +613,1,validate +530,3,validate +134,3,validate +1871,2,validate +1179,3,validate +1263,2,validate +2521,3,validate +3687,1,validate +1130,3,validate +4041,4,validate +2650,4,validate +1992,4,validate +1688,1,validate +1605,3,validate +2076,3,validate +36,2,validate +1818,3,validate +1597,4,validate +511,2,validate +3463,4,validate +1852,1,validate +3067,4,validate +2368,3,validate +1194,1,validate +2206,4,validate +3110,2,validate +2022,3,validate +2631,4,validate +3972,3,validate +3280,4,validate +2106,2,validate +3676,4,validate +674,1,validate +715,2,validate +3843,1,validate +1627,4,validate +1324,3,validate +1365,4,validate +3011,1,validate +3231,4,validate +3660,1,validate +1062,2,validate +1840,4,validate +1578,4,validate +146,3,validate +321,4,validate +3923,2,validate +2532,2,validate +1833,1,validate +3873,1,validate +3082,2,validate +1092,2,validate +1133,3,validate +2037,1,validate +613,4,validate +1304,1,validate +47,1,validate +1262,4,validate +2562,2,validate +513,2,validate +2949,2,validate +647,2,validate +2384,1,validate +1079,4,validate +3770,2,validate +3678,4,validate +1688,4,validate +1247,2,validate +2330,2,validate +3375,2,validate +331,2,validate +981,4,validate +2322,3,validate +3925,2,validate +931,3,validate +3538,1,validate +1673,2,validate +840,1,validate +1194,4,validate +1581,4,validate +1702,1,validate +1440,1,validate +3094,2,validate +832,1,validate +3660,4,validate +3002,4,validate +262,1,validate +179,3,validate +3257,1,validate +2086,4,validate +475,1,validate +862,1,validate +996,1,validate +3294,4,validate +3032,4,validate +1166,3,validate +3857,1,validate +2037,4,validate +3590,2,validate +1033,4,validate +3724,2,validate +2636,3,validate +1937,2,validate +1854,4,validate +3853,3,validate +2283,1,validate +2417,1,validate +1026,1,validate +3541,2,validate +1155,2,validate +1330,3,validate +4057,3,validate +581,1,validate +3146,2,validate +2750,2,validate +1889,2,validate +1622,3,validate +2355,3,validate +3825,3,validate +831,4,validate +2830,3,validate +2964,3,validate +399,1,validate +1440,4,validate +2385,3,validate +3826,3,validate +832,4,validate +345,2,validate +83,2,validate +2082,1,validate +1686,1,validate +2598,3,validate +3035,4,validate +33,1,validate +3206,2,validate +2944,2,validate +3381,3,validate +1291,2,validate +337,3,validate +3856,3,validate +862,4,validate +3157,2,validate +1766,2,validate +247,2,validate +1891,2,validate +1674,4,validate +3673,3,validate +1808,4,validate +3149,3,validate +1242,1,validate +1066,4,validate +763,3,validate +2366,2,validate +2283,4,validate +3228,3,validate +1455,1,validate +3533,1,validate +530,2,validate +1060,2,validate +3878,4,validate +2749,4,validate +581,4,validate +1230,4,validate +2742,1,validate +94,1,validate +4041,3,validate +2650,3,validate +3130,2,validate +1605,2,validate +3300,4,validate +998,4,validate +2560,2,validate +36,1,validate +1818,2,validate +1515,1,validate +1902,1,validate +511,1,validate +3463,3,validate +428,3,validate +2206,3,validate +3110,1,validate +3464,4,validate +2631,3,validate +724,1,validate +33,4,validate +3676,3,validate +1324,2,validate +3323,1,validate +3627,3,validate +1062,1,validate +3536,1,validate +3973,2,validate +1671,2,validate +146,2,validate +321,3,validate +2320,2,validate +3923,1,validate +2532,1,validate +450,4,validate +3141,2,validate +4052,2,validate +2795,2,validate +705,1,validate +1092,1,validate +613,3,validate +1050,4,validate +2562,1,validate +1871,4,validate +1263,4,validate +3770,1,validate +3687,3,validate +818,4,validate +1688,3,validate +2330,1,validate +3375,1,validate +3984,2,validate +36,4,validate +1673,1,validate +1852,3,validate +678,1,validate +1194,3,validate +108,1,validate +1886,1,validate +2106,4,validate +495,1,validate +715,4,validate +3406,2,validate +3843,3,validate +3144,2,validate +3094,1,validate +100,2,validate +3011,3,validate +3660,3,validate +2961,2,validate +179,2,validate +2532,4,validate +3873,3,validate +2086,3,validate +3082,4,validate +476,1,validate +2037,3,validate +1304,3,validate +2562,4,validate +3724,1,validate +513,4,validate +2949,4,validate +1734,1,validate +647,4,validate +3853,2,validate +2384,3,validate +3770,4,validate +1155,1,validate +4066,2,validate +1247,4,validate +2547,2,validate +2330,4,validate +3888,1,validate +3375,4,validate +3146,1,validate +1240,1,validate +331,4,validate +1889,1,validate +973,2,validate +3925,4,validate +1622,2,validate +3538,3,validate +1143,4,validate +1673,4,validate +62,1,validate +840,3,validate +2964,2,validate +3572,1,validate +1702,3,validate +3701,2,validate +1440,3,validate +3177,2,validate +3826,2,validate +832,3,validate +2132,1,validate +3347,4,validate +345,1,validate +875,1,validate +262,3,validate +3390,2,validate +3206,1,validate +3257,3,validate +475,3,validate +3207,2,validate +3856,2,validate +1950,2,validate +862,3,validate +3157,1,validate +996,3,validate +1766,1,validate +297,2,validate +3115,4,validate +247,1,validate +3857,3,validate +3590,4,validate +3724,4,validate +1937,4,validate +763,2,validate +2283,3,validate +1980,2,validate +2417,3,validate +4020,2,validate +1026,3,validate +3541,4,validate +1155,4,validate +2713,1,validate +1060,1,validate +2842,2,validate +581,3,validate +3146,4,validate +2750,4,validate +1664,2,validate +11,2,validate +3130,1,validate +1219,2,validate +2560,1,validate +399,3,validate +4080,2,validate +745,2,validate +428,2,validate +3556,1,validate +345,4,validate +83,4,validate +1686,3,validate +3685,2,validate +3464,3,validate +33,3,validate +2032,2,validate +3206,4,validate +2944,4,validate +379,2,validate +1291,4,validate +3502,2,validate +3157,4,validate +1766,4,validate +3973,1,validate +1671,1,validate +938,1,validate +1891,4,validate +1242,3,validate +3141,1,validate +2366,4,validate +3099,4,validate +2795,1,validate +493,1,validate +1538,1,validate +3616,1,validate +2796,2,validate +1963,1,validate +968,1,validate +1405,2,validate +530,4,validate +2742,3,validate +2521,4,validate +2564,2,validate +3130,4,validate +390,1,validate +1605,4,validate +3984,1,validate +36,3,validate +1818,4,validate +2381,1,validate +1902,3,validate +511,3,validate +2806,1,validate +1852,2,validate +3110,3,validate +724,3,validate +3972,4,validate +674,2,validate +3843,2,validate +3406,1,validate +808,2,validate +3144,1,validate +2411,1,validate +546,2,validate +3323,3,validate +1324,4,validate +3669,2,validate +3011,2,validate +1062,3,validate +2228,1,validate +3536,3,validate +3973,4,validate +146,4,validate +2320,4,validate +3923,3,validate +2532,3,validate +1833,2,validate +3873,2,validate +4052,4,validate +705,3,validate +1092,3,validate +1304,2,validate +47,2,validate +3175,1,validate +2562,3,validate +647,3,validate +2384,2,validate +952,1,validate +3770,3,validate +210,1,validate +4066,1,validate +211,2,validate +2547,1,validate +2330,3,validate +3375,3,validate +3072,2,validate +331,3,validate +2627,2,validate +3538,2,validate +1673,3,validate +840,2,validate +678,3,validate +1449,2,validate +1886,3,validate +495,3,validate +3406,4,validate +2232,2,validate +3701,1,validate +3144,4,validate +841,2,validate +3177,1,validate +3094,3,validate +100,4,validate +9,2,validate +2961,4,validate +3390,1,validate +179,4,validate +3257,2,validate +2000,2,validate +871,2,validate +475,2,validate +3207,1,validate +1950,1,validate +996,2,validate +297,1,validate +3470,2,validate +476,3,validate +3857,2,validate +3724,3,validate +3853,4,validate +1980,1,validate +2417,2,validate +4020,1,validate +1026,2,validate +31,2,validate +1155,3,validate +1330,4,validate +4066,4,validate +2842,1,validate +2547,4,validate +3888,3,validate +1585,1,validate +3146,3,validate +1240,3,validate +1889,3,validate +1664,1,validate +973,4,validate +1622,4,validate +11,1,validate +1403,2,validate +2830,4,validate +1219,1,validate +2964,4,validate +399,2,validate +3572,3,validate +4080,1,validate +745,1,validate +3219,1,validate +3701,4,validate +1828,1,validate +3868,1,validate +3177,4,validate +3826,4,validate +782,4,test +3036,1,test +2519,3,test +825,2,test +1341,4,test +1553,3,test +3989,3,test +84,4,test +733,4,test +2732,3,test +2549,3,test +3849,1,test +3453,1,test +593,2,test +3807,4,test +4019,3,test +939,1,test +543,1,test +2628,3,test +2409,1,test +3624,4,test +3362,4,test +976,4,test +1272,2,test +1485,2,test +3442,4,test +1140,4,test +3950,2,test +1352,3,test +4001,4,test +2431,2,test +1739,3,test +1648,1,test +2997,4,test +694,2,test +2906,2,test +1952,3,test +1649,2,test +2298,2,test +2814,4,test +2081,4,test +645,2,test +2427,3,test +2857,2,test +1769,3,test +595,1,test +378,3,test +2115,2,test +3852,1,test +641,4,test +1982,3,test +1932,2,test +463,3,test +3324,3,test +1933,3,test +1537,3,test +3453,4,test +1191,3,test +3537,3,test +1234,1,test +1058,4,test +359,3,test +3437,1,test +2745,2,test +3395,4,test +918,2,test +3650,1,test +1093,3,test +2696,2,test +2393,1,test +2479,4,test +2217,4,test +1955,4,test +826,4,test +3221,3,test +1651,1,test +2775,2,test +1518,2,test +523,2,test +2597,1,test +3213,4,test +1335,2,test +3509,2,test +1252,4,test +2077,1,test +1681,1,test +686,1,test +2727,3,test +3934,2,test +1336,3,test +2939,2,test +382,4,test +2069,2,test +3455,3,test +3193,3,test +595,4,test +2840,1,test +3322,4,test +1669,4,test +192,1,test +362,3,test +3053,1,test +2495,2,test +1104,2,test +446,2,test +1054,1,test +575,3,test +4049,1,test +2524,1,test +1437,4,test +2482,4,test +1783,3,test +2828,3,test +3437,4,test +3952,4,test +3649,3,test +1996,3,test +2130,3,test +2779,3,test +2991,2,test +1297,1,test +639,1,test +943,3,test +3720,4,test +2463,4,test +2597,4,test +3071,3,test +1206,4,test +1552,3,test +423,3,test +3155,2,test +3671,4,test +2414,4,test +3022,3,test +1848,1,test +3459,4,test +3368,2,test +1977,2,test +324,2,test +3014,4,test +408,1,test +3622,3,test +2527,2,test +366,4,test +537,2,test +3093,4,test +1482,1,test +3918,1,test +1745,2,test +1612,3,test +825,1,test +84,3,test +2649,4,test +347,4,test +3815,2,test +559,3,test +2995,3,test +905,2,test +1817,4,test +3766,2,test +593,1,test +3674,4,test +639,4,test +3929,1,test +1797,2,test +3401,2,test +3442,3,test +1140,3,test +3139,2,test +3747,1,test +1352,2,test +3268,3,test +4001,3,test +2052,4,test +1656,4,test +96,3,test +2906,1,test +1482,4,test +1649,1,test +1566,3,test +392,1,test +2081,3,test +216,4,test +3777,1,test +2427,2,test +125,2,test +2857,1,test +3036,3,test +1170,2,test +1600,1,test +825,4,test +641,3,test +1383,2,test +463,2,test +1467,1,test +3324,2,test +1933,2,test +3849,3,test +3453,3,test +2499,4,test +593,4,test +3537,2,test +939,3,test +543,3,test +1151,2,test +1759,1,test +2409,3,test +4012,2,test +918,1,test +1272,4,test +3221,2,test +573,2,test +1485,4,test +523,1,test +481,4,test +2043,2,test +3172,2,test +3950,4,test +2431,4,test +2127,1,test +1648,3,test +1252,3,test +694,4,test +3123,2,test +2727,2,test +2906,4,test +1336,2,test +2298,4,test +645,4,test +1811,2,test +2857,4,test +595,3,test +2115,4,test +3852,3,test +3365,1,test +1932,4,test +3232,2,test +2495,1,test +1500,1,test +1104,1,test +3578,1,test +1233,2,test +2970,1,test +1105,2,test +1317,1,test +1234,3,test +3966,2,test +2138,1,test +3183,1,test +922,2,test +3437,3,test +2745,4,test +1354,4,test +3649,2,test +1397,2,test +2130,2,test +3000,1,test +918,4,test +3650,3,test +2476,1,test +1347,1,test +2696,4,test +2393,3,test +1651,3,test +1086,2,test +2775,4,test +1518,4,test +2597,3,test +3071,2,test +1206,3,test +3983,4,test +1511,1,test +1552,2,test +423,2,test +3155,1,test +1335,4,test +2160,1,test +3509,4,test +1681,3,test +3680,2,test +686,3,test +3022,2,test +3459,3,test +3934,4,test +2939,4,test +3764,1,test +3368,1,test +374,2,test +1977,1,test +2111,1,test +324,1,test +2069,4,test +3235,2,test +2840,3,test +537,1,test +671,1,test +192,3,test +1795,2,test +1929,2,test +1745,1,test +3053,3,test +1104,4,test +446,4,test +2008,2,test +1612,2,test +1054,3,test +3349,1,test +2354,1,test +1958,1,test +2524,3,test +347,3,test +1217,2,test +2995,2,test +905,1,test +1817,3,test +2559,2,test +3766,1,test +3167,1,test +2991,4,test +1297,3,test +639,3,test +1076,4,test +2808,4,test +1069,1,test +3634,2,test +2935,1,test +3155,4,test +3584,1,test +1848,3,test +3401,1,test +3139,1,test +324,4,test +887,1,test +3268,2,test +408,3,test +2011,2,test +2527,4,test +96,2,test +570,1,test +1482,3,test +3918,3,test +528,4,test +1962,2,test +1566,2,test +1745,4,test +3389,4,test +3036,2,test +3170,2,test +825,3,test +2387,1,test +2824,2,test +1383,1,test +2732,4,test +3815,4,test +3462,2,test +905,4,test +3849,2,test +593,3,test +3766,4,test +939,2,test +1151,1,test +2409,2,test +4012,1,test +3929,3,test +1797,4,test +573,1,test +1485,3,test +3401,4,test +3139,4,test +1528,1,test +2043,1,test +1352,4,test +2652,2,test +1648,2,test +3123,1,test +2865,2,test +2906,3,test +999,1,test +1649,3,test +2257,2,test +2298,3,test +392,3,test +3598,1,test +2207,1,test +2427,4,test +125,4,test +2857,3,test +1170,4,test +1600,3,test +3852,2,test +817,2,test +1982,4,test +1383,4,test +463,4,test +3232,1,test +634,2,test +3324,4,test +1933,4,test +1763,1,test +1105,1,test +3537,4,test +1234,2,test +3966,1,test +239,2,test +1151,4,test +4012,4,test +2838,2,test +56,2,test +1397,1,test +918,3,test +3650,2,test +4046,2,test +1093,4,test +2393,2,test +3001,1,test +7,2,test +3221,4,test +1086,1,test +573,4,test +1518,3,test +523,3,test +3172,4,test +2043,4,test +2127,3,test +2077,2,test +3680,1,test +2211,2,test +686,2,test +3123,4,test +1512,1,test +2727,4,test +1336,4,test +2939,3,test +1811,4,test +721,1,test +3844,1,test +192,2,test +3365,3,test +1196,1,test +1929,1,test +3053,2,test +3232,4,test +2495,3,test +1500,3,test +1104,3,test +2666,1,test +3578,3,test +2008,1,test +1054,2,test +1233,4,test +2970,3,test +1105,4,test +1317,3,test +4049,2,test +2221,1,test +3966,4,test +964,1,test +922,4,test +3649,4,test +1996,4,test +2130,4,test +3000,3,test +1826,1,test +2559,1,test +2779,4,test +2476,3,test +1347,3,test +1693,2,test +1297,2,test +1431,2,test +3684,2,test +3071,4,test +1594,1,test +3634,1,test +1332,1,test +1552,4,test +423,4,test +3155,3,test +2160,3,test +3680,4,test +3022,4,test +1848,2,test +3847,1,test +416,1,test +3368,3,test +374,4,test +1977,3,test +2111,3,test +324,3,test +3235,4,test +408,2,test +3622,4,test +2011,1,test +3927,2,test +537,3,test +671,3,test +1795,4,test +1962,1,test +967,1,test +1745,3,test +2008,4,test +1612,4,test +3170,1,test +3349,3,test +1180,1,test +1958,3,test +2824,1,test +651,2,test +3815,3,test +1217,4,test +559,4,test +2995,4,test +3462,1,test +905,3,test +2559,4,test +3725,2,test +3766,3,test +1993,1,test +2855,2,test +2072,1,test +207,2,test +1810,1,test +3929,2,test +1069,3,test +3584,3,test +1797,3,test +3401,3,test +3139,3,test +3048,1,test +2652,1,test +3268,4,test +1657,1,test +2011,4,test +96,4,test +570,3,test +2865,1,test +3261,1,test +3910,1,test +2257,1,test +1566,4,test +392,2,test +3777,2,test +125,3,test +3036,4,test +1170,3,test +3170,4,test +867,2,test +3599,1,test +1600,2,test +2824,4,test +817,1,test +1383,3,test +1080,2,test +2683,1,test +1467,2,test +634,1,test +3462,4,test +3849,4,test +939,4,test +543,4,test +239,1,test +1151,3,test +1759,2,test +2409,4,test +4012,3,test +2838,1,test +56,1,test +586,1,test +2268,1,test +4046,1,test +1794,1,test +7,1,test +573,3,test +354,1,test +3172,3,test +2043,3,test +2652,4,test +3081,1,test +2127,2,test +1648,4,test +2211,1,test +3123,3,test +1216,1,test +999,3,test +2474,2,test +2257,4,test +3598,3,test +2207,3,test +1811,3,test +3852,4,test +3365,2,test +1113,2,test +851,2,test +3232,3,test +634,4,test +1500,2,test +3578,2,test +1233,3,test +1763,3,test +2970,2,test +1105,3,test +1276,1,test +1317,2,test +1234,4,test +3966,3,test +2138,2,test +3183,2,test +922,3,test +2838,4,test +3267,1,test +56,4,test +1397,3,test +4088,1,test +3000,2,test +4046,4,test +3650,4,test +2476,2,test +1347,2,test +1044,1,test +2393,4,test +1693,1,test +3001,3,test +1431,1,test +7,4,test +436,1,test +1651,4,test +1086,3,test +1956,2,test +565,2,test +3684,1,test +1511,2,test +516,2,test +2160,2,test +2077,4,test +1681,4,test +3680,3,test +686,4,test +3764,2,test +374,3,test +2111,2,test +3235,3,test +3540,1,test +721,3,test +3927,1,test +2840,4,test +1067,2,test +671,2,test +3844,3,test +192,4,test +1795,3,test +1929,3,test +2537,2,test +3053,4,test +884,2,test +2883,1,test +2008,3,test +1054,4,test +3349,2,test +2354,2,test +1958,2,test +4049,4,test +2524,4,test +2221,3,test +651,1,test +1217,3,test +1260,1,test +1826,3,test +2559,3,test +3725,1,test +3167,2,test +1693,4,test +82,1,test +1297,4,test +2855,1,test +1431,4,test +3938,1,test +207,1,test +3118,2,test +1290,1,test +3330,1,test +1069,2,test +470,2,test +3684,4,test +1594,3,test +420,1,test +3634,3,test +1332,3,test +2935,2,test +3543,1,test +3584,2,test +1848,4,test +3847,3,test +416,3,test +887,2,test +408,4,test +2011,3,test +1920,1,test +3918,4,test +1962,3,test +55,1,test +967,3,test +2916,1,test +2654,1,test +3170,3,test +867,1,test +2387,2,test +2824,3,test +651,4,test +1080,1,test +3462,3,test +2855,4,test +115,1,test +3971,1,test +1810,3,test +3929,4,test +3314,1,test +1528,2,test +3747,4,test +3048,3,test +2652,3,test +1657,3,test +3394,2,test +2865,3,test +999,2,test +696,1,test +3910,3,test +2736,1,test +1649,4,test +2474,1,test +2257,3,test +392,4,test +1954,2,test +3598,2,test +3295,1,test +3777,4,test +2207,2,test +301,2,test +867,4,test +3599,3,test +1600,4,test +817,3,test +2683,3,test +1113,1,test +851,1,test +1467,4,test +634,3,test +2633,2,test +1763,2,test +69,1,test +239,3,test +1976,2,test +1759,4,test +4054,2,test +2838,3,test +56,3,test +2268,3,test +4046,3,test +1794,3,test +2960,1,test +3001,2,test +7,3,test +1956,1,test +565,1,test +523,4,test +2303,1,test +3081,3,test +2127,4,test +516,1,test +2036,2,test +2077,3,test +2211,3,test +1512,2,test +1216,3,test +721,2,test +1804,2,test +1067,1,test +3844,2,test +3365,4,test +1196,2,test +2537,1,test +851,4,test +2495,4,test +884,1,test +1500,4,test +2666,2,test +3578,4,test +2101,1,test +2970,4,test +1276,3,test +1317,4,test +4049,3,test +2221,2,test +2138,4,test +964,2,test +3183,4,test +1310,1,test +3267,3,test +3909,1,test +2914,1,test +3000,4,test +1826,2,test +1960,2,test +3563,1,test +2476,4,test +1261,1,test +1347,4,test +1044,3,test +2647,2,test +1693,3,test +1431,3,test +436,3,test +2731,1,test +782,2,test +1078,1,test +3118,1,test +565,4,test +470,1,test +3684,3,test +1553,1,test +1594,2,test +1332,2,test +1511,4,test +2160,4,test +683,1,test +3847,2,test +416,2,test +2415,1,test +3764,4,test +3368,4,test +1977,4,test +2111,4,test +2628,1,test +3927,3,test +537,4,test +671,4,test +3362,2,test +2537,4,test +967,2,test +884,4,test +3349,4,test +1442,2,test +2354,4,test +1180,2,test +1958,4,test +135,1,test +651,3,test +1739,1,test +1260,3,test +2863,2,test +2601,2,test +3725,3,test +3167,4,test +1993,2,test +2814,2,test +2855,3,test +3938,3,test +2072,2,test +207,3,test +1810,2,test +3118,4,test +378,1,test +1290,3,test +3330,3,test +1069,4,test +3414,2,test +420,3,test +2935,4,test +3543,3,test +3584,4,test +1537,1,test +1191,1,test +3747,3,test +3048,2,test +887,4,test +1657,2,test +3656,1,test +3394,1,test +3528,1,test +1920,3,test +3261,2,test +3395,2,test +3910,2,test +1742,2,test +55,3,test +1954,1,test +3777,3,test +697,1,test +301,1,test +2916,3,test +2654,3,test +1955,2,test +826,2,test +867,3,test +3599,2,test +2387,4,test +3637,1,test +1080,3,test +2683,2,test +1984,1,test +1467,3,test +2633,1,test +2197,1,test +3242,1,test +2980,1,test +1976,1,test +1759,3,test +4054,1,test +2585,2,test +1456,2,test +3193,1,test +3971,3,test +586,2,test +2268,2,test +1794,2,test +362,1,test +3314,3,test +3610,1,test +1528,4,test +354,2,test +3739,2,test +1437,2,test +3081,2,test +2036,1,test +1216,2,test +3952,2,test +3690,2,test +999,4,test +696,3,test +2736,3,test +2474,3,test +3598,4,test +3295,3,test +2207,4,test +301,4,test +122,1,test +1804,1,test +1938,1,test +943,1,test +3720,2,test +2067,2,test +1113,3,test +851,3,test +2633,4,test +1763,4,test +1276,2,test +1410,2,test +19,2,test +2751,1,test +2138,3,test +1976,4,test +3183,3,test +4054,4,test +103,1,test +3267,2,test +1397,4,test +4088,2,test +3093,2,test +1960,1,test +1044,2,test +2647,1,test +3001,4,test +436,2,test +1086,4,test +1956,3,test +782,1,test +565,3,test +1341,1,test +84,1,test +733,1,test +1511,3,test +516,3,test +2036,4,test +1512,4,test +3764,3,test +3807,1,test +3540,2,test +3674,2,test +721,4,test +3624,1,test +1804,4,test +1067,3,test +3066,2,test +3362,1,test +3844,4,test +976,1,test +1196,4,test +3491,2,test +1929,4,test +2537,3,test +884,3,test +2883,2,test +2666,4,test +1442,1,test +2354,3,test +1705,2,test +2221,4,test +3442,1,test +964,4,test +1310,3,test +1656,2,test +1260,2,test +2863,1,test +2997,1,test +2601,1,test +3909,3,test +1826,4,test +1960,4,test +3563,3,test +3167,3,test +1261,3,test +2647,4,test +82,2,test +2814,1,test +2081,1,test +216,2,test +2731,3,test +3938,2,test +1078,3,test +3118,3,test +1290,2,test +3330,2,test +470,3,test +641,1,test +3414,1,test +1594,4,test +420,2,test +3634,4,test +1332,4,test +2935,3,test +3543,2,test +683,3,test +3847,4,test +416,4,test +2415,3,test +3756,2,test +2499,2,test +887,3,test +1058,1,test +1920,2,test +3395,1,test +1742,1,test +1962,4,test +55,2,test +967,4,test +2479,1,test +2916,2,test +2217,1,test +2654,2,test +1955,1,test +826,1,test +1442,4,test +1180,4,test +2387,3,test +135,3,test +481,2,test +3213,1,test +2863,4,test +1252,1,test +2601,4,test +1993,4,test +382,1,test +115,2,test +2585,1,test +1456,1,test +2072,4,test +3971,2,test +1810,4,test +3322,1,test +66,2,test +1669,1,test +3414,4,test +3314,2,test +1528,3,test +3739,1,test +3048,4,test +1437,1,test +1657,4,test +3656,3,test +2482,1,test +3394,3,test +3528,3,test +3952,1,test +3261,4,test +1354,2,test +2865,4,test +3690,1,test +696,2,test +3910,4,test +2736,2,test +1742,4,test +1954,3,test +3295,2,test +697,3,test +301,3,test +3599,4,test +1692,2,test +817,4,test +3720,1,test +860,2,test +3637,3,test +2463,1,test +2067,1,test +2683,4,test +1984,3,test +1206,1,test +3983,2,test +2633,3,test +3671,1,test +3113,2,test +2414,1,test +2197,3,test +3459,1,test +69,2,test +3242,3,test +2980,3,test +1410,1,test +19,1,test +3192,2,test +239,4,test +1976,3,test +4054,3,test +2585,4,test +1456,4,test +3014,1,test +366,1,test +3143,2,test +586,4,test +2268,4,test +3093,1,test +1794,4,test +2960,2,test +3610,3,test +2911,2,test +354,4,test +3739,4,test +2303,2,test +3081,4,test +2649,1,test +347,1,test +2036,3,test +2211,4,test +1216,4,test +1512,3,test +3690,4,test +1817,1,test +3674,1,test +1076,2,test +122,3,test +1804,3,test +3066,1,test +1938,3,test +2808,2,test +1196,3,test +3491,1,test +2067,4,test +2666,3,test +2101,2,test +1276,4,test +1705,1,test +1410,4,test +19,4,test +2314,2,test +2751,3,test +964,3,test +103,3,test +1310,2,test +2052,1,test +1656,1,test +3267,4,test +3909,2,test +4088,4,test +2914,2,test +1960,3,test +3563,2,test +528,2,test +1261,2,test +1044,4,test +2647,3,test +216,1,test +3389,2,test +436,4,test +2731,2,test +782,3,test +1078,2,test +2519,2,test +1341,3,test +1553,2,test +3989,2,test +733,3,test +2732,2,test +683,2,test +2415,2,test +2549,2,test +3756,1,test +2499,1,test +3807,3,test +4019,2,test +2628,2,test +3540,4,test +3927,4,test +3624,3,test +3066,4,test +3362,3,test +976,3,test +3491,4,test +2883,4,test +1272,1,test +1442,3,test +1180,3,test +1485,1,test +1705,4,test +135,2,test +481,1,test +3950,1,test +2431,1,test +1739,2,test +1260,4,test +2863,3,test +2997,3,test +2601,3,test +694,1,test +3725,4,test +1993,3,test +2298,1,test +82,4,test +2814,3,test +645,1,test +3938,4,test +2072,3,test +207,4,test +1769,2,test +378,2,test +1290,4,test +3330,4,test +2115,1,test +66,1,test +3414,3,test +420,4,test +1982,2,test +3543,4,test +1932,1,test +1537,2,test +3756,4,test +1191,2,test +3656,2,test +1058,3,test +359,2,test +3528,2,test +1920,4,test +2745,1,test +3261,3,test +1354,1,test +3395,3,test +1742,3,test +55,4,test +1093,2,test +697,2,test +2696,1,test +2479,3,test +2916,4,test +2654,4,test +1955,3,test +826,3,test +1692,1,test +2775,1,test +1518,1,test +860,1,test +3637,2,test +1080,4,test +3213,3,test +1984,2,test +3983,1,test +1335,1,test +3509,1,test +3113,1,test +2197,2,test +3934,1,test +3242,2,test +2939,1,test +2980,2,test +382,3,test +3192,1,test +115,4,test +2069,1,test +2585,3,test +1456,3,test +3455,2,test +3193,2,test +3971,4,test +3143,1,test +586,3,test +3322,3,test +66,4,test +1669,3,test +362,2,test +3314,4,test +446,1,test +3610,2,test +575,2,test +2911,1,test +354,3,test +3739,3,test +1437,3,test +2482,3,test +1783,2,test +2828,2,test +3952,3,test +3690,3,test +696,4,test +2736,4,test +1996,2,test +2474,4,test +2779,2,test +3295,4,test +2991,1,test +1076,1,test +1692,4,test +122,2,test +1938,2,test +2808,1,test +943,2,test +3720,3,test +860,4,test +2463,3,test +2067,3,test +1113,4,test +3671,3,test +3113,4,test +2414,3,test +69,4,test +1410,3,test +19,3,test +2314,1,test +2751,2,test +3192,4,test +103,2,test +3014,3,test +3622,2,test +2527,1,test +366,3,test +3143,4,test +4088,3,test +3093,3,test +528,1,test +2960,4,test +3389,1,test +1956,4,test +2519,1,test +2911,4,test +1341,2,test +3989,1,test +84,2,test +2303,4,test +733,2,test +2732,1,test +516,4,test +2649,3,test +3815,1,test +559,2,test +2549,1,test +3807,2,test +4019,1,test +3540,3,test +3674,3,test +3624,2,test +1067,4,test +3066,3,test +976,2,test +3491,3,test +2883,3,test +2101,4,test +1797,1,test +1705,3,test +3442,2,test +2314,4,test +1140,2,test +1352,1,test +1310,4,test +4001,2,test +2052,3,test +1656,3,test +2997,2,test +3909,4,test +2914,4,test +3563,4,test +1952,1,test +1261,4,test +82,3,test +2081,2,test +216,3,test +2731,4,test +2427,1,test +125,1,test +1769,1,test +1078,4,test +1170,1,test +2519,4,test +470,4,test +641,2,test +1553,4,test +3989,4,test +1982,1,test +463,1,test +683,4,test +3324,1,test +1933,1,test +2415,4,test +2549,4,test +3756,3,test +3453,2,test +2499,3,test +3537,1,test +4019,4,test +543,2,test +2628,4,test +1058,2,test +359,1,test +1093,1,test +1272,3,test +2479,2,test +2217,2,test +3221,1,test +135,4,test +481,3,test +3172,1,test +3213,2,test +3950,3,test +2431,3,test +1739,4,test +1252,2,test +694,3,test +2727,1,test +1336,1,test +1952,4,test +382,2,test +115,3,test +645,3,test +1811,1,test +3455,1,test +1769,4,test +595,2,test +378,4,test +2115,3,test +3322,2,test +66,3,test +1669,2,test +1932,3,test +1537,4,test +1233,1,test +575,1,test +1191,4,test +3656,4,test +2482,2,test +3394,4,test +1783,1,test +359,4,test +3528,4,test +2828,1,test +922,1,test +3437,2,test +2745,3,test +1354,3,test +3649,1,test +1996,1,test +2130,1,test +1954,4,test +2779,1,test +697,4,test +2696,3,test +1651,2,test +1692,3,test +2775,3,test +860,3,test +3637,4,test +2463,2,test +2597,2,test +3071,1,test +1206,2,test +3983,3,test +1984,4,test +1552,1,test +423,1,test +1335,3,test +3671,2,test +3509,3,test +3113,3,test +1681,2,test +2414,2,test +2197,4,test +3459,2,test +3022,1,test +3934,3,test +69,3,test +3242,4,test +2980,4,test +374,1,test +3192,3,test +2069,3,test +3235,1,test +3455,4,test +3014,2,test +3193,4,test +3622,1,test +366,2,test +3143,3,test +2840,2,test +1795,1,test +2960,3,test +362,4,test +446,3,test +1612,1,test +3610,4,test +575,4,test +2911,3,test +2524,2,test +2303,3,test +1783,4,test +2649,2,test +347,2,test +2828,4,test +1217,1,test +559,1,test +2995,1,test +1817,2,test +2991,3,test +639,2,test +1076,3,test +122,4,test +1938,4,test +2808,3,test +943,4,test +2101,3,test +2314,3,test +2751,4,test +1140,1,test +103,4,test +3268,1,test +4001,1,test +2052,2,test +2527,3,test +96,1,test +2914,3,test +1482,2,test +3918,2,test +528,3,test +1566,1,test +3389,3,test +1695,2,calibrate +596,3,calibrate +1433,2,calibrate +2625,3,calibrate +624,3,calibrate +3150,4,calibrate +1988,4,calibrate +3591,3,calibrate +1737,4,calibrate +201,4,calibrate +3552,2,calibrate +273,1,calibrate +3446,2,calibrate +2336,3,calibrate +748,2,calibrate +2933,2,calibrate +1345,1,calibrate +3408,3,calibrate +2850,4,calibrate +2017,3,calibrate +1011,3,calibrate +603,1,calibrate +1941,4,calibrate +1264,3,calibrate +3397,2,calibrate +710,2,calibrate +3860,1,calibrate +1558,1,calibrate +4058,4,calibrate +907,3,calibrate +3191,1,calibrate +4069,4,calibrate +3119,3,calibrate +774,4,calibrate +75,3,calibrate +2500,3,calibrate +657,4,calibrate +2952,2,calibrate +3666,1,calibrate +209,3,calibrate +3131,4,calibrate +2671,1,calibrate +186,1,calibrate +858,3,calibrate +2869,4,calibrate +1299,2,calibrate +3332,3,calibrate +2233,4,calibrate +3070,3,calibrate +1238,4,calibrate +1667,1,calibrate +725,4,calibrate +2724,3,calibrate +2317,3,calibrate +2328,3,calibrate +1584,3,calibrate +3613,3,calibrate +2477,1,calibrate +2663,2,calibrate +76,3,calibrate +3731,4,calibrate +3346,4,calibrate +980,1,calibrate +49,4,calibrate +2014,1,calibrate +71,1,calibrate +2290,3,calibrate +2279,3,calibrate +3905,4,calibrate +888,3,calibrate +596,2,calibrate +637,3,calibrate +2625,2,calibrate +3810,4,calibrate +2837,1,calibrate +3715,1,calibrate +1644,4,calibrate +201,3,calibrate +3552,1,calibrate +1040,2,calibrate +2336,2,calibrate +748,1,calibrate +2933,1,calibrate +3408,2,calibrate +466,4,calibrate +2017,2,calibrate +3829,4,calibrate +1941,3,calibrate +1264,2,calibrate +3316,4,calibrate +710,1,calibrate +2825,4,calibrate +907,2,calibrate +2708,4,calibrate +3863,2,calibrate +3119,2,calibrate +177,4,calibrate +1758,3,calibrate +629,3,calibrate +774,3,calibrate +740,1,calibrate +75,2,calibrate +2500,2,calibrate +657,3,calibrate +2952,1,calibrate +1165,1,calibrate +858,2,calibrate +1613,2,calibrate +1299,1,calibrate +1385,4,calibrate +2536,4,calibrate +2199,1,calibrate +2233,3,calibrate +2210,1,calibrate +3574,2,calibrate +273,4,calibrate +3312,2,calibrate +725,3,calibrate +2317,2,calibrate +2328,2,calibrate +3613,2,calibrate +3658,1,calibrate +2663,1,calibrate +2016,1,calibrate +603,4,calibrate +4068,3,calibrate +3346,3,calibrate +4079,3,calibrate +2677,3,calibrate +2290,2,calibrate +2279,2,calibrate +3905,3,calibrate +3191,4,calibrate +3475,1,calibrate +888,2,calibrate +637,2,calibrate +2625,1,calibrate +375,2,calibrate +3779,3,calibrate +1644,3,calibrate +1142,3,calibrate +2297,1,calibrate +2734,2,calibrate +454,2,calibrate +1040,1,calibrate +2336,1,calibrate +3741,3,calibrate +747,4,calibrate +466,3,calibrate +3976,4,calibrate +496,4,calibrate +1941,2,calibrate +1264,1,calibrate +3316,3,calibrate +355,1,calibrate +71,4,calibrate +907,1,calibrate +960,4,calibrate +3714,3,calibrate +2825,3,calibrate +1400,1,calibrate +249,1,calibrate +2708,3,calibrate +3863,1,calibrate +177,3,calibrate +1758,2,calibrate +629,2,calibrate +1362,2,calibrate +3425,4,calibrate +2837,4,calibrate +1970,1,calibrate +1959,1,calibrate +553,3,calibrate +2882,3,calibrate +2190,4,calibrate +1005,2,calibrate +3715,4,calibrate +1613,1,calibrate +526,4,calibrate +2536,3,calibrate +1385,3,calibrate +3574,1,calibrate +2464,2,calibrate +2475,2,calibrate +3312,1,calibrate +2810,1,calibrate +2035,4,calibrate +4079,2,calibrate +4068,2,calibrate +2677,2,calibrate +1985,3,calibrate +3600,4,calibrate +2186,2,calibrate +3109,4,calibrate +637,1,calibrate +241,1,calibrate +375,1,calibrate +1590,4,calibrate +3779,2,calibrate +344,4,calibrate +1644,2,calibrate +283,3,calibrate +3049,4,calibrate +1165,4,calibrate +757,2,calibrate +1142,2,calibrate +2734,1,calibrate +454,1,calibrate +484,2,calibrate +1780,2,calibrate +3858,2,calibrate +1981,1,calibrate +830,1,calibrate +1312,4,calibrate +150,4,calibrate +161,4,calibrate +3741,2,calibrate +579,1,calibrate +2205,2,calibrate +747,3,calibrate +3976,3,calibrate +496,3,calibrate +731,4,calibrate +2016,4,calibrate +1776,4,calibrate +385,4,calibrate +2825,2,calibrate +960,3,calibrate +3714,2,calibrate +2604,3,calibrate +3475,4,calibrate +525,2,calibrate +2984,4,calibrate +1362,1,calibrate +3425,3,calibrate +553,2,calibrate +4063,3,calibrate +2190,3,calibrate +2220,4,calibrate +1005,1,calibrate +2882,2,calibrate +2923,3,calibrate +526,3,calibrate +2536,2,calibrate +1385,2,calibrate +1426,3,calibrate +913,3,calibrate +2475,1,calibrate +2464,1,calibrate +3679,4,calibrate +3573,4,calibrate +571,1,calibrate +1042,4,calibrate +4079,1,calibrate +4068,1,calibrate +2677,1,calibrate +1985,2,calibrate +3600,3,calibrate +3652,4,calibrate +2186,1,calibrate +1506,4,calibrate +355,4,calibrate +3109,3,calibrate +795,1,calibrate +1400,4,calibrate +1590,3,calibrate +3779,1,calibrate +837,3,calibrate +2003,1,calibrate +1072,4,calibrate +3049,3,calibrate +283,2,calibrate +757,1,calibrate +484,1,calibrate +1780,1,calibrate +1855,4,calibrate +3858,1,calibrate +3899,2,calibrate +1312,3,calibrate +161,3,calibrate +150,3,calibrate +3827,4,calibrate +2205,1,calibrate +3576,4,calibrate +496,2,calibrate +731,3,calibrate +2364,3,calibrate +906,4,calibrate +206,1,calibrate +385,3,calibrate +2604,2,calibrate +3382,4,calibrate +3265,4,calibrate +525,1,calibrate +2984,3,calibrate +1874,4,calibrate +734,4,calibrate +3425,2,calibrate +1623,4,calibrate +4063,2,calibrate +2923,2,calibrate +2220,3,calibrate +526,2,calibrate +1426,2,calibrate +913,2,calibrate +3679,3,calibrate +685,4,calibrate +1981,4,calibrate +830,4,calibrate +3573,3,calibrate +579,4,calibrate +3640,2,calibrate +1042,3,calibrate +328,4,calibrate +3412,4,calibrate +1695,1,calibrate +1433,1,calibrate +3944,4,calibrate +2804,4,calibrate +2060,4,calibrate +3652,3,calibrate +3933,4,calibrate +624,2,calibrate +1536,4,calibrate +3109,2,calibrate +3150,3,calibrate +1988,3,calibrate +3591,2,calibrate +1737,3,calibrate +3446,1,calibrate +837,2,calibrate +1072,3,calibrate +1258,4,calibrate +2850,3,calibrate +1855,3,calibrate +1011,2,calibrate +3899,1,calibrate +1683,4,calibrate +3827,3,calibrate +3397,1,calibrate +3576,3,calibrate +571,4,calibrate +4069,3,calibrate +2611,4,calibrate +2204,4,calibrate +4058,3,calibrate +2364,2,calibrate +2604,1,calibrate +209,2,calibrate +3382,3,calibrate +3131,3,calibrate +3265,3,calibrate +2869,3,calibrate +3332,2,calibrate +1874,3,calibrate +734,3,calibrate +3070,2,calibrate +1623,3,calibrate +1238,3,calibrate +4063,1,calibrate +2923,1,calibrate +2220,2,calibrate +2724,2,calibrate +2003,4,calibrate +1584,2,calibrate +1345,4,calibrate +76,2,calibrate +913,1,calibrate +3679,2,calibrate +3731,3,calibrate +685,3,calibrate +49,3,calibrate +3640,1,calibrate +3860,4,calibrate +3412,3,calibrate +1558,4,calibrate +596,1,calibrate +3810,3,calibrate +3933,3,calibrate +3944,3,calibrate +2804,3,calibrate +3652,2,calibrate +624,1,calibrate +1536,3,calibrate +3150,2,calibrate +1988,2,calibrate +3591,1,calibrate +3666,4,calibrate +186,4,calibrate +1737,2,calibrate +201,2,calibrate +2671,4,calibrate +1667,4,calibrate +3408,1,calibrate +1258,3,calibrate +2850,2,calibrate +2477,4,calibrate +2017,1,calibrate +1011,1,calibrate +3829,3,calibrate +1683,3,calibrate +980,4,calibrate +2014,4,calibrate +4058,2,calibrate +2611,3,calibrate +4069,2,calibrate +2204,3,calibrate +3119,1,calibrate +2364,1,calibrate +774,2,calibrate +75,1,calibrate +2500,1,calibrate +657,2,calibrate +209,1,calibrate +3382,2,calibrate +3131,2,calibrate +858,1,calibrate +2869,2,calibrate +3332,1,calibrate +2233,2,calibrate +3070,1,calibrate +3552,4,calibrate +1238,2,calibrate +273,3,calibrate +3446,4,calibrate +748,4,calibrate +2724,1,calibrate +2328,1,calibrate +1584,1,calibrate +725,2,calibrate +3613,1,calibrate +1345,3,calibrate +2317,1,calibrate +2933,4,calibrate +76,1,calibrate +3731,2,calibrate +3346,2,calibrate +603,3,calibrate +49,2,calibrate +3397,4,calibrate +710,4,calibrate +3860,3,calibrate +2290,1,calibrate +2279,1,calibrate +3905,2,calibrate +3191,3,calibrate +888,1,calibrate +3810,2,calibrate +3933,2,calibrate +2804,2,calibrate +3944,2,calibrate +740,4,calibrate +3666,3,calibrate +2952,4,calibrate +186,3,calibrate +201,1,calibrate +1299,4,calibrate +2199,4,calibrate +2210,4,calibrate +1667,3,calibrate +466,2,calibrate +3658,4,calibrate +2477,3,calibrate +2663,4,calibrate +3829,2,calibrate +1941,1,calibrate +980,3,calibrate +3316,2,calibrate +71,3,calibrate +4058,1,calibrate +4069,1,calibrate +2204,2,calibrate +2708,2,calibrate +596,4,calibrate +177,2,calibrate +2625,4,calibrate +1758,1,calibrate +629,1,calibrate +774,1,calibrate +2837,3,calibrate +3715,3,calibrate +657,1,calibrate +2233,1,calibrate +2297,4,calibrate +3552,3,calibrate +1238,1,calibrate +1040,4,calibrate +273,2,calibrate +2336,4,calibrate +748,3,calibrate +725,1,calibrate +2933,3,calibrate +603,2,calibrate +3731,1,calibrate +3346,1,calibrate +1264,4,calibrate +3905,1,calibrate +907,4,calibrate +3191,2,calibrate +249,4,calibrate +3810,1,calibrate +3863,4,calibrate +740,3,calibrate +344,3,calibrate +1970,4,calibrate +75,4,calibrate +1959,4,calibrate +1644,1,calibrate +186,2,calibrate +2952,3,calibrate +1165,3,calibrate +1142,1,calibrate +858,4,calibrate +1299,3,calibrate +1613,4,calibrate +2199,3,calibrate +2210,3,calibrate +3574,4,calibrate +1667,2,calibrate +3312,4,calibrate +3741,1,calibrate +2317,4,calibrate +2328,4,calibrate +747,2,calibrate +2810,4,calibrate +466,1,calibrate +3976,2,calibrate +3658,3,calibrate +2663,3,calibrate +3829,1,calibrate +2016,3,calibrate +1776,3,calibrate +3316,1,calibrate +71,2,calibrate +2825,1,calibrate +960,2,calibrate +3714,1,calibrate +2290,4,calibrate +2279,4,calibrate +2708,1,calibrate +3475,3,calibrate +888,4,calibrate +637,4,calibrate +241,4,calibrate +177,1,calibrate +375,4,calibrate +2837,2,calibrate +553,1,calibrate +3715,2,calibrate +2190,2,calibrate +2882,1,calibrate +2536,1,calibrate +1385,1,calibrate +2297,3,calibrate +2734,4,calibrate +454,4,calibrate +1040,3,calibrate +2035,2,calibrate +1985,1,calibrate +3600,2,calibrate +1506,3,calibrate +355,3,calibrate +1400,3,calibrate +249,3,calibrate +3863,3,calibrate +1590,2,calibrate +1758,4,calibrate +629,4,calibrate +1362,4,calibrate +740,2,calibrate +344,2,calibrate +1970,3,calibrate +1959,3,calibrate +1005,4,calibrate +283,1,calibrate +3049,2,calibrate +1613,3,calibrate +1165,2,calibrate +2210,2,calibrate +2199,2,calibrate +3574,3,calibrate +2464,4,calibrate +1312,2,calibrate +150,2,calibrate +3312,3,calibrate +161,2,calibrate +2475,4,calibrate +747,1,calibrate +2810,3,calibrate +3658,2,calibrate +3976,1,calibrate +496,1,calibrate +731,2,calibrate +2016,2,calibrate +906,3,calibrate +4079,4,calibrate +4068,4,calibrate +1776,2,calibrate +2677,4,calibrate +385,2,calibrate +960,1,calibrate +2186,4,calibrate +3475,2,calibrate +795,4,calibrate +241,3,calibrate +2984,2,calibrate +375,3,calibrate +3425,1,calibrate +3779,4,calibrate +2190,1,calibrate +526,1,calibrate +1426,1,calibrate +757,4,calibrate +1142,4,calibrate +2297,2,calibrate +454,3,calibrate +484,4,calibrate +2734,3,calibrate +1780,4,calibrate +3858,4,calibrate +1981,3,calibrate +830,3,calibrate +3573,2,calibrate +3741,4,calibrate +579,3,calibrate +2205,4,calibrate +1042,2,calibrate +328,3,calibrate +2035,1,calibrate +2060,3,calibrate +3600,1,calibrate +206,4,calibrate +1506,2,calibrate +355,2,calibrate +3109,1,calibrate +3714,4,calibrate +1400,2,calibrate +249,2,calibrate +1590,1,calibrate +525,4,calibrate +1362,3,calibrate +344,1,calibrate +1959,2,calibrate +1970,2,calibrate +837,1,calibrate +553,4,calibrate +2882,4,calibrate +1005,3,calibrate +1072,2,calibrate +3049,1,calibrate +1855,2,calibrate +2475,3,calibrate +1312,1,calibrate +150,1,calibrate +2464,3,calibrate +161,1,calibrate +3827,2,calibrate +3576,2,calibrate +2810,2,calibrate +571,3,calibrate +731,1,calibrate +1695,4,calibrate +906,2,calibrate +1776,1,calibrate +1433,4,calibrate +1985,4,calibrate +385,1,calibrate +2186,3,calibrate +795,3,calibrate +3265,2,calibrate +241,2,calibrate +2984,1,calibrate +1874,2,calibrate +734,2,calibrate +1623,2,calibrate +2220,1,calibrate +2003,3,calibrate +283,4,calibrate +757,3,calibrate +484,3,calibrate +1780,3,calibrate +3679,1,calibrate +685,2,calibrate +3858,3,calibrate +1981,2,calibrate +830,2,calibrate +3899,4,calibrate +3573,1,calibrate +579,2,calibrate +2205,3,calibrate +1042,1,calibrate +328,2,calibrate +3412,2,calibrate +1558,3,calibrate +2060,2,calibrate +206,3,calibrate +3652,1,calibrate +1506,1,calibrate +1536,2,calibrate +3150,1,calibrate +1988,1,calibrate +2604,4,calibrate +1737,1,calibrate +2671,3,calibrate +525,3,calibrate +4063,4,calibrate +2923,4,calibrate +1072,1,calibrate +1258,2,calibrate +2850,1,calibrate +1426,4,calibrate +1855,1,calibrate +913,4,calibrate +1683,2,calibrate +3827,1,calibrate +2014,3,calibrate +3576,1,calibrate +3640,4,calibrate +571,2,calibrate +2611,2,calibrate +1695,3,calibrate +906,1,calibrate +1433,3,calibrate +624,4,calibrate +3382,1,calibrate +795,2,calibrate +3131,1,calibrate +3591,4,calibrate +3265,1,calibrate +2869,1,calibrate +1874,1,calibrate +734,1,calibrate +1623,1,calibrate +3446,3,calibrate +837,4,calibrate +2003,2,calibrate +1345,2,calibrate +3408,4,calibrate +2017,4,calibrate +1011,4,calibrate +685,1,calibrate +3899,3,calibrate +49,1,calibrate +3397,3,calibrate +328,1,calibrate +3860,2,calibrate +3412,1,calibrate +1558,2,calibrate +710,3,calibrate +3119,4,calibrate +2364,4,calibrate +3933,1,calibrate +3944,1,calibrate +2804,1,calibrate +206,2,calibrate +2060,1,calibrate +1536,1,calibrate +2500,4,calibrate +3666,2,calibrate +209,4,calibrate +2671,2,calibrate +3332,4,calibrate +3070,4,calibrate +2724,4,calibrate +1584,4,calibrate +3613,4,calibrate +1258,1,calibrate +2477,2,calibrate +76,4,calibrate +1683,1,calibrate +980,2,calibrate +2014,2,calibrate +3640,3,calibrate +2611,1,calibrate +2204,1,calibrate diff --git a/models/hbr/README.md b/models/hbr/README.md deleted file mode 100644 index db612df..0000000 --- a/models/hbr/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# models/hbr - -The HBR feature's two sub-models, both used by `estimate_eir_with_mosquito_delta` -(`src/estimint/hbr.py`) to answer "what happens to EIR if mosquito density changes by X%?". - -| Sub-model | Direction | Bundle name | File | -|---|---|---|---| -| `train_hbr_to_eir.py` | HBR + interventions → EIR | `hbr` | `estiMINT_HBR_model.pkl` | -| `train_eir_to_hbr.py` | EIR + interventions → HBR | `eir_to_hbr` | `estiMINT_EIR_to_HBR_model.pkl` | - -```bash -python models/hbr/prepare.py # source -> hbr_training.parquet + eir_to_hbr_training.parquet -python models/hbr/train_hbr_to_eir.py # -> estiMINT_HBR_model.pkl -python models/hbr/train_eir_to_hbr.py # -> estiMINT_EIR_to_HBR_model.pkl -``` - -Deployed copies live in `src/estimint/data/`. diff --git a/models/hbr/prepare.py b/models/hbr/prepare.py deleted file mode 100644 index 5535ff1..0000000 --- a/models/hbr/prepare.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Derive the two HBR training views from datasets/estimint_simulations_y9.parquet. - -- hbr_training: HBR->EIR model (hbr_y9 > 0) -- eir_to_hbr_training: EIR->HBR model (prev_y9 >= 0.01 AND hbr_y9 > 0) - -Both sorted by key for a deterministic, reproducible view. -""" - -from pathlib import Path - -import pandas as pd - -HERE = Path(__file__).parent -SOURCE = HERE.parents[1] / "datasets" / "estimint_simulations_y9.parquet" - -KEYS = ["parameter_index", "simulation_index"] -COLS = KEYS + ["eir", "dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use", "hbr_y9"] -MIN_PREVALENCE = 0.01 - - -def prepare(): - src = pd.read_parquet(SOURCE) - - hbr = src[src.hbr_y9 > 0][COLS].sort_values(KEYS).reset_index(drop=True) - assert len(hbr) == 16384, f"expected 16,384 hbr rows, got {len(hbr):,}" - assert not hbr.isna().any().any(), "unexpected NaN in hbr view" - hbr.to_parquet(HERE / "hbr_training.parquet", index=False) - print(f"hbr view: {len(hbr):,} rows -> models/hbr/hbr_training.parquet") - - e2h = src[(src.prev_y9 >= MIN_PREVALENCE) & (src.hbr_y9 > 0)][COLS].sort_values(KEYS).reset_index(drop=True) - assert len(e2h) == 12874, f"expected 12,874 eir_to_hbr rows, got {len(e2h):,}" - assert not e2h.isna().any().any(), "unexpected NaN in eir_to_hbr view" - e2h.to_parquet(HERE / "eir_to_hbr_training.parquet", index=False) - print(f"eir_to_hbr view: {len(e2h):,} rows -> models/hbr/eir_to_hbr_training.parquet") - - -if __name__ == "__main__": - prepare() diff --git a/models/hbr/train_eir_to_hbr.py b/models/hbr/train_eir_to_hbr.py deleted file mode 100644 index 4f087ff..0000000 --- a/models/hbr/train_eir_to_hbr.py +++ /dev/null @@ -1,247 +0,0 @@ -"""Train the EIR->HBR model (eir + interventions -> hbr_y9). - -The reverse model: given baseline EIR and interventions, predict the human biting -rate so percentage mosquito-density changes can be applied. XGBoost with k-means -strata on log10(HBR), 10-fold CV, QMAP+scale calibration (no monotone constraint). -Reads models/hbr/eir_to_hbr_training.parquet; writes artifacts into this folder. -""" - -import sys -import pickle -import numpy as np -import pandas as pd -import xgboost as xgb -from pathlib import Path -from sklearn.cluster import KMeans - -sys.path.insert(0, str(Path(__file__).parents[2] / "src")) - -from estimint.utils import ( - ts, r2, rmse, mae, fit_qmap_w, predict_qmap_w, scale_pos -) -from estimint.data_processing import make_value_weights -from estimint.plotting import plot_obs_pred - -HERE = Path(__file__).parent -DATA_PATH = HERE / "eir_to_hbr_training.parquet" -OUTPUT_DIR = HERE -K_FOLDS = 10 -K_STRATA = 16 -SEED = 42 - - -def main(): - dir_plots = OUTPUT_DIR / "plots" - dir_metric = OUTPUT_DIR / "metrics" - for d in [dir_plots, dir_metric]: - d.mkdir(parents=True, exist_ok=True) - - ts("Loading training data...") - df = pd.read_parquet(DATA_PATH) - print(f"Loaded {len(df):,} rows") - - features = ["eir", "dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use"] - - df["hbr_log10"] = np.log10(df["hbr_y9"]) - - xgb_params = { - "objective": "reg:squarederror", - "eval_metric": "rmse", - "tree_method": "hist", - "max_depth": 6, - "eta": 0.05, - "subsample": 0.8, - "colsample_bytree": 0.8, - "min_child_weight": 1.0, - "lambda": 1.0, - "seed": SEED, - } - - ts("Creating %d strata on log10(HBR) and 70/15/15 split...", K_STRATA) - np.random.seed(SEED) - - hbr_log10 = df["hbr_log10"].values.reshape(-1, 1) - km = KMeans(n_clusters=K_STRATA, n_init=50, max_iter=5000, random_state=SEED) - km.fit(hbr_log10) - - centers = km.cluster_centers_.flatten() - ord_idx = np.argsort(centers) - id_map = {old_id: new_id + 1 for new_id, old_id in enumerate(ord_idx)} - df["strat_bin"] = np.array([id_map[c] for c in km.labels_]) - - df["split"] = None - for b in sorted(df["strat_bin"].unique()): - idx = df[df["strat_bin"] == b].index.tolist() - n_b = len(idx) - n_tr = int(np.floor(0.70 * n_b)) - n_val = int(np.floor(0.15 * n_b)) - - np.random.shuffle(idx) - - tr_idx = idx[:n_tr] if n_tr > 0 else [] - val_idx = idx[n_tr:n_tr + n_val] if n_val > 0 else [] - te_idx = idx[n_tr + n_val:] - - df.loc[tr_idx, "split"] = "train" - df.loc[val_idx, "split"] = "val" - df.loc[te_idx, "split"] = "test" - - df["split"] = df["split"].fillna("train") - - df_test = df[df["split"] == "test"] - X_test = df_test[features].values.astype(np.float64) - y_test = df_test["hbr_log10"].values - obs_hbr_test = np.power(10, y_test) - - ts("Test set: %d rows", len(df_test)) - - ts("Assigning %d-fold CV within TRAIN+VAL strata...", K_FOLDS) - dfcv = df[df["split"] != "test"].copy() - - np.random.seed(SEED + 1) - - dfcv["fold"] = 0 - for b in dfcv["strat_bin"].unique(): - mask = dfcv["strat_bin"] == b - n_b = mask.sum() - idx = dfcv.index[mask].tolist() - np.random.shuffle(idx) - folds = np.tile(np.arange(1, K_FOLDS + 1), int(np.ceil(n_b / K_FOLDS)))[:n_b] - np.random.shuffle(folds) - dfcv.loc[idx, "fold"] = folds - - ts("Running %d-fold CV with early stopping...", K_FOLDS) - oof_pred_raw = np.full(len(dfcv), np.nan) - best_iters = np.zeros(K_FOLDS, dtype=int) - - for k in range(1, K_FOLDS + 1): - ts(" Fold %d / %d", k, K_FOLDS) - - idx_val = dfcv["fold"] == k - idx_tr = dfcv["fold"] != k - - X_tr = dfcv.loc[idx_tr, features].values.astype(np.float64) - y_tr = dfcv.loc[idx_tr, "hbr_log10"].values - X_va = dfcv.loc[idx_val, features].values.astype(np.float64) - y_va = dfcv.loc[idx_val, "hbr_log10"].values - - w_tr = make_value_weights(np.power(10, y_tr), digits=3) - w_va = make_value_weights(np.power(10, y_va), digits=3) - - dtr = xgb.DMatrix(X_tr, label=y_tr, weight=w_tr) - dva = xgb.DMatrix(X_va, label=y_va, weight=w_va) - - mdl = xgb.train( - params=xgb_params, - dtrain=dtr, - num_boost_round=5000, - evals=[(dtr, "train"), (dva, "val")], - early_stopping_rounds=100, - verbose_eval=False, - ) - - best_iters[k - 1] = mdl.best_iteration - pred_log10_va = mdl.predict(dva) - oof_pred_raw[idx_val.values] = np.power(10, pred_log10_va) - - obs_cv_raw = np.power(10, dfcv["hbr_log10"].values) - - ts("Fitting final calibrator (QMAP + positive scale) on OOF...") - cal_oof = fit_qmap_w(oof_pred_raw, obs_cv_raw, ngrid=1024, round_digits=8) - oof_pred_cal = predict_qmap_w(oof_pred_raw, cal_oof) - a_oof = scale_pos(obs_cv_raw, oof_pred_cal) - oof_pred_final = np.maximum(0, a_oof * oof_pred_cal) - - oof_metrics = pd.DataFrame({ - "set": ["OOF_uncalibrated", "OOF_calibrated"], - "R2": [r2(obs_cv_raw, oof_pred_raw), r2(obs_cv_raw, oof_pred_final)], - "bias": [np.mean(oof_pred_raw - obs_cv_raw), np.mean(oof_pred_final - obs_cv_raw)], - "RMSE": [rmse(obs_cv_raw, oof_pred_raw), rmse(obs_cv_raw, oof_pred_final)], - "MAE": [mae(obs_cv_raw, oof_pred_raw), mae(obs_cv_raw, oof_pred_final)], - }) - oof_metrics.to_csv(dir_metric / f"hbr_OOF_metrics_K{K_FOLDS}CV.csv", index=False) - print("\n" + str(oof_metrics)) - - ts("Training final model on TRAIN+VAL with nrounds = median(best_iteration)...") - best_nrounds = int(np.round(np.median(best_iters))) - print(f"Best nrounds: {best_nrounds}") - - df_trcv = df[df["split"] != "test"] - X_trcv = df_trcv[features].values.astype(np.float64) - y_trcv = df_trcv["hbr_log10"].values - w_trcv = make_value_weights(np.power(10, y_trcv), digits=3) - - dtrcv = xgb.DMatrix(X_trcv, label=y_trcv, weight=w_trcv) - - xgb_final = xgb.train( - params=xgb_params, - dtrain=dtrcv, - num_boost_round=best_nrounds, - verbose_eval=False, - ) - xgb_final.save_model(str(OUTPUT_DIR / "hbr_xgb_FINAL.model")) - - dtest = xgb.DMatrix(X_test, label=y_test) - pred_log10_test_raw = xgb_final.predict(dtest) - pred_raw_test = np.power(10, pred_log10_test_raw) - pred_hbr_test = predict_qmap_w(pred_raw_test, cal_oof) - pred_hbr_test = np.maximum(0, a_oof * pred_hbr_test) - - test_metrics = pd.DataFrame({ - "set": ["Test"], - "R2": [r2(obs_hbr_test, pred_hbr_test)], - "bias": [np.mean(pred_hbr_test - obs_hbr_test)], - "RMSE": [rmse(obs_hbr_test, pred_hbr_test)], - "MAE": [mae(obs_hbr_test, pred_hbr_test)], - }) - test_metrics.to_csv(dir_metric / "hbr_test_metrics.csv", index=False) - print("\n" + str(test_metrics)) - - plot_obs_pred( - obs_hbr_test, pred_hbr_test, - f"HBR — Observed vs Predicted (XGBoost, K={K_FOLDS} CV, QMAP+Scale, test)", - str(dir_plots / "hbr_obs_vs_pred_xgb_QMAP_SCALE_test.png"), - xlab="Observed HBR", ylab="Predicted HBR" - ) - - cal_bundle = { - "kind": "qmap+scale", - "qmap": {"xq": cal_oof["xq"], "yq": cal_oof["yq"]}, - "scale": a_oof - } - - preprocess = { - "features": features, - "target": "hbr_y9", - "transform": "log10", - "inverse": "pow10", - "training_data": { - "source": "datasets/estimint_simulations_y9.parquet (prev_y9 >= 0.01 AND hbr_y9 > 0)", - "n_rows": len(df), - "n_params": df["parameter_index"].nunique() - }, - "cv": { - "K": K_FOLDS, - "stratify_by": f"strat_bin (k-means on log10(HBR), centers={K_STRATA})", - "best_iteration_median": best_nrounds - }, - } - - model_bundle = { - "class": "estiMINT_EIR_to_HBR_model", - "booster": xgb_final, - "calibrator": cal_bundle, - "features": features, - "best_nrounds": best_nrounds, - "preprocess": preprocess, - } - - with open(OUTPUT_DIR / "estiMINT_EIR_to_HBR_model.pkl", "wb") as f: - pickle.dump(model_bundle, f, protocol=pickle.HIGHEST_PROTOCOL) - - print(f"\nModel saved to: {OUTPUT_DIR}/estiMINT_EIR_to_HBR_model.pkl") - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/models/hbr/train_hbr_to_eir.py b/models/hbr/train_hbr_to_eir.py deleted file mode 100644 index b42ea80..0000000 --- a/models/hbr/train_hbr_to_eir.py +++ /dev/null @@ -1,252 +0,0 @@ -"""Train the HBR->EIR model (hbr_y9 + interventions -> EIR). - -Same pipeline as the prevalence model but with hbr_y9 as the monotone feature. -Reads models/hbr/hbr_training.parquet; writes the model, booster, metrics and plot -into this folder. -""" - -import sys -import pickle -import numpy as np -import pandas as pd -import xgboost as xgb -from pathlib import Path -from sklearn.cluster import KMeans - -sys.path.insert(0, str(Path(__file__).parents[2] / "src")) - -from estimint.utils import ( - ts, r2, rmse, mae, fit_qmap_w, predict_qmap_w, scale_pos -) -from estimint.data_processing import make_value_weights -from estimint.plotting import plot_obs_pred - -HERE = Path(__file__).parent -DATA_PATH = HERE / "hbr_training.parquet" -OUTPUT_DIR = HERE -K_FOLDS = 10 -K_STRATA = 16 -SEED = 42 - - -def main(): - dir_plots = OUTPUT_DIR / "plots" - dir_metric = OUTPUT_DIR / "metrics" - for d in [dir_plots, dir_metric]: - d.mkdir(parents=True, exist_ok=True) - - ts("Loading training data...") - df = pd.read_parquet(DATA_PATH) - print(f"Loaded {len(df):,} rows") - - features = ["dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use", "hbr_y9"] - - df["eir_log10"] = np.log10(df["eir"]) - - # monotone constraint: hbr_y9 (index 6) positively correlated with EIR - xgb_params = { - "objective": "reg:squarederror", - "eval_metric": "rmse", - "tree_method": "hist", - "max_bin": 4096, - "max_depth": 8, - "eta": 0.02, - "subsample": 0.8, - "colsample_bytree": 0.8, - "min_child_weight": 1.0, - "lambda": 1.0, - "seed": SEED, - "monotone_constraints": "(0,0,0,0,0,0,1)", - } - - ts("Creating %d strata on log10(EIR) and 70/15/15 split...", K_STRATA) - np.random.seed(SEED) - - eir_log10 = df["eir_log10"].values.reshape(-1, 1) - km = KMeans(n_clusters=K_STRATA, n_init=50, max_iter=5000, random_state=SEED) - km.fit(eir_log10) - - centers = km.cluster_centers_.flatten() - ord_idx = np.argsort(centers) - id_map = {old_id: new_id + 1 for new_id, old_id in enumerate(ord_idx)} - df["strat_bin"] = np.array([id_map[c] for c in km.labels_]) - - df["split"] = None - for b in sorted(df["strat_bin"].unique()): - idx = df[df["strat_bin"] == b].index.tolist() - n_b = len(idx) - n_tr = int(np.floor(0.70 * n_b)) - n_val = int(np.floor(0.15 * n_b)) - - np.random.shuffle(idx) - - tr_idx = idx[:n_tr] if n_tr > 0 else [] - val_idx = idx[n_tr:n_tr + n_val] if n_val > 0 else [] - te_idx = idx[n_tr + n_val:] - - df.loc[tr_idx, "split"] = "train" - df.loc[val_idx, "split"] = "val" - df.loc[te_idx, "split"] = "test" - - df["split"] = df["split"].fillna("train") - - df_test = df[df["split"] == "test"] - X_test = df_test[features].values.astype(np.float64) - y_test = df_test["eir_log10"].values - obs_eir_test = np.power(10, y_test) - - ts("Test set: %d rows", len(df_test)) - - ts("Assigning %d-fold CV within TRAIN+VAL strata...", K_FOLDS) - dfcv = df[df["split"] != "test"].copy() - - np.random.seed(SEED + 1) - - dfcv["fold"] = 0 - for b in dfcv["strat_bin"].unique(): - mask = dfcv["strat_bin"] == b - n_b = mask.sum() - idx = dfcv.index[mask].tolist() - np.random.shuffle(idx) - folds = np.tile(np.arange(1, K_FOLDS + 1), int(np.ceil(n_b / K_FOLDS)))[:n_b] - np.random.shuffle(folds) - dfcv.loc[idx, "fold"] = folds - - ts("Running %d-fold CV with early stopping...", K_FOLDS) - oof_pred_raw = np.full(len(dfcv), np.nan) - best_iters = np.zeros(K_FOLDS, dtype=int) - - for k in range(1, K_FOLDS + 1): - ts(" Fold %d / %d", k, K_FOLDS) - - idx_val = dfcv["fold"] == k - idx_tr = dfcv["fold"] != k - - X_tr = dfcv.loc[idx_tr, features].values.astype(np.float64) - y_tr = dfcv.loc[idx_tr, "eir_log10"].values - X_va = dfcv.loc[idx_val, features].values.astype(np.float64) - y_va = dfcv.loc[idx_val, "eir_log10"].values - - w_tr = make_value_weights(np.power(10, y_tr), digits=3) - w_va = make_value_weights(np.power(10, y_va), digits=3) - - dtr = xgb.DMatrix(X_tr, label=y_tr, weight=w_tr) - dva = xgb.DMatrix(X_va, label=y_va, weight=w_va) - - mdl = xgb.train( - params=xgb_params, - dtrain=dtr, - num_boost_round=15000, - evals=[(dtr, "train"), (dva, "val")], - early_stopping_rounds=200, - verbose_eval=False, - ) - - best_iters[k - 1] = mdl.best_iteration - pred_log10_va = mdl.predict(dva) - oof_pred_raw[idx_val.values] = np.power(10, pred_log10_va) - - obs_cv_raw = np.power(10, dfcv["eir_log10"].values) - - ts("Fitting final calibrator (QMAP + positive scale) on OOF...") - cal_oof = fit_qmap_w(oof_pred_raw, obs_cv_raw, ngrid=1024, round_digits=8) - oof_pred_cal = predict_qmap_w(oof_pred_raw, cal_oof) - a_oof = scale_pos(obs_cv_raw, oof_pred_cal) - oof_pred_final = np.maximum(0, a_oof * oof_pred_cal) - - oof_metrics = pd.DataFrame({ - "set": ["OOF_uncalibrated", "OOF_calibrated"], - "R2": [r2(obs_cv_raw, oof_pred_raw), r2(obs_cv_raw, oof_pred_final)], - "bias": [np.mean(oof_pred_raw - obs_cv_raw), np.mean(oof_pred_final - obs_cv_raw)], - "RMSE": [rmse(obs_cv_raw, oof_pred_raw), rmse(obs_cv_raw, oof_pred_final)], - "MAE": [mae(obs_cv_raw, oof_pred_raw), mae(obs_cv_raw, oof_pred_final)], - }) - oof_metrics.to_csv(dir_metric / f"eir_OOF_metrics_K{K_FOLDS}CV.csv", index=False) - print("\n" + str(oof_metrics)) - - ts("Training final model on TRAIN+VAL with nrounds = median(best_iteration)...") - best_nrounds = int(np.round(np.median(best_iters))) - print(f"Best nrounds: {best_nrounds}") - - df_trcv = df[df["split"] != "test"] - X_trcv = df_trcv[features].values.astype(np.float64) - y_trcv = df_trcv["eir_log10"].values - w_trcv = make_value_weights(np.power(10, y_trcv), digits=3) - - dtrcv = xgb.DMatrix(X_trcv, label=y_trcv, weight=w_trcv) - - xgb_final = xgb.train( - params=xgb_params, - dtrain=dtrcv, - num_boost_round=best_nrounds, - verbose_eval=False, - ) - xgb_final.save_model(str(OUTPUT_DIR / "eir_xgb_HBR_FINAL.model")) - - dtest = xgb.DMatrix(X_test, label=y_test) - pred_log10_test_raw = xgb_final.predict(dtest) - pred_raw_test = np.power(10, pred_log10_test_raw) - pred_eir_test = predict_qmap_w(pred_raw_test, cal_oof) - pred_eir_test = np.maximum(0, a_oof * pred_eir_test) - - test_metrics = pd.DataFrame({ - "set": ["Test"], - "R2": [r2(obs_eir_test, pred_eir_test)], - "bias": [np.mean(pred_eir_test - obs_eir_test)], - "RMSE": [rmse(obs_eir_test, pred_eir_test)], - "MAE": [mae(obs_eir_test, pred_eir_test)], - }) - test_metrics.to_csv(dir_metric / "eir_test_metrics.csv", index=False) - print("\n" + str(test_metrics)) - - plot_obs_pred( - obs_eir_test, pred_eir_test, - f"EIR — Observed vs Predicted (XGBoost HBR, K={K_FOLDS} CV, QMAP+Scale, test)", - str(dir_plots / "eir_obs_vs_pred_xgb_HBR_QMAP_SCALE_test.png"), - xlab="Observed EIR", ylab="Predicted EIR" - ) - - cal_bundle = { - "kind": "qmap+scale", - "qmap": {"xq": cal_oof["xq"], "yq": cal_oof["yq"]}, - "scale": a_oof - } - - preprocess = { - "features": features, - "target": "eir", - "transform": "log10", - "inverse": "pow10", - "hbr_filter": { - "note": "Trained on MINTelligence data, HBR > 0 (Im > 0)" - }, - "training_data": { - "source": "datasets/estimint_simulations_y9.parquet (hbr_y9 > 0)", - "n_rows": len(df), - "n_params": df["parameter_index"].nunique() - }, - "cv": { - "K": K_FOLDS, - "stratify_by": f"strat_bin (k-means on log10(EIR), centers={K_STRATA})", - "best_iteration_median": best_nrounds - }, - } - - model_bundle = { - "class": "estiMINT_HBR_model", - "booster": xgb_final, - "calibrator": cal_bundle, - "features": features, - "best_nrounds": best_nrounds, - "preprocess": preprocess, - } - - with open(OUTPUT_DIR / "estiMINT_HBR_model.pkl", "wb") as f: - pickle.dump(model_bundle, f, protocol=pickle.HIGHEST_PROTOCOL) - - print(f"\nModel saved to: {OUTPUT_DIR}/estiMINT_HBR_model.pkl") - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/models/prevalence/README.md b/models/prevalence/README.md deleted file mode 100644 index aedbded..0000000 --- a/models/prevalence/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# models/prevalence - -Prevalence → EIR model — the default estiMINT emulator. - -Predicts **EIR** from year-9 prevalence (`prev_y9`) + 6 interventions. Bundled as -`prevalence` → `estiMINT_model.pkl`. - -```bash -python models/prevalence/prepare.py # datasets source -> training.parquet (prev_y9 >= 0.01) -python models/prevalence/train.py # -> estiMINT_model.pkl, eir_xgb_FINAL.model, metrics/, plots/ -``` - -Deployed copy lives in `src/estimint/data/estiMINT_model.pkl`. diff --git a/models/prevalence/prepare.py b/models/prevalence/prepare.py deleted file mode 100644 index 391e4c4..0000000 --- a/models/prevalence/prepare.py +++ /dev/null @@ -1,30 +0,0 @@ -"""Derive the prevalence->EIR training view from datasets/estimint_simulations_y9.parquet. - -Filters prev_y9 >= 0.01 and sorts by key for a deterministic, reproducible view. -""" - -from pathlib import Path - -import pandas as pd - -ROOT = Path(__file__).parents[2] -SOURCE = ROOT / "datasets" / "estimint_simulations_y9.parquet" -OUT = Path(__file__).parent / "training.parquet" - -KEYS = ["parameter_index", "simulation_index"] -COLS = KEYS + ["eir", "dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use", "prev_y9"] -MIN_PREVALENCE = 0.01 - - -def prepare(): - src = pd.read_parquet(SOURCE) - view = src[src.prev_y9 >= MIN_PREVALENCE][COLS].sort_values(KEYS).reset_index(drop=True) - - assert len(view) == 12874, f"expected 12,874 rows, got {len(view):,}" - assert not view.isna().any().any(), "unexpected NaN in prevalence view" - view.to_parquet(OUT, index=False) - print(f"prevalence view: {len(view):,} rows -> {OUT}") - - -if __name__ == "__main__": - prepare() diff --git a/models/prevalence/train.py b/models/prevalence/train.py deleted file mode 100644 index 3cdb65c..0000000 --- a/models/prevalence/train.py +++ /dev/null @@ -1,253 +0,0 @@ -"""Train the prevalence->EIR model (prev_y9 + interventions -> EIR). - -XGBoost with k-means strata on log10(EIR), 10-fold CV, and QMAP+scale calibration. -Reads models/prevalence/training.parquet; writes the model, booster, metrics and plot -into this folder. -""" - -import sys -import pickle -import numpy as np -import pandas as pd -import xgboost as xgb -from pathlib import Path -from sklearn.cluster import KMeans - -sys.path.insert(0, str(Path(__file__).parents[2] / "src")) - -from estimint.utils import ( - ts, r2, rmse, mae, fit_qmap_w, predict_qmap_w, scale_pos -) -from estimint.data_processing import make_value_weights -from estimint.plotting import plot_obs_pred - -HERE = Path(__file__).parent -DATA_PATH = HERE / "training.parquet" -OUTPUT_DIR = HERE -K_FOLDS = 10 -K_STRATA = 16 -SEED = 42 - - -def main(): - dir_plots = OUTPUT_DIR / "plots" - dir_metric = OUTPUT_DIR / "metrics" - for d in [dir_plots, dir_metric]: - d.mkdir(parents=True, exist_ok=True) - - ts("Loading training data...") - df = pd.read_parquet(DATA_PATH) - print(f"Loaded {len(df):,} rows") - - features = ["dn0_use", "Q0", "phi_bednets", "seasonal", "itn_use", "irs_use", "prev_y9"] - - df["eir_log10"] = np.log10(df["eir"]) - - # monotone constraint: prev_y9 (index 6) positively correlated with EIR - xgb_params = { - "objective": "reg:squarederror", - "eval_metric": "rmse", - "tree_method": "hist", - "max_bin": 4096, - "max_depth": 8, - "eta": 0.02, - "subsample": 0.8, - "colsample_bytree": 0.8, - "min_child_weight": 1.0, - "lambda": 1.0, - "seed": SEED, - "monotone_constraints": "(0,0,0,0,0,0,1)", - } - - ts("Creating %d strata on log10(EIR) and 70/15/15 split...", K_STRATA) - np.random.seed(SEED) - - eir_log10 = df["eir_log10"].values.reshape(-1, 1) - km = KMeans(n_clusters=K_STRATA, n_init=50, max_iter=5000, random_state=SEED) - km.fit(eir_log10) - - centers = km.cluster_centers_.flatten() - ord_idx = np.argsort(centers) - id_map = {old_id: new_id + 1 for new_id, old_id in enumerate(ord_idx)} - df["strat_bin"] = np.array([id_map[c] for c in km.labels_]) - - df["split"] = None - for b in sorted(df["strat_bin"].unique()): - idx = df[df["strat_bin"] == b].index.tolist() - n_b = len(idx) - n_tr = int(np.floor(0.70 * n_b)) - n_val = int(np.floor(0.15 * n_b)) - - np.random.shuffle(idx) - - tr_idx = idx[:n_tr] if n_tr > 0 else [] - val_idx = idx[n_tr:n_tr + n_val] if n_val > 0 else [] - te_idx = idx[n_tr + n_val:] - - df.loc[tr_idx, "split"] = "train" - df.loc[val_idx, "split"] = "val" - df.loc[te_idx, "split"] = "test" - - df["split"] = df["split"].fillna("train") - - df_test = df[df["split"] == "test"] - X_test = df_test[features].values.astype(np.float64) - y_test = df_test["eir_log10"].values - obs_eir_test = np.power(10, y_test) - - ts("Test set: %d rows", len(df_test)) - - ts("Assigning %d-fold CV within TRAIN+VAL strata...", K_FOLDS) - dfcv = df[df["split"] != "test"].copy() - - np.random.seed(SEED + 1) - - dfcv["fold"] = 0 - for b in dfcv["strat_bin"].unique(): - mask = dfcv["strat_bin"] == b - n_b = mask.sum() - idx = dfcv.index[mask].tolist() - np.random.shuffle(idx) - folds = np.tile(np.arange(1, K_FOLDS + 1), int(np.ceil(n_b / K_FOLDS)))[:n_b] - np.random.shuffle(folds) - dfcv.loc[idx, "fold"] = folds - - ts("Running %d-fold CV with early stopping...", K_FOLDS) - oof_pred_raw = np.full(len(dfcv), np.nan) - best_iters = np.zeros(K_FOLDS, dtype=int) - - for k in range(1, K_FOLDS + 1): - ts(" Fold %d / %d", k, K_FOLDS) - - idx_val = dfcv["fold"] == k - idx_tr = dfcv["fold"] != k - - X_tr = dfcv.loc[idx_tr, features].values.astype(np.float64) - y_tr = dfcv.loc[idx_tr, "eir_log10"].values - X_va = dfcv.loc[idx_val, features].values.astype(np.float64) - y_va = dfcv.loc[idx_val, "eir_log10"].values - - w_tr = make_value_weights(np.power(10, y_tr), digits=3) - w_va = make_value_weights(np.power(10, y_va), digits=3) - - dtr = xgb.DMatrix(X_tr, label=y_tr, weight=w_tr) - dva = xgb.DMatrix(X_va, label=y_va, weight=w_va) - - mdl = xgb.train( - params=xgb_params, - dtrain=dtr, - num_boost_round=15000, - evals=[(dtr, "train"), (dva, "val")], - early_stopping_rounds=200, - verbose_eval=False, - ) - - best_iters[k - 1] = mdl.best_iteration - pred_log10_va = mdl.predict(dva) - oof_pred_raw[idx_val.values] = np.power(10, pred_log10_va) - - obs_cv_raw = np.power(10, dfcv["eir_log10"].values) - - ts("Fitting final calibrator (QMAP + positive scale) on OOF...") - cal_oof = fit_qmap_w(oof_pred_raw, obs_cv_raw, ngrid=1024, round_digits=8) - oof_pred_cal = predict_qmap_w(oof_pred_raw, cal_oof) - a_oof = scale_pos(obs_cv_raw, oof_pred_cal) - oof_pred_final = np.maximum(0, a_oof * oof_pred_cal) - - oof_metrics = pd.DataFrame({ - "set": ["OOF_uncalibrated", "OOF_calibrated"], - "R2": [r2(obs_cv_raw, oof_pred_raw), r2(obs_cv_raw, oof_pred_final)], - "bias": [np.mean(oof_pred_raw - obs_cv_raw), np.mean(oof_pred_final - obs_cv_raw)], - "RMSE": [rmse(obs_cv_raw, oof_pred_raw), rmse(obs_cv_raw, oof_pred_final)], - "MAE": [mae(obs_cv_raw, oof_pred_raw), mae(obs_cv_raw, oof_pred_final)], - }) - oof_metrics.to_csv(dir_metric / f"eir_OOF_metrics_K{K_FOLDS}CV.csv", index=False) - print("\n" + str(oof_metrics)) - - ts("Training final model on TRAIN+VAL with nrounds = median(best_iteration)...") - best_nrounds = int(np.round(np.median(best_iters))) - print(f"Best nrounds: {best_nrounds}") - - df_trcv = df[df["split"] != "test"] - X_trcv = df_trcv[features].values.astype(np.float64) - y_trcv = df_trcv["eir_log10"].values - w_trcv = make_value_weights(np.power(10, y_trcv), digits=3) - - dtrcv = xgb.DMatrix(X_trcv, label=y_trcv, weight=w_trcv) - - xgb_final = xgb.train( - params=xgb_params, - dtrain=dtrcv, - num_boost_round=best_nrounds, - verbose_eval=False, - ) - xgb_final.save_model(str(OUTPUT_DIR / "eir_xgb_FINAL.model")) - - dtest = xgb.DMatrix(X_test, label=y_test) - pred_log10_test_raw = xgb_final.predict(dtest) - pred_raw_test = np.power(10, pred_log10_test_raw) - pred_eir_test = predict_qmap_w(pred_raw_test, cal_oof) - pred_eir_test = np.maximum(0, a_oof * pred_eir_test) - - test_metrics = pd.DataFrame({ - "set": ["Test"], - "R2": [r2(obs_eir_test, pred_eir_test)], - "bias": [np.mean(pred_eir_test - obs_eir_test)], - "RMSE": [rmse(obs_eir_test, pred_eir_test)], - "MAE": [mae(obs_eir_test, pred_eir_test)], - }) - test_metrics.to_csv(dir_metric / "eir_test_metrics.csv", index=False) - print("\n" + str(test_metrics)) - - plot_obs_pred( - obs_eir_test, pred_eir_test, - f"EIR — Observed vs Predicted (XGBoost, K={K_FOLDS} CV, QMAP+Scale, test)", - str(dir_plots / "eir_obs_vs_pred_xgb_QMAP_SCALE_test.png"), - xlab="Observed EIR", ylab="Predicted EIR" - ) - - cal_bundle = { - "kind": "qmap+scale", - "qmap": {"xq": cal_oof["xq"], "yq": cal_oof["yq"]}, - "scale": a_oof - } - - preprocess = { - "features": features, - "target": "eir", - "transform": "log10", - "inverse": "pow10", - "prevalence_filter": { - "min_prev_input": 0.02, - "note": "Trained on MINTelligence data with prev >= 0.02" - }, - "training_data": { - "source": "datasets/estimint_simulations_y9.parquet (prev_y9 >= 0.02)", - "n_rows": len(df), - "n_params": df["parameter_index"].nunique() - }, - "cv": { - "K": K_FOLDS, - "stratify_by": f"strat_bin (k-means on log10(EIR), centers={K_STRATA})", - "best_iteration_median": best_nrounds - }, - } - - model_bundle = { - "class": "estiMINT_model", - "booster": xgb_final, - "calibrator": cal_bundle, - "features": features, - "best_nrounds": best_nrounds, - "preprocess": preprocess, - } - - with open(OUTPUT_DIR / "estiMINT_model.pkl", "wb") as f: - pickle.dump(model_bundle, f, protocol=pickle.HIGHEST_PROTOCOL) - - print(f"\nModel saved to: {OUTPUT_DIR}/estiMINT_model.pkl") - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/pyproject.toml b/pyproject.toml index f5cca4b..4c0ff75 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "estimint" -version = "1.6.4" +version = "2.0.0" description = "EIR Estimation using Machine learning interventions " readme = "README.md" license = "MIT" @@ -17,15 +17,13 @@ keywords = [ "malaria", "EIR", "machine-learning", - "xgboost", + "flows", "epidemiology", ] dependencies = [ "numpy>=1.20.0", "pandas>=1.3.0", - "xgboost>=1.6.0", - "scipy>=1.7.0", "jax>=0.10.1", "flax>=0.12.7", "jaxtyping>=0.3.10", @@ -42,8 +40,6 @@ train = [ "hydra-core>=1.3.2", "optax>=0.2.8", "tqdm>=4.67.3", - "scikit-learn>=1.0.0", - "pyarrow>=10.0.0", ] gpu = ["jax[cuda12]>=0.10.1"] viz = [ diff --git a/src/estimint/__init__.py b/src/estimint/__init__.py index 95c1834..3a6718a 100644 --- a/src/estimint/__init__.py +++ b/src/estimint/__init__.py @@ -1,18 +1,3 @@ -""" -estiMINT - EIR Estimation using Machine learning INTerventions - -This package provides tools for training and running XGBoost models -to predict Entomological Inoculation Rate (EIR) from malaria intervention data. - -Dependencies ------------- -Core (inference): numpy, pandas, xgboost, scipy. -Optional extras: -- train: duckdb, scikit-learn, pyarrow (data prep + model training) -- viz: matplotlib (plotting) -- download: requests, appdirs (fetch published models) -""" - __package_name__ = "estiMINT" # Public API exports @@ -32,26 +17,9 @@ scale_pos, ) -from .data_processing import ( - load_and_filter, - make_value_weights, - strata_and_split, -) - -from .models import train_eir_xgboost - -from .train import train_xgb_model from .plotting import plot_obs_pred -from .storage import ( - load_xgb_model, - save_xgb_model, - bundle_model, -) - -from .run import run_xgb_model, set_global_model, get_global_model - from .hbr import estimate_eir_with_mosquito_delta from .bednet import calculate_dn0, net_types, DN0Result @@ -74,24 +42,8 @@ "fit_qmap_w", "predict_qmap_w", "scale_pos", - # data_processing - "load_and_filter", - "make_value_weights", - "strata_and_split", - # models - "train_eir_xgboost", - # train - "train_xgb_model", # plotting "plot_obs_pred", - # storage - "load_xgb_model", - "save_xgb_model", - "bundle_model", - # run - "run_xgb_model", - "set_global_model", - "get_global_model", # hbr "estimate_eir_with_mosquito_delta", # bednet diff --git a/src/estimint/data/estiMINT_EIR_to_HBR_model.pkl b/src/estimint/data/estiMINT_EIR_to_HBR_model.pkl deleted file mode 100644 index 604bebd9348f53d48223900e31e395939d8236fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10801261 zcmeFacXU@p*Y|yTuk_wK(mSNkDk%6y`pv{BA3B`hMWE}AGc6%jq(YPPO`8d!L|IYCO7j*i zTNd_xzK6V=^eF2eJvifXvWI8n=BDLM8CTS}J|bge`h?89^Ih0~X_%2WI=hG~WptEV zD4|anHzH;sr%=DrqjIt*rH!AEo|PA6W~3!#$EJ_T$SG{{T!pmUjPd_trNW^oS?Obo z)YSf>?tGJB?zoKM(a0z^+quTOo-Yc{4&dJiP}4KVjZQDrplG_8!_$Y4&PdB1mseC+ z$ay$CJ2N+Z?6`Pj!=_|rOw7pq7op%np{&>q|0kKh8Q5;zuyy0JPm{vQDre*ssp>Rt z*to@C5{+A(AE-JieeBpGnWEv?XYDaAJ2M(SrBDxZM8>$h(UYRwjPvzNM_Gy4K0Gnq z(}rhf<(}m%uV`us=Owkw^s&Q6T+me^Iquo85M_-@i`}MZ(EqBhJ~n-F+OVj|wdAHP zTAuGBOcV}J&r3_Vckbxy%%aIBwQT;MQrU4F$rzn|fx!xeyhKxRAk0gTLqW#4LI#Qm zGXIi@`6wzZ)Wk{@#>1L;fs++g4aUZPHGFiGIU;RRMl@>l1qu|B;w5Bq$7M!&X_?u% zMSK>uQetd&R(4)If`8>*s#Ev;fSsI-kqJH$3XLpMwy-NRCu3CFf1B1;qVT_(&ObY; z6Q&#ccW2ipWJM#hbH*0xkUJ(LZ}{khg`?~u9SUb^kQ*-nxf%arx#Eo*Ha$0M&nHEi z=S~>*ms=G!d7&E=hJo|ZW^ncM`iO<`G)RP+I3E6ItP4kE44W`2Eq6-R@X~5m4wIXWlMB&Jc^t=fdbS4&t9_#Enl%6vx zpTqb!)12R(6!!X$&|ZE-l$$;*w#T`JDJ>&jcN23o-fR@sDbmy%8!ui_?CFUB zG^!}x6;F6q_Jq7~6Y|ck?1_MTo**-O*tHpP+?!ZLWDxsG+uV2!%gGp#k&~01Q#cs? zudZ|dZ36z?zDmy6+>F9{MV%DR*T0MZN0;Z-^UnHh96A26fCst5(-ZSFJNG|h&$OaR zq{k-DjbnO|!g3@>Vk8x+ruIl|6bse*kG-9ho)@z{Y(ic}?$p9c?z!oZmROfBV54xA zC=^KSFaAy7zi*7xvpd&9g_L+9$SwSmGqQ#kjis==;JiM$8KcI=yRF>8H8KlhM4^k7`6U zqgqkzs7_Qjsu$IdE{PgM4WmX;;3}QRk>j)HS*^>J|}Q7Ilv55{55gLRdlA+m+=p;K!a9Tp5Y{6+h_C_S zA%uq!HX=NN@F>D#2#+IdLU;n0H z9)xERoj;SYpA5d}mMQ9_gv6+{(LL(~xsL=(|M zv=JRd7turX5d*{!u^3`;#1e=l5lbPKMl6F^7O@;+dBh5c6%i{TRz|FXSQW7vVs*qC zh&2&wA=XB$gIE`_9%6mOOAs3%HbiWM*ch=1VpGIsh|LjOAhtwoh1eRg4Pslwc8E!c z$%rY4sfg_nJ0NyM?1b1Eu?u2X#7hyoA%b`rVt2&L5qlu^M7#pA7h-S3K8Sr0`yuv6 zyb^H$;y}bfh*u#FM!Xtv2;wz}X^2A+(-DUu4o4h;n1MJFaTMZc#0c?P#4(7Oh+`46 z5VH}-A&y7PLCi(WL!5v(5pfdYWW*_m*C9?tydH5H;thz?5oaLIM7$C4Cd65Yvk`Ab zoP#(QaUS9=i1QH_ATC6_74bI2MToZ}-hsFnaS7s5#AS%f5${A?fw&TJ72;~dyAbb2 zya#a&;=PD#5${91A8{Sx1BmMpA4J@M_z>d5h#L_fL3|YPF~r9aHz7WO_$14zDkSZfpL8^*W4XHX(4Wyb#wUBBf)j_I@R1c{>(j`a@kQyR2LTZfE z1gR-fGoTPW+L5)bQ97nq}fO}Bh5jYi!=}E7Nq$|3y>Bf-HLP@(juhWk?ufR zjI;!4Dbg~eeqmNDm@yKza!2 zVWf>nk03pY^cd3PNSlzJKzb5sGtyH?Tacbc+KTiH(l(^+Ncl(wNIQ^rBJD!jjkE{p zS)}KX_98ux^a9e0Nc)gpLV6i#KhgoDSCC#sdJX9y(jlbRk={T$jPxebTS#vsy@T{F z(h;Qhkd7i9LwXB@j`TUw7f4?seT8%a>1(8KkiJFw4(WTO zlSrqKP9yz*^dr(wNN13KM*0QmSES#Nen#vVaUUgM<8b)k3=4YJQ_Jdz7}~5awhUvQ5n~~=r z&qbbxd<*h?2dyOHlf zUW0ru@>=Bkkncxchx`EYdgKR@Hy}TR{4nxHuyczi^&R~)A4Yx?`7PwPk>5dn7x@VCd&ozTk0HO0`~mWZ$R8npjQk1mr^ufn zA4mQi`3vMPk-tJdf&4Y{H^|>2e~0`%@=4@V$fuEiK>iW=C*(88KO_Hw{44Tr$iE~1 zf&3?mfFhzuC^CwIqM~RhI*Nf}qF5+4ii6^!cql$ffD)nY~&`sgH6AN&}RJD2-4WqclNj ziqZ_FIZ6wZmME=ITBEc5b9{r7uc9l>R7Jq6|P8h%yM}DwM$}SECF;xdtT-WhhEI$}p7S zC?ilZP)4GRLK%$`pu~7LU|Zv zBg!KvkD@$=@;J&SlqXQ0MA?k;6v`Hqr%|?|JcF_gWjjhfN&(6al$|KMPJUl$TImM%j;Y0Ob{wS5aO=If!xy<#m)dP!6NKiSic8+bHj#yo+)K z!Q~j`9V{mndJMoIv>+2H9!qfi=h@rErD7RwG?V;)H0}LQOlv0N3DQb5w#L(Wz;IDRZ**d4pk9NThB_2A9d#J$aMTf~8K@&sN1={JjZm*e9fO*QIuUh)~)Lhg&)Cs5)Q755JMxBCs9qLrn>rtnn-hetCbq4B8)EiN6LY;*=8}(+?IjD0{ z=b_$$Iv;fb>O$08QEx+CgnB#b9jJ>@m!K|1U52_G^-k0ks4G!dp{_=~3-xZ)dr;S) z-ix{x^*+@5QP-h9fVv*_LDUVX51~Gcx)Jpe)JIVtLwy`|6Y3MFPoi!{eF}98>eHxO zQJ+EGhPoX!AGH8=2kK7LU8uWJ_nh}FQe{9J%IWO>Z_=) zp&mp%g!($_8>oj--$Z>2^=;I5P~Sy8g8ClnQPg9o@1uTz`XTB^s2`(#g8C`yXQ;FQzo7n#`Wx!+sDGgT zi6)?lXcC%?rl6^48k&w~pqXeEnvLe5xo94mj~1YXXvNTqqm@7_iB<}&G+G(7vS{Vd z%A-|4tB6(!tuk5_w5n*;(5j==K&y#X3#~R<9kjY=_0a00U4qsCtszVZP41HwL?onOGZmUOGRss)&Z>}S|_y5XkE~{qFsvC4Gpx*(7K~t zj@ARMC)yQgz0i82^+D^4)(@>e+LdSn&<3InLc0oWFxu5r5ig_eyr4sASI4q7f+9@+%7iD;A1CZkP3yAEwC+VyDD z&~8ARjy3~rCfbc?H=)f!n~ioe+8ngGX!Fo+L7R`Z0Bs@Kt!THQEke5;?GCiXXiLzR zqAf#Pj&>*73bd7ItI$@X-Gz2H+C6A%(C$TBi*_H{{b=jZ9za`<_8{5@w1?0hM%#$? z2->4)kD)z|wh8SCv?tLvqdkST1?_3Ht!U4nZA06RmXB6|wgYV^+Ag%+XnW9}MSBiy zFWU2HFQC1Mwh!$kw3pHLqa8qd1?^R|*U%249YT8@?G3cUXm6suh4wbuJ818s9YK2! z?I_wYwD-|IK>HBwBeajvK0*5w?K8CFXrH5ff%YZZS7;~DzDD~7?OU|((7s1IiFOL@ zG};enKcfAFb_VTdv|rGEMf(lyceFpy{zMnhMRW;WMpw{PbPZicH_%OV3*AO{&|P#7 z-A515L-bx=;hHXpjSk%gkBlF3VK!aYUtI`YoOOeuZ3P4 zy$*U^^m^#^(Jw)7fZhpkIeR75#ejY3MhgPe-4DJ`?>$^qbIUq0dIY8GR1=T=aS9 zx1i5QUx2<4{Z{nb&=;ZKj(!LFV)P~GOVO91FGs%cM`fKP1 z(GQ`&j{XMvVe~iA-$H*I{T=jo(T||Nhkg|O82bC@AE1AT{t^1e=%1i}ivAh;arDp8 zzd-*I{VVhn=wG9MgZ?f0cj(`vpF}@}ej5D;^dHfGLO+B4Gx{&+zoP$!{yX{~=zn4e z7$Sy*A!8^QDu#xkV;C4FhJ|5cI2bO5hv8!c7$HV6jN%w2FiK*S!YGYV2BR!SIgIic z6)-AdRKlo?Q3azaMm3D;7&S0zV${N@jZp`qE=E0!`WTmBG{9(x(Fmh4MiY#t7|k%6 zW3<3%iO~w9HAWkZwixX&k}#4nQZQ06+GBLU=!nq?qccVqjIJ1$Vsyg*<1&oy7?)%8 z!03r_1x7E7-WYu_`eO9M=#OzF#sG|g7=tjb!WfKkHO3H(YcSFn2K>d#x#r@ zFs5V7z?g|~BgRb_voL03+>9{?V=l%#j9W0~V=TZ}h;b{%Z5WF%ZpXL-V==}OjHMXM zFqUK7iLnA>CB`a@)fjhS+>LP$#u|)!G1g+-hjBl~I*bP})?++~u>s>DjE6BcVmyNJ zD8^$Lk7I1Ycmm@|jLjHNVQj&88e=QQGZ@=2wqxXD6kzPY*omiYgjAt>P!`O@Q zJjM$cFJkP&cnRZWjQtn~FkZoU72`FGgBXV}UdMO?<1ogX7;j;`jqwh~yBJ3>-orSG zaSY>qj1MqA#P|r~V~kHQKE?P9<2c6W7++v~iSZT235>5XzQOnw<2#J+F-~Hf!Z?lb z1ICXSKVh7~_!;9Dj9)Q+!}uNJ4~#!C1xyiB!jv%;OchhZ)G-ZA6Vt-9F&#`7)5G*J z1I!S!7-n(I5||}1OJSDAEQ47Vvm9o5%nFzlF)LwK#;k%_6|)*p*2b)Z zSr@Y&W_`>{FdJYt#B7Aw7_$jxQ_NpWw z%*D*ZoPaqIa}wrc%qf`HVNS)o9&;Mz4Vcq0XJF36yb<#z%vqSTF>l74gE<#-9_B5W z^D!4-F2uYQ^ES*yn73ozfw>rS3FcDFWtht`@5Eezxe{{~=4#BlFz?2^2XhVPy_jn; z@58(wa~}8!;cjd=&FB%*Qb|VLpNRB<5z!r!co*K8?8*^BK%- znA-=!%oj2DVZMah8u)w+ut2@@^SUs?M zVqJmN3#&I)AFRGu{jmCDU5PaSYarGjtgEmFV_l6k1nU~CG_0Xm=~%GSlL+Pu*PHMVC7=vVNJlAh&2goGS(EV>#(L`U5_;l>jtdp zSTnF@V%>;!6V@!O*;qGY&B2-BCOl7?!a1%wFGM^)-tT+ zSa)Krz*>p53TrjiU08Qx-Gj9T>t3w2SodMwkF^f#0j%{{4`OY=dI;-btc_TYU_FZU z7}n!ho3Nh1dJ=0h)>Bwpu%5=+iuDZEHmvPf`B(*5JFs?Q?ZVoPwFm22tmm-yVm*)b z0@jOI`>?e!YpiduzQy_u>wBz|Sf{W~WBq{j zBi2t?XRv<8`UUG(tlzMH$NB^7Piz5O#FnsSYz14z*06PK1KY&5ux)Gy+r{>T|N$gVCrLoIkm&GoJT^_pvc17$;*p;!XU{}SihFu-I26j#CTG+L*>tNT# zu7_P8`x5L1*bT88VK>HZg54Cm8Fq8*7T7JZTVc1xZiC$xyB&5Cb~1Jfb}Dvz><-u+ zu{&XR#_odM75h@`ZrEU7hTR?ea_k=1J+ZIA?uFeOyAO6>?0(q&v9H7)fISd<5cXBr zgR!s19)f)hb{h6j>~!p5*u$|$U}s>D#2$q`8au+i7JCeKCiYnDEbMITaoFRrbFg!< z^ROpiPsE;tJsEon_I21(v9HIThJ6F}bnF?}GqG>Pz6pC4_H68%vFBjV#h!?S75KiUWL6H`!4LevG2iNgMBadTI~C< z@5f$;{Q&lQ><6(oU_XTYF!o05N3b8oehm9@>`mBDU_Xhy8T%>hE!a>b!Uv3Ftb#@>VdEcSEQd$FI#egXSM?0wiTVZV&MANv6IE7-4MzlMDf`w;f) z*l%DT#(op~E$p|k-@$$t`v~@X*hjICVZV?40rrR3A7Out{R#G`*q>n^$Nn7q3+ykk zzrsF&{WbPC*xzD*hy6YFN$gYDr?G#){t^2p>@(OuWB-EvEB0^LzhnP_{U?rqBjQLn zGLC|y;%GQJj)7z1SU5J0gX7|OI6h8*6XF!ZDUMSDrzB1(oYFXDaLVG8!zqtb0jDBP zC7jAQRdA}}RKux`Qv;_aPA#0;ICXI9;?%>bk8=r51Du99jc^*{G{I?#(+sCMP79ot zIIVD656kHPB$EIF2m`Lb2&~AoSryW z;Pk@jjnfCGFHS$4{y10S48R$PGYID@oWVF(;|#&M1}621J5D}M0nQGbojAL2cH`{9c^2n6oV_^Da#chV$9Jd8-OWantt#RAnw#99Sn}nN;n}VB)+a9+AZb#fs zxSesk;C98m6t^2LxR>E}$Gsf42X0T?D{y<^_Qvgl+ZVSVZhzb>aR=ZI#2tit74Bf% zt8s_mUW1#4I}|q^cNp$)+!44LxFc~#;f}_QaIeK3gPVyv7B>qw8+RP;c-$P^T--d| z3Aht+C*e-Uoq~HE?o{0Cai`(lfIA&`2JTGU8*y*KorOCa_h#HVxN~vm;ogEfA9n%n zLfl(%Z^K=LdpqtOxQlU@;4Z~ohPxd1PTUo^D{)uhuExC!_io&KaM$48i@O&0KHU3p z*Wo^ZyB_yJ+zq%7;XaJJ5%&??M{ys+eH?ca?i09A;%>%$3U>?c)3{r4pTXURyB#+l zw*Yqs?oQlYxVv%p;697{9PVD+=W$=aeGzvb?n}5Y9>hI_`#SC$ zxQB7y#C;3*ZQOTo-^D$G`yTF5++(=!<9>kqA?`=GALD+4`zh{cxW{on$Nd8LOWdz; zPvCxy`wi~5xZmM^k9!jL6z*x!f{R#IB?$5Zt;QosH8}9G8f8hR!C*X;A5}u5w z;Hh{To{neWnRphSjpyLGcpjdQ7vP0>#qf&bmB1^BR|>B*UKzZyc;)cQ<5j?`h*t@( zGF}zDs(97#s^itbtBF?&uQpyCyt;Vx@ap4Tg4Y1AAzmZA#&}Ken&LIXYmV0fuO(h9 zyw-Sa@Y>?F!%M%S;myLEjdwHN9K5-B^YCuLn~%2uZz0~Tc(>s#!n+;s4!p&9OYoNBEyG)mcPHKo zyp?#X@K)p9g?BgJJ$P&I?!{Y+cOTyUc^Al?SNhwvW8+lcoF-lKSr;XRJG z3GWHKC-FApJ%zUg?`gcPc+cQ%!`qIRk5_=V18*nZF1+1%d+?scdk$|e-t%}b;Jt{q z5AP+sm+|)F9l(19?^V3l@DAb~!h0R>4ZOp6Z{od$_cq=;c<cM9(`-Vb;`;{Ako z2JdIQU+{j#`wj1Ryg%^%#24^Idih7bN__}%d@$M1pP6aNbQUiiK7`{4J*?}y(X|4RG;_yh3=;a`P682@Vg zA^6wer{NF9PsbmIKOBDqeg^(X{89L$@gw|e@yFn2;*Z78!q3JZhd&-a2R|1-4}Svw zMEptklkunEUxz;x|9bps_&4BB$De^e6aPm1oA77h&&IzQe-8d!{CW7d;LpcjfWHv` zR{Y!W7vbNIe+T|z{3ZBH@t5H*$G;PQ1^!C>Rrss%@4~+u{~r7``1j(k#lH{#e*AU# z58$uIe-M8I{zLc=<8Q=&1piU|$M7G=--Q1J{*(Bd@t?xqg8wxBR{Ur1x8ZNc&&Myo z-+{jqe;594{5|;3;y;JK7yo(u7w})i--rJa{>%9L@ekm?g8wT1YxoE858=O#{|5eH z{5SF6!hak89sGCkkKn(De-!^1{`>eJ;D3n!5&p;cpWuIr{~7*q{Lk^f!2c5eEBq7q zU*ms+|1JJ^_}}B7#6N|98vh6UAMt;}KZE}>{xA5y;{S&KJN_T|e-a1;B7sC86DR~K zfkvPc7z8GPMPL&+1TKL`;1dJ{Awe;M;shlKN)nVJC{0j?pe#W-g7O3v2r3d(BB)GI zg`g@yHG=8{H3(`F)FP-&P=}x{K|O-{1eXvrAZSR?h@de+6N07$%?O$kv><3n(2Afn zK^ua$1nmft2$Bg>2vP~!6LcWxNYII(GeH-Et^}77bR&S^GJ@^|mlO0L=t*z|K`(;d z1bqnl67(bJPjDr{0D^%8g9xr77))?A!4QIL2+|0K5~LFhBN$FFf*^xnB*7?x(F75} zwFF}bG6}{KWD#T&j3XFNkVBA5kVi0qU?RaJg2@C^2(BZTN^m{FG=dulrW4E{m`QLW z!A%6S2xb%9OfZLFF2Ov4TL|V8EFf4&a4W%W1d9l6C%A)PF~Jgor3A|emJ{4bu!3ME z!775)1a}eKO>hsv8iIQX))L%Da6iF1f(HoJ6Ff+;f#4y6hY2+*oY$14>U@O5h1ltI<6XX*V5bPk>NwAAxH^Cl)X9=Do*h}y{!3zX066_;* ziQr{|{R9UHULkmu;5CAS1cwM-CwPP4Fu|JyZxOsr@D9Pd1V;$oBREQMjNpBO4+uUa z_=wuOCHRcsIKk%xUl4pr@D;%cg0Bg_A^4WyJA&^CP7<6VI8E>a!H)z#5u73T zncx?KUkQFA_?_Snfj@tu+(7sc;lqR*2_GSRl<+aa#|bwPK0){-;by|82)7VEO}Lft8NzLZ+X?dt3kY`* z?j+nrxSMbf;j@I#5$+{?p6~_27YX+fzC`#k;eNscgs%|3O86S#LBd0XuM@sOc$o0b z^MCkep8eD9C~IVP(Vs}Y83`BvU1Z=Q0~Z;%$iPJgE;4YDfr|`WWZ)tL7a6$7z(ocw zGH{WBiws<3;35MT8Mw&6MFuW1aFKzF3|wU3A_Es0xX8do1}-vik%5a0Tx8%P1OGP| zIRA@0YT_4pijIH|-z+@L**SZN`Cmup$0s(AC_J%wNV~ypdhhsf@sZRHz3S{t8C-rx z(v=x0pY<$AT@X~(3*|K!Wf!)p~RJKiZ};edja51;9rJiq!oDSdwLn_6Z6ZK+*_O({Jhu$^37$Fv`z*2H%>d4U;C?fw!N~k>GmTl?4*wG4M>{V ze|OT#4KF6`X!3r$6Vm#&lhpP}>CyCd&!^N$InDA;e0kE=DyNd$%Nvp_RZKc>FDpK9J7ZLKP81vM-%imEiptL(fB)}N#V?R5I+XkJ zLK7Dr%6(yTx$)WjadZD7<(xkNJ~Lxv-rySj3)>lT?v9%OZ<6zzNYRL>P~-TXi;;PM z-TRP}k#!+Q31!3>att+w9>a`b$8cl#F~S(dW0Z_hI!4(Ti4q zqjrqCG3v)?5Tj9yCNY}DXc41Tj5djS|9s;7c8R<=O+J^V#_t_sbc)d>#-%Zc(LF|w z7+1vT9iwlI{xJr`7!+ghKimG_^nKn&PU3!z*evN;qY{(of@spEQM>t_4)iL~>E2eY zJIYSn&c>;3b;l&sIsW~FrPd^Sy8+H6M3$#%O^S2o(8sywnNW$T|p%E^b` zNV)6OjFh=YW~BV?Jet~l{i2kfwS?qNHVd+3bhy=DH{^#7{w^H$O0`#}DA zApel*@%*_!+l0#`Ae}?PeG*X4A>m31Xy=e{s|1X5NVr%6);T2HEdl2o60VnkcMb_R zOd#Qk2^2ergj*(1;v5n#nn0;@NVsbP3FZ?>xNZXF&LQE(2~;?Tgi9xoaODIN?wmlv zr4y)g4hi>8px!woTs?tH&LQFU2{b&1Msb=z<8w%ag9MtMLn1UJ(EJ<{VWP!(gLpZK zn`-`R_)6Fy!Fz)11iuMR6Ferk3t}X=O7N55B*8&q?1}MKicuvI7UHy8j2ba&#Yl`X zF|Nc|68a}}PUxA?t!0eXG1?~T{qu?QlM;DxnsP2}AHR2uk?@?ZF}lULEJk8zJ!ABW z(I-Z~7+1y^7$b3C+SUJT`+w8-dAr0n=Oiu(itk<;5hZS6`g;iLuziHte)jlJJ05Q3 zq#k_i_6{YttnJwK>NA~YrhSk)@B2gTTOa?jeg2K4jH=lurOE0VDbuTHDK9l2k+Nsd z#MI^+e@twM+ME0OrVOgEB&Egbc`0?jt=M7Qz}GwE?R7hx`u&%VLfN?;m;XMu<1Gu* zI~D6*vr~ui-*wt`)3JZs5VarJFF&y%N}VAHi49Tv(*>P7NNY1Xq)bfju=LTNJ5;ZC zP0Ak|ALy|Eo1~8B*J{dNt?~Bk%nYG(%lNxioS!JmiSxD# zLT9tR&}nX*+HpE7PK(bFI^7uK4MFHcjJ5ImuW>pq#*7(4=PK=mj*rK3Qk)+zbe*fj z`F-QmjMGCg+MUDoak^xN&?%k^otzkV#~2?w?CCg-1AnKHF*e7DgMP6fbn0;(cg`*W$b-G1|vSwEs$+pAx5Wn}svt?4OMM{SL~r zmsiCX9K|;@7TqFObYs;2aJSXjI~Egnd=*{XCbemHzP}*x^UB%V*wQA(S4d?S-GV4K znKtcz{xLUq`|6halgod)w_rx8Zb@GRNhw?G>>Z82m{U+`;=S$eTA?SOoMNV&8DbSI zpW0$a>F18@`22xQ1vxDrOkVBJ%D*;ybMh}se@dx(CZk}`(rGCrSL{sf^ueH%gXLQ7 z*i!169SwhYIprbY%uah|rQ`$478PvXS}JLF%G)VZx_2*Fv#(n6>;?}PlsmDnAU)Gf z8Q-OJ%4L)9E!bYZ=Z=?3)J-n4@Y(#u9pXckZ}>JUhFL!fFH@km|JnzhoX6<$-^~|c@w)f9RD(VB4<_AI*QK=iH>j z`Y&xt%7>Hf`c{&+s35=1x34CRKf0^U>An5)w^dk|Z#UhT6fCimHtbQh?buSk-N~HB z$<VrY2ST zXiombYW)jJRoR_?Air|{#$a$#)08#sR-f#ZKd-^@e6!PlZSS^S)oxFdy7{kH8~Fc_ zcNXwf9PQg)NP-3k!97SIxI@UZ0&(72kILZ#BIHBoY;vLA;qnhzH<$xTkC&a@mYDsP zt(RZkdMQVh*v;3~dni|F6(alP_m^`Ott;1W79wwGHJwij4v{kS=pxU`I#^y2(@WOE z=gG5bZ<9|wDPvAssen1HHPZauh(Yqxnl;7>I z@c6<{ z!UZ)61Pxe;)Gj<>3G^l2D*|{So;20xo=EiGnWt zUHjJrQ_P@fdHBVHdAAtu0s3d=hE5 zPvSMp^@pS zVz+h{=Q*<8=UFN)l6F4y=5A>p@HUr=u#D@U@@nNz^Ws%JxFl_+G#Zub~61uf~2uLM0xe4c5f3GLyQ}o8gXj4sj()%0mTv201y;Ud5nD2 zI1m&z@)~}_8u7+HjIwDv@*8CsVIz(#IVy+J$WdA3$R;d@j*T3}8+j>A{`cjj_=Nc= z?`Q9f8$1z_h3fiKJL8ZNlU}~5?A~7p4EGZPTZamPGop0qf+Uc@N{SGOCfU}cnp+%P8Xn%3KqxAA=2#d&)<$3P~bXbS13Vj}84(+nrd!mR=F8I8KXz_;i5E zdy2FIiY~91V^MAd(s3Q=97!TFN4W@sRgf;Y_6JoR4RsHc1&pJ4W zi*?(wP1iE;B%w2;5~3v4J2Qh97|@P4P4$Bmls&1$i)~XkMfs|S?!~F$z3Qvq)b63O zpQhWNKU}YduimM)@K|LZUpM@_$a6%k|aW|4$z3#Dw~WyIUlMv8MApB3v4 zuPR=guvQ%3)g)y|*IT@GW~@}P+*&DJQZsHo-F;pfOe@z>|F?{BRY-41Y6KG3Tj+4; zdFTc_01dKI0vb@!APOytK2Sod_VFe$xH{2)n8<*Ae3VHHM%NqVH3Pa9W5oTFtWiCQ z>LaZJbFxrtbd%lI$+L=CdR1{+I-lBV$(_mHk|t%4yttU3+ zZkv<0_wB__9SfD7#|dmh)D>Q4 zNQAhxj=Y+PtRyI48NlU z$DFWBnH2GKI}v#3>d>u4By&Nx8Ii&T-Eu@K7j*j(o-Pv8GydB;hM`~N$8iw8E(*aC zelE~S(RGO;utZT8#b622DE^F2L1TKNtc&;R6-LE;K!2cSjp~7}KV5UW&U9_*dj2W> zftm^A%?ApAf`HDI&W+CJy&8mTn?Fo&K>m+1xq-?jhw_>OU7LuH`Dgua)XxX?f>wW+ zG$5%#yJ8 zcYTsWDpRL7lN=hS*uq;jvcBm$WoSQ<+xGPSr+1waAK%jr^k<#Xs3o)sw@oZQVV;D3 zYB=9@)Odc#(KfUna>o9Qa^4M79!fLPDg2Le#toFnc>J%_&3|%U#_kgvd$+3WHVM-n zPGi~w#@g9HnNpbcfUzFNm9}sn!8RvWuqqas+Bz`8jF>lDOe46aXm$OJn^h@X0Z-kf#6B3NT#gTQd)PvI1-b&(%sTeHCC zhOL3LM~YxQ1G2(j8Y}@-KxTkngmoe42k^MDtcI-)b|`{17s3~S2A(1=65xtkPXQ`t z23V;GRy^|c@puP>M<9$xgLRamk9Dn?khT-dLmb89F>1x5%p8t5G~IgH#b7ZW)~7vC zx!8x<2}|Q*JgzL`5DtZ%05F!eEJHZ<6OWaXR{Cf|<@WY@zuedM&%MA)q|O{us9_&1 zM`#juuwhz0=!G0pPdFWugLUO%aliXc=Jm!&5w?DcsB@- z$&o6V_G<^Hw&u!BtcNJQ+Pn*8wV&&Z(#o`1r7e8Y%3&H`RXUmV zyw<4NGe_8xC2UgB7nbxFiBZa)VevW>cX18t5NNKR|~f(U_Ug3tF0ETP(w$F z_NlLKMAseM%~UEpkLl;*HKOx%E31}RUOW28n2vV))pnvd_>?&Ob+EW-zAS2|iktQ~ zyjt;%=PhXY13TzPX>^d)%iG3ku-qX;y(?72vbbH}bIOE#TK-$d+BtDR)gZf7f zq;Xsvn1K}p0yKkv?o9yXYXQ(S39Uife^x*9|2`U{+7caLw+~EfuV7s<`k-}0@)Z`v zO}0qQ1xvDH>ntf(D)PKoMLt)+DgTrPGVuB{@}sn&=KNkxv+sDt>>Vrfq33W>Fu*>B z0d&y-f&Xq2H;%ei&*!!Aa09N6=u8pgtYp z?!p6>Nai9rEP*Gi&gVApE{NkM3c2uuCH~t3@bcIPQNcw;Si+w$D(nLTa%vu_eyCok zF6jEF0-hi(K(FWHzimJb1j_y3fE?*EumBsV461_afKID6r~~SO2A~mW0-6GS5Dpsz z+JJVnzt71T_4dJmdV77K9$F>t&D#jZKz&BlM{nLnIC^6>4b-Lk`J&k5KI7QJ388P^ zMnK0+PV?(38mLRBvd(8hnepZh4M&?hFCF^UKpk%+SaUC!r4Q7p<5u@#jdwe4a_|-( z>bS`pht6mHUrjcR%Z!#!?Eg04v&=CDcMX=sOTqglz@ zqrtZhgv~5tI1PUk$P19ih6lEF1VF#j=BwZ>16X&bK76-%AdH8Q^(5>QSPZqTRuB#( zkOffOA|?Kf1w7y_zaTsStOKP$0mQuop75^$3&09Ruv!qe0$f9QKEgN`ixbds(-3_y zz(deFPl+Gqdn0XUd>(5K#ACmfyI>ON4K@HOkIsdTs~BhVY$uC5PHubx<3QME5>p_VzDU!AhitPV~8 zyZZg*XnVsFyVT6f+NcH6=2Hhh@-h{^GQ*y+(PGiFWN%Z`6IazVg~zHbgZ=HztX}qW zZbij0jfRPZw0+|GDrRxKT+B51&amhe*Bgt?hR!!F`#o5^x4NphFJnq6-3o87SP# z5bU})K7}!^5UB$0Mj&xjfDSDQpeGetwZH!7b!?LtwQg3bx|@j3d9>P%EE2o4k?L#(qF z{%GyIt*RyDc913gRUh;3MeA6S+GTlCSw%i_7ixij9r`bh{GN0VU|xC6c*F4ojqPflkJM^yhnYg7lGZdRPJ-3Y`qFL`E0rSp2QE z3G!fj!p8+QB}73N)T|JGE~tqiinyTWhA8HOnjWHr3u=Z4bgp!$Ng~R)KnGB7qRPP% z)Kn4Z$mx)hK=`|;1WN=EMn!%=U7%)`>W=D)>WJzk74QUqN?ky{e4qfJYeLt7&YjMe z&XLZG&V`Phj+u`0jj8~@2=sLe5;l8?lYs@;KxI%BR0niQwLu+F4>SOcKofwD;2)I* z#B~6jK$nF3_#FL4eST1N2-a1H*?jjK)uF`gRQmLQgsQ{6KA~*gleTZB2PmE0bk(6s zhgJIP0G9kcd7T2id6hg{NO?#&J-{5Ba*nukZqYgON7#Zg=YOGJ9Hc)0!aO`1Dm?e$7ChYDaEv z9khzq^IOKt7P-o^&0nFvK0vQa&@=)6{@!0ow=r=wf^N`1>*xl47rMFMh4TDeXOv;= z@7;Y+n9>r)(}N*lIAJ=a8D+xzc{<|;O+=;mD|PvIFMx3nuK*N zwyO&N3fR-I?LkZUaU3*#K#v=VeCTRemnniJ8iRm!h@S`O9MS-c3TWDcWtJ-qTz|h)cDLxEt{#a{n(7WlJ9Meb&fm8zE0hZr#5el zj%#sHtCwbvG^4!eI5y`uZAq>}TIy-5rMwSgwZY|Ivo6!Va@^{yu^OjNvGrcd#RogO zu|)@xaqsAHY(vZ})iSLg8+jm!7BR=qk-AlGardc*(xYwbSvpH@t;Lu_TIZrExQ{%oBYAew!I!A2zYR82Wozb;FA@ z>e!yg#D(rx0zxmARiB>iqLFO7OVXq&zIt$kwj@vf?OSX=wp>R#f4ogJcAZ_FfW_r9`!Kck>JH|;$8 zxQxRB+Pp4n`nBk0u}``(Qi+=N)uHZ>OlRf~5m#SspjM9gHsDIx8)DX?t;LM@)`}4| zo`};cEf;T9pKoduaaxQl-NwGNLVB^(!b0NjzYC%)loZpne_*!{pJoavFivb1mtEq= zhKbkHM~LCOb_E(pzp&xsIH~^qkkj%8grF6_=wc zuax;BCQt2KLhck^N*;SXT+Y*X7XL9aTpsH=Pac#mr(9}zoSdmcI3M3^5&!je9bRy| z!Y|!QC10yJQFcBHm$RR6%0sLDAP;|%R#pdOl((((;TNlIki&x7^Sh%JIb>#2dEwC@ z+25y#98$X*0Kqk5f*PES9$!{ZfyQ zZ0f_d{}L(Qzjm0H@9v~Hc5_#1vi}BW{0iQuybKtI`yjzZpeBJx>VldF!rcWm6$H8y zI>}*)6fXYh$_u(g`l^t*VTn90d|-*ZF7m+=`CSx%C45~Jge3~O@Pj2jmQwR)6&g}y z2wjoP{=$3Q*r;#YB-0UYZ4k|V4$j9jOlZM2Uo6M! z`{vdan*MDj^4!&H@itL=dBy4%^i?YB^_)Uwu{(7)@szd|rd$~+@y5+F=<`Vqgs0(s zZnR>})_bs{Ki}nTe#yl)j9taQUR95`oL-NeUAB~+Zn>U1*Sy4|{JeIi^gLzT-+1fG zJ=oEaXZ6lCl}pE1uKH!37t{36xhB=<-`2TKTp^+cff@p86v!HlzVSeyFr`u0NKfcD z(x^e9cq43VpD?dcR>J)m`z4!j+l2cv%BAg%a*Z+)Zi8gK45LiSOWTkmf5Ky=ILi00 za7KfWh_Xb#f&Yy&4lFU9X+UN7=0YHPeYPKCg+K+GQw8WuQ=9^=hDmc|Y*9f%V4k3O zjmM09-DJUX96AVepTP9%bbZFQM2?^1LU9@55Qk?F9u}mTP+l8a2+D8C3C3VsbRK9W z%s|gN@pDi(;vXWPuT!w)bH=ZriDT0B8Y%|_dSM@<6u}}QjE9;T4^j((Gqel_#Zc~Z z?1%C|vmu>_(q$PoEArofKNfkQ_0YDo)PpS&(D{TT?1MBD@+ioUd=$29MS2>PSqf=) z6u|;ZWzgIeGyG-+e(Xz@VS@neX9c#|2pYqWeOUX$V&D2JFO-hFlwWqjzZ+0FKG?PZ zEXvZ)=^(b-1w0Xc4sgvVozBrBAm8EmZD?P#4>QV=BLLEL8;fnz#rtW0xJ0`9M00G) ze6%?>-L{0)yyy_4Te1$@7CFAzSx=m^_!={nAISEU$l_>tGKFTX>FsdqcvIX~jqG%}pQY+eZ%UnJj@MSUNzbzHFUgdsk&@zhgy+gugVk6vLn|5f zil-~GiOEB!@pAocuoth}NgnDkDdu@4d$U{vRk_NNig(&o6!R{c9PmV_sxAz76IUJ? zt0rxc!BlTWtW@^$WVPOs2d10kL20^Wy0h)1!a4j~2zFGvEB${{Oc#5`JCc&95=xCo}ZLY2Tac zQ+o9iC=G{(3_q%kEk0*Px(bZ|)kJ!3sUazFz_8hJz8j$h1zI^OVS0GU7*kPYMj zG+3hn8V$*WQC=N;j`qMTIn92jR*ZP16ZDQgJh`RO(UH`*h-avW_&)SDR0}h%$(Q#srik2wzMNOC``lg5vQUwQsXxnnc~`mg z+II4Y2mRzUOG9MuDW`eZ{@46W>gGIiM};466e2(D;wKk8@{@dYc1b>J_;k6!v)r=p zj&!nZ{Aqc5-%Wh;7B79DkKHE8Ws@D{-&Ij%YlTVj)IFzIhY=BS`ShN0gF(Bwqghwp zre7TIx8wz{JI9kxzvIqJtnVrnel762zc{H3wrWHe*)Pc%wfa5{sN1mkThKUPx@C!^ zF6j0p++EPEOeAwbw>6Q%MJiZ=ZgaxZ1>N!l=?MfL^*U5>1pW;6U!8UHv9up*f(Sns z)Ep5-Tu{?Q6mvn%6j8zjHCaR{7u0+aWnBDU+K)f-{h4=sx*;FcA=Mkz71a;b3)Kf* zf4b)0uBI>}{ODr-@v9<;%LmYn`*^yJYoGL+tPSdbdY}Pl1e$=RpgCv>fBkb1;dr70w7xz>IfjXG%`2JhE zMw5NO6GNjRJ%@L`nO@gtYHa9B3xn#KiA$T|?vLBhHu{2{T}Ih?`nlzGZKi?OY+g2X zbzVE`a<(`IldpH=W-q4xz+&$P^SUDsl14)vOr9%AWuEcqX3jeoXJuxjV+#+SW;gEk z2b#X$QpT! zeH&?1rqSpmEQ`vZ@E7Hb8#WOQh3fRvIpbgw(@nZnc3Uk3{v0RReuxkPH+B+ivwQ^G z_<_o4!In)HY!#ilreMLg`W%#_u*Hxk3VlUfBTG4yF)2u2rqhDP z-hzhSVnaD6z-{D1c^3Sxbo~Gi4YPtU*%e4fM?;Ql%rzgd)&B zNq>-KY$L!%z|I6XFWR2o3)17VA{-9Cg1DTpP8?GyS+E{)ZI5_;8PU_QQOM&7MC222 z3Hr{W33XA>I`RM6RY=6y_CVX-oq*SGv*eSWc zJ5Q&Zsb8Co+J?zbd3OK(G1+r;*Rlm$*xLOCc(cL*G4lNHwP$DDwJ|lus)Mg^)@8cL z?k`Qx&Be>`F(*pJ)Xe-ird;7vG3hdG)J|6YSz8%CN2@!snE0?+Pc2pS6ZY-=Mbd^x zm$~Qa`7ENxZC>}w+>x#0V@J^p{Tzar(UEz?uoyQFub3>wnrqsO zeX90wl{Wvv0`2s?wOZ*GcePnsAxBv;PCB^vH?4M>Y>wG+n^~uYM_AMe!Sry+W0op= zCH8yXH9Sj!AJ~D{Ke35n4SBic$9UU!lJNR`KxWIqLb5 zY1B;%{2aoI-0HDAKHlcsNT$FlQjUEG#pAZ!Vx%*(lx1{f@x|VWM&*BA^KSk(%`E94$&Cy4H+2x)Z~qky z{~9T5qM8WOz8F2ksMf@F5Zk4f z&#YtE4eM7ULM?f(23bnyW#;I#QRZiO+vj9;K|Z)tmJf!9$~U?lHG5PKGN(=&Vy-et zHv5Gt?0a{C^DS6gWVygsZdzaZzh>LW)Up2DNgy31LQdhxL7X-F4yTAgz))RP(CbF~(Yn5orBG^vuiToqfh3 zqgFqK4w4eriJ&nzfiB8FS`W#O<0A^V@P#G**Lnv@x`e-rO0a}J=f$Yd54?>;&xWMH z9V7!O0M&;lc%y^Bk1pcJ*FfIW{L0u5^+9c}=C?BZRY7$?r}H0cBG~qe(L;=S{jd(A zzm+t+Q@ADOW;woc=JhvUW~H~1>bH-1^JUf$HcNjisjdH7_AF~7{jDTxp%lEr(Ei+_ z)!;RKIrDE-RC-o4m%bK?>&vX>xWc(DqmCV>FQyucmeQA5`H*~1-tA!0;-~!iw&V1b zSL$H$per4Ct)zvyt<7Wo4WqjGi}9i%wP?-@Endni_(alMNyeHeoQ|haxTghQY9(kM z48t2#JY>&L^j6ZB*1`O+4uaqEpK^3VzYE>$2{F>&S0JS&bnk}WmzJ>Xcm1@z5l4P% zbd0c37R4L+$bJ#dxM4pN9fanOER7Qa1M#_%jE9B5ie7?kTSWXasS4WW@5nC;wq>zc z4i(`F@Q?C=rr^Z8O3(wIDS{0TM*7rnt&fV8tIF z^z~9A5kC{*^|09y7YaKXU_4-nfIX>4amR(QQ=+!tk4>#LSNgG32v1rnFB`dY61Vm5#*>Z6 z!6#gg<5fLIIWnBy?C=fE=t!#hJ2KYUs~&6+5|c4(&h}No|j9C z`@j22oRh4w`0GHd!7?qiIBDq5rnO1di`^oJiJ3}glhWtED&8)=N-DYah2-rGtz=51 zxZ;;GQp$%5#RHd@NV@TWeK4Y`&Ez)>39mJ@bZMviW)iCs%z0dDLsn4msi@ABcM{zaCh}oN`-;x$tbK zx!NR|xhVqojS_eglfZk-Q}|IR5yuY%$@zoF$+N5naz87Z(#cmyYKtY*Fh zq0iH6)b9Hfk{-kGJ56v}bPE$nUC`}JP^XumTboGcf^Ksng^SNkAwlO#S4VtdiGnT) z!4iHh3d0iUaOo69s^J0P`M=VbiqFzFjdOIm}4R*yB`9J+wi3tlN*4XbwzUs^p@ zS4`+LFYoD!@=K|=N%NKp(v(eWXk8e6{gyhRhxGlBdeUXcHC}veNw)G*R!#~Et>fa; zbg#Zv3#}*9*yB6ib^lH7S#I(h#YA7nrM>yBt|-=l`BJ)~i7O{`1OF9gG|YxI8gj!L z@rF%UHswj^sNqk{8QUA>zRyyggz;3K5vDW>8|9Gy-ThJ8XYGs|I1vTquh#9~y%xsd zBsQ0%M`iaWLg3;$LSS{L5SYSC2xNE%XTOhN+Y=<%`a1>N46t3nyEqYot(_p)%E{13 zV11mr-eJqEKq~>c5ciEN*fKcjWj%7tw8|V zg|1U{hkpSW4K`xC5^}uea!nDec!bgCWvv~M_8Q@auu-s9*i4`b@Bz_^{yvP=9saps zx1#UIvJQUIY)a!vq`@WySwR6ndPsBF>DYDx>`Xx0;n!$Q3nsvi$FgM!pyM5j@L*VU z6)gS1kMJLZ#p6pqhNiGt5Pk*5;m@>A*ymsh;sw}IK!u<3<$xdC$ucal0&yX*lVBqi zeeMgDVc83?Pnxfz>oM@xL|NoM(YrOJKia!B!2!?Gj?%tO8_P4Tb&GLZmERG)%$Mz~ zRD;)DRWGK{vtP9RrOldU)I=%o{c>!=s#;tK-oZN#+RA;K=Zq;mCsmC1plRBZjDxf- zS$k9y%h&zF^-MJ%{1J#31N~upYySgqlR}c4%(H6hhtsUI>QVR-Ptu3#e&++3Xf35a?o48Fa!Mr2O zYRSin>haJYSy*fjcKBE`HdxyzZ7r6cyN&C?^HrN0(+mZ*CmEZMGj1rQulb~z@O$FX@6R*PL7+ccG`4ET{C!rRY)>at(xkg z+Npw<8g`(XJ+;Rz``OIFYO?dK)vE0xO|vWhTIuLjH&K$ynxa=WwrA*JwLd;JHDK%W zx%O)IKyhTxW}?;fK#Vy*M4Yj4vp6vCQL*UuTw==7OH7rVPs9r|bBWr7vQoM*ReW&S zPu$RPkl2%#6vtmOiDk#yr0g%hmIR*};+m~`y zMmZh9XSjXLUrH`yG zI4nQZ`pAzT%JPj{PP6rQMV1;1yx@I-rx>BI)58RQdW^tt&kvHlW82AMPKA#R?$38^ zcJh$P5qxW;z`JaarQ?SM-a^EeZ+be}9z2fV*jEv{P52)>(obRI9tgbK9+^$9hO*=a zY)1)&?VePQ&plg*%^K8%#au4M_TN+3rBRAh)h=_-BVAasB?4>pQeaz;Dr{Q!AhA!v zQt>j@mPrD8j7R-v>WtcapDyxmTfdfSk;v`B2bS=4Q4p3WKJ} ztW4|IzBoOOpS<_j%=)$_or3ME_WPT!=G^M*O*#gf*X1$I2C;VI;Z~YSQf~EQUi$ek zZXP|5RuiGMYf1Bj|+31?bhL<-JDBTQu({=_WhPq z5rVA_(#!xF0j+CmONum%y>$&@9PEDZE8@tXA4Do>-4VtwK+l&4b{671WWCk5WpxVH zAjG{=;&qMwz!msMfC0b@;fG)h{4-$h!ft}aU82t!nGQeY$Fb;hIiPh| z9%Hb8^R=V^blx5S=SlAm(VDo{d>}dUJVlta3}`3T&afE)G!UKUu(Lk7hEeLHtzX+S z;L+gf+FVmV?y+cdOwzei9IyB|wxG*gZf@8$#;4jGZC~?FTKhbg)N)U~ShWVJ*va7~ zc)@YUc)Po4VoDyH8_7 zc1f(yJ#%(vTf&mDLC>G?d|SKY4+R(5g)+B!MvrAulU8>mxknSpr{*4BaO_6)dj3@E z9=}EE`k5Z;oU#|xKH(G8h=HTjd0D!t8*ipl#fPU<<*Rw>$gW(S^Z1lKGW#<%Q<5BN zg{VrZQgcz%gngUsLs$ElZZ1x0D&6v!eNOHhYWAD2>|s3z`QQDitl0cfGcjfMX5!4t z$;H-}FPpwwyEs~HXA!+atC{?N9wP2&*;-sCelOmB^gujtD?)5BCxsZf=9O4_Rt<6N z*O{f{S$2x&dX|!Wo)wkcQtT1;OlvI8Zj?uSxjTdCSiM$CUeR3~Jth)2neINX_hcYr zeqv`_CsH_48G*zV4m!a9slwsvYIB!0yQ~$*6$q*Tv}b?+JsFho)=UtDd(ghV1ZPxp zqRK~4+p@3_tF1tGYqpJ5&97?<=GSpe%n=#JnU}ANl>;9Ma+MB>JZ^s-dFfpbIciH2 z`AUi)`C@y)oGp`+Eodk3iI{zH^9O;4H5K^m84>)}J|DS<_dMS8=nek#u)?bzOUjqX zPTuIeASazB@U|5dw)Qk$ed>Y>9q(AV?z+dczLaj+fC7TFV~N1?9&t+USp`14RRsIq zL*abG9^S6mBx&Omg>`ms!fSU^*r-(kdw#A0dp0$e^_(n7X;TQSZy|;KG%uDd8YZxF z#|5@5lOjFO>DpVok*>cTek<`a3mCQhK1HPGF#L`aoDbd71iBkK=;G)dV{{e1$eAK} zab84z7rw9rx?=w*Wdz+Teb&fZ@6;fU5k>`nKq;Z-n(CD5F&RL&?$gg0!9I1h1lB^$ zC#(%r235g-tdd~cPJmjBuHda1A_#}jzP?KIO4i}99tejjf-Q$rum&M+2S684pG)zrB3M^}m7omb z7Qk)-PH-PUW6|}OHn468-xUOFO2ENNfHS0ZU-fw(vy^zv;xxkL!Bm7-z~VP-*#KJ@ zvQ^mljy;K!d+C{3Sh5&>Hdao@r&fTi-&yVAG9KSGIrZzwzBLJ>wjD>M- z*<)NNDE~10JMsL5AD2LPpK4A?S!0KPcb$?!TUKW|=E#+AA(Q6bFqOL+;n?Q?n&ry- zf-RfsZf|!ZFKaNrh~|@fxMOm#r!;eT2($K6S=H;`vO|YYNR7JWQNOF4gr{#AB+V`R zy_Th6d+lJk=8k3g{G?pJ&X#tZysMRO_nZ~!v6RhfF<$Cb$CHJQPQg;g%Is`!E=_Yk zulc2J>ab<0C7zFLt`>|c&I`>xz`Barv@FqMwEXEuNTvAFm?XaG8M__im~y*;)^Wf~ zW@@nCF=6sFDfr57Y{pMJw5j#$NJ`~+FOOy%zM|1=Q_7HZRb7IW>MRsW99y)%K_J;&owG9p2$;C zOnLri`Fvb-l1t+x;NL<08Lq$uYKV3aw(aL?gIV#u}TIByfABDQ- z2!B-72IbLQOnQob<0>C2yU-5|_!5Q#f8`vEpF^Tb&mc>;qMqgv>n6y1_QuM~vW%9) zHb%&;=ljS-l9iHse%)N&@cIV7RzZ=ANHgVhm!tUeE+D^G!{VwuA&+>Bm zRU70g2TSqayk&lKY%y8xl2fj6f3}>rTUs7`Hk2Q@UWc#kUzIN^UzKm|l2e*d)|2No z339&T{=Cxi0JFAHvn=&$a#(KlVjdrB zTgM;vu<#nozLk?z-o>3oZ?jrlVYMGOlneIV!(;a;d`}0Nt^dh~n>GiCuS|=yuAn;z0lh$PSNVP6?+*r2_}}D=hT($>)1WtB9;#F4CC~B5 zmsMU@oF}iGMqkyoV6n$Mg_7`wHzIJ=tvmHt(ubk2EHK8p=^ zr#V18m8lbNaCRfxF)5hl;;<1jAG1?+Gjfk!XSwh9)u|gU9a?jfMeT2@hySJB@WhoU zY9Od#phki$JuC?0K|%54H`0xGBd-xQwlnfmnDS7%(fCkY!g9z@81dvMN0zoTj_cih z7-1uiQNFQ1+MfJ`aa@$wDBp-P!btjeIHQ3`M6sgZ!vD${hnARjHK?*%RUz=q4Sb6z zLI@n^Geb(voVrkw|B z28SGm1Rcv6NZ+OA0Q`wp4 z!+E#jPM$v^Kvg%~P!AQItS-N~Q``95R~vu4qPBMFLaos8?%Md0og5tlWGQq&8?8uW zF~^iuEm^r)>sXlixHzrfRO$NQChYLo1MEqe5_qqmJ`*o@8B=Y z*Zp_wigGqODCg{e?UQV#$dN1Ur@lR_=19{g`rtV?`@)|`ikXH_G%YA<73&WeB985r z&(yx%@6lVu-eT_8eN3Gf1&C7)FBVsy2ov|T-6MW`Z=)y;4HiSyuS8RtBc?;DkN7Z6 z7ID|&9#WPOTcjlCcZsVzrV|HEX)9jMbYEPxVX8Pt8YISb`sU5A>a%)J3QgB1amLjl z{mIh^B(6WvVbODxo~vjf{+j+|bjqDUj1_rpKwQzi_DSbphHf1#oEsD`6s>Q-6=xNX;v%d0%5p-@y>+n$`(!$c&~d3 zKXEKb9&@NPAHJ+Ne~?MwQvF%%Rw&*@8sH-lCC_z&geN{bd@YvM zvCC|E9)Y`g2yF94r?jp3Tjfi|x4#ws90Eq|y-(liI1InP1SdhaAd%Ds-HwF23%WIl zWG<4!5~KqVDP5$3B~rWageB6rNDE7(ci|07pmU^?5tcxQK_@dTk;Mf%5BgVcvcVGg zqnb_*SOT3B9sGgrt#_XCAxu#7KooF6O$AZV1vMLlp9^Y2h$1eE!V<+?(659j;i4og zfewgHX;`9+i?Xl;I#fF4VTlSZ0$>A-iu=G!o{q>zbw%|vPR?d)o_RTBx8@e7H0=a1{qyEz0>P|{igUJ!x8D=s>(OaG{YT?BYqAYc-*AXm*Z#Ze(TFw{KZUt!V?&piLOqkr77wA-nWexR|d?WVp5?My;GjbAi z@uZkLoj=zuUgCNO-GG1A(GB`8#e&wN~_ZkJc-KH4Ofnh|36QJ3Lk_ zKf5)GpRJ z<(OWwAp0)oSG-(`Z82#w9@kcc_0bAfdnq2dXl9*$xyF8u{gGEmc@LkM8yb^Y%cjM7 z4brwYKc&s;(nM=`>9FJ1BI~3H#Wp$S3tiakeP2n}LcV6t4rXTyrWE0YUsmHmkN2_I z;rn{hMRFE+14^TxzTC%{p28-Y1p1>_<(1Ggo=5xHmwh`? zOe?H0jU4*WUgFGk`!AE+0uKFf%Wif&5!*d#BNm&IOk5rlA&z>{My$JYtLXl#XF%x8 z{HD$6mx+#m;$q~aDDh@QE^&A7D`J;B{l$nDkHq#nw~1+=x0ce?DkxrP-%u)1|CW>? z%^mSz(XFP~ZU;oIRSU6;w=9-uJy|^2>&>F9pVz#Xp2DYgMiWbFLmDHHxY|GmNKZ3* z!lB*zYia}X=K*;E+Lu4CG9a%BNYr(O_OR)c@_mxKP zJZ1IYy3VpQ^spt_6EE|=-Q&$enH`6uEkFr>sU^k+*MbB5%qUYtH(! zlV4#n4=g9J?NtT#IzZsl$2s}@!V3TX_pEZWeoo%Z&xcQ)>%*JYj^Ha(U}Czv!Y~n( z=esSiA?XzEzeK^67T5$lcwA13xv2Ztgqt$Ee@5ZnW`#}nmwEl#Gg*7VhaG-ifzQbA z$I4eY%(iUk$VL>GS%vQemcs7E_I8MqE_A_awpRqUsj|Yl4+^5fr15crcu*m)Aa;rn z*p1zKKsvWtkNXn-Gj8VhsTcqD_mzB5!2~r!MpJ|?(mzJUKv(Ro_mrslBSaSr_Rq{Z zq2?N0v^RsB6!514o**so0^R`K$Umwai1PvY0J?pDUfn=mI!@+lPT#ETg1C?RzLKl_ zPAK=y_mSb(-&=zHx4o}KE56Jf)>vQhr(I{Mao zv*JsGf*SWTkJVRUv7Ri+Ac@T&cmN?{dy^2()WvdGY* z`a4pz;!D{gS2^BSvSf1P(N}zFea>o$%;Uq$M1)bNmEKp9uC9JcomSp)yFaanOPyBh z*PBm%X`R-@Rg({O5R>6YpU_d*AYnW;2nO#U|R&1LF-r#eh3n5t6~M4MZx<@2sfAY@8;OrDEgYOwhV}?54aQG`ho2Y{a_c; z?t|%yU`vkhBya@b>#(SIny+CUjhIEi*`iG-wm_K9v5g<`c-D zQjULD37Uj;F5*kz*|P%vx&Zs4`5N@zlVv|Fes9((h#LdUh{FTLG97VwVeiAvL;Q01 zZSV(zeDE)UJ&*WYu-jluA+8<#=>U$`+7;pN0iDlwSWnoFU?GMqPhou!*B{m!G=!h> zV4t*ht@#FQa}a^FB%n0>h|{;BGAZ9tfc@$3O^w7hQAlrrupA%H71*o*`;{r~_9xe4 zN`EvxricHlj7_w0$MdptKlaqF7U-=dDYTOH@m|OC<~$gaHuFNwe)ojdB4&ug+xHst zsoRVFFwd8#iP*v`J6^_Qt}!phz0-N^RMQ;V(v(-Vp}$nqiq9!&FP@~hT~%ZJ2WC23rbU;=eXF39WQR<>FHTEGy1V~{N+$F zUCL=JDviWqOH^Yc4=JqBSCe?E?n!vjnFZK}ZF|`BUytx=V{%9pCN&ZtUtcP2C{|XT zJ-33odPH)yjZZ&yW(rZAwZfe-?ONFd-Y0cz9e6({<|uu zojkWiSDAF!K6AUtw2xIcC3o|+pUOE%t$4UqRA93Q_9+=Ji=`bWOeZt=i(~7j7n`;# zFZy=TOyck+rk=sCqbF`YDK0LPLL9YZny9wwBQ6;=Ol&!{o9WUqMXcPbu4(=K`{FaN z8sfpLze(Q1H;d1IIv~zYw_dD}*x+$ zIUzl4y&Dg=dgLEydA#DOd46ymv$IGibC++u%o95~d7Gz#Y%Z+Go{eJV?q2ugAJ#09 zzw?NbUv8G=9n%#ycbve+KNHwAo4^AOD10=&Cp16MDK|Roegc2cKedIW1@7NprB0z;6SUK~+#4(CO3$=pg^O zIVH%~0dxXgKv(eA3NZ=y{WZX5B2;V8T0)1> z?jKyjyp%s-+3)%jrc+t(rYDReKk@D{AnNmV#toc^s`6Lr_G4TG<8TtwRPa5aQJA{| zO{IFA5SR|OBEBbd5ZcAAAi>s07Hmu4-%LaZw$4t$R#p~lBVm)nCUpwdtAb$5h;TWC zo4{sP2!buG62G3yBiJ?wn_$BQ!MYC?wQem0egycH(3&yU#bAu0e@n=^UWuO{ z(+_diKpJfC;S{Wo;YYKtzo(-qf>naw1~9!-*HuWX!LLgHX3z%sw}GO-12h0ur2PV| z0v$emjonQDkG;2mk0M#yw;K;0f_rca5Io6rSM^9j@Zb(1kU-Gj4ub~|E{n{f!Gn`b zPct|y&f*%}7F%?Ih3|ek)12(SWdGlJcbD_R+2VKcR8?13+jLd+of6oER>6eo%RCX* z20Pj+m^Z?I4}Rojrnn5)59es2V|N3y;3vJ~AVAejx{OJNzW`{PV6}CFaK4(xg6lQm z_>?D|o7R`6WP+tQZLCZ-ggb%9*uN)e44}Kv+C)a2gJ}sMEs6Gn)}ue%FElRZuUk(j z++bPvP940rGdo}Rta|z_cN{4^idpmc^1N%8>`d-RudWyptyZeM$UZIg&#XwLw`|>> zIG#4yVUER@cV^mWSD#(zr|#-;N1gGmq1rynBQ@R8UmViz=2FRa_oe$EEUfY46fBZ0 zW6H|8?CG&KJloFOQnAf9r3_=cDraJ^DbFt5P}T;nQ9ty{pvJsdtgOfzu8x>BKwa8= zh+6uikJ|5gUB{)2?bM1j$2n4XyE$&=sV2>gDHU65U}09OrJFSCsgX@j(U^(P_KTA< zzhs>%A7KZ!WMH-{S9tPuz1UGXhUcGKjwc`CR8D5=tHf4XuMFz56>BW7Q)FgWIuA;v z^lFt#iS+WbKP{J8$vgA9(#mJ3;_Yy^UkqGgZ`Hr8{mv{OrPR<^ztH;U?OC5Mw-0|* z1$|fo4e>0MA$5bMe)A3M;_mNvh*_d?8D@8GY_PRl?`NA=TpW3^W?w z_+#30pMG6m)%Y0tSpPCkzdxjwWYz;ot0i<|UtBHuToV}QL7x(z`mw7A)d&Kk1-2~nh=^|}b+|mExr0kspafnTeXIZ8T;(0eg8tSmJ z@AnBjd81s+F)N;J+TB6gec6+jzkQyyJ3oo#kFv6;@otiOOJ-ZDC+s`i?&NtoIN6{d ztW2IONRCzl8y6->lSlrKV}30W`cwRz`Vl@n;is!#3%!y=au=xXwMJ=5SOU!k4OHJ+ zLp2R7;pQSOERoJddRQWZ3p87_Q8SrfiOeqCVTmj*JYWg@dFn46K~os{5k*`SgC&Z) zC;>~LNuf~+mMHB4O{YIKQl>KYC#txp3QJUT@maM)e}I3Wa)e`ldS>*D=-JTopl3k$ zo$fQ;Te_cUQvG#(NPk<*KL(`gE*~Z+->q2QYN_g=qmSaUzJyi>BY{Z-N+m7$;&$&uJO6X zAYVQ6E-$h89yJD8-VIB5yDEz)4|(C97xIUrskQt{uXNL_ao9cx zHT`&zxx1(_s2y{VNoMEF8F^DBg!c}Rc)OcD%te!Z{Ms9XNvjt0LjG?Zy~uwAz2u3v zQ=zPflR74CC#R>SJanh$r&~%(=@LU}^Q>GvBwLRnYM(vY4;(#z$#d3$bzLdz&EocwNtR* zxmt?Jg87|Qu=s+?pef=|2~uAT^N&`+yc4zy!dc+|0X74|7{+L}Av_XxENBU!W0-q@ z(O?ZY2sqNGbPDD-@Na`Zl`~-+%xZ*bUjyihdSDCeblADD1;H^;8Vmus0LHwSQF)kG zAkAe!`<4S}OKan5^1|O2{!?Hr`~v~$8#Ap5>nEcUrMYfR@vyiit-r1J#v} zv#Psad#Qt`PF5E;+OL+}u}SUOqkx(+?KZW6e{)BHz;=!w)27GTI3<*c9U8D=2a8Dq zAN|TE9zV^>|8$2fUFgPIzjLtlA11Sa!CTnF{9~B1eiqNV;u3p(C_Aqhla@C)x<@n= z$<7NM-KA_FS4>&*y`XfS_F9?PZ;!HaS4(BahIUHPQ3I5QZ8s==1F9(#qIcUj8P6#h zQa(}Y*DI}*Z5m+TdU}nLZ2B~%z}@mn)3d!}M@ILy`#gVVA9HJ={lw52hUR7J#Famj zJ??tdL4LOz~99=O&B0SHBi#`(_ZopZ~MickwLoc{7u^{oNjMQ^Von zk99pH_ohq4c@u_7UM)t5&q}z9XL}5lQgvOe|46>Bz8?Ku@6wkx`rRTG!(9&~tzyt= z(&thNK(%5TkQSr|^r=IiH}pwEpE21%PLLa*B+~}+qa^xsBX3+yW$v;@7$tl5#?~Pt7yp7$j#Pj$`0zX~L%9Wf}*=KQ-oVIri?`g-}A&ON_d)CSt zp)W|PV*=|OE$}jL1)j5xl~=s$&4U)Z@idNd-1Z?GH&}vrvOQ1P#tK&M)mz}*Z=-*R zkHAiz$HPc)ERC1ukx=UzdN>7^^@3H*6E8@4{V@1_y};^32TNn72(0_tpI8ly@X1}E zG#gQ90BbnN#+to}mmVz=*j=ZmAuIZtEbkb^HaxRRugbf#3Z=0Ba4TDXL13XCf>bh6 z5ErNHv5BG}bhHVF^DMXqf)5M)35cKVC|hbm2fZJraX zo2<=qa&p5oWAY`TpIeED<}Uf9(xk5xr71M^i+J%4ReB`!IVr|9m4^C<1g5UfTUvb* zt2DgdjYYgs+oK#S7MWuo1Z(q-xSGryBZ#QUOe&3>Jo5k=;lo~6oy-etnMx`R^Uhj` z4^CB=m)z#Y!;Um(A1XaJ+BzO#W1L<*#U4dhX{5Ndadb?UZr~L@k)}=#`hAo+>Z$lO>nfpAhp6|F0JSNvJ}9=Gp(5yQZI3QW{ZzZQbZ47zb1%Sn$sw zV?2-(>qHaKWM&gqtRWpQSYmCic~@kN_i+lA{IJPDX(!fo76c147p?zFR;ys~M?8g7 z$O&3cSA1aHunOiA*p>ly1j4bfGho|-XYdEY4g@3Mj{$1{nhKWmu*X4pK``%zJqUXe zb^^ecig^iimHn_dPi-tu9{ADF)%vF3OTkh?{5q(%Mo5-`YZg`?K28U_;*?7G;z1I7>cxr&xV&oMYm=JQ8FP z*3PiXa5-x(CiWTSc$O-^qsgX^(xbQr;^*GG=Q|Hhx0`rT>j_ zYM!W>jy5^7I?ARvs%EeDqhr;WFzL<4t;(+rJ(=h9F09#@ZEPjxZJ8Vq%2HO$B;MQB zmla4oMEOBjAT^CzFWsNBobB=MC?!kZO&NQks+yugJ$2fos*d^nyRu43e@Bmoho$cW ziaOTS>#No)(ogC>cad7#d|29GO2slf%cItihsDkEyd{oa9>DAyp0K`S7Dy)^d$Eo$ zPqN3)lCgP9TF3qJCX)FN{K?=rQP{6WdJn_+ck@Nh{3GovUKFvX3@PK+f8jVo+;;=* z6(`ORJ!fpSuX$KV^z6J+bd1|%_uO7kJW->^_5iD3e{OxGRI6D+nG#UWaQBye_Qf3r ziKFHFN}3*p?0L?Wv0uG&TpYFMfWhP1OZ)MQoek%*l~nv1XEu~Nm`|)z{-}NK#yW<+ zcdSbAt~GI9#qEYWrKXBy!j~G>)Di9W8RwN|Lv8jNm(my_Thy}ey4+11wU`^GhKv_i zRGld{zxC44eZ@_~nK?EkdDgvR^D0l`GLCN|?*8tM;aU@`Ve(Wjaa!pke#?@d6^E8R zZ0~;hhT-&4AN@!3b!km_b^l{dzhk5~Wzhpk>rHg3R9B|}R41df`f_>`j>UlypcMP9 z#zY?ki2F-*Cgj)Gl`l%sf7Uf>*S%wC@0LY76w!YtgN;8rCK}7vXeax(^^tp?{2+T6 z8u9tZz1hX=@p6H5UFFoBuX5G5lboh}Cq5z4%De78#hy*`WOtjn@kP@<@CC&Kxsv|` z&r+-xkI5Fu=l3oo4_Q`o#Zz{kuy$f~xs@d;rA_~i4A_}*ZV|6<6= zhh^T##SD?`==K3Dx=TNP=1yULXr?Sh)D+mGH5qxt{Ug$|Ojfpkpp&&oznZP?<}{?Y z32gSExmvyxj&^19kIy9kf0NT6`sehh!NU_?KmC4C5ka7lp+Ut3L3#y2MF)Y###h;k z=l6P4L0kvn>7o!UQP@QhSfZ$lVz5LB7if6>pVp@&oFBmm{fF=ey@9Bjpl46dnx3&6 z_+t7LjwJ&Vuz&!7hH*l#A6Ic+7vUh#05k$k02;%epEnorVW1P}47vg|n*XIs!Qao7 z?*RD!S=Xq0hwwh(J-Yw4s`#|7QC;sd+PX#+XJqC)yeunp+osL(g7u1+I#lLaMxLd$ zh1k8}1=#6riq@N`!rS58ZBYQXqFATdVn|aOd?z=pKcvM`yziOyTz*uWqbCrXzhpe` zuqQi@IKG2zjmXK}GxeZZXLzj$k!L%#o%Q_jInSRgfMYBaHN$BQBGR4M`TqB5Z6!Wv zTTPx~MiyyH&8mFxpp!I4OLEkh!&+Q%CwM_iw07JYbMvtWC6Dj{Artw~4=T@k{t55f zel#!mzJ}Her?s1Kj{mLA@TB!CDj=v}phAKyRTc#KsbZjb3X@;ord!&kZ>IuA4=0Y( z_yCDQd~aD>W7^{F6#UZ%3zorFO&214 ziN-WpuGj?slo48AAyYQ&a~IqDApRX}3w+3&fWI%&!kSP;QXeA|su^vrmuPJJ(W;Fx zviuY*m^)w_@-SHderd85`R&K{(XheT$41AC*TzC={e$8WCj)FF{l-#KP8id)3315V zi0Y5VOOfVe$^c9L^T<~~xE1{Oklz|B`d=YD31M%9*V)jA3;996GOb8RZ}fzx{~oJupx{)P3IyzkYBXlu?se@YW7I-LskM-L=it8P!**MbET~`)T%m zHep=66xTD5=Ux7a9clh}r;ur&diL^cHTwBQbxi7AYTd9KjyIKJ#kV(dJ1%##FyCM9 zv5h50imxM9uo5+D^5hq%^D6I4u?5?&u}95PD`)F(Rd(O)uWX6^sO~v;L0!gWWx?rO zs&&K*Wz3a9s^9ze>iE6e9eX^3)Ed#Ll@a@nN|Se2RWs*q=ol6q#4_F=z}i$U#1`zk z!1iWc%kp-17i-L3!|KO}ORp*~Vs{?B;%Pk#@e+exNO_t^vu&k}Y^386PvO&ooygNq znf|hXvNG=+W&HHYO7}y(6xO_<5|%4aNqIP#Qu@IX#ckt!rER)<_V%a7*?+iDK}q@A zs)$=w`F=dt*`B^rq(R6q*f4otO8d`4&35aD3iiC?s@k`ApJsSn>4c$X{7%uYuCJKv z!)|euY89)aU(~YswZzC?WyLHT_8Ch0SmPG7Dq|>odb^l@`!uo5@=aov+^r2W{jQ5U zyKfLjN7=>rsU}giU6#_>Hj7sdJTyG&*jAjq>XJA<|5&k@rKGrLx>DNeY#-&ps2uY!LnS&&s(0doDE3!GU5cKT<5=kT`T34U_oyC6ZD zg+G76vB^sl?BWAXvEe;|-QO0^n)P(D?_SSglPd&D3+%GADZ3YI>mJN9wXw2RSaZAN zWJ;~tw^WecmW+E}q!2O0jHCauGa$}P3*1XlB{z#I=Eq}VNnzx)W%iXrzKAQoEpHfN*m`MFK&31wq9Fk--HO6+|W%nPCZc z7ib)5T`oOfiL5TrP|-#|Wrrp32S1IRutY8wxnYSsF7m<>`CR;7dn$~0qKJ!PutW(L zC1HtDE=t1^Wn6f{5@lVKgC)wlK*LBND!8Z!OH^`E8J4KxqADy=&4mvvfj>fO7+?v} z#lNd9Q87->m7XU(LwauXoap(`Goj}|_nq!H-DA41bT8@t6#$-q?pIMz9MHX?`$6}B zuA8ovu8*#Xu7l3q577C3>ia}RDZ(=NG<&ftE&y?XpeCpd>VhE905k$kKr_$+v;u8F zFbDx1Kp5x*elvS9!V#bs9phVabc4wKVPB`-+K4pj>vT-=<=4~ip%G~;rg?pB7UPDY zJ7pS?cJR^+wxIJXnw41V2h}=ld$T@^G1h^S9LwL*T1?uSPuWJq8^aopF^-whMO)Je zbL+650*BK4Iy6(Vc~$L4+APKu54B6&yyaFr@?54N)Vw7PiJG?*$4*^*tl1qCMv^s7 z2zba#W=dJCY}C*C!zf$^{oHSd!e6FQkqZifK=Xs zf3%O_Z=tbn@cYPuEoy@73kJWeEFE{gC@Y)5rN$J6E* zJ_0|gOReuwL0J51slO8SanjO;!EOhWteP&P&EK;U;aSM@JU9)1d(a$Mz$%an$Bx0a zy|73_^8=B_W$p><1KR_32y8Iy4y19SXpM&-*JC;hrht?H`)Kneqlu;U!&+<=OjhiN zJZP+(jQwbT6RLO0PrFWU*ae`&7uR$u{AFX}!u?VOS(KQIW2D>Br<8lAYKs9G8%WOW zshNMj2gLdhCYkd3`sL0VtE3@hE$p`5tVm5n*OQM!6>v2y(R z64mqNb~RhgO6P*#cb2t$7klFZOBAn@^~LhL)`^i}1>??d64Wtgp0SK;o`{Ru z7F3FQkBL)C3(^q$F(>)yL5_ht21>8a_GCS+?ZqX+B%qNYMa`>*N=M6!rJptu!*hlhUW7D=E$uvN_~pPtv4h&w z&QCV6Z|K$5@WYg$_6tWI#ic$!UMxR)t~e;ZrM<7CwP9qop?XpBb!j!>!k2RT{UL=W zs~$*Np`jC_&o`ki?D zpfP9)P!7mu(AwJJ3GSKHBQli2G{h=+PfzlFCcCarwt({Mfk%vd}b$ziPCX z8|=aS;7K>$?6Ax~%s$As=kei=(z*F5(=om=_YgjEa1bxIBZ@sK8qYVj?Ifq)vX7U2 z_MVLzl9G3;e~BqkmDvU6BlSrZ&%0KN;3MjD)?$o}t@^P&J6R`&jrVwoS<|iDea15W zQ-J{f%ehUw;m7lA#>FVyS%J5|nT{GlaG^QQj zDIH;_4+pZ|*&^7OtL~JZMGn|TmZ!mdU(>5DkXG0VP?#L6v`{81-StJS{&hJ0DSl2- z`EQ$(=l6w={~v0JE541( z24lYv@M&dh__bB7VZWL=di3Y`hYCoz)_bOTh#PNE#arvS68<0yZx;PCceA?lMpx%> z^q%3Z!)4=Hk*H=MnjhwS))yFVPmt|w2)%GNK;8xQG3 zjX|D&eGEH&tgfZ8`?lL2byP*_KgBTH%Y z?PLjx*Z0@A>HFw;>*@47C|=J?kE1-u>G_eL_9LgKA)DAySkIdZ6@5G9O-?_)o;Stm zX%fd#{Qp^}zmQ2N7W53ijMGmfDV+jy@^ljXFLl!TW%zG{or$t`il;W8jsK>5f+?QD zPVGC{G6>Duv?!0`U{SgGuMJM#rdrjCL$(0@Tlg#tE4s(KJ4Y zI6Qyqx8lDlUNG4Zu9ff&PW>mS--pRFA#53s`~>*pk=_ZcAQ+%ECCk|FxK%J;v?k1D zQxf~(d*6t78p}lcm~tWf6htFzh4n<-D_HDLeMS7ozY#3M<%InZXOp=m{s?w;<2E&vU*M%LuRX>WbU2E(7L>beRB4?_BB;5E5Rk-h*xv2v+rr;BbJQb zpwzGOF80@Vf-+>tP;u7vD8E%VyC?-(SPbD|QR30gy~JXB4;Xe-u4gaY_^lywTS5Dg zXHN`QZg=#%p1Z90-Rwt(#`D_xy}#X9Ec$eYI4XN*d*I=ThCQv`*;BSmW#8m=+3@Ui zC9zMQKzscUg6Lawskq^~E$-5>HKOrZ8NXsN*_^dhpi=4FO8-e<={~w+3xN zJJ244f{s92&6@WA+MWJ5lT;+S7$;Ud$@dpuAZKg2g+DFRhfiG>$PWc&;Br|jAJj?Y z_mX+yjtG2QWM015D?1;SQDzU67hD)*<(FpGEu{R#xBS#c}>Ztz9EA^j*G7E+R3Z5qhhEcN1i^a)ns zMpahk-WE0@#E(@z7bG3XID{3OQJM8y?@9Z93r>HUpHn8f499OZ(M8fLN+fqduPcGd zS%Y3(f*Pho8W(P`1pdJBRrK+oqJ;2tQ3#fxqJ=<%L!&q>K}8Kw(gpq6^rDA~A1@bF z3=!pAP?1ESA)`UX6M;WC{ri1B^auF|3I!Fj^z7()(eu%tNe1{c0W_in4=SEu(HQ;f z`*R>q8GP!)0sn853WVu0>blM$2>u4(e<%}(YXgEo2sETa3S~wyIIZ3M$UZ24jEGOJ}+LALcj->=+7z) zliApft=O84$9P`5NXy; zOX{C>QiBzm(HYB`NKqi#AuxMSR1@#0&mgVg$=PPiPhKf;kcmU92f>MiFYn z*;?j$CahHyDkrQVgzCtD?GEi*T$}&oJ<=USx>>MK@%?Urzp*u;FF*uJ_6z{OP&29$ z|0PcC`(7LGfv^et$v6gSBHH)76?sG>?R%?WDdW_%0;4nGJhXX%W3cTV!tqE?`C?!4 zYiYb;?;$@c>|AVni{sgBnr>p+jr~wP(3lk2mXL<5)@Pv);;|3u4YCaXQxKVu#{9yn zZKJTIgjK+1Eq^T!1ZbWYnx}=%4>71~^0M|o$jTVlA-xJVw0oL7R zz2V0;iqnWk7#>p)KpzzSVSXtMqndueKRfqJ55Gt0D=Sl`R+aX?o2S?-2x7kt6QzX% z{8@$Q%F59&e}-ez=}=~!J5Gw7W>oV3RE3ojwlMG6XV`2u+L5w&UB{J7Tm1%m z?^lyW9$?>J%_rTPyhnH#Q#ANr=*jr`kY}l87t*>9D zVPYGLRmnbTfnj850kOR)kFR4-CHrmrbi=e#zJA3PeK5RB)m9vTw5gb<(j0rL&^%&^ zA^k}Iw`Pte1*$NMV|Ju7KAJ{JgJNkYK+j2!#7Uug3n~H#`t~NMI3V0zP|-kmxFG41pl@@6 ziVGr#3o1H@TrNl+CGxn)3rpm4L9!`Pzy)a@gr|!_utZ@OMPP}dE{eet#a)zuB}%#= z4TSi84-GHG5&tP2qz8_j9H619eYUv4k~T%p<&zEqe>PW9NcWfSDcwi9cXYoz0o@n6 z7j*q}&2*jmb$P>2I!V`*5903&ghqZ9p&x z0UbaX=ma{0uHc(m7dmkfO*e?#AL=4KG+m^1)&r!AXgxU4^Mc*K`U6iftr!b0n@#J% zK|LwZ6s4XR>{0z~)cb-!7|kt$E|q0&|kD395nB)M^AsA>b)n$^Y#}zXc`N8gYe$+46Ww~=4D~0 zMqT1rC$y%fD9^OFrKX7#d2pRwjBTjxM?E$cEm+60{y342L*rE_{#$Q~Casgu3!ECH zaM@(A)V`uHL4G|B-cQ?TA3Z*CdOa@jzIs|cPYTmMRA^9K;(aKbI9|_3&x7_OKRL35 zo(Juxr=vXeZ501aI{gJsLN}pj`z4)zI!S3KSR>jC{XU`v%OTQ}JxV_PSr$2Y!dHHgP|Kd^)$ zJ*pQ|BkY5!$kYM*weZ%)g!m^97EJ4rZU^GgEFf({>l1mKxRsjRN}{Be2aAHVD=Rklu)Nq{a9*m$mKG--I*`b2sdJ*Hb%JBc-z<&v;l* zZ~`C?nc|%AA57RrVT+GbTa!takq@dqqbI;|wKUkS_35B<#a*XsqT_4%BMs$m$u1}K zlNo|EI0oq{vHDW_k{r)kNHIf7v!-F* zYS@T6%90J$Vpq8fhN5-vDm&}8a9nS-K{~58QL5e=BH11{S2IhGq~*K&va*q>m5d!5 zN_*lMTd=+vlYI_4I{n&MiL6*e`B1E$IP`%v42z!7-~$3GfdkzU$nk2Wf*rdhd4i{ zP3hQeyCHYwV{un6tTPPma!;(as;%#U;vdB!H-5I~v)(X77FejH4>+v2x!e7|OSMvI z_#l-%I!!hES_R{ zr8vH)%3Il^Zxo+gzX2s5Jg>3 zu|O1eK}7^n(ghV4L}?dPbP!%Hs2Cy2xhM}yc)OsYg`h8ff{GaeO&|>_atKlas_GBy z4|-~ZA{{*=dM@-V=>F3^&j2z3ci;iCfzPTFiHjYiq5DGjg07#gnXZ$rjjqR=(!$bt z)A?#@g)8n)DHh1qo76?xKI^!qJY*uWbtj|@#| zxLxD}TQcb>+cIm3rYJP|P=E&oz1MnVSkYS}QNxY5$a;{6Z@w)No@ThAq~5OJGb1`*qiDYPeAk4Ib9u8LL+T&^up1L zMuj8UR4%_>KvJ0ew4Ko7DJ}WwMNRDV?Rq|B6GLhB{PeUGryqy%r9A0adYpc4`Y|a! z@ww{frthb3qjX=T(_gqGl!DMNa#8w8B&838YJDrN1PhjxvZmbqdXWnh!`?dsn-NHBNAHb}hw6_IWczH2*Sp8)uu zCZsVPL>!*6Hs=HOGkPPf8GSnPShYDJjKSFc3hc&yKiULKRJ_(#!W4+KPQ<%m-w#MT z1^%mubBCP`i+p7(>^*P-aqkhfxz0;=Caili8~ZH+Xe(%J#5y-=tuw6U8H6d?pjEbi#UchmI zmX8fK+I1d}VdKB}cfWT9{a5m5`%v`vUHZa9Z5Gm+txL9BwYOd5I6D6XGqyIdcXjit zH=SkFc{|Uj-g1<3rt4$jA=*Vl1E2~$rl5T6+viJk`n8VwpD;K7*myOPFuhkjZaQ9X0a0fSKGv@9*nX-zy zd*CGXdfll?--~C|9W&OcVa+zFGxDxeS@jo=o5BvYo?9z*!p!213{h>R{w%Uta0x{ENamkwz1rOY5M4BN0xx?EZyZ(QkDv-*@gA*c!~}ic?HWd@mA)G zY+m8Athv`Qc6<3^wygLfW%-4N%B1E-WnJ?dieq7BW%9^{%92=B@eXRD^sG}%X$xIq z{9c2Sdg+e}%e28hsp(bw{hz*54E?4k?(XT7-kv6f&FdLEuyT;S(ZJPy&Z;d86B?C| ztD-cpFTU+(KeQ&d;#KLenB%#ZVV-|Y(Qk4iF+-kuV&8{9iiIUEP9HZ#>{1}!u;OB5 zTr!_`_68Y#@XPutSS(uLxnX(7J$`G9$qmQyZx*-IL>~~gQoOV@PPAWmDW#n=LGlck zE*evb;*`zbiI!iNiYeNR5LY+6CZ13Ao!G8)HF5EwPg62{UHU8`Y11>+H1qjsW5upEM{;l#+ z6u$$4iZG(M3o6ctk}jxdBff~@f#Xzj;R8!h(Ww`oB*2O;NQfmEp+ERPP)exSPYzOo z)W8k=TS^Ji7Y20C=w8wN`Heb)@Nbk6g#7@W@2B}m;g`X0#<2M`82fzF^S(E4-0Mu1+R575@Z`4)?N{hIXW|A&f8!rIJTVm-CB znKAb$t<9{>SGqs{bzagqPR@9L4Z|FyEOnDeZNAbn{mPkXzEWe}r@X@E7+%3+124a8 zCpT0aC~v%6gV)Nn&)DGUDVpz8o3FHwRpMTy&+(>iu{2*P&1uSOZ1&)$#~Jh{Gw-_U zAt@%*WagnQ>azhKCQDPct>f*gETVOv<#mNi$#LGuJ3=&$Sa_8iE7s@T9yQ=qJ(uuc zX&lX0Dji$Xo~N2nismb&bK!&gI%vL99&)p^IsV`vt;syI>s{)5@@c-(|B@zi(#j1L z0H1SI7!bPqeOQmD!Xq&hPhoP2_op~LOg3?t(vqV>h@8GnPp9XnZ__Qs>rh%9eY+k` zyg#*ZDgM90=>L&Qt4i@~~JOzL0sbD$oiM5%b z$Mkbz?vQxFvP%{$aR|=}*4A0Ej0qMjZqQaD1;J9$DVTqOEh`I_>F~$FKLYlq6?2n1 z1xpq|8{=X|bzt$Z3g)K(Rf>59YM}|R_|h=rOT~g;iZ-w47TD$h`iP|{_7|K9YaZhd zDwcGJe-5exD_8_(Sp{=2EVLZzUt#tH<=`I;i)zWd5gfB7jJJtF{Ck8gzzzN%zykPf z09BlM6w>X6HQ~c(2dska2VrkmwRuX-)8KE1xMLt5&@pij%#*Nv9KaV6t?6uvLi`8# zQH9bRDkdlVs5&WM(sHg;r<4cHi=t_7u;$G0Hv+3c?Juq^{dH?I_q7*l@b>Qqke}9y>MJx_kg9_G?zs^FQIgrw@|Wgieq=qxbvdT)3eS;jqbJ*H<>ykkuu(Je7qxx~maS3ac{?zE=xmO{<3V-Rt;qzN7{$8|SF}c)#Rb zytA72!z;%aA&?onUz1MHEX4+ewq@Tx=^?q_TIJ~6c)oNy_L-s459!&V{mIyC<2#<~ zm%UP^v|HHFvw5Y%uRYjR?}}{c%W!2$(W%O`Hw}~_S>u$s;boL`N6RSHi>Fgs$4pm- z6zpri-0DZA`0+rNy#pe{sUqbYjQOMGT>C z@%Aj^46*MncD8T7mB#RH#C$`yol6Zo=t^AsoV~>r3pa>^)+`h+*XbcD&t{14R>q6_ z3g;Aqr7mKcy{!zFuPijQxSv8?dat2)V&zV;lMm)#nc;~aq~^XZO{uTztiP<$?-eOZ zx%5ENiV~gV{|QBjn!`AkPb=8K?+;L3|23+TEB|iDuLtM}dh1Q_Z_VnDJxL|0uO;oY zr>41{A*LyOu6);IGme~h-k8&lRc$();Dvt?cuy}uPP0jt+f8mHA6)O`3y-`t<~=9K zRku2&T}RO0B}8Bi4rBG12LkW>Lgvc~2J;ukAF*4tBY3;x!Cd45yF4HtyV3g%n)m`Q zS017v{&mdd#GTiiXtZip+IK6#PA)BoeWCh{I~Bq6Uz6GPoKIPB9f92#`<|Wce~fi4 zF0eG2eI);jR_2)7iS3*uvy!O=Hnw;>7F8>Z+3KE<+KevG++PZ;r;orwP%*=??LkiQ zpjBY)8w#w+5H0Ro{7--CpHq^z0!;~xw6Fx4 zRT}AGi3~1Cj3zR z!xG*uD!>vIU7(qobYB^4L$gi;O}@WWIilj7o-sXFdY1J3=$X-TqG#g{JU}*(1LOjE zKt50ac!I(J&BZ^b98nRAJpMNI$d!M093uks0(~g%TXg!1{)dWDU*n2ES+0NWplNNy z0{(l&h;42ur#;k=6dP7$!FW@4M?q7*MXx?7Mp&Jg2j2=Km52M!I?Ai88$`;Dk@ah5 z?6WT;H>?XbwZE`{n+LCm)D5%S6;+yXuZ%yPNmpZ9f*5elEO2%fIRQ+q80yHls?- zUH5tA%pJ6qm!W8}#?!k~LzqV#+C}+(QjEUwhH%nKQBsXgy&%VX@ySu#@10&DB({mu zQ9L=aRAK0j{E5@)@p>Gk*9#$vOPoLXDUQ(d(YNdIiNkt&B>z;nk^h@@`U{_gLX^}q z|9kI;eo{&4Lwy5MY!Upw4}?A>3znDAhXSF)9P)%l6f9TVwqfx^{9}Yk|M?#E%v0Ej z2=9dr0(Qi0gKZ3^fLYjw!@dP!;0f}?@6$XKpfc2So@m&aR>2%?O_b`X9MpmH_i_iJv7d{*Eb(pnStZ-=fcH9)l{yP@X3AFYgdz*#5XSgCHgjXb3g z!fZRbsTZb(s@t{=Rj17hRzvRXRMXb#p|(tU#c(cawBu3TFjnAA5jMMEAN#PCOQgFU z$Fr*`v+{gf#;~rNaLNwTCO!2YDz(N*q%9T&ZGz_V}PuI%0-BvT_;wv2*$D+b@(*0!-DEwEGVz z6;~;7kJd-om#-XZXck1Pw2TUe$X3quUcNN=;dwMSro6PMm z&fRn|?rv(rD=+m_ zU_mbhUIrCZA}5{fB}g_@RB$Z3k|0hw2OX!1CmV9cDW+~BNF&S1Y-MsA7v8LumJXMt zDL=R~>p&;V)lz1A9$Q)2lmg3@|3?=5dZ%>r=~L;%vnZCKq`=bk6Ik!DTE5Z?4=XF$ zC7zYvZDldvduoy2;D7p4|3?@4pJS^E<9QQBToi*P(2UdgM;H1Vbs<;rF5_PRqYM27 z<-7i(|37pgdxy00po-Z|J0Dc$CpS#fdJ^r7k=WjJHtt&am<0xGV%xem`pwG6)RPE3 zjrgo{*I4@TF|_hA^&}zO7`BLd`Dnd+u=26lqgF9Z7m`L-;64L95;ufN zuVJxDA8H6QjJ=YscIwM6e%F}dF!7fUJiAbm!p4F%db1B}S4ftvi)rO!)0|%; zP1IuvJ&9<$2`e9)CQNQ8t?3lO3&cIvbRjf^O_$P@X3wsBeA0!!@rLl9*M(9GpVx5^ zt+_wiPTR=oR`(|kQyjiKwLdP9KNU#kvJ_8_;s`ygA2V@2us~wZ_Nt}kl-?YG3F&nhSM$?-$jT}W8>nDiK%6`Bz25O4s@1=mq{ z$h03U;w{ilEa_yy^a9&F;ZG$C7C)=j=f_NXR9CPNJVbiZMxY6qE&}K?TK}JU*ftJ~ z0&M_($6DW_a`0ybXi(7jIP(&#HlMH7$H;^N4%&?=2=S+_f;l}bu8H~u$v8LdIICf2 zBaXBn1r}PFc@F$&B5QLNV_#YqnZ~TqoHVo+G-*I)+)s01_;D>-UmqXXJ|Gx00#k78 zC|LZIG+m4K>wtYmqY!q&Qo3A7vjg@r=!AGH><1tMx^BdM`X%=16&l($qFt|c-3IG% z>AUys*0w`v*U&zp9UAJ9$-H%+wmB@cU7x$4|S--oZ*oKqpHt>hKQmf4M%SGLsb;_Xzb!#GDB{PQX`-?OL6jqI{??R7KOC$tN* zUp~ZB)|sUqyBMl&2)LPX>3fS%$VOe~tcw zjIG9&4!+KgvaLLOz#{ha7e)DwFHkn*d7<>reOTQQwnFW(dx6sV2RGHfMRm1*w+w2* z;g=le3XWAfj?1Bzzv{1i%;M%)-~Wu{-b_)JbSNM_a`-cY?TX}=aj*2!oP~{e;$)sz zN3fY#Ke=ayShjilI5xgc1{QDI$zlhs8-F`!|fk-IF!QG z2gl|f)Y6{kcn5n}sZI7BE20f`2M78VsZucRv@zJP?VEjulc!`u{fP2n(Gw-aWCN!f zLaO-q4PAJ~aIV%=L(U677&iL15F46n`B@)a64QP6rdpG*j$(vijMzTkQnC2?@5MRe zTZ<7zeihrk+H5E}eVMquwpH|*=^-xT@#3gtX~a8sDvE84b;PaV*Thaiiw!X|EaLti zVfs(&pZ-F^|I_LBigckodf*>js0(gfH_*fNk@8>OU&wsxhhI!X=f5$v9A`5oD=Zt? z{`2xhK{mQw7kF=zz;kw$`SdPUIr)ofe1Yi=7hgH~_Td7*guXiII}0o>USQS~R@P;% zmFMXj%)Tpbq_@D`&p3I>)6itR1-6L9zkfNYLv2Co zRYr@Dw(PV@vRz=kN;{=BeVm5K^MbTDjlfJTnlZltPnp9l8%vq*JZAlprGee8%x~~d ztVU3#>6yZwu`4 zw4K*%5~hs=o00M(ufDAnZD2-8^lMDz`ClLzuS9 zxlBW-A*}Tm>UuJS`X6cg(MYpiS3G&iZEo7gGNd)yIv!!~Pe<}HS+upFX$@;yjfsno zuJSycYH59lXkF`^!`kw0FRN?$V6ACt2$Nsh`6&EbZwUYUx{&ZYM}-18-Rgb{Cx+t5 z>2V36e-$dfkJq=8r9ww{dOETcpE#_?QCiY?^l*wqVLiPbN0#!T^yCuz6Joxh|Mi;v zYtx0!qrVX562|HKrw+z=GUzYIJke(;UYp;?(%&gqwjsO+;dWN&G6?sS1xsP8VEz^1 zB0@qRp1bh(b_(Wa2)BgaOBT#KV4>yESTagWeRnMBoe4V4Zo~}(LjjI$jtAwyMi2~o zAZ;4h3)X}_JTu@w0skFv3`{_{7@&P;BHR_4$TIi~fDT|H;`+lD1QXyVZ3p?1u43|n ze=Xw1feHw}0MK%@F=REctu(@ve|xY1Y4BY_eV$AyVeQl(*Q*Ql_nQ#fP_1|)j!k+yM*Yrvlw;ePQ7muX>g=S) zcWPXY5$dp6d(^D=-IP*}#ZzUrndPt~Z1_G*WxDb!RU zrPW67PWhc&@w4Mhkh}DjrDh}JJe9Wl1u3SMogKQjfoIydjWxXx!JfD$@YTazr)e-AfsfBaQaqL{XSM5^EU#%iFcjT=&O>(!DRnv6u z=ZIYYlzEjErCn}ES%-zUf#mEvB0Zr)3c@QeEDB^s`Rs zpBndB&WDegx<7FY9$v^3{%rZCdOHyZ>50!}O@Pe)AXf zvS$oCY5!?^bey^F82g~(9)<@$+!M2HXl&?~IlbZ5t>L0M`5MF9$W7wFHnLcE+($!! z4Q1_~P5Z|+Y_-+Cro3!;ex;6~;DnBb$YOJR?-f`gE_YUEG!h3Y@-Lhzh zB6_LNUmI~25|!qE%uz%=i)fA_j5uS>FKlF^TKAyQW+r`(qDIA4ZH}Ufw`%hWZ-?{7 zd-CdY3F$qHv=L|2<0nnYe!SGE>NH2ur=CSLN0F<^tj$pr<~D?y%rtt9<|kr8#qqp) z!B}nyc}0p4+cItqmu5-4?1u8}>JcYf)OV5b$YW9Oy~LZQTE%PDJj*RV2he;-yz+pK znzB`HG^5^4)MVC_udJaHxz|O;J54$H-_m4GT1iT(c}g-ep}XIQ^>`{g5~IiKmbQ_j z{i$uKyU*pPrzNXzPn0!!?!n)J9QM|sto>mX*X(^449`{XJ{T)w2QA+CB|K0aO zKdq$3pka=pz0j1PE7gOZlni~1Ou>TXY`kDO0QxuuOQekPXz*_V3!K_`GfSim8WHr1 zv4UW!fVjJ``N3*g(^o8GgA?W|a(4=rlGxr+(8g+M{f^!z_-TG4O)r7IVh+H*f-IQb z;a?24S~dN|0wKkc4dJo?cgp-4VQ4SrhM*8=4z>cDH9?C))k^dHm@~jCuyowbU9{MgowTiq@GpdZgM7?IuuTL@ z;K%usu0{Qf%ulfW1gx*ira>AT!qlg!AN)9`HWyMS*!lq1qm4bob!vT#WLR8-Hvf9kel14D2}268@3kAc(+m=sGHcXn<>_d5mP|m+y1rtN+^m^!(R;j_mK%BJb|A zi9eiGBfCFx4C~#Ld8Sy)_Wj&RjZVH$t@p^^adS{N`-mCA(&>BcSgUte*t!c_*sI>- z)olmQsk2+ZP)BXgbDF*!vngcI;iTcV+F6oa3>q zYum-Xt`&Rly{+H>4JTgiUfH|%ySwgn-8|2acV;q~;2NJ2SI3#?QyL>1Hl* zfH}K*EnP?P?ukvzKled#|GJq%WbHewowtQ$xU!y281BwmR6onsbXm&!E$GfJpF7Jo zZ@w?NwK^xdq{_o@3@OSkjnA!(sF7NmzVM~`I`=@Wre|TT`^!vPWb?^dm4=hFx+%ic zhhCiKnb%t@^!|Y+?H;YJeb-FAm%6O_(ppRN92>4q+`K++|Ir`RF&FZwXAUe6sPE+( zw{~}Z&85#6weQGw{0w11z?$lLRnx5jevM*|@lV%1<7XXw5fHE47V@-t&G*RHkH6ey z2p?4WZCw9b?f95clLfxWcL7TlPvD>5e<`>gF$wKUb{9;3S%oxfS_m@^%n}CP&MQ>A zm5Gm-n@L!n@0qaYZ5m<0`VPX^dtVACkH|u`QkjHpBVGt?eYP4m$=})%9`Ap<7-x&L zrF=%@e^gt-kCB}JE;b=-afSmCt_q;m|31F2QBHTz1AOpMgz(?~ulrec^xJ4|x*?mn zh}RaAXQ43pwM!>?&crnG`GN3JjnPKc4$4wgUoUBrd!SS{RF?8D<)jl?9MZJz9GkwC zW0z)d%-hPbi$yTHsC_iMk|Rb+=~7+Fw0ag>0BtH$d<5J0l4EnX!>dtCS*o{)W2K&R z?CU^IJlGo-0X}hqqBwCpnno;QgM1t-JwX=h4d=v(x4pzIoWiC$BG~wb91AHGEbcwi zh|OO|&-=f|G0M)Wo_fnxXE+GqU{D>} z?Y)#zA+G}Z=p_G>8>D(Izn5TXbP|mYk`(y7MweO2edekjMweL%jf$sltg{!DC$e)B zPDwo{d&sZ*Z=&_&$w=xxKcyZfFG>Z!m&ME6HS)4VX-P*Xv6E@P(eq(+lBMRpGkTat zCpo*!QoDDBzLYNWf37Xz&iLr!k|dSF{|?Gd|Ev6EK1xpk@aC;Av_5H=wlSb}w9tB^ zoTOnYhZahsu#tzhH_{ONr!d87{a<=9TK>;YTXL<(1unyQCCfuD&=Zu5fWPZ7&bkje z&Y}e9NoXzNymVd38X|MniV9~Pg)~=C%7J-mc!_}SVyz)_Ry5JN6_iAuM5|z*VtsS) z8sV2%pAq4PU@qd1U~7Z2;0Gnqr_X+*pFv!MoeJv!u?U~Xww@0Cduf&_h|_jxlJv1X zHrR7uA=0S)`~c&2bbr-o()9TEu-K2;i{oS&;W=QWqU%#~0>bEG=vtK(7F`eWTV$CI z(u2`T;`pRi*nV_kx~}t>5iSop05qApHugl}ObYUyLOd@>1MTNDY-OZvfW?y_I}pBr za95B4VeFIUv&ppGOymzkItS|on+-sjG&=y!p9Nhb8at(z5sfrlAN{yZu;>y|8J1}{ zhH{^=wlpZf@3P(Qonk)wx=1Pegif1n%UVuh8J25I8(h@BLK|dnySS-6U1gJ&P|HJ{ z6LXfCvY%l~YIb8+O`Lt}`1bbs58~`2vzM{g$#vAWXXtnKe1(_W>NQ>_6j>f5-Yry6 zl*Tq=`5RtfVPj2fO1EWfbG=qln!*Fw@vrJ>V_JA?bJw-8NA_Q3U)sC5J;HX_K6z^$ zd#cDL_C{lx*&b{xY@4-szr8~1Ty|G`2kmYFhi&$z5yHh5hiqwjH(>6ohlp_#Pl?L* zCW2$^NESNxd**g-DjTr51T*#Q&6aPI*x+>%+m){!o02M*LKe{F0WM*;ZK#4~teW_&ib1u6d@`Sd~Zf>TyUDer%`?Ym{2u zf2pD>H5sU`th-2a>2^gcaN1Sf)0x-Or>~`!tgOaW3frJIdbd;E)%F!%YVWn!gDYzV zyqR-Ebs64>e{m9rM4P1w%!h>hD{670n|R9_IqpCA60FEpem>aYJi%c7C^23|NGV&w(AahfL?&6 zfS}go2GEPnm$VqSL$YI=23c10o?-T%Ho;u_bT)aNTeK~%aBBZpLz1XT!itdG*<>SPf>5;!1E=b}MkkP@3sorveGMnS~cyW9VjBm=i zOA#|qQ^Xx-y;!C^9IFxu&)9wfEBY#d9XPc@Ts@ghq%*vbCGJzGYuCUab6}D!g!rotYh*>;1*0#%jmZ7MF^&V&J{)@53-S9CzYS2(T z7fH?pRS|@X6RIu77tjL!g7ElL?maaFQ98 z$l?SYOZ^j&=m6=SowLIdIh^E#C2~2*4NK&4g3cF5=~~kDqiaUjiLMP@54r|)-sxP^`K5E} z1?XJT`J;1I43q$+KpB7z>2Lo&8}eE~5C{g<0o}_XAQYgp{om_TD5Edv4+efoO$7Z` zI+?Wms+XlfAI3t_Y`QhmZ^(E0X3;%t(`-6;-$r?RmBVTkF+=)iSxzY&uh>xBH~h?XpTu6+iK52~Y9chk}H$ zPNsykb0wF6-J+v<0DJ%AS5p5*lO?zKyyTr*YB6Sm)FEd#$*av_sgl}+zTGATv}F2h zx-YaFp1giV6~u2@s1l*Yutu2TNuhLFD2*DIk6EJ;qI^jgqa13m2qSJZQWU4fD3|gW zVM?cRDNdI1(t0C};zl_L>glxpi&~5dA{jmFx84hX#5pq#ExGYhgMwVUaDj`UX@!Jh zyi@`gC@P%wNARr|XB~!?Ww?X0?m&DukPwdm-4M>};4B9bMmK@x%~?ys{s>F?J1h8} zo08}^=@QbfA^aLVM)(dW4z2*a$>`r_qcZL&y6$5s1)U}g<=|gnmU;mHPO+kSwY&kh z70z-OoCCB!DhJ&l%SgoiVbRQ5<{%si+9DhdhJY2o9iZtYtw;B(WK;BccDgn-UeV{y z$qwYfdMa0zkq`SPOW%vLOu)7`VXFW%@#fjEi$Mzzk9Z7hWiVOMeVOayvW6lafbGIy z@q6I@Dsh|>{l>#c!|~|;q|zgdZh|=)L;(eHyqQ_BJ^5;~R6rV~mY(u-78ko@E<0 zUu5x|ncbRsT${vtXhVmG*=KHc*hd#FXRjN4%iep7i@oUOVfJcI?%Q2{inEsqiL{L@ zKi78o$arl;^-DJ1y`?Dm=2Z8!afll{4hf@51+n~H6T~yyC$X+EMGYN{5H4wxW5}yY_H3{%C5gaIspdSK2n}#D&My zg{kJLw`zI@?9BKiZcfbyYWdW?;wG%l%2(@rI3U=;1r)YK#_fC2mfv2dHsASO20l~l z4{=rJG#64_yuydseEIEta>X4enpr5bt|Y&Aa!P*kL|>uFxh(v^BAg&cFO7RytPcPD zrpOoU7cLB%)JAABb)!(gbGb0L-*kax*(QwMvsY-4a;dO&(>!5?V0qhrE?CdY+? zed`DtE5;c&%jczS4M@Dh|AfEB`66X2zY$4Z*`fnY0gRTLUPtK_lwLdORWlQyS4w)7 zq*q6JUCa&g0@TkRh9h_*To@Dus3-NI1*nVlk0F(Z^#zpx>PgNY@IW+P84#9$30MH? zvp-hZqWxkY{fzzp)va+GB&%o*u*`8SV&*fQFsHv5Dcf6zncPYy$je`Lkf)tZkSe)x zk_+#Urk9JB+GO4%4GxQD4>odA-B%ndJCGAQYn*sEJtx}WkNdVO$GT#q)cNZVS;30S z*vVSG+5QU-wql;bE^c?Qd2R`;d>)E+n(*Z zHTCK8VeZxdT~Bn8|Jn)`RsZ;n{mFg_i*X5k9JL)>Ry5RbygUbIxr*14T3`#}9!T$kFzGy_z(|0yEo(p& z=mXX%`rJLM55ncZQ?Lo3JlzlXO4u=oFG2-)8J4u6xv<#3r9aYU!n%RHAOui(9bi$G zIRd&3&aGt@2uJ)FEIJaF!U)rTia5j3u<1cfr0)k85Z(#KB8+3FH1d;fsSaqLrvb{= z$BDH?n6__|m~P1pdm9`?T4Pw`BMpqoGKIoUS9JYMKRz6rEF%r)K~|7&QlhmWohnxS zyLWV~bZ(Yndpef;fX+ke#B>vtkB*Oi4oZA_eX6{1*ZsHpRQCYy1>yGWl=1RYf(Yg`h_IeJ4Vmay2LEE`>lSfNo5+_-9ykI-sJ36L(kary^ypUmzRiH zw|d!nzTRQGYAPve9b2$et(!CPNgvj`z(djV@kyK4+dHhlvuk44b~d(l{BSn>@rM{Yr$4T|8r|#+! zpC;0!lRv9{kLRSo1ZD?H!u34;2r79 z|2QClZ?`Z!?pk|Z=rOseF!jevLW5ED`AzTa(HL-?q6MSB}Q+GUPpK>wI5~)oEj7aio6CED4w61_!T0HT;U2USS zIr0|(1%Wp}P4e3nC!=eRZFJ=cR&thULYS(kKu{G_12q6@&;M*pm9xBXY}XNV23?K) ze(u(|yveFa-7S%eOy*1-`r84Hq5KvcWRW6eo^r&51vIbF9V)P8v7fOT6l;NIkAzWix_{F>#3(TQ)(K z@~lk9F0X9Ft{uZXz3m)}KN~HH*Y)l7GDe^&$HK~POSJp*J6N*|iF)O?Ob`5a<{rsWbVS937`t1>$vKEhfrmf57m33}pR;E!>2Kc)_KABuZ7$#0}bm~e4Ik2B%sgdS~z6a<1E zb0UqCw6KJ`6S`tVdM6oRiHuG>UWQQg2PcxmIutY8==*axP#y3$_ zLr`@?6me1%mMG?=I4prq%O{;*=a2mnA60*h3;Qdo4^_)_E$RBv^`h%U*M_bKT?0Dz zbk6BK)48SdnFr(p`Keli^#X+eI(Glr*d^MY7Hr3y_Mhh2Aw38LgX(~OP6!AEbpSe| z|9+00v)m5I+X-|5y8k9h|J)bj`u?h#)1ACylX_xa7crl{+@^o+Eo1v1**?!px>`dD z3%>RyuDlkh`(z@I-_6suvEXZO)D@-9ySRAz9dUcjM)IOA+vT`&)l8L8o$hYjmwYCf zTU0vA5@x$G+ta<`jVpny{Cpp&OwLgf`DAi-MRjEbT~XblD@vAN$Ijf>eK8?y8n)nq zR4FDKdphutvHpYg?$}lTqFnll6Qw#++L-T^YAkh99@3a2y({{zM;$58yS`GR>_?@P zJ3S-ImZX-#Mm{5*;snK$ zLTR)Z>y5CUh(Ag9YveW7eYVzkfRj;QlDoEl)bBM8CppcfdyrcxE^y&XF0c-Cl4o9+ z_Z9|?1)T8WtZk4sLguXJqTweA@ezpUMSL>CXi_Yr6wX=@_71FvgR_2(b}19Y&l( z98H9!9q0)nK^RyFcu*HQ!*JOA*xpUn$KlWzBGN1@xYNvWu$2IsKV9>o@L)j4vPltBS4#}2or3*E*V&;Q=ub>(>5n1VUQ6BpaDx#LpXCsjRZmnJW=U3=xCMO$95 zELAG-4_eK@_t`4223e-s2VTx)pEe zVWyjV#5D^FY3{pju{lAN*rg8XSfTfQ*l78veRNq_E1y!aM;~5lpU^O`z2<_&TI~*< z?I}kOuvgi%+qQg!!=Aw!W6xV79k=Y)$}pWDhTZNtXCD9TpnjAikCqS(_T5^H!UjrefOKDGk7N@(j_ zT6f1Gt!A+Rt;h4u+L(98wEFkbXb}N7G|&2NwcwRg)VO*rwY1MRYVJ=LX_boBSLX~& zt9lOlNpmgtgBlzAqq=#_P%UMFIa>J~do?b7fgRPZDymOZEFY20GhkMkhH;Boc6G|G zHEMCwWHmm;PX20^cl?wRVf?f+(E+`}hty6DN(#NpG!kk>yc6bRZXygmu}WBXj~AwnIVSvI{a%Qv zwMCG^O7O2^=JDqbTniYrBa1Ml{6ayv)kmlr?<=^TS@hv9ZPTiEyYTKkJGO&^$$$Kl z^21&1@sIV1p9cJBuB=IN^=cR1wOzN~DDJBd|MUE4alJYYq@8{wSNgW?+PCV{rFY9N z?b`Ql>QnziIfJ-AZ!yjo=`dbKBzYZ%4mAaE1t|e)+~2OlAa4PHTKvOH5xoS_i%&^V z8k7a}?`&UyTJxVr{U9z;ryJG;P-}95&UjUXQFH$Pv=?j_4myI)pevxZvj^w}`hb4m z@A+)q!s*ujhr`xEmfk^S%xQPrHFLEzdBQ1sK- z;2JmCWB6&wt>`#;*&a@MH6}rP;li=%SvVHh5Pq^BaZ=;j5n|kOS?U!(g?%&PCA(Dm zAzNhQSY_8zEFsM~b_RaBUwCj*XzCa#`av}RO$S^Qj8d5I#R-i=Iq^^qh2rAs%?_4x zrh~<-3uV?B(PGtkoEUXiVUfKCv8Y$C+4ytK*x<8XV)|(c>p3$*=m8($p}r2`d>>gf zojt|orR&0k%1gwE!yL=7S`o*U;KUiwp#mE#Z0FNxb~KgDrkbN^UtiKev*8@jbwY>r?BX>3_ zL&?_>i)mb&d8j^8l?k2ci*4lFTWlHQAU{X!g%(O0l7)PGcUgT$3Y}1s{BcW_y_QH} z;u!M7r0YnBs`Vk?-cs;AgKX7|zcB+OS6=P&2X{x2fL!qJDwKa&YxyOT=i zT&eE^U$c|^ewZh;acXdkvW#`K-dKzV$w*7OKgwh5(pEQ5cZD>2% z=NGjYJ%?m;s^sp4PjQZnLrYGx!hAN&Wm|+XLLmwGrX0Y(ORRATob@so6^3y_Al3`x zhA1v`mQxBW;=H2!*0z>M+I^(u2D73QeS-Hv+AEH;rgFfSlY=u)<@9kr)^te!8R6ZE zK4!?$3}JMEEE~WUq}iaw>_gZKT*3CWWX|G17|khZG?ug2M`}g)nWSr1)sVIt;Ejg- zG3nonLl;W_HeF@dC@@+{98-km%u)(82Bm?3{Ec9X0KARS95zcBNDHE|4o#u1J^3LH zy^H*WTeB&N-ppgwv$BmHrrSq7@1zad7ite}?rK+}SK9L& z>0$dJ__95C$!2@Oz=pO}7joI&)#z*sI(Eu-qR}8NN54b1UXQPc(O>rzf^Ihu&)?h5 zD&%e^9*vzU7Oi}mSw~)GBP-oxHSB3wo-<|H@*~$+n423L78S*$Yirq!gk@}9mp%Mg zcbR>Y;=C4Ndau=Na9c}TZ=6=*W*g1A>1(ZZv2WFVEwgH_-*!|dd|O@J)#06%JEXhj z>-tcAaAcE~vx}sLM=n=4*N9iY+3%&^!MEp9HkZ^{+9h>V+X(eYWFEgM>dv?$moKUb z;hdWJ{6l_9@6!QY6CMYgx_iFL-tNQr-C-dCjv|WSQ@1~Vywgekn`##W7EN~H*KIWW zZ!dg5uG`H>p-{!9Ld&b$1+P*Wg;ZCz3+2Oa3GQ{r^3zML5c>Jl5~g&s2rXJ4;~!P* zCDb?V5mHyb!XH@TCIp8L6Lwx|Da?M_i9Z;&Qkb#vpb!-x3q?C7e7H;hp-z2Nz4}|@ zLKUGe#u+1xtDq72j5IF%2-K*5tiI)ZLHb+c`d5vsMeP;loNphR=3BhvV@0Fo*cCtE zGuKgaW>1GyB9kKJS;0wVpK?;Ku)9+Fw_Z|8e}@!)Ns&Tob8HA^l_>+^A8EV7CeL%Q zneYeh2s+Jz`?ZxSwBE*Yz4T(yKS!|&{S`K02**|)=ftN&6tOjCoaOt56Te53iACt; z!|`@#Tz+>HF?5hDY`m&}lTN&iS#F!&Dy+@)FfnSN%rfmUi{CjWutI8>7=Ln}SYcx* zOI^dkx~z?6ZTc-14>SoApSf|Y%W8!MwM<|Uci>NIkRsY~Tm|z+3!Qgx;+m<^v`^-W zuE-a*7?s1{8rN_4A?}TPgz#}v7?wbX?z7ao(1H9-Gv4U6#Ra&5R3HsNXIR{FKmeT-|?nrzsf z%jBm?%o^Q2-H z*5dXf^`#+E<8)1~^<_`XhDT$m8?O5p|3bUr|GCD6=jy{k6^OA=_+uoup3+k~SCYls ztR6SQ&Q*GulxCDo;pCt^MqbxnglQe6(L(#8#mGxxW1W#s_KR7Jp2O#xT(Xhi2Zw^SWqWyZpl1{V| zVQ-nE`D9i!siX~2d6r`cql0Y0ooD47iQ|{1B2L=YIfb*BVP7B*nppDvWJdEyKAlX_ zoUS3!zVx|onxboCmT;`+k%lt#a%nr1Z9V~urqR3v_L7q5cO1t{`WKDeqOnyp574|j zF^@S4Y2P6qG$<3AV0~U*V_59lk`vIjI2JhpX*d>LlX`$O4}{Zz(OAd9PC{NvqwVn9 zb-j+XtcnOvQ*>Wfx__qGh?}u5?ANqE5%Y7{n~A^E6p8h95HI)1$8r6B8rOih!i~q< z-c6NRQ07wh7Dt-e#vB|gp3S|OP3@H1KI~;WdzIHV+xgDzwAg+5#IEB?vF!0z+1Dqx zvF+k)d#esT?U4b^?KQ<|_9D5L*k)fpV|za7x~)vz;`}`Sn&P%c{l%;UcZmDlTnb?jZ6zR)~_zt(zX&uJf??}FXDql&%f=)v}E&$HP1W>sx* zC83$sE@Dq#Ws~i|l407LX-#ZP2c;FJMh(^OII4=rI#m-RziBL5M`aMYrCY;__gW_I z-R{jy?z>o)jhorrGgn!MX&sof=^`7{pd7oLp$Hpu=n6lf>yK>B>9EvW6D^)nj$qA+!1{e!Z6IbZN~m-FbERs+;Q8$C=au)6MFl zQW@1lck8Ne<8A7+d->ICr_^oRyTqs|*Hl)k&6uPvA90kg*kx1fydqWO-WKrlZzLq} zi263n8C1oIhS<27hhROMcwG&O*Tg zPxv|I-}2x2W)*Ub+#<9u>MBg07$(TxKg5+;#tB7F@8mCzsUtKi&_O6s>zxqiH%1uU zBSsjWzN3Gt^B06k`}+!Q7u5eyi+)zx)&M-Kf6ii@FH*J&8Ik0bEjmzYxlyO-Eq7{I z==q<(2%7-vPA(8s1!!0Pn9*C#{r&B;$+$lTSb}|Xna2; zXf@9vhulvikMK`mo8d1hdVwqz^YfA#mz*xSE{TvT4{=D74m+ggQxvh{evYB>67TQi zSb>V1cG#Qc{Oabt#JEX7QY75SQDjW%Bu7sbY~lQa8^Jww)s zA=?#k@xBgXw0oF%ChHvWyFJk?d+`X?F^9rjmxi+OtvDu54P(usWY+XOCziRuv7!mf zXpgMrpZBCXfAS|Y#>M`alJ%wgY$|}OKooM~4NIWAr&Ab~AXSDa>ZBMfQQQfsHAG1# zrCwfJef62GRHS(1tVYCyeTI5Y!_cl(Wvx=F&g|rif44LrSQHcslZHk_H#^v zlz+=)DYQgtQn4hDjNNr_E-S$tl|2UAH0os zD#=U19%1xVJWEuWZ={IVl0?3uoZiN%b4?1^m)5yXUa|Uj&7%t*ELuKhjWlEZFXJh( zf}nH*>W9)ominc?+=k*ty0Psq%Q4cCRbMDhi;<7YHqck#50y)4MqWx!x^IgAWf!Ao zkc?9G@9u#=?z|WWmfTpZ0YNS&xWH%+F0e*9&iX{=0)rIJdQ9f5d%ZYof3zRn5I-0V z-{N8V_$zBiqz!XGpK|D$3u#rlZzdPmGYV&&j`gi%XiG|>AEomgXSsmz6L1adJsg|` zx{hTp@Q3cQ3KoqNjoGrSQ8@D!#HWFFfW|eo#yWHms2#JGlsQWyq}>62K*IL7VJ9ky z;=9e35<`}_NLAD=$9 zU1z@4#SgCy+>G|@X6F8^SlLeEmRB0< z-s?M-waR97UpZebfGe#DN6KpTwjI|}@4KOuD6~l{azDFP|JD*Urr{j*>CdUv$L$wr zUfY1#!HIId_)XV!y2IR2!j(fJRB;TOWv4Ba> zE62^zT-6B+64X4S(y6wl3cou19)Eh@Dqh*I2J~_JUhr5HCseL=nfvxfJ$;!y%1M z7cJ-bUXd$I*&(HJIOLF14oRGQL|no+#&^bCzCj!t)-{a1KjFbfZBCG?TpPm{9`s;4 zTX1ZWi-T?T+Rp0buEX}ERoG8UITrn$hvYW(2tOLlp>q+fZ8@=aRZhs4kz>_f%VHXL zj%B_-o7qM>#C!e1#HKL{>l_iwT0Kn9g3~!zn|oox(-a(Qm`i4j>Or}R4`U^yyex0^ zO{~QJEyAn(cUjaGPK@rLuwic$;d&Uy2APkrn1SEL`En7EAtEs;dlsdCqA%5 zVJAgkiK0&E4kn5_LFey(Qn?awTm&PG8{t>{Pf;^L*PgC7U1PegbS>%n(KSQo^^YHe zgPi;o8Pa?|$^YaAnpddLGgL!eXr7@sC$^a6TC6wu zks^Op`giNHwi{3Ws^~j;MmL<4EShJiD_NwJm47`{zU;rAzQf1*_Vv~08CHI?USd1n zO3rzPrXR=U5FZ!XL1Vlm&&{3n@8@CcmsGVttmL1mhCas--`Ep&jVsQkbiN{0+nh!6 z>z_p`b%sfq=T-VryWzTg4G4J1Sq z92!dZNfHXL-pK2O7D1K5|Y zRZW0(ARWhKQm|c4uo7tzAQ!^(VYdJrw=Bcv1NFc*&n*xbzCW@=k|dY9g|Nt4g;&+45NtF+`mDY$reJ$mnj>|@g{7z9Kl%Ask-T;` z%eIQOo_3Yl7ma7r`)sziP1D&v`e8?Vxd6MpS;tBCY_BidPUgvN_Z#)dp5^ddTjZre z+EMRjwuK%6w#y5A0uDTRWy^H^zBnr1XrW5{cjC!?$C>9(mBj3+_J}dhGq7O=ZZNOH z?^)@Ccf>opPq4L{3$QUc`m+(OjxcfHEVlcRmmr)z#^(D*vmxulG|x*#G_i8H792BA zYhQJfmSWo-EpPXcTH(mi8mrPwjmuC(eRt$Lbz0`G>VZ7Pw4C{;t2ge*>QBYuHMfDQ zR9W*=7k9oGu&lwIxF3e!Qx}GNtHr-xq^_*st{yGx9eZw4u7IUW%f-#*Z>S@dwB=_; z6bN{>)HPsx2R<&v(er%5NOyjEXAdFkR~`ACOI>+Cm))x0x10HOLvHXb!wT?A9x6iJ z3`6-D6Rrs94o?!Y^j^*%?!AYP7{Kw@8$aetES)QiTe?*Ui@YPGnewC1Mx8A9apQ%2 z{yF)14Gsy@{rU?#VjuHe?{dQ6z(65%!WjOn_U%_(;_`XOaRA=Zw@YA0v{y z+C>LTy#i{r>2;M}QBl8sI<*V?G64$+1XTgrf<|gjsDl!8eW*2X5oU=G_(XaVbR*^K;_zddJfS5a6y8z=5vpomp5 zyRlJEj=4|am|F!|yuKAT1K$4M@8`r+*%UqU1^zMaijS#ZLx$oxNpeo8%1HV$VRZW4 zkWNrlLeL8VLDdS8#tBt11iD8$=mLHg>X#RelPKt<5G>*C1YNn$S`8xwj6hfQH>qIM ze7FF*=5(Fu`qDK`574dt<5e*1!wjq-2n2)bfbQiGfNt~etA0^)fieez!4&=y7o(#1 zRqyRXNI{aLsy;NoIUOm{xA?qEw4kwD#<%#$ixzpT`Y0nW~PqIzt+czIk#b+#WU(N5({}1pzXwcPqXN= z5?wPsp;?I*mze7k!ct3lvgDZ}$a43}3F@%xW6FlKnDM1|*ppYqsKWSn3sootEk^j4 zHgRp@U#ffvV;f4P#)sl$XzB3S4_)@>k8 zhUGYGAi`BafCFQ-VBKWSS_t8a9CR!IZN}=Q!1ue%S<5;SHL+|C-4B$t9A1M;VSOf~ zH%EB3k~m*+6l^iXAHjBY+BV3?p^Wr$;@GJjSQiPPk6Bj3js$1XHm(2(;2hE)E1WqJ zuUkj3ZB9ASht+hf+lzHkU^2F;h4oM0;j7MIaIeokp zew(i4p}{2`kIJ_!1Ngm`OUQEpX%7)rl*Dfm7D6}x=^J3DD7uDb83Rk@;yAuSM@!Z|gj=xouHg6I&tW6rb7uf-TP8R(y8WS6FoN zg77vdf`wig!rGJ=WvlS+r07~WjdrH#FqY%zCBnu+n}nkgZTMl0!faRg*IL=Sec8Cz z$HjHsdf4R_OT@yHu4UE}KQ zU!+Fv{FWc7dizgZI6^BfT~W0IGx%|pebpN3VSe&cSM|wU5C6U6ef>-Ks;Vv>np+b( zo>hIjz2%p_w5sF0uLY=)i}`a4&IFhPLew@3n)BYPEBQ~o{?@oTJ}(`tkMkM&w8l7B zq<#{=_Qq3OzDL*1IPq^x6xkovViic0Mw0`a+dhACBd421q6bs z0QKm9uYo!Dr+>{4<#h)=K(D|0ON(*YlhwES$a1;)QiZRwNX>1-C6^S3rIe0P_WYpC zE)QD5Ubnx>w(Tp$R+pQ?_ASrClo0}}+@zcs*9>~qj?+@>dex=Tw!Uo1t79zep_N7F z31Tw}t!1+(o|1e@)MFzuc4FJ(Z?f~;5!UO8elTKKwP03hg%|6Wdmgi<882-eew)oH zzKoetv}Ma$F&#=f7EPMqyNm{qAXSa_L-V`Gb-5w=fFV2dic zv8oS(rJUz~Vyjl}Wl`T{VVkoxV1+WQVyAcZV=)!$;0kl%)>CNJU|k31VYx?WOjg=c z{I9$iSN&u9RiB}WkDl@S>5(T~oY3P>xH+M!fJo(pss$pA6RIMJ{}ug;E;ixmBtI-s zz=;tSi;+h4=hpGNfB70s1tOX{*+N%e%LR8?xGG=nS?+X7yMU7X;Jk~*O;y= zT}!%tf0#bytZt3trDJ4324-LdK_D3XE*h0{fBIJeQ6{>(i5}r8{jaqrV-4ZQt)$-9)4;(oZ4|}TLl_u}*Qss?>#anZKW+AE0N!H++dVY7lgCs|mq|snf#s1-XzM{U*rJ{>&O0_SB zN*;qYNClg8V-==l(ml=u`69$A87@*sm_6@OnmWQ#$`09? zX-qjP|4ZozC$BFV4?I2e^uYhJqNj?0)=@fD_+*VZ<)<)VGzP{xBaQMKWl(-v$Wng7 z2va^IO!(PkmtKqqJ{kS!&wbHIPB-ckY1E82s~NNeWBS(d|k!@fZ~fkwmf9QHn#i#%w6X{=8m z^WZEG6Ut(h&Kf+sM(#heq181M%C)*9h_9h|h-YfO66y?Ht0nkQRe@ ze_4Ok&~=$hO5$9*=~yRY`_3povsa?lgYwJ{q~V^^=kC>moyl=>0&Mz3Yf=zifjqll zE20b!SYW#8T#qu%0hJ`U@PV4FPPq|BLKqI{&0hNT}X#&hZRHp+@bI({p~EnWy?zcjvz zv@V&0#q&gQ84)wBFNJ*g-Ig++eEd}TDmX{_^55!0J^ZfRtt=>SWo>%=g=!wZw`$AMy3Pg2kww zK2!R|LT zrN%iS-(C}|QaMzMJfC3CIBh(CW2CCR%Q8=^-k`6ohx}M5yXu_1U%(h!8s9A9skWLh ztK4SWI%xtQdnsJqIP10Q@k33mjxuflTYwys;qxFS7ayT?g_31>A0F zX|AMJD?c&u>BsdJidFU3vYr_e@G4g(K7EmGvAHr96|xPps1qJ_jlGwB44>0yJ3q4I z7&YIhV8hAx5g|S%Y#U@&vD~;5Z^St?y=_jgJ+9>>qxdUT^d|L4}%5IIDS@))D zpVp91)5JHRajC3o_4^n3{m&N!w0&37xEVe#9f%}{PrDfBi8P=hMkIL+hz^k2QEF>b zg4Ey-(|}NR74UEMAEN`0yfr{gPz%%s81u^22dMkG#-J(Xg~k62xR#)mGu{T_b|4&d z1f7jCo$K+x1g?A1w9h$gT;^mopB}RB^oLURTR%&K+V*Fs&(@PN_MIyEG;YKWULMZ& zeshGKx;C3_T{KnVvTSAjGDom6Tl`p?*pV#i>0T*&pUdo3>_O)3ze0TA6C<%rYou)Z zrn6DSDoCDfy099TBUmGEnW^hevyxx!WjmtgihC|~;Je5Q%jCgJK~IBN!n6yR!MsSk z(>D!kIwcLu6Vd=zKwp^V{ggfG-i)o@GlK0LosnH{*ppT5a!iQ(L1DoUMhow@Bv3{+ z@#Q*6&fA=|%`Q`%FVTw=_Y}3WQBU%*fJ`ysr1{Gz-B{R!%I8>)0Vj<3=WdOw{4tHE z$57nANq!(b(u9i>db|lV?>h9T6X@FL&|^=eaq_>W@#MvE5&4|_w^~n8ltUDAQXG~j z;iM!iQOZeaSOVQ3owBe*c_$TM3126bV2R33sM;g^oKO`=h)zf=`7JZ=sJfN!T$iF|aAh5&RSKR)(|@?u>J5C&R1<82Xc4?2KOpo>wabA30YMI=r8oWpdIX!%tQ zr-xLp<@ZvNQqS2w&r4F_0f}RHpy9BvnD)YxtVbo^bk*7L>CYt^_fzleR;k694btG5 zn@QtgrLFmN{pa5M#uB?Qg+)YElsrn#kj&mar2KLBnQN1lZ1gwHq$Xd#m-?&-p)o}I zIHIjP1$Nx};FK zM!HdUQj694V(gzRVeE^nQ66P9wxu*$$WofI4OLi47bAbtw9htdJkZH#G<1zW?P45I za{5eI$q%dJ9%)JdV(=E&=5u_oLPZ=B6HS+1THXN0`wUralY9G zg|k+W^>H@3hJlLS+SHNwO}?L?7Yv4ea2gs)-g5ew8-1LKIZ=1e$Hpv1Ilil^kgshSVe5DYXI&GmYeTYvbx5S` z^?7Fd5RXXAN4k)Vb@XjLOKO0Il5`=`NGunyE*f@1CiKnoSdjJ-B;kt9c5lbnK<7j zFO-WsGX4;H8Q9KDVO&Z5cTxB*n1FZ~?Bh?b$N1t{^yRdj?xI+tTp6cDDure2z-9Y%4r#iL(wbXZcSZvegPcCbZnNmGx@$o^2?* zPyDXcP*%ZS!rrjp4_f9kXY9ixwrZ8jPqY`km_w^DHkCcqx*b~X8%u4GyUy7z?VMzL zw6v=|_tI3_oZywh(NtS)Jr-oL9lugnjM=bFOfzyYE8gmB@l5z^?M(bE+qBDrgoDqA z*!ry)!^RBV#F|%~&z7z67ZzpR&fL}v6bIC<$(rx2D!yxaP?Jr8T9Jd9)$gO9Xmwh`mm`mBCxweUqvop9^6da2@eHR`dCda6-fb>7x+bzi_*EoZy<*kaYb zQ}bqM!@Hh;;m>FGj@#h#QXQSpP|aC#kGgY1S-x*jFFxi;P2PLm(%AJUmI#@*PvzsE z-{gl!MQwXGEV z>lYWe{W*n5`#_<^!j$~a=V$N%Jznw?SoWRI!J0S=>?A3Rn%dhR-O;23FT*V5!~w%Z}GEE_}81dL>54kU<=GAD?q{1w*z zq(hwOiLd2V93|$xx`RoTt_ZomPY~Oz;8^}_GRsFd0p5K_9(AxHa&J~7mlw;sH$hMQ z3;r>#`o}b!zxp_x->Tsh#C0dUofL*8iaMb?llcE?Hs!D_QQisZ9fYCXkoG~4enXHB zLL{f*@K{HXMne3jnhsU(E`VN}?%I}L_nPFK_oe&QCa+2KWjpx)*1a8NZ2u#pFU?_F z-D}dpifwgoOXM{v`}o1+HHpfz9NhL!FSo*hRuX-=4jo|@|J_mQ2(z6R`%_1l)>B8A ztUMwAT6uk;;_N~EW)^wumA-BEC=0uOy*bTsV`V}cN@>=7D-|D6RWcVi#NM3Drst`x znWgMpF_tSTJ$Y`Tj<6I`?xf_`&LkBnoKg}x&iku(gp=2N=z;&(LJvPd6#*?qJTdmK ze~tCjC!{bfMw($=k!F-&6k++k3J`@qx?y?q3w(`vXqC?jN?gq zOiA-0%U^FX9{6N5pyaOkAA2HZ>J#Jw?PqQyF0ekdp9j!-1PA;df%pW@iet8R zLim8pS!2M`M9soF&PyLtV@;)Smh(v4!@(~R*3XKDziWlFqJr1IONRzp|CU@O#781M zJ@TYMcr=&-4g%aGmJDE~!dccTiDQ5s!z$ReKGL@!eFSW3@ETkOXizMzvEBtXA1vOD z%n4uv(2$1r3DT4-y}?2S--LtB0 z3|h`h5QQ+6c@tbuOp|5gN25#Qn&^B{e#-(yA8Ta(0r6a56(|K_z&NlBeD&#dq2Fzs z&VYd3F3oKRo4;gUwd3qX?l!iSvrQG_{HC(r-_N#J_bzPbZltzN9&A?QSG*G6mnzN= z9$%DAJy@A#ntjRM^svodF+~&G#WMNrS<{ZOwchp4cJF#mK@C4+>)E}ixcbrwR=h*J zE%V7!!r4tv*uV)d+3L(LtkOWUczoz)d+n8DwBV<&>_rEi*NO~SZ#$GK&Yr>djXguN z04-PLBHD2_#Wv<^lkNMJvOUAR!Gh2EVq)Wi+qCz&)7#e7e~2K)AHIIBJN1#>SOEj}B)MOe$1)c9d{ zG_M=6>Wi+cw5)X(sUt0Rb>A6p^~KIebyEei`gE0|9`HP%y0uQ>cckeX)r-rlPVUrH zt@&z{x}}+qI%z>EE!EsS0n73(jkV9(%a3hTCE)E-+xDGzFRB5vnyMWN9ak^Ep3Aph zR)dcjFh5}On{<5hoo5BtQcZ<|GhF#QF&2JquA2PT9{2o<9Lg3K7r0ZM{N@2aqj!$j zAC~V4i1#fVCuf-_1bIdXotGXLd`3OyXJ@Y^jLv>RXqFHqM4QY)u61Gj1#=;RKj_KF zoj4@82i)Kn`*#=84GrffcAgMtDYyzZsJ?t&I?({Oy zj5_Ym*NSiqfuJgN@?on1)TO^ZrU&bPRVTvwt^oCPqDBNu?d#v)nltW?0T$OCw@g!C zDyGRdSIMS{p>mmRgXQ(Nn0#(w0z3VNW2?F=(%7JL()EsoWREot_VCDi=|WnEX&^v8OO z-*&#q3T&9pacw z@Zf|xck!*dzOq>D6~{sjg^7n#EZ2AP1^h8C_Q$lOzrQt?IRC34?gPTxi4QDM*hx`X z0^O|tDNQK=$3yT=1X$uf)t0C^KsQ-`HAC0*&)1f43_&2+*&LvY``_zICiu>Ce$(vh@wIr%Iy z9lkG^ZhyVd@X*b!JUStH-@YU@OcP7mlci!-52^3vg@%W2`p%tYjQE{p!=thKKEJTe zb@JL%avfQ!90*#d!blp|6P;s*~sm=?E0^T9f!x}kMOehM39 zkxjZ7dC2}Bdv5_>HM0KyhtksG#T{Bokz&Q^NoJDvoZ`~Oog&3u7KdOS584*qiJ00oUU`5sN4P^6o3bulZ z;ftDdA1i4=PXQhtRt#BfZb-vm!SIKjANDfh8DL+jh94g5LX^RKiM18Ti7@UbYcpU2 zjS%-x4SmPv=@hKE2WgHG`SYQ5SX96D7{VK2ccMN!Y#PL!uy`j5$p@%CKdXYZ1*{(+ z4XPs2cL5v1V^zW00JaX|@vtwz&j>59_~(_e?(HDL<5a7U#y$sHi?KP{+i{BU$n$9i%ua{Zs*nWPjd8F+d%(rfWJQZdTl+E+fKb%@l@iE3r?`eyOCm+ zy_ebY^4VGPjuw;PcOE)P+h9Iv8^Nj$zHnPQ{6H6Lr#75@l+0vl7;mZMW2Z?_XX-B2k&9kbL`Vc z9c?77?Q&GFGvy&G^0GU-;2X$>eCX(yo_fEySN9duRNG_5)ZZXVfh+1$EPY~w*aG-W_3 zvCEQ=;{A^!Epv{f(z>477Q24TbIXabm&AoXuG3Nu7PMbehS|gN?-W}M>*??sU&KB$ zsD|Zw=EB;d__^BrdLzWn%d=|{+ca@q;1x}~l|?Ifdxc9uWhI$A7V z;*kY^CR(n_FSXT|@`&?FqzTen7j_7@e~mrnQ&TGRp|<5}rU#1W@Y#Snorq zkN$lh1VliuQ8EYyRuBr%)BbC9%KTR~$~Ff7CzT5Oef!qj|M=FNl6=!dIYs-Xui5wMYeSPO5Q7F9-h8T zKAwG57ryybFMeg}YF40qJKka=6Ca<8V(lwdWqGQ}ELpKveBFfIJaR@jKT_l_e_4Gw z_uqO_%9y4buB5Ta4ToQn(_X#D57ryQzdN;>kE$|)*Zm<}F1dFRf1GY!`GD*KOM9~u zuhDcSkG#{3-KtoNr|EN>o$oY`jVX)&-F#h}**W}{ay4KG{>DB#9n?h-7*H8dcR{$j zpss^R=7PEr0s{{N>QaalE~tAUQn{e6hQMIV0D~2y>+yyq(z!?vOJG1~kP(*1FTlX}k6ZDEy67IR0m48n zPzTfl4M3yM9urLvZwA6aOVAp$0T>V`%!-2T0=j`7pcnWa^abC(HTRp}nlro`nJeR3 zw}*EltZeJsV1k_UP6j@_X;)drKN)CcT&?coP47l>^CS(7bgYcy^j*3%iyF%v3X8n? zyjT3;m^Siv5hdkx!%oZH)DK3vcR%iy2Stq`uSjyAR;}ggxev<4Mn%eb{3Gc*a(qgf zD*TrV6WGCa!My&5>vH=ISL8hJD$C`@c9aWl_TqEJYO-*qgG}v%cO!EcE_XThg#U8l zq8zY!7kM}0cYhoym!6slWvcRhVltjO*CRPelN9`Hvkh|p%~cF_4qmotH6S0C=fl@J z3{PCqGCK(BB&dU+hlBaRpfIIT=V7Lq*6dU$PG!iN`;w)6vn=iZ&uJ7l(`bLQ4%)}8 zi|Q~j)69L4Wo(ph*7eWUtjpY&%9_WaFr|N0n>lhwMA@Qy;Xk#RO-oGM!nfuy&uR*E zt+r0VHdYZrTd6{*^{CL9gnAI3A1SPl@J4*)k#>`_i}A6csN&uK?L- z$8&LvLc8+)W}VHcwHmQ>*uY0(6Txb@*xD;vK^c5HPI%d{Q&C2#E#*UB4&5M<( z$%j62iz_^EcwCLM74_F|8pmbN++LqjXQUo)Eu|Oyp|!RnLq0aK$}8!#8{?iCal#P0BKaIF<3LB=N>**#g#6lL-&tb!=`(fJk$nx5p@F9*22O4OvMuuvwi&fW_ zyz$eLC{bGdY<;!nr6*~JmQB~j9xtbD&9}&Yx_`=`b>~}aS(mreh8CC<%LlHs+?jgD z-qKN1E4H(ZxcKfhvEsbSmcqj;iY+?(h-}(JOPyxXv9%kW5|iF)C^|0Xliale;*L?> zEko>i?Ot6Lh{LLXFYX!^Yq`|qkW^#&I4MW-!a@5TS;U8r?utDgzL(Ok+9n>ESV}73 zokD7JFI1W!Ka(1kEM*^hM38vEb1AK5oz&EOs#LV?qEC10UrOs5l<+6^ANpyYGg7+( z%t+#D7d4ii*7St;0G{BBs$KL-f@1~)D+mP@L1pl#&BsFB^uMNW-xwP(-ft=hHt zXVq&^$i0hk!TpCz!2`;~%llI)N{!-?^3oJ@l!{dZ-h7$B{n82i+9j1=in_@Uy>#c( z-p24>4hV7^#mOo+6?nFzD%&tsVW(!Qd~BQ#8yGF{W+wvqs8Q+Jw5msWK#^&zS|5R@ z{XyXo*%Yo0QP`SI0^e~2Mc7A&mB2Fgz6Ok0N?t@4g7?^%weDIu`H;nD1PNIV-i zEs$FS1vX*nVs`$Fz{}+dXD=oQ+*8Fns*4@YP)o?I6m#2!bU@0V6~g5-fqCx&emE|CZk;dVIJ6caRKVDEnnq zFxTTF1jn_33ZN3G0_c9O0Wf6$pGp|gnt=ba0)~CReQT~~w@&SQHE-4Rx74sf!O?9G z8fyq=_v|RINB@5B`}83>=e@Mj8bR{4t>RUtMVWc@4LVsqB;QwCzLIjMxi7zb(8*W4l7myWeJXc+^ON!2J8BnEYy>A&jJ|0X zqLiFVbIWAu!DX7y#mnAEB6ocsB};iW(i|`AqEYvad1bU;=W;o}_5pk1s@T689Gjg9 zS=z{c4s|pHZDtuWY?k}H42^3kPL{UM_c7z2rXb?)fnrmzX|=Z_PP`(0Mb2(C?u2JcB-Fg$CwC_$nBo z7(SD1`=bS$LltZ_K}kWd^@9BluQXF&xguD9Mfhi=V}6+RI?_lt>W1`{NT>NyST|yQ zpbFNhC=-A%9$>cIh~wXQq?H+SzUIM3fDvlKJgsS{$D$hZw+vs{y^)6pxOD^eE$K{{ zr-gr$kv?P{2HHRax(gm7ya-U;Z&eW|eMtd}5pN6*sfJ!?ZGmvGt4_Sr8FR}HqudSvt&7@4^T=%J5cUM_ zh+hY%K@`Xb9wWUF>}J?N*aiUSBqSQ#6bwy_bUEuBRiO2f)P7onXvIJPhZYnkEZSzQ zi=3$@{7xHDX1^;RdBz+!>}&lIVI0T2DZZ3W_J@6IuAjY*9HTFt+K2l@Uy4iX;qTZs z>=OH>>O0=HMAx{on@;K%YFyQ-pPr{rY-#7|zHcP0Ix^>}2YuDDEzPQUe4RP}BgJSsHz;wLmyR*#x zd_x>Noz)R^$1g7Z=3{Xsx3t%vOc~@zp&!wgd48wA`Duh6WKpz9cb-d2c~;gZM|OSk z+i?9s$x;sQ!O8TqB0?UtRX=f!tE}v%_`29W%Jw$F{79Jry4wJ&-pN zj`L|R`$?1T26L(PCibe#2=*qjJZqLhb)=abEV#Wp%;C1Vts_^(T-vyN zRkVX`duo;PPSh4%sG~)vnx$R7R>nSfVpgr>)EG;?VJ+;-%0CiqA-`I(-8e3eEznpj zc&ee6@mytX=AElrX#OYK{%xr&8_wpiI~{^nyy^*UYcEBdH#CQM?$k4J#*S-Z$pD+= z5%y5>AJs~nnchRZJH+2|>cTDit~;IV{a0qt8tt1ezB!v$%pSQ_>{xt#(AMPsQsb(9 zr9wX+l~On^OO`rSrG7orO7#jyN(F~!72hO@5YKyB#QYtvi%&ZPU1IbD>}{IHKwW*G~T@8V++o>o;eJ{w_ zCk4t2tNQSllUB)T&J&r4Um%xkV5qRP8KD^S>KvwA}E(YGoAKVjI*`oq`on56kZ&5^LBW^0Z zdfG_#^uQA?Ecltl<`#G%x2$X@+90S~*~(}y=4>pm4(U}Ml0jwTss(c4-T~IRK?63* zSK)z8+@u-F1XevpV43l-#m4Rw5m?CUcy^<5Hy-%&JtOfe_+eh`-_pFktyTPe&C4J6 z2a(@J0a&7-3k=!*Prl1Bd^2W!m4GEMoc{kc<4eT;1nFA@hRFXbjf)-!ZU95m{|=4I z)ouUbI+v^79{4?bf$zb$wTl0^RuR6Xl$la{Ysyklv{sQPs~5?)#W3Eb&~Vb3Nbd?3 zy=w>e`Z;w-vogm*#*AxWZGEDp98~DM+kDi(5GtVyDAr5 zSDgHw8~(a34k##B%o9sK&1u~vecLYNr!*@=7UuDht*f`m=||2p{GI1KFqZj8AE5P# za;s1e8eEe$M_L!Hzch~hl?|>F*RXzTAe#(-EG7shx=|VGOo)FjZ>E`+#-9XrJhc6D zoYDy@Pn#L0_~+1ZXkRl8LF3qDX*1hF`DU2XDNdWYA6c_4M#kUyhdDAxM6>#>d*I8Q z4zpp2=~ewIBt0pFu8kBzOG2wE`dA1p?jzWaM?-sx7i{xjbw#kfKsd}P*k<|&)|-N0 zBc14qD%gr4Ee&j8P*V_WlY9hQMTFhd1byWL!c=w`zypZ%66*yp1{6p6R8GO_h447l z_y(RWtJC;4oh_4+FxLzEk##ZhNJ}~eCW3Y#Kga+UsfLd#TRPZei06PFa~z~X7=sOK zN*AQx%t5#gtO^`pA>y-C!8#Z=C*mJqeG)ABy0X4O-gtohjJ1#Hk=7h-&aNc*#lrDv zZK0JkqO-8`0sd~Rd7u+LhOL79Zr~)ijkH%t%La-eejlJ6R{GrrA>0>4fy*Ee(0-+{ z&r#rw@Om%1Yb&@`oq>L_KVdm zCH0Lt?{Uu}W8%`6SM`9iE7`ndD|y)R5pgA(Kh^ISP2zC8T&XX8e2Sf$-ay;B>INTD zI1{_|baGt!^mXFOUwR&wvQ4mls%Lq<`uPD;?`-?^eFt~xt(Q$<;{vzwbo!|~ViTnMJvI0e?>MNty#wDE=?zq2sh(7s{4_iDfx%9ejeV+Y5Uv?(Aoiw-C zI9x`D zZRO7gh=uD%S&HXzXqB5*)K=~Y(}sszwP#b6*o@WtXgS}tvfH&q+PLuH;*|0|MKL;) z7&dr-CE2;bV*K&FQmVAA#J%$tiG7t?_SsWziuo2TvfmsnXj9uY6i1xjY4;gA%km<{ zEqi31$&&c+xRiQnYbo9K9OB588>EPFKGJyqB2uYyb;anCTctc}?c&e9`$}SzCSG%Y zC0;GrO>EgMt9{JSBjUQrsXyJF-}EWr-`ULbMfy|`GxA@mPti*PZTP)pKmz+Gzv~G9 z;Tjd{{H9O+)*P*VAv>=O4z5wWS8%O1t>q7eq7}E7`IJc=eU!MIueh~~z<=B<$gfkB z;X6u2%g@e5^Z5K{<+-imBZ;F zi{vf#syy`Q9PV9iI8T*H;E_pHt~^%wIR7TND#j)Sa-B{$dg4}a|H}>mjA9iunSe~k?%7#3QX3^X0vSV|+ z*tptG?)i2UPxe+|O>;PT{U(Cs?5c8)p^sVKk_vAaAI7?@^E3|r75p$egKzqjAmqaJ zCUU#*g(dR3@Pj4(D!P;fZ6!n(5-h=7aM*w6+k5{}eJbH$U_1^Kv^NBN^3#qmUJ?G> zxmf1$|L)f82!7XZdp~2&Rd10QzO*psihO1nIuLwe$pwRQ(tIjIcgj<_XGr1ii-lBZ z^2*vYc`L)07JOmJVPmV4-*#5qeXsJ<#md10`aU)Ghu`;4zO>*Ai{@dmRqeX*5_9rd zH@>?qHxBeP2iK$*Q5~}1Pv>ZGEf@0HBa=QwdJ@gwD%`EQ+$2KQ=SdR(b{NC=Oa`3vna>X{Q zVGml3$G0eJ5Ywly# zM{x=h^uJj%|MPSTo9PJty*IN%_$%sDuP~qLtPolYezej-qbkx3KHl-%*c6U$>M4S4 zHo$)%jqmsU1U=;?!rc|Y`V6lcK?sKXc@D%eKD+CWmLKy#FAq(MPvAsxlq81^Q3 zhcNUPT0>~8?ZW_qd|p`}A$=2`StGCy={V4LY{?Y(=yD3S^vJ7#G}LMMQpbI4ZAAG_ zV?LEJUnv##ZH;tjG^Fga&HMAhZk9sun z4k8WjR3R#C3gA!;?aGS50cmB1mURPZ(7y~H@6epAB@wOzo&&Ul{Kk`BWX(tWplp7` z@p~J((rUyzBD^}GOt2G{+7k%t15l5lORYtCEYfGHhR-e1s3_gK8R^tc97jPL4ecv0 z;$8@c!Tx|U(9=jKQyxtBso_FUgKK{5Tum9FPF5qK;BmeN@aYB){ zalZb|^>NGI>wD_F)tBE)9p^E+lkOLoRR6JkYsb1PW%d5Win1CznWF;RVt^W3Q4YVaHp}Vo8^#=KYE;;K4`6@&cZd*r>Ll{QIQK z`P?$AdAt4fc-i=rj%@k}N79rTv>jR!?e_Sd+OyLEjtrr-wXvfdTF~NXZHsq*ZTt@@ zwTa0_+IKUX_8~)4?dS8)>=zfN*M@X`uT|*3Qkz&{lf6dxBQ0N%^O_d6Oe;1potWgf zpV)A8cKfug6D``yNtR(pw~E%>O@kT-x!LQL>?*FCx=HMs`GGia>@SwRGi1xhydHK| zNzfL~`qBQdZhG*Q&-f6=e{zfF=QAt(Lq8{b6eaK^#hl!?S2*{5<>c9(sl58@N_Klb;j&!oS7L_%|Llm3TF1;Wfatf?Zqj0ujgepDyE}T_= zq%w8RMdk<%XYUINtm}brR;^16TQ#hbv@vuB>ooZZn_fd@BM(<%wcUDHCRbKj?%FC( z-`>gVHHeY)VJ&&OrV87F`BtTuJEh_|ZgbDt;cOEVc=0kS8$D1l4*nJXFz<@r(zL#< zGyMHIR~XuTTW5%KfMMsib%tN68~;xo$LuJ6SMwS~-}_UdDn1T*dp45R_665^d_1Jp zxjDuzUcFOspwQErDdjS=tje(eMH#5J&gXK+m8 zP})c{A}DT#Kese)HRDvq9K(KIp2`rkQNFoR8N%Gmu$fMl>i&Em^LUi@c{{BDA#_!|5LzZo2+a#!tc)ty_JV~z zf^EJ6e^THY;-f%0r(kP{cxAlKyhI#YkS!H#dj)>tVOt>%t;Tv5){jt)`BAnk$RC09 z;YjmT4b96sQH8HBgh_Xr1V({5NXr3TXD`B0D&}_~p35oN7{b|+HXRoCDfwl$LH9A% zH~Jus{ey81Nt?2sLYaC^X$p2elPlV zAgu?qmH|V+X4TlwSllr7WVFhNtuoNhNT^dp8jlGs6+NA}v9WjsVINthB*B4bk&8jxaAx;d>tdDO|Sn9I< zg4Ez(cNT0frIl`7hK0z7wafNP(%nM690l@M(ftdL)PwrfmA;!b-tpn~j<^)vTd}gm zNAMtjm1Ws6!m)9}d;N}F-Z9}^AN#{z-?JsnHb|4ojdP@KF_9fjc1l|H-S<+1%gY@? ziPh}Py7`W`RxgJmX+LrQosz6#{Z_G0+AeX_J2#KTD}rwMxI#R0rKcX&^o8U({H&xW zKj;W}HCjJBf1RX0?H`wQ$D`Qt-DhdVGHelZ>6xV*(_h4nFEJ~&(xwgK>gm(8{A06= z^%}L+4iB23WuCr4{BWSUmaNB?pv^J8wW(p6xMsFwZ*e!RmZseq%P=KaEWN#{efE-C z;+1Zl?RBsCYc*GO7JYALv4`KzVR>tLVDAw<*W!2BOKd!Kr+8`mPOWpwN0y#HFBe>+Aekpt8?Oo#VWXpqgeBajYJNA&csa`|-yHnAzdm1QGnu&w7;wLg|wI40F zJF5DL>58SapZ3V09eWg@<;d`vlS`G-;!55YhkK>g{7R>D zct~sPn=bxE^|1l?`~6RC=xU6O)Uje_Byn|&no3Xoq=25@p5TkBV>q7CZNr9wiU2+E zAGgvFb#(_l=~V)@H|PVtI)C%@`;c`M|Bd{EmNazW78&-sR{;KK9UhzN%UW zo=%*@JMU0=8EFHztT@SwKiJJD_DsPS%yZ|fat-38*K@wNVl;bqcrP10t{X4#%SF!T z3sBKg@pNYf@TJ0iKJNWG?zgTkU&7zi6Q)B~CW_!gu%*;x0CO)IuK8=RThw6VH1eAIK*TI?I=g@6M;x%g=JAgc_Eu z0iSI9z-1?!GCd~f+SB!>YfRUbu4O8a26%(?00ZLx9-s4QOB2uxgoBo#HE09cfexS(=mNTd z9-tR)d%Ewx2Yta;=Wm{VfAfC$UG-~#;d4G;*2!|;tGP`d^RkM$+2w>~a?;7^_{u9; z4L|fbUikCfxvuaXXVUP%48G(Cp1<04jLNdx#R`zmcz(CwK{?~`E!?+~Cg-+4+vsgnF5u_7d_8aD2<%fIY-WR{<>T!`#~d3dY#~(zEir1{E#)9?0I{M z?5`ZB*j!I!x$Qdv-eLM%FRZtrM7*|!|=paFSCO%9}v_@eEx8thX4-GSo%6}d=)BoAhG0gobkHVB@?o0Nc>-xN16sG-5OXbb|&AQC;pC8*iCW;&T zo5!R0SGAcPL?UVz-3$Mz&1_m?TGxOINyCNEDV2oK){hOXDzq#7&nw=7Edz9>vWoHD zK-=4B!FC;*(Hn;GdhQNA$j1;v=VWLtvtNL8@4QH;4< z)?J9ZV_!TTNwcw~b_&7E5g!QVAPtY5;BbVY@lc(%I3K|ptr~vgX`P?-1k#ow?t^^V zAIGS=w^ZY#ULr6SfG7T3$%@?d=%g!2-E zSH=0B57DnoN~=$txZAO^cmo!*V5Fn_u3EgwtV3*j7T>s%RhGwPDK$esaiBz8+Iea9 zK7(uM2kMs%%3W!tKK$A`77?GBJ#vm=$um0~mxjLLWm0|5hdnvTUfiF_dezG3$l1KP zBl+aUahZx_cH~@=QvW&4%eW+)JRBa4QpdS_z0j*zo9SzNSJ7i%RMDSrs^b_CGfG-l zWt(28Uw?f~P<}QlEJ!-+b%-Y|x`J(pN$#jot|beT>*>vF&2eP%>dz|{YR|Jyz0b!_ zsm?n@PG!;a2J$TTec06sshRutd$g-F8#&zarPbENPtXSUTBJn|e574Hv`~wUnXNtI zs%8o5Xg{B;l4kwbS<~znw0SxAX+xg8)h6Fvr@czmJocxnt+gVB?pc0u+fY8>*#>)q zOf|I%{G667w!Aj4{zh>~!^y*8ZyeWKZqqViQ z{5u7)Ueu7X)0~2q%r~Vry7jf7Q4g1C`D+i5(rp|h6&^B0e1CDL=p*-*I;6`hKIy`w zfDRv}nw5u%DZHFI+<57c+**+ah|%bLK02 zv|LO+HCUD1F;gl4EB@C$PCNO<^ z7!SL*pS{lghCNxinrCRBvejD!*0)DI&s|GpmFGuG;^1bi>V=G~;n6Vev9TD#zjnAV zM&KP9s%%Cpfz7KogZuUIVaf@G_c({=;oo~Rul{f8RegrwzW?mkr!IhSb3xq!;qHRE z1|pdY>Lv&;7k@Rq$`|b>{9NRNCGxu{0812fQ3#d@aDhRrKooKDrSvEZjz@?tNRuKA zT?&>H=7s+qeTuq$y4G}k>6+4Y{9^i)+2!Jx3WZ@qz!zJMXdeIXYR&8ayLwcg;Hhh0 z8(!a6cbj8)eLpqTVXPor8hBFX8yXv{3&(F>!F(@{SE zQ0kfdtd)a1SMTJTyVMCT6YJ#mOY>+2BL7(LN1E|PUfFrgU^mjPtid@R%NZhmG>6Ps z;;@T`%u25I1$g0`S7^x0Z6htp!v2%_qHWEU`JJ}#M@KfunS_EIdX=0h%F1uvY|5*| z7vjaj>XR2P{;N-*T;D5}=XtYQ7Mo>}D=k=I%rHxR^`1;Kz*bayz~6VTCFl3|V2`6R zTYD>Szm_3$;`&o!!&9?^$KT_p&Ysd}qXz2%Xza2yLJUw&(Z73ycs1TR7O{BiIf`V~&*yKUj#54#&JEr(iv( z3N~M-U@MOo2p^;mN7~Ow8xxN24#F02Vs4d^;G28{;&{8Ud7#WPRj`u2bP)T^M0yUV z5bQ)=YNX?FA7TU0b!=r(b^+4HA$}Ec9K(7C@qVylVc&y%2;T>o2Swi?Bn^!8FJm1c zbQtnsMSk3^13+?60cF<0`hx?iu|Cn5?^FrtS&`-r+ZUh>*4Lmtz`wez837*kAzMK& z5Qg@+DGA?cj8YTU8=gm*RLH~r*2dsR5P|qb&;a4xurpxk7^puu8c$ z$I9vl+XS`%C}EinrRr&;V^id}n*ZJ~3jNJ=0^?+&`;jZM)x||Jr*kwm_KXA5csj zR74d6n$Hwd-Rf@7bYp?#T#-Qgu|78}UJZxX7c?v&UdotPoZWJfrA)52;)tHp#KAj; zi=IPw+po`7EU&JwmvW}bCw?e5Tzr_ewzwhGP0GFGt+=b^Ez6}IEyc+Vc1zVA1*9RB zr;7FYR;g^kv{JV06UB$C9!ZsVM@kt+c$;^{w{?cDzoLJ`nCFa?r$953xbidzRVD%S zRQ3R#0Da<@QJ!!dnTG$c!N3YaK}Ap*R0Y*RP4FG44eEmWpdmniDl`S?&xIDC6^H|_Cf=dKaM*42#W zKK=UhoB<8kib-MY(X!F(2k&s6wq`sZlwIMy3q-MLa|Pb&p(=L3Lk%0lybR_)UtmEg z1Zm>|_;EiIEp_arvIqIgvw_#0Qm+oGv}&=!R(lO$m-FZ0Nk;5u6J|K1*FS`_v0)e4 zn%)+sHp|3%o>irDGgNkZg_9Kxy~#o!z>n8PC$qneX2)s;io@RtY`n$E1ASGVv4e5! zuknZ3S^Sn#^=+Nuw{?cUHN%P?A8r7{SL21x3pNEv1=0X-kRD*D{O8QDay>pmP(Oyx zLIr?f`=9GW3-$L0-@a$~``?PCsLX@F(fx+#U43;~OTV?D+X&1+ymIrv$kSlI(BIoWfh%Jts zXWhT~Jtx z2}=LxJUWhdkb)jjd&o-?y?iRocjXBZ=d z&Mpr<4C@S&MZrIOykI*Vj_(;NhQ4KJUu&F#ZM`6nuPvLT!v7ZHwVZ;r2-2FUhA%E# zHslRL*nu>wD%gAwJ_+s%h7WY>8>FF(^(Vwdl*tFp2D+5td;KxW?FE`@=wMVfBpzkF zQT{yA2cz6`#IqnA2#a^RkavP$#k&$|MYMj=u+YS4J)QNQYRt_tbTiCnGW0RLTN%FE z7b5-?pzSp0E7%FU81X%-V8#0r`HHt@1$gfY_Cel$gy*P&RYDl&faYD1rf2x-qVfu$ zx==?*BxnHQk@hR>VK50{U+@#!6odFt7nhM%9`zw^#rvBv2ki~=NXwc7u&;u83?KBH zRio{}D$0c;?K<}H1Q-mE9!PC6e9jj{yfDJ^kaiaPqdfTmBR$dZSMNIC)r5rYOU=Rh z!`2!033_>>g5>sSog>LcT^bh{u4Nqmqt^4$6UW?5S)@bF{l$_gZ`dmzdZXumF*4}8 z6*V2>rR0t`_F!%K$_~ugR;cG#nc}Er@6Y4(CN-Q=s{w-D{cu;- zZSMldTDF^wj=HO-D!+g=DRz;aJYL+9y3)a#y zf{@}4&pGq;^gBJ6dr&cH?1EKVK#Eh2vA#}yT$aOH-)B2n^+8oF9t+dx*{a=?W>(O} z_@F9|NnMxgXGVFkYmV;vkP=7rLO(dPiqY34f3>_ctYlXFvnfbgzkZ9h`QB4~O|dSP zQ*#1?=9a1`mWeoP?;bcqOVgy3C?-`c7nWwSw{HE5Wvp;sT=p(fD_JR6TjN&8zIao4 zi`sZ!(Dn(Xw9qoaVqK-TJ(F`z*;|DNiJ9_v*;iN28Z>N5TKmH~QDV!$QrfYTFSH{4 z=ZP~q+U@rC_qI5H`XEl-H&tugtghvUYfM}b`r01bd{XS17jNxvorkmoWqQWmUy?_> zTDgaoZpk5S+WK{37i(L4%mz(UPWXsH)ppt+RJfq6zPUk6KC7|i%Dh98*Ml=!I^~df zu^W7>3a-`D`9<57kbT4qXqOH zUsegj@q%5iGggE{K}GPpN|>wsKd51@v=-R66^HcY(bR*v0D<_{Wj$_+q>a2a!vCNsl!J96e%%$h; zxHP0Ew++q7{c5%5sWZCq66wNt(d^0ClWf^os;)jPqVfo~I%h7nY`cS(y55%uhA-uA z2O@c@&UabAdmGusUw85v@7nRMuN7P+L0Xc1I4_Z-C{LFoM4HnihF5)E^@ezB{vh>B%uuPlXsXPnpb(-58zpzs*GmGBXkJ5PRNd;KZywPl5?P@Id+Slws z79ZYZG2IaYn;7mT9@y@~8s5vsPCj_Yd}8iX`rmmoul{c-TVMMetUS2zgpZ57u!Nrr z44#ZRS^ls@eisE`2@I$V3c(TqE-=XYhq+nB5GU}D)8AYpSPJPxX%}T+iLx%r!4en{ z8dzWn43rHp`26e5!9trA5JFuqtPT8I3YM#UBb09fnt^avT1$jmgEpWY=m0vo^12}0 z4fFuL!1t8?cizlD{NJC0C9AlFZWL7IO5Wkpvkb@NKF2@uCs)$T&CV|qS1U8*%-Kfp zYfnzfgQv~mkA~%uL(65CGaq@$PFzSQe>eQFT)5K~*|S1wIak%xva%->J~!6&4eS$0UaM%x%vZ0n@~3m}@!h-1 z@{f&Y@nh09e$w+Yhss1>B9wg_b&+lRdhw1`o6(S&AA7Y+?i86>x>}^4e#)sUsU{BhRlg8QZ(+PC#eTW z3X-|PpN|D8ouD#iI$1Mp=9^{6n)znEW*XH`d1hT^9Z33AAEi+_!mRuAFy+%`)??;T znz68AF~Rf{V)$JJ#?p} z@j_@>AHnuRG}hbUNl{%9Y#;FCfDRIxS`}=0K_+Mz(1~mgyhx}BZvr<|!HWN#+pfhY zXgTQqLsP~Znu;xlDg?(PFD=SDK{(3a!Tu8!!MX}@A3U9qZXK;A=ujCEJ^}o2Ts(%Y z)Q*ke#(KGszyvLY*0F_p1tzS`i$Wa&%4BjH`U~kdN<8+vjrvZz%10-ZF^+Qu;Yj4a z$3FRBp$mmnLOCS?(s5`GSP0@FIZ+n%8NcUn)mVc^>j6nSGQJszdhtmo!I}oF#qSj9 zG|Ez4)TR*cgtjOu+MDcXg6>3hVn1q2u!8+|fZ7PpKpM&!KB|yT`Si%J5;(WUw+P1| z9eLD#%A?sPCwHtbro`2MR>CBL_nx#s9<|y2Wh1`wgN#0gqTcUdL;_J8Yra_z8vwB0g|I5sA zDe~%ZdE*}H@vE-KrR_37w^SUhPu_D{pC9yCKN>t)ytlrCN|Pg z4%K45Y z7e;Gs)_k<@-M36@dSH*Xq{37!s_J;H#hjYjgqFj#*wHy-&on+`S<|+MmN7$<^4XSZ zTJ9SYwMb`jd)L`>HSeBt#1huDL6`HtiG4n>on`3BUxE(#go;^D9d2v z8)L+3P11`YIaga8J0FM@ScO<^LOyZr%>v@ng(2de8g0aCNpFeE-?tGf9qt+1cw;Wh z(}SI*fb=m^($s#Ekm;h>xBPyoew*G>p|jnkeDgYpjedaNu3u{hjXqIIj4PPM^7`l+ zNvIwv*>3(twWb01d;3pq=HE5xO(o4p;(8M`H3^{SJ3Xg8L2{51qz34fg>)bTK+i5@ z0ogzfkPFaDn=e3bY`mBifTb5Odhsd>=tZjpCDmD5wZ3gQ}o9 zs0q-!B|htlUL26$0<;1Vpe<+*I)cuiE9ee-g5IDH_~ygvx4up|AY@>LUBN8HMrFf@s7n_-o-lRi)XJ=!jt+`g{Llml$WXNw#Pu}uZ`CRJZvr20G7df*4C z@~J4ceA^h-q+~pLLg?7t~!4?k=e7AdHh`CSx%B?`JI1WN?CC=5#!aZwbODCVL#EK$Nm zNmzoqQKGbqGO$Eq`V@7w#P8}<=8f<>YXk?N4!ZVqz3Cd$b){=b*N?6lT_?IWbUo-A z(0QkGP3M=+sSluYN9T*q5uF!07xeqn?;Hr|_oLs7eisbvjW$cL94H_J*gyqP2~+{p z^cnzzTA>!G1L}bW;NRAzP__%`26}*A;Cs*)eDh%ipJrXVv~J(4eb+AkuoPlI@Z&uKaV7dDZ1cWYF! zpD2xQ`=zg8;pv@xTN&Qoo18kwZ-;dzPw=wejO}uR6GGQHh0tO? zLTHI_!`e=SLz{^gZ0mdk+lFYtb^zh1aKUDA3bsxH=1JiNWv&X}?Ff4)_)Z_}NFTvE z1$JpX)*7nt%LM!oPY*m1-X|oW!{SkI^#;#X!K#D(2qyt}gweV}8y?~0o5_l|BV#>b zMx+Hf1*;Qj!=T$J$iIm&>Nd2gXDGJ|X=jml9(FS<_936|hJSVpJxDV$<~ZF&7?0~< zoOx?F7@->Tx~vNF;}M?(i$@>%Z8vV0y zu9bB^%B(>A2gGl~((mSuIs#D+?FzYx_!`(*0LP(o6S5rOSjM_YDnA2Z8$esEQ&eM) zmf}PmuMkIjjJ1V}6XM2vEfr}M5m&GeuDU{YE8=@$u@9vq+1S32##QnU^I>h~MX*K=eEVAY;n=b5(7j!TiGryjTDrQUh(MMuYO4(VW28aCd05BuO3 z#x0g}`u!=7;?ga9qc0wxOFy!>yI$pKL485L)s8e7QtAH3KQiAgb;V+Z`!Q|MP}aG~ zCZ6-s78Q$MyBCAL*m~3+g+M#OklA7SIcB zE1?fP|3n{KrMU%WKE|B{lRpIi0#U-_C+R^p^tXp4F@Lx*^{F@gzG^V;dXQ z{5l)Dr=%EpcLeu8IhSpJtFeO_EZlQmbKWIn3)_Zwvhuw~anEaSwHXy0n*MWHZNtDp zTKuI8nmYY}w*K{V`{G|KXszNtYOCv%)W-CyuF2^ZX-BF)(u!=8?dw-8)QVcNYNK;y z(?&EbtVw03YW2z<(YC%hVE3t}TY7E@i5=f?jOOW)-2S0pT5ZXyQkwgcspSrJTrYNd z)>}+^X2T2&xN-Xerr}%5r$)E1hztnuH|AtPUG_Fs7bN{6p7v7^kq7#x` zHW*PO{D=NMdy8S-}* zo${uAW93HM!sO+n6rM~M*iYM>e8Ml`yw8ifw%E!}A`k!Ae((Wask4u&7mw*_>_Byh7d>o_0w*FFjP{o^71`yHqN! zkRVmwPezd1LW42F4v6B#-2++B@qRNhVMDtP)e0ZwxX!h_s z!4fx6SOcKoigmgoBo#HE09cfexS(=mNTd9-tTa9`prYoz7);48J=k zYrrSJSj&3O`?PuxKCH-Zlw9(9HQ8FgOKwqSp0OIRS>9{L7YEB9o^7li%seZtTrhZ) z61e>?zw`J2xAv&R7u-D0->egj)qQCmUzfw#C}Z_t%?zW^CkIc%*%pbcN&Jv zxi?OrVK~2h&`DoJlygRAR?;6G$1b<)t;`-$pT0(@Om_dsN3G6J`Wp|sU6GFuNf|tH za!1+skRlJ*SV{J1mr2fM2@Yvi=9rwU>)4Pn<67{SCG*fKNA}&KZS-|Txx&yo^o2s> z>x)=9NE+SOIt>56Xn41RzpF{gl+_V%<3TR8>g2I$f8|9hhDNbc* z`z>pxnRQd#tefhf&8*L?lj3F>^O#1#ujPl?LHs2(F1L3==uBu_4Y~=o$I(Kl7%12- zItANFAHk-og0VhupCZ`SAg&N#C@HH9%T5<+JLlVPQf<8$CxW+8?Ojf{O8>8 zb2VKRtjkr*k8&E{6eOL@(6}B#d&!3~c$8X0u)n7&Sn;@_HE%R$E95THN-2W%G~&>L zNLRAeK|D%LSO*Aw&Cs$ALcf8QV;u|dsG{!>+A^sLzSD;zPRF>TCgkTuSv;DpixAI* zJUrG6e^{kqUm-0JX)4P2z@9}K9+6f&QjIvZV<*Zif*lX2p0vOpWo-%NZK)Kr58=H? zXV@b zd=TG;aw}m&VVA;ES+q+*y;Q#yLoRD>q{Sou>0esoIx!2^$Fg>q!nUyTpYC(0|u{OLRD;dh6yLuIn@&@*rCQ|I1hb2810OH=TYer3&SUCs1^ z?%Y<$5tH+U^z4_Kx_kO+`lQ8k*~}i-*^`5Dyma$W-t~9`X?f5#hu&oZJ6bCjOZV%o zxTK}R;<9`wreB!VUVF4*uWqyS)8~zwqHok1>5twWa+GnN)blkfE&WiXCaW$)=ym4Y z(7t!Cs~?`SRqwQ^3fuVNS2pnbXrAQ7Otw13WnQJy6Yi7aKJUj?OF3V6VrgoNdXm%? zq@PFR*9-T<7v%2@<9TnUWuqHEmb@ds)Aj_pX?IgL*Ty)DXwRP?)fR6)s2y0JM-$pV z(yaD=T4P^Ln?I_NHt67fEvDBcZQ0p1+W9UI>@i24l{=MAwogoZM9XXa)iQT~C%Z6k zf++PCEIZ|__C5QbYAyRSOSJ(}_UHmtwK~BawL`I`>=SAn(i&fXATE8JU91~%L9CtD z)1J3oWAX0Y{^FLj4aH##ii*!toq`|sA0@%7os_J83UO=edQwoQDpJcczls%J4Yst2 zX{WXPrGVYLT?bJb*d_Mfy_NQu5eu}cbsgfyh7Uz~Q8g)b&f4Onb)&>AlP-$;9#||N zZ#}c0j@wyHNZ9^bKD7Q@G_KO->H9C$xNvP{5Dflsf9_DS4Q;OD#v)u=OY7EKDOjzd1202KKG)^pNR2t`lU`@y;HR8 z@n9Fr+6?o!&ZxZI@OV}*)XA&P+R6vy9LOt8S<6{Rl}$UQ@Y0)9-sP#v8f6f;@48}~ z_v^=-o{i!GRr*WG+6m&tIRaaF#rUIV4Fd#rvXjCheo@7t2)`cb#rl_xVOLw1X7%rM zW7D6XWu4b<;lkvj?0k!EY!Gy@;93aJ7Np%(MK0U_WI_wPw!b;o66q2hI|0uh^ zK5X6i?l$G|5-%?EBYTeVRX)vV7;b#ykTkLpen%)@IalO_oTc0X8Cn^CQ7)UD(`U7@ zAN;`cCuiHy95P;aQWqm_TJ_FsYPs%gW0kVj_`UsU7|w4-?US3;vr<0!f;Vi9*;%cz zcf;jkqawf7VfeqNaU~NHHq*MIhB!{)&(kSPxPN9zOCmnsKF_D}cuW4IGf^Iur!;dv zvktRvWPQpv%hG;kJ(OmaC2NA9u~D4Le%=m>(`MR)*jMn=969_YH7<9oM_lJEgqHFV zLQBFH!FLFsh6}c~PQexfy8-q|G}b5zf^7uCjTOOqOvOAc#JyC()<8jexG^8griKf) zmdINR?tx1vlY?*?KCNgjl{E~^MqViF2-vZzV5{Ube5%`USJ~X0@EMP%+a!ejQDzJB zy^yv6Wosaw7LXpa05k+Gzzg68CaZ#VF)Z3jx|20OEcB}oJkE@LRD|*Gosf-yG%Gyr zNlQ|k2#>~b(y4;ADZ~dy}$!YH{U0X-={FIrr#2+`0Yf$Xe zDv^4?O^EB2gH4D~f-HOxJ`Crwuw^$~vnB%5howbgHlS#(q{z z@xyf8r{GfEece#KkFZL56q>^BW2+|xe3cWjfizwuI@JMbc}miPZ-?>oSvNVc|HR8U0498nZ=#0=A2-3>D+V#1siBW5wX zCfXb@V9ts;fQlKWr*+JE%{gIMa}I0P|2@sLA9ufH@BP1fclYjUJH)1&cXy3Xaq^cx1Vtufa`FOOGDJ#$$-xBaaebLFvml53~F_2kvT^P<$KcA@I3 zMxE7Tx3638j9sU;ThP_I`j($+8s0}8*D$48ZS!7r*eiE+W7FcMo&%;>a|K;hbLCv= zQ*2PMn(bqK>(UoX)NF1w)QNXm@kZ6oLai0#q|D0xH_eGG=HdLFdv<5rAc}CkdH8zn*yL2n`V5BOMk6h zi|8-L>EE{Ga=g;?LAidw0N@AUyTAD4{l&B1Mf}qB*d=#wk|14Up3=0rX{C}c6{*My zPOO+x5t~FQVp!Tv;xM1jV!L(TV*Syc;)XTY6*%6`)?Me=su6b9@SL4JoT#wLLq3aH z+IfqvYonNb`hE7KGgy3&Qta&@nax}3Dds*SiydGwmSK8=@HwL*wC%#N%8NNc))Xdh zRfKalITqS_91Gc@u>H+s7F_4G@WZxXc4+G}7Tq8Lp0`r5n*G1923}5Vq-h9iJ`%p* zGb*gIeFm#^ZkS+y#Ie4UgPHwftg!TlwPNuB9E+QS8vw6O@^G0oh~n6~g|WiDX9~aj zhOB3NgMW;X_Kt8||pz}xPjLs9CpAtYRpbX#*VEO&~?Pf&V zZGrYcM*z$2|83#rm_GU{sqd?hi-nUq+PLbR+i3zfhhF zQg5#pQs*UE%?*m|APXq*W8$9rZSm389@uxU1f4TfZDQC+oy2q{X9VY#F*x4wx=rdLKfA0}AK&s_boEGf5 zrPrWr4ank*b~VzM7{B!ed-ANyfYcI>zAiQoSm8J$aR zpX1P~so=Y76KucAgm3|sfU*gkWf!=j`7&pT;yBA;J7=*Xy#ndlNLKfiUvY_Xnc8at z)P-&ibeN#cIU!M3wnKLTaX{}Q+R=Y^D9TWL2K1<}+rRlhh9E5`){_(dc%JO*oBF@| zUBy18qUBx*QuJzD#jT@+=i4gqpBBZa?*~k`ZB22KGs zF3?I0>7phS=61N)3)|Z5-eY?q6jDXsw_5DvK3eKZBl#UOrVDe+a{Qh~ktW-y5vI$X z75-VoKvT!7r&MvCmpb*8WK}X$u%7;y$8_p_HFdn!Lrp!QfhqNxNPcx!S#AD4&RXBA zg6Uf8^1fwnFXhKg?xtSx-fjwP+QQGtb2x5Fx|>P z#IGLyTKpH$EPr$`&J?j;m5oI5tQU0=qt+kCdO2Ppd~r;SKL7vzx*YWzqi$26InWYl z4YUE;Ir1?B{O`Stj=WwZ|Bk`9+{xN-^^qcKWf2z?7$tfH1&UMWmJst6dnxwuw~J-B z#)xjEIM!s>G0{9DGmCrXB`&yqM=Wg@Sc1(*tUSq0Ow)ECOZ#>&8+PU=R-pD3F(B`9 zG4-Nw_HNxawyd-$)~lRdEPVP6do^@5J8-Tbvrp)StH6mRU(8`8u4fm^H5|z9l=2Z; z?(8qPdUt*Z-Vx}9KM8ZPHA7QZL9)uP0CU0<+AyG^2br^aSZo=ElCj5F!jr{_Nl zZ(%c*<4ATE+n}njSczhv1RLe^`BK~29hWU)(-C28UHA=FL6ybSQ!7)R;2*Y>Sm>YyH~|YE9jPG+&JMUh60m^K0fY1ZN?%(Z=of()6heLn zJRu1M94H7$@Nxi)uz!o4DvkOCVrB?rmqqY)pd2KD7#l(b2e2Ui|MIORpuAvQ=-=?A zMZ-8n=?--2h{hKyceWY6Rx=01b$>OKny~L3%dy-8Q zD;#x1+?eN#)TJaZZkf4MR6Y!roJ_l=CQ5g9KIcL)w!|wvkK6i4@@#fk%C&H{{=+b;HZU*0Cq78wsX zJ>*FTYI@jdV5h;Hq!FibzsyUjqjJ=aQIGPBe3Fz$;n&*xWmzg?=%_u4lcYd#qYcs- z$D_VcpuAtpr#zz%6#rWV;{i{G1)^*HM+c)z$#Fk@s;0DY0b^w@K=I)$7KICF3I4}| zy?|jD@$<{Ny-h%dV9v70lMBE!WKj}eLj;at2jaPuM6O~JW(X=jJVfV=XfK|nKk8nD zJZb05C~s-0fDe-Oy=mqxs5b|7VxUKxelmb5mf9eDAL4r`ZRuv`{9_>tqb?nDyu!&* zNM}Xcdr__wbbF9@R7w1HAMQfG5KiYtESP%C`1NKh@}@yXChB$0hxiarw1d0Yj{^{w zNdht={_cp|fnY#Ex)}5c0OBO|{e;h;UyigL?ReRBJ^dd28-bYGbh|A)4dl<>kLqkg zc@FJ)BOak}{?J)ABaS{&Uu5K&0Xja#=~xyQ=++`X3V4fnHXsCToIo1WGnF+@R&?p- z`G<2l<^F@5&Qxm=A!b@Owd2G0!kbC8c{bva@65fWY>VOsv(_<#h3FDfY^BR&6863@ z@s~FRs@LY+vyB_^NgLm_Ic$%v3h%D$7p@kL^f}!&rFHJDpS1d}j6F*$3mpR=3E_|D zt1YcXc#n6pY`v;Yu}!--ooyfYP(AZLS`({GWZN(I=T~RQq}5sw#L7QaZ(RXtnamS)X3M9UQ3koV|m5#5^j+fp75W2pz$6?VOE$$RCwq)xh% zik;r9@N?UHYE`ccLw`GJd7qxQb@)ALN_eP?u@$Bz*E@x2bYo37@693Q(Nr8?^P3O@R% z-K1C#3i+O#GL3n6$@J>!1Z&M((Q4+ObE}K(9N)WS8nxWM0lY`WP{D;U)9DYf)(5XN zeoe_ZQ?CkPe4)={O*QV9vGyN1$dqy1e4p+4W?08eyUQPw0^=KP&; zr>U(2bIgm+>%85%H6cVzmyP2in`XC$l>6WtbU0isGkQb3D9(#tQ0bn!aQz`uw&BOD z-d8NRq4n^c({Y@LWQB32h|~FMX82#k>7e7jv=E2<|K@ZY^}y6~$#Oc#>i~oTodJE{ zp0V&px+m~0b2`<|$B1M59TrdTm>~A6^hnI}{G6zatSXjSyGcyDtrR;@)gp3-nu(VF zlf}_J--?#L>BX`ZcNRO%B9?DlOw61%r&yp_D|RAPFScvlXy%^MTUh(y1Y7L-UMw=_ zwwT^LO?2;BL`=^fu%~BYSe|neamG1T)j3G?Sk#HBo84Ggmp*Lcn+t4)PkFXFs0mxW zNMvnr6J!?@MXS1m-&KfvFJ`=QtnPQ#5D!h(DIfzCF++L z^=P!juL}{2KlPAW?k|^kEXzXjr_Kr#T_g>v*jexU>Cg?v@>Yyk;3@Sw*68oPy#42# zjx%n2Cm@9bsUTAWBn=%&(ixKCMmlL3ic?$ErqM3Rq~($PnrE~}bqpA7810ZG9R+HO z`jxcpq~(lw(!NnW3P!t$slVA@W9I&AaXJ?`%YHi-a1JBO{Brum=`I!Un8>5(c6J7k6zvzGf@=cs88Gp`3$$&}KkLQMTP2?$%F(}&-eX4BN_uuq`9V*8r{92LdiaC< zlKx-q&-O_&Sd{6t7I`?PwaifQ9# ze9_kR$f1tBJ;nC2th<)=s#)voQq+38+6&>zmA-uWsj|&_+RR2CE-l=>Hj-uTQ{3jV zv@<(n@?vwJc3|s++cK%jXEERQ&Fty4d+fu|mTc|J*#F;AS5)Wa{a{NO8?Bz*7hvt|)x`Q%)zp-Y_Nw*Egs2mmty61^ zO0N#}^j25h>u(yJdWcmlRML8_OY^we2j5svwI8guZ9QG}>L#e&dSo$8K72TS*~;F0 zq1shUMLyIvxi2kfo!>sC$)`&n>)IJ!d{{F(?>=y!moY{8^))v0Pj<-s>Rj9S z^LGoH_AU$MJ+?34XLXf?+~Yn80oT&;`2%DjOXs^nxdP4jGi$5xO;VrbpPP$)y=(tc ze#*lg&)T0QjI&03kdKi_o)4n#(%g&DT3-jaK+-?->1{kckP!fD{@?pOKJ={(&<^MT zgaTiAAjEb42a^78(htC_k+`c3a;Wiw@vTbZ_DI$yDBQnDqxbTSQzm&t>uyp9lU-U? z&PS@~ihm5l2YIf>GJCzB6YI7P6GOKOqEM=n*kF8uIMrPi>smOr;Iqu8uIBg;=VdnG zfXr%E3lcN*^%P6B@68T=DZrv*LfFmfHQAXkj%`|dL99MRVY46GS^rlG>pY7Sq8{SA zd><56wx1%*EyD3D2HE+l{Xc(OiX0`niZh<)<8z#7%F zvl>IYv5{pIR#fc7Y78jGEGIv+k?m#H^*zT9eez*B7LF5LTPy5x8in;KnZT-di(>iP zDy;NLnSFlBi7B_qxI@0_VB8(Q#y5qBocufO9Bzo9SCAHd>2akm@fuy1ubF@Co(aQvo?Qn=p%yImesKHJxw zZ`rmj_3s+-R`>T5)TkrbFMa)Ex*u^WqRDP(@h$F{*_el)#R#doM{9Gq(5leG{g)>C?ea>NI|)KlyH_ zop0qf$4WzHZPs_ZJ-T&9_W=d}>r(CA6TdI*@thze&wu^1WwbHT7=sKAG&I2&dTQO6 ze3DAi8)c00#zaMubX4AG7g0S>9_c6;^(k)DF?3Y_mpUp(Z6lcMMmN&E?j=p0^Tp{^9_w$5|1Wq9jZ;Adb0P0gUNVFp-K)NGM z$HY_Y@0O^Ol|;S%doCc3_G)s8;Sb{4%73-__;>fj4fbtc{Rge{99Ooue+BLE;nr-UIV`%} zTdl6lGiQfu%6Hny>zj6PXKHFwoujo)HMeL7&$m^d&kfcZTF+~l^QO=y%x$FIshjhv^A&9RYryl)^h9=KgAmp?6k)ww5||FAhrYk$mYPVQ>m8NG}h+L%*J z|HCPEvd$qkwo^ZRCw>ZBobjZXW9WEx-P>Qidg8rWafd~XnA=EQx1xr6Zqhz=#%r6} z|MWq%REWE}VE=J-K*##l9ewAiORMnKmlqzWKCS9mS419Ai~h{3CTk&ebkn`6wPbVa ztKJ2z=|hj0oI)m=0+*h)J{WaNEjrA{IyhSg>n`W?>VyvM_=2H=>3Fxdd_$kpzE{ia zRNM4)m}4Y&BC z1AO`M&1&!u3l8SJA0CYFb0vUZU%Ldq;s-}yYw%`tqpcOTYrWy&KU7(zD6Q>UX8kn(eUe9zy)!7$xR3R?z|c; z#Bm%6@B_?10D#eqtM16Ffp{&T4p0}s2+uVH8UsxMjN1RWcMjW#8yNDoM#l>Ab#rlV2f!*PlekDZNNs<3xm2eM36qgZs)gKSd9 zjjTYf1Qu1rE>3DEixq?fwr!xo#$bv@Fok(@!iH#0sJDp|&fc&K3!8C*hon#*s}2uT zk>!I~mX>xtVuZq$KFh`y26(ct)xpBWrEgif=H9Gg`Do!JznpdcxdofB&|BEQy)#>A z4ivPKRmCi&Ld0ynqD1F4QSA0MJ1eCqzBf8>Y}8RjxLhWRj`1x8<8Jsh-fVC1{mNCFm&Iqys+t{Gh?x;At@=o-*@r*lo`*EpYa4(YrV0q7jjd7*Pbzn^|H z{Z9IQSUht+0QDV~r^l?m=n% z^Hbz~$v>Nx-#k6=wUqm0Q&Fwfmw2YH-vA_D$|ubiofj)w;b*Dq=;>193qR4`J^E&! zTpV=f#Kn zOY7eN>~iWP*^Ci~CgnWUSl_!RMz)l4|L{ig9qT6YJ^P!97h5*=k$3@9o$E87Z*>`- zJP$?##6Jr(LC_$Q6f}t>O;emE8VV$-4wW(L8WJj9M`frE1tV^xNoT}KQeA@4KDC>) zZHgOhkTmjssWa-Mh+aNvnsk5rV2lCD@LvDQz3_XTBcp4{abAO~I)!invvOkZANKj3 zLfniQK}vW5ibeUlcFueSIw21SGI15MO!^TwQYL&5A0slVqr&$%i50v6>WH{?yTLZ5vldI-PBH3iLf15cUhS6=(U!yV<~Os&v{te+&{DZ&dy@`)^4Kj zicLb!(4m@(wHKRTDvdDj<5BI{y_DL#%5Sxc$NH(4qc3UltI^u@;1t^Zv8uMh-p>|V zc%YW;VmoPT>_&9)lOp3FsT2OP2Us=7J+Gb}?>!K|) z_%Sn|^Uk|V@^7bf9wlv8H;kpP%hI%D8#{T6+mWWB-Z4IA_FmnT$m8 zY!`Jl1&|V;m4FLCuch=VnjWB6&P)KtLH%_y2PC~V<^eo_{6GP~3n&a=Ow(WW==H8N zK(BG-fC>P{Y5kK`^cuzk48S;_$aFbgTLO^AIL1{6Y5=u>IzU~ZK7cvqKf`pPo$vn9 zllPCF=3PH|-R_n0x-zj+$bu;8V9PRceX}f$eISW0w-r&$#7XTQn8fKDE{I-KV zg(cUK!JbUHd{39LtzBgpKILF`>OTdvj3{^7DvK z8Nrr|Em_qq%UG$6o!I4>3BrLvVAIBju?UL~9rIfZ#$fSl?ALey=)b;Ok%m1&AqQv( zBoL!Rpy7~E%z?if3r5q26M*IJAJ2l}m@?oG{Kvl%h&H5;NS>*)Lt_3;k<>u*5RAKiyXMT;>17jjX%Gh+Fzs z1I3{ycIdA&!xvuDzZRIkdLNektdqVQk$bgO-&u+FsEqNoK=O~yPB?#%!k%ihU?=M^ zv2*FH?0m6S^z}h0%OYEf^tC{E;F9uMXXuPvo}4ep zH@p9!O{x94T;s$u+iZFr&rM@=OEGx9`qmfh$+KcKU>L#K5iuksje&&XN%a&r(y1Ng z3`u2;V3eaZEybxl0tG`F?IdddhXJGZ3>ftcnY1lxo603U7U>8{1Es0HalBvVCoTK8 zjvE6;GVEB=d*Y8j4@T#bnP4r&7SD{yb%VXrvSJY3;va3$pHOC%v0wO?+yGQ!){B#H}z2FwE}3)dV2AFoqWeWB-p*VYSOv^d5`A(JXZ8x|6p&O8ZR_7FTm)Ta#BrX? z=n(C#)c1C_M|`uwnHxjmeUx}D^DvYf1q?xY4$@N)hon83GLEm?fdwa~sSI&q`Zo)^ zCC1HJAs+!8>aT`$v_m`~)vpOXg+GcX`;Yn38f+@O$wv!(bD7P1P+!}&ppflmjipQ; zu$Mi1*;hNYwumLsmW$-TC8ei6dERO8sBEsNRdL6gMHu*ce+ae{U??wmHJ%g@^8 z#_P45sY+?>RI~5RPTOruv{tO-7Lzdb=_M9bARqHNTbF%!)Q!a)pDlV!b!AU$H&?gD zWYE-(6SVsv#=KV6(xx@uqJ=i@qb)6TQ@a+~-1aoytjSf!X}P;^(axw1*@}agS%$Z5*_4wXg;)2Ri75(mg0flD@PnymBGBKule&$M}}rm4HaXR1dBHK^1vb;_1iakmEK zw2rFbWm@4DW6fS@o3-Y0chz}P0h4R)^j7~qH%*`RIQgzU(3o#LsD`Q1^l84cyEHcK zn{MT~f}gB@_uKJ^^4&^z-8Q4~e!gptwej}l)A=7#bm5Cnu4_tNtOS2DJoit+^~tmmh#i!fcu<8)jS9~x2_@{}n`3tNLp;Y$$8loD1>T}Z+Wlhj zF`Y!;=bqw{@d@lrElwCBVqauSPKeE>un8wZ*!mUTVu9WqyWHRmn_je=m@2Ig3j}*L z%|~XN*TjmcVxq)C1KrtXjbrbxD!AI5PgK;cm>g$>XAo@KK6uwv^JR_k>O<~7`% z4Uam^rZ!Q87U5aMdgrXnx8~S714Zp^Q4Gzb%k>p&^ z5J7NqASEOrl>@0E3C<3OeY3f|~w>02X}T z6bnYv1YLW&-gJ%Wy3)0z>qplN3)Vlz7L0~$9LoY!1pGcGe_&F+vsI)%@^q>0$REw;f7~zL z3(rT(aPeMnciJCG%Wz_`q|7gC%Y{lE5z7se<&9UW%lrB=X~3y362B(5c;1{|NG=MW_RjZjcX5F@quX7b3463hQ=S2;L!dTDM}g9Gd?Qevaok_VsSN49sbCBc$*^7j>|Xdi&y~@&$n#r8`m4bbW;9;zg z#C@GdxrxXx4B5cWS&9MKkWLHaL4FtD43MC3=4gO;pE*b$1Ga;MNq~$5L}0$c`9I+} zOI}6i)QIb$Z~s}cAx#_?>;la9fCE4^-~q}MKq?N_-AG@69D#BtAjcw2 z5{q^-{nqM8Q$3u0Do=efp9SVBoc}gR9`$5MFVZ27eh{}sc3s4o`9(n&naE4gUQP0& z=Dz^>N1&rTE>Y@sVAKcnML(AXA)5fy-eicxsWD{?H(8 z+c2A!uu{;bY%ZwPe$>O3tAe-YzNU=OW7v3gWB3!+uGB=~=Mfv(?Apy)sl7+oweu>Q z#_tflMpR`_)E(-!j0Lp~SK4SVio0lgovLb0vjuDOr!3U+zrU!3#q1Qe6?C>WYrE9; zNLr=U%y-)KZel~`ytB2fP5LvYYv=Z|$rl$gw=wHjW9O&B-mL*_aiufDwZM@q;^=AN z^pTV7RhANL$-OvMr{Wj3wr2-1`{J5H@gH-Esju2u^wcJ5kAVf%X-Dp2u^I(~uO!;uqLe7|_DwYt_H z$&2@ReoDS_eElz7eXnXCcu87e>d~ep{EBV1mhD#5+VV>TKYVHZ__I%4`38ex`QbA* zndCwb`9f}cOvM_h{K+gM`H*#6`6;FWrgzI$o9CiBJ4EHuJe6W*HhK zngasGbW3WnJ<;xBx}uyoi`m7}lNDwO=7fb=6xRDO$2K2NU;)9t?2MDU=-e|atJ^My z^-LekmXEZvRYUD;&7*^2+nVq*=E5;+6vx(LYC{lys>2DHr*J~{i8BBC8OOZhIN@A? zolUyp&QA@l$voEfWy99l+2KbCtk1U7!t`wySns<}m{4Q2F#m@THY#+daM13}+TIOj zU8i!aMnWrA_KD0qnq?3>1;QFE_8D`+@dtiXgcqgsW3p}U64;}vZ}r4C^vAdxzH?mv z+fSG$?gK&r2e6p>kA7>A?mR+i2g*Pa$~xc;Nhs$)c}PM92P#4musGFG8In-N0Ut;L z8QT&}4q&nQ)%cbnjs^C=w)Bb>$+q z6IpOc<)dawy}e#Ybv6$YkIhL>9GBF=<*M$7EN!dQQi0$h<_1M}NS)A6@LIGCm#T29 zbU$F<=ra8O&T-M;L4l-!)Jfu$N5RM=nL^hj{-Lrd9XgUmoN|qFMjfMFk_5^pP#r3h zRBxoA{)c=jOM&u}wrl8&V;aXI{WlYgmBU|><4Og;UhCbtfXbd+Kw$+kinDA}ILlT$ z{CkDKcRteA1kSPv@oGxq_XkJHuxa8rOLfR$kokcgi0^=m2;nU0WzN!A;mm^YcVJBXrZi z1);3YZ{>z=Lt;DTDGKL*8|m}_@n+*t<{9sbP+1S4HFQrPXP|seNSqhl&lmV6 z;+b>~3(FAy832|u{k#38Ij$AY&uNv9xUvYh7uw1+Z*1q;S!RE8Q7Gej zT(iI2uT9+&ZEM@-h!(Pb84FvsO-vJ+U_14BIdhJys%_nOO?&d-h8D4)l6JT7B`x(a zZz1zfskQR;t7%i07i35J#3}(dR8v4!XBQ^%VsPeCKkLeu$XHX8Q*WLZKV5dt@rvOwvD?| zvg{r1vDo2VS&F&cY-#V-Q`e{dpcd?RS8cT6tvY4jLiNd#J?iqwE!28B{nd`k-wyyJiY-ehDB~0zj zjgDV+?~0ms?se6&_>;P*OKCMv3ukp?pX+>;!Y@sqyyuwq9XuA-xc&fs&XC=F$Ds7Q z&xST3poR-K`$)^PrB&eNTPs z(MQv)aa~lki|fPqH^}k`)zn;H}pPQyxTvEBvcexbWEBm>KOnzo<~0kKLrO*2UklsS`NX#CafF zTm6BsB)81AHxFWUf)(M(U4?N`A;QaDW!Q-9iqJk?BpW=L6K?MC6f@_N1^J`5;Opfh zJY5pYN|cRbeCZ%Iw97=c#yf$n^9U5Vb3`|MQ^B|!zH?mvo8!V_?N`6Sh(+T+*mD&@ zno!gMEXwp9jm04eB^)RTNhsyOpT%uqK?vJOJX;QkkpGJB`#+WALLX(oANYsejE-p{ z2zt7gYXiYRJ)i;52xtN{16lyBfDoW9&>rXrbOO2n-GClI7|RUhRR6Xv9n zvPBHhIWF>1uV4j`r&nHGB2Iq6{Ad^Bo8q8){1zdXDYEj#nmf>>AFOzlO_V6c0yD0t2JaU!VAE~a_D_t$M)ctWiJsz~{ zzHwZV;?%CU753DLHaV}9HgD?`s}Fl zKRA|toXW`04B&1hzRg@7dK^oZAtxgJBaVx<$bQO9ZKVQc0;uC3h;j<#LA0IO4n9rM zIWcoyIA>(LrrU{mBaXK{ z-H$zv<%fQe?U!zYMQMUNfIjH_8p`{lkGh@L9mp}jE9BWBpFw&;hM^5t$QHoQe`Stq z+lP_owSo`RvPs3ZY9rrew~0IJvt2`H3Qn8WYAbF!Yvv2Xt*66pX-c&UY~1i^VwxW_ z*p|LK#nP60q{X*drcHbBQY*PBMw`8{ldZ>^nZo>RS+z8Ka%=NOU19vSYiwnvLM(x6 zCuX~wLfBL=)b>3464tqMMbn@a)3l9G_G{<+cG4nlj8-=f4A$JyJ9=JB~+W%wW4;y-9sChr$1|OCQ7)bwqlzu4`hwqtFSx8 z_6i?zaiYhlBJ9+y5^C{26@(v~mbO*Pb6E4;aF(6Jd!^VXgG6ZQ0UvzVrd#ikG8(Q&*a8U9j%3>UAUB>b!ZpI(T|JtEu)=^<0-K z>KvbN)wj|)b!Mq_d=+JlY0upJrbm6Q`)F|si+RPx zhZmwbtIMuyLdHV3`Aefbd3(dPd@rGyX-^jypXEIx;wrw~tNKJ7x9(eUN^LNM@vU$3 z{FQdKOix1w@>6>si{G|?J@3}^rB9{yS=465-qhq0!*`C$aU%YyFwPipTwmW_{$d;# zeq?o^22cyA1JniT0}X-3KvMuC|8M)Ocf163N4cIrFQ5<54;TP^x8v#&+Tj<@h~wQn zl0Wia79Rb6q~@ z2Z3z22qp)3NP^(N--6@9ZwUhEKCTS}1NDFgKqH_D&eT)7#8tFD##Bq`5E%Etc0iC4m^Pk~b4k~PF}k^g!&H@+CzPl@hoA+oa~FJI#0y4$4Y-Y$}V z{v#4RW|55+EyLxm@t&gcVKDj87av57W{rF06*sl2AZ2)VTk>C>MQ(A6bpKG`@J6JHpYB@{(WUinI(D^S_UgU_VCoUX(|E>&@$* zk0%db-|8~_|ITsYx%$dwrKE%-P}~_vos6VB3PwKhN~AODku*SgRL%$n2W6Bs@+nQh zC`)O|BS|`=JjIPPqF>`iInq%uj+2=B2L2iY#9xx*N_m0{Smn(H$l$lidvXDJWiG%a zfwO>*v22n7jtg*#()Scv7DLxY;mnu7ojgIjj2(WrfT_qIu5gwpnX_OD((S4ybDYHq zdAtn2^~eJ^r1L);Q6IdMZsV06aokasqO#5hS*k%FrzC!}5d4j$nH~G{P&cQX=xhEA zxSJ@nzZ&HNfxU{(Sy^%+KMm5el|*jn9omR>@K+0<$G_9eSO)mZkoaBZLWsLVZUu1h zi1(5y?>zuM%6tXD?>1)#@K)s)g7P;L>(jAmAEthMyh)i$08f-ePAnVBpkMx;z$ny< zM7tcMg7i3)BfBmfo4!ryKM?UP0Loh2kVZdfKcs&*YRdSix>lxHVb&wGnl@=pUR(T( z$!t~BNg;K!e%h+y%eD4SCu}9|nY7w&=UDrj{Y0mq?$~zJiWNTA+o(-@Y|^%lyrtD2 z@mSk-VZH6jsXF{H*Hl{Gl|{61yK6J|ZWcDX)Cu-%#|5zf-;noN#A~kU&a-Lj?+W4N zCun2#s#?spAnj1xP;Gf&WzE^&SqtqOsqOZ>sfM0>Yb#JHSWBHVuh3|2J)8L6#is7w zsWr9q*A}g;p*4Br#ELfhB#6;x*orw}tjY8|>|GCM*6v^(vCM{oVv2(eg(coyY>&3Y z*e*@jqt@RCAwPY7H(>P0dq!s~XYrgPJOJAHLhOW4=#UFh0U$6H2}7 zVcM7Nhxn_*mhwgGeer#tY6Bh!J^Zz}ER}}<$?zkc^o{vZ^&Smy5G1Yn?z2k z*JdP}P(v0|=ZX^Vdes+;C3s6&>b@1jRYi1}x>`K*vWIZ{GRMjf;MlS`c7Eg(g+;d< zC}wX~oFyzh$O2x5u)R&Z*~^ZySR$>$CLXu5d3~?2eO{g{A#*V?-KciLP#;bxwS(i& zz2JnyS2;oG?#(*7aD1u=Tr|9~d-U>Qb7G3I6&?Gq)$3-n2D~Tp`fO)8%Y_K@c84&< zbdcqm6U5@q%Pi`tkC>u{A}l!{Cd7Q=gmRDYMaIQ3!o)0l+1QABLYuR8HY2c!aQ0Xv zn_A3+Y59HhgM5R3jKSj9*st$?>wn$Ct03+Zf|mnW+UefA3PTc#I)J4ZN5InZZ)NF4 z(}xp~3ZR$JG=MAM24n!R#Qyy}cA;$<@CPhFRUi-u0%|&@kJ^Z1nf!la!BDRU5C-%H z`U3p{ET_3az<0m(eZsnR?%TTEuUdQ!)xYA{Hqu3$nSLMbYSb;hhz%o)FR4v8-Qo-E zlNdK)gl_S*<>NiF_!58aR$8p%=OhI+C@7WPwNv+7U)gi1E&~Uw&@H|S6kQ~xS-Vey z4|y@#vz65DZhxtJmAvLtP1EQ*4asl)U3sjyrF0luGUK7_(YdJjxx!1b9-{@j`;eiX|DHzunx+D&P$n8lrKKhaS4l@A8a zZ)=>FxMgg#Wbqp3FPC2^V2 zp5lbmlt7?ChvG>k>5Ve9rZw`ZOwwTF8SNY8s7%uKsGJcQ*D;U_2(jZ8C6)^)nZO0)jN&YjGG`eL z3$OX1Adq04ROEUjeSmzAX@^26=$^Mx`SQKm8wtZ@3b5L-i+ z4v10oZ!zk=z`zITx`~i$pvUUe;*GYTr~P^6rbuIvVev%X4gmkrr|%!?wo)F@XF=Qz zG7s_^K;}|7|5DK9!n}z#$*#;_MtTPHBuk)OZ^$t~OXM|y90pw!;!hCA`;=aP33THS zk4uEbS>ep+hn#>kwTlG-_0@bEz;X58@Im3sOB9{w)AwwmU*=*c3*L(Ak&iO6Q`7f7 zqMUgY%2FDAp#7M--WBN?C_4uEI8T14=Z6WJ_&eghh;x$_#A6Yk0BKJI`N7w@Fn6S7 zlm}1ew;E-m0F?3X3tb%m&no?W36R-U!#@QwEt4AeTG)r+#eU2(s+!v#ZD+E+?aIBv}2IJmd>X!zjH)? zZD(v}t=7#=tZ$b2EJLw1?Ch#FY@y2mG0U12?0k4dmc4otHkNxUYh62b73`0SUGiKwYk;~ zw|ZNzM-8>UWZ|lO$721G=d4<@TeNlRtIg`LF%NwQIoGm|d9&Q=mnpaEV&81)pDE1r z`gVjVc=$bQS?^5N8a)Q6d9!>n&DeL)8W8(I9do;idi}k(nz__Hb!P6yyyxN&zSESo zd{u3uX>QT<{HBv-`SL-__|Xv@pSJ4;{)RHe3o2RC}bXc7{A&Q?irG)8$Hjq!#vU>d1 zyF>Z$XIh)8EV`+dY2y;-_My(#yS81Mz8yk)_U=r!EZw{e_1C-F{eSXX_vqO^nNnGj zl!Z(fM$Ld;J<<~LqC33whZkLrPr!&IT*J`vU?)K{bu^jlsjd=Cb#tt zk-T4?kQRO#B5m8AQ+#_WknIVQ#rl>=sX)X5G2`|*;=)RHu~lDLtUNQFILmtoOEFbp zlkt_tb6FMP?FGA-H{&@m#q-={z88EvTwbHWA&SI!qyIUmcMGSuw#!bocYKJkzm`Z&3?v??mx=LhTUV$`t22J zM;8)8QwFf?7vRt9rzWg{gCm+`GzRYF~va_Aj6yeK9J3s1hO~LJ2ESobfzp%Jz z23C2Pm+6Iv!1|nch&$w)4#wT_YYbX=IG&p%XNQIm0v0YhXgDEY z;iQ9x7J{<_G|UjvI6y-V0Sh7>SUCPy`?}AM{t-MKC;&+)=ztd_p^yWGAqhnsC<;ly zg7I(3q|vlO_X1siy5@A9>Dsyhe=3uP&zR?U~dWwfg-#Ng-2?No^`E68WC}rD`3c&5>m`eqY+- zIYCICS)&2O2sD6DFl1utf6_G3P@oBj$`Fi+h@_EDT0g0d>i-f@>4C~o9<@X58|@m$ zg6gZzXw&GAQRkO>qfS!2QI_O4AB+Jc8HO$Cz42$9E2DeKactpLQ-0(EVxMsVW!$-d ziV7D{I)t-4v~!jaAR2KkiVMgn>-!;f8?zkXYJO4@?X)f_oTW1`5$U~XleJZ2}BR(rJPv_6t zLstm82f%(DFR!B8fRXK(ITY}Lu86GHF$bay@n7Y+M9vIPg!u-_Z$TMXInjsLQRrY} z=l>pMU*R}$z&&6!Fb=vXNNRfo;%OiU0&SpshV(SV+aiuS=7UI6-$>_)IQr}lDJLMG zgS0~`$SVLn+WG2dtO4T4^S|fFC!09*N$2N+6U*s)SW`jY?T_c$su*{pJCPNjBieLq z-M>S-zCC-_H*!*x8#;8bk#K9({sP~WK|FKRi{m1WIe^ws)y z46#i-d4w&#>m;=3+ee#y{eV{0)ucX{-9i)cw_z$uOJh z+i;rg)254jwt=;@oPis)af@EF(jV#wGg*6lKP@}!S1pbm%{Z4Sqk4!L2OVeo%e@hv zc!$}X+6)pJwt1@Mo7I->KU;@oZF@~Rj;{Py6+IRZ_f&9xmOj`Y0o%yQTny& z$lV{*Y*9z8_Vt_9`X}?N`QkXW=)O1B*&Y?tSuS~nyX*TpvOAw<S#|{9h0o8#TKrI0OEBL?dz(l?7Ku_R*?Y@NWyG>g1HfdvToRTx{b%n<< zZ*fmyyJUXYMt1RNA_aInV!h{aVwPx5jQde$Z`LM=$1-qYUpG#i^J$Y98>h_`>8^Pd2Z>9I;5Nlq{gA z2OIZ9X8rOe2$dha6{hU`Gj3}717+|`qdzcw8D`w0XFb9mdCdP~zGqMKE zm@%wE2OV=*bGVz4z{Q@2=MG_i(CCovN-5Q(gUVs>=EL z2*mMg19bsRHC@sZ3?pQ4MhrjY*9_HijLISIN$h6sJJ>hK|Y_<64TR zgi#OF{}K!vqa4|#Y!4Y5^-`Sd3>e2Iy-|i_$~f76k-_LNQen(eJ`VH1hCt3BC19%;OQt$18-NbTw;}H|F&W zh<5@80W|>F(i};eFG+lsKg#&yJZR3PJ}2`T;>CdXNVml?DUa$CkiHE$&CXd+j^>G) zAqliLzrF`R6yirvAI?ShpYw%$g*=qEP#nsK9F*t#BCv+!TXmp~x>M<`Rh%(Wx&Gk?^;)0)g89c9YWlGb=DMvQKP&MZ zo7c7&Go8-EZgm^R;(oZx+Wwl0Z5VJwn;zn;1@Eb+&5jwWC61k}jvc;T%g`WF%YCqg zRzHWxXS}mtomi-z`t8H(TG2+$g{fH@Db1GF=i_hmRmU9d!YWo@C+tsrDop9nQY~s7 z#a69htXhVPEbN!jEK7nHTRGx;_C9!cv1KzyiDDc>OZTGeu4OG-{aL;8A2|MpWVlf3up`u07=kUk)%WzOduBr}lSm zvaddA&R=rs!nkV0m{A|3htwG}`u`5S$!R2z9>@q}0l*HlD+OPdN0_ zTp^$cP!vE9r++r0SJgie%RthnAbMQ=laD_0e1PgeO~4P}0R~8bKVSs{fLcHupdQcw zXaqC{ngY#%mOv{2J?5v^D?@%CpdZj5K#%TNQ6IPAkgz;13`5Rfll6~Y@cHYb;M7Ro*F4$PDWx>Ltk|C^H z|2S5Q>XY`z3|etKE(9+pydeqH zH4;iXQ3{fPf#W}tNu$?FTEGR!0ALXM*Dz@~ZXi$__$(|Mj`P(g4HtpJCmFQ}TKk^X zJfn5)&6y52^)E3fNcTOXHS|MUH`e#1gs+)o$0#Ap{z3N(L)?nlo>K2MKkItRONn%Q zRekSB=orV>k%&>FGPH+ei%?DS?0i%jw!N;tra$z$KN|es%#E)eGLK!jlh!vA+iXoQ zYXuj@xCVD2&T)YzY-nlD7M)7vn(^EfG2=#;NRdrl9jGi%g=q!y@SNeSv? zj5NiKK=FS^dgzRfiQ+WwHOd%c;FNWdE@d!m3`w>WNE$kll>YZ)LG_#d-);WA9Dv++5unbEw|IJSsD7tH(I2#&29xHcb8E}%>ZXG^kkwn?7Y;}Y@sB+eF# z_?B4ChOZP`GXO*o@kzF+=&n{G9*_7q2WLxf#yV(R@;;bFkjByVHT0+3!G}3G>u%WY z1@MKVuhH)U`&`gtXkqmN@Y=KHL-}lW&Px2zB*@W_=Yb{A=Q1bzv~@%J5O6dZ`drMR zh<8A}B*y^r?VRNT8Ea%MiCi`Xb#9vM?l_$36h|7TgcLO=%$U zHA?)Oe-dPQqy@wyfy%%I=sY2Dd~+-$_xZWDKg}mC!f#}co9dOmmsr1|^R)Ii`=|w1 z4Pz@;w-uUS4bUPN#%WbA&Nam*#b`M?Tx4TEhOqmY*D1T_G-DaQ`&k=UzPc83H;+~{ zs<$?_QVVso#Z!o?m_^-~D^3e6KZ3Qbdy6eOc$PiSWnr!M#__ir#;g0=HDke9Bl*ld zN@^9oe$YmbXsk^rRYhAr+e7{J@;%M+?Pjg>kQ`df2&O!HRa!l}bTNPR`&z=&!ke}1 zE@=~=?F?2Aj#{OK4138&pPSEW9`|L3nxAEppX?XY)ZWjw=Pt^^?j#Bm>y{8gkNB!@ z=esE%$`{uf@2SOR%pI^QyD_OJX@CLtS5`V|iZ5@VKJVcl{P+R-ODxP;uA9>=(V{>GBd;f=}K3 zM?accRVkj>tno8u5`{ulWww zFPpB8Xr5T{QW@TTgqLaaPjmgsJ?g1=KlPPMPkn4Em1~Z?=}Kq$<=%Ws{rx;Y`(y>a z;FzMObhAqF?ktF(+`p!&Le;T}uW~n6g7f4@r=o|ymv7qtl@|eVZC2wFe&yP}a&3R$ zn_xU1pWxbp({(Ucbq8m^A|+6*Hx^{ zn?;XivFu9dGI7$=#ms#-*6H7CW>ZSK3p0H}*tteYqW7-6qT2zLt?U`gx~vUh#}9h4 zd$Y~_doKr@J!~P{(9w-uJ|4@yi_OX(zY#06JjMwX-a3R#**I3LO(Yw0KS_Ay9xoKD zZ)d*SHnE}G94snh9Lta~MA*LGlSRk6GuPW0Se5dz!aM8}P~lY+KX@C*CLTS(R)(2{ z`ax#?(5-lWOy|rj-HF9Q?`*EjTC0%Yp5+9Kygih;SeLP3s)Kp&&+hDgzF1*A9bdV& z|9t;|;&@sJ806~kh9s15q9i1Ncs4?5C+Oc3gtAW1zbXjjou~jwsOUr`NCF0YI_TdS zg#RmEYxEXO3t)izm23Nhp7$TEGCGb=b8WPzrFk&V^!cCUy_TUxq(1*M!}}7%U(wu5 z-FuDp9aueZF?ondo?9l+{sL0@vgakybuZZ&@E^VCihuP)hn`1z#&$5w{}h95&87a; z^6GY&hpEe=@9IchT}S91aI_bvwUnzAx;#M~GQ@|x*u*QfJ4?1suXJ1TgzGbH9nAw3 z5Azw!a^*VWwX`m@0-X5mv$x`h_#|4XP2YDDE5YgWKXH7WH*8q>tYm4KMD zRIe-zdhz<}(4N!7f5x?CNH+e>JB^Y?$3k%f3Pv3iH`;4 zWOcx=Er_#SkHuaC;K9a$-vVb9Q1A(78)@fk(VoeBYu>i&^FM7l(N#Qv%@Bt^kI@#5 z_@X4t6@{&f13qv_r#EAMq$7Fl{fV%bfbsTZf3hoxKR_HD63xvdKQHSOr18XAWR%5_ z!{!Q5ReBuhjAnOBbfpf{ypX!Isx&wA?5kG_Y0>~iXM_@A2(;)#Xl{*ApEClihqywmo zHrfFWx}(55=y2V24zD}XLjhbf{oG<9X93iP5wHn?v;)hM<5272bNRLXXXbr`mVOJ;DFobG6Ed%c|YO zre!+2Te$D53e}QU^Rp}))$ew8F@1QvP|G^?jcQ&yMROAu3Yo`lVC@P<3)8>vq;@Ue zNVzj+rF#7R2~CPgR6|GAWR+IT5!5Togz?$@_?xRUvI0APFwNNhRO=MHPn|NqrZD3t zYvR(r!<8_(xO(_VeYJH+4c7Z*TQ%>A>e^IOdf~e*5%TR)KeC9{dz3m3FP78yCv~0Y zG;M@WA+`4K>MXQTjOtb`T3B}GwtBtoIIX2kP}}{qLp}E(fsc=$t5hEs&gb{Dn;sAC zV+y@uG39vkt4TTh((jP`y;88*CZ+w2V|?~s$0Tg&G0b%O*Un1Ah^8k0XWis6iR<{# zeO%(45Y=Mj#WA1;`3y2XX+pfII;H8}j*m*yt++$88EU2U-HHfHnZ$9$W{Yqtm7{;-Nq{ zpa;+k=mYcv`U3-j!9Y0hb>GeZXWvcn$@0mfI`o_vdd4O;*nXTn3hO9l-Smtt85%F< zsJ%i=Gx8WK)7phKcvzp!EVq)i&h&^K-4VqWEg8Y8tqx&9Y8?BvS8nEAqCCshZ;ep? zL~XXc`6+hbkeQ7)hqL0PWL7DEURHgtjeWDf7#n^kh-F@tUwC95&ib776kd&TXORb= zum&#+GSj6Ati5%gFt5-E)?rg=wmJT=aHuieT}~*pr#&kfwU77q4q{^bAYn^ahj410 zS$O1IO?WvF?|j(o{2&OEvW*cI#?@vy=EMqf`gCXGHntWTMh3IGGeQK-*TLK#eG~%X zx(knL+@&&KQZPD)KjO`XMx)LjrP83{jOd^)g^<|^ z>Rt$LPEc1v$mRrfI|O$ps0$)s(5ZvEBSLN`sB0qRb%MGnLVhPO_|vl2FtMPe?*BCyGN7yqv%Q@IT_s%EFFN&WZAngbGgl|M6u$up?A+qBQFrgaHG9 zLBJ4TC@_r5d`W>WDuqw-V#A5|lG+`pBISBkQvBFr3hhm)uR&IB%UY>~`ILC|rx{X2 z;V`Mg@oyyeq+s!E_yeh7uLvpF-bbu5%1kTwvx{x^NEtV3Ql}ebr8K?QO07qIl=|KM zPJB>%q?E>UrPTA(Np`fmKigKfhE%}hFV(8uRATG5izjcrlL|-X6)jbZO8rAmOI)5d z;>kDrXfIA_!1s5=rPVuLlpJV7w40ZRm{`2<4Ftf$|BIXMplk*7NUivZFeULh8L7ukMM!RR1T;l1ct_^X1^wAB2|h6lQYZ~;3KxPapBT)-et%-4+N zY!e|hjtekFVZNrBvyFwWD>#^6?3^tJFyGEu=W*}@GjjnLR@lm#b$-VdVb}MC)aP+t zhy5M9?w4ih4V$zM&gN-P_8r5k+wu(gMS$bT8)xQhYaBXXV=L&;>(JLm!&S3&uqXRN zoj^PQ^+%%YH~_CgYXC4FaaWEr!`9*nE+-m@g8m(BLr@0C@K1uwXy>f?5x)StImzYC zv9N>A@&Ix+Y#UjW zuzLd?gATUT2Hj_@K5X3)uZ;50)3GfR5U+(e*`bU-<&z9^)C z(RmxbW7cT9z9)iz9Q640>Ge61+vm?E*G2wjXo4O-7suse9Pod<#+k`gsH3GhUyrfD z^R%8lkErwa-_7Tur*u&=+*}5v# z1-Fp0TDA!cX2L@^>GmDB`nKO7$M^l%aPwC^OD? zQ(TLlm)C5}skl!(tCVloQVDf;DD{F)$=h%ED2q-zuYRZkj-{d>B;VSuQ)wfFNC4AyfyJskQZ5AbCwtfl6Z{<_^URtYUbJ0vs zZ&^*%=Z!Uu>K!Bp(P;~mi;Ne?P5m$ z_0@L#vK>?SMq_rFntCsh*EI?EJ6?W~Qm}U|Q-&JdDRdNe4gFu5(_`~k*`hUOfx%7H6EV7mmk?k=Wpz<5ymwmwkyC$q|SCxW77cW zGyXcZi#{cAd@B$Dpg;UPvo^n^PneYFYCIOHdXJ6tuQhy_bawhpb9KK+_GmdL6}V7X zx;plR`1))KR^y?Ajah6KpJr{zHid_YZ9SvJ*ll*PPzReh$}vp%c+$=fYR|DcEjht- zI+mTfnV-F^eVQ%poW$1un8f0w(roz9SQc^5&JIm=>Vsme}vck(>2q%iiF+OJ`JAY>= z%hRnY%XBOwn;t?RyI*85o{B$WzrL<<_OCNEi{l9)csbz>Nhsk&Nk~E|CrU#S$~Zwx z58=PdepN+T0*29lDGNrgkF{8U%np+C^3awfrD{XF=@N1C*|{psm}D37ch+@IPceO$ z0GD5mOC?LBrx}s7uclPW=M@durBS0Qh|fn)m3obzO*2Ey_|$VEwFpq-d#0=~dPv+uwib1NPKev6O>j>M$r6lH$~v7->V2p5g@RXlSfT(&%_7 zPJ#4>jZqKjQiAjZ3M47dNR!S;lcZpzlT*LfMP*X9DWxsxDc@)#<)u6ZrN5|Pj4V=N z$5K8MpZ~fTjZ2Lm!y0Ghxqxr;!xs#^&}n?4)Q<<}h4=(;Je7cO=yJg)tTW;(9Gq>k z8JrXNn9E4Jn|0qOTX#sjQ1p446Jdkr!MX=&8{#ew&iWkjLeOmlrU4V}oE3uu>k8l- zE}1KOfcP)ap9k*~4{j$n%HZE+H0P4|DO(ydXPt`te#pB3+o{Ma;YeP~ECT7tKv`fh z@DiXlOt$O3RTer9UYu6^OObr2$Ulne(Dw~kfH>vhyNvwB%y!82NFTRjZ85vPZzgeW zW;66|khq7oJZ9aejMiqe;@_6mxd5G0b4b`)i^28@WMxP?7TT)Mx%7s-i}Jbb$-Y_( zk@kfh22T1hLm-2Y&VshRfyD8s4(l1{#{tuU-bi*%m+lB zoRyTjpV#Z0GIZ5h_5H*O+T125)C)69 zu=H)ch4ATS!Q0hCc|W+8I`zaA;d($JE&HW)%7Y(Qv8*TOnvVQ(ov%}4k6N{Ol;&D3 zzr5*saVB{ z3j^dC!yDJX61=V++L3NbKf$D zpXj;Q6rBF9JS@j!dBwKJiq&(gDRHh%zSN&7)`wPQR+C1iT(JrAv@ve{l=^1V4f9pg z<(~10IeH$GvrS*bmuS*WW;)P z$ahxwD#Kc3m#4NarNlg6CNG)clel7*m(r%tF?q%HT?sL!W_+f7G4gw_62?RF_u|9Q zJ^m%ZxLU-71saLenJ{YRXJNvepDWdIyqbU?zyl1B0Dr&={Krg~v%WSc(+=nWbObsB zp+GmF2ha=X1K{oOyWba;{Stz4`%`7S!o_Q~r;EI0h1llU7BQVUNpxAWNle>+otQgU zYcbcdAhF}J8f;tHw`_dAaOU{v#zwcu$(CK5&c+=(!CI9w3+EcOWo-{SSgCqjnYbj9 z*|&(o>ZZ?xjTN4-N{>~x^F}M-$8~te;8xH4zMG(CdLfk0?O;Ba9jxFoGvmi~V3n@l z6!x|3#J}4If3k|Xg(Z1ju;}K4g)3<;2!Z#`u`~;I!f)&}fAZoJR&7vTK4UYxUZ2mV zCqk|Nhsk&Nk~E|CrU#SFhKi{=0Re>{Q2fT z8aMtEeq7Y;)4itqOZSxSBi%bUARFKgDEluAma{$#Zh!aX zLc9ym73dE11bPE~0s65I00sd=sO*;zjQjsdzpZeoK}=7{j&2!q4w=h$yrXhbW$z$6LseGd`x(@qGO5vTmNR1A)lK86MNbR=WU=uT+lRTg2)qSzx`z6)u zpwB~OJ5Ds0TBctkHZ9>nLuT5;QamZ_5?`&XFIAivDRup!lGM9IJINebPV)A7uOFxC zpxxp~v%6G(i$&tw=aUL{uO}6+WR_g*?vj7i#!}C53i+1NkXh=s&sPeG9xVCH5p=(= z+U_CZ$P+uol07w@CCg-s)A!BvzxqONQ-*$1rJ$%EzO*58>WtLCcL3B05U7){Hg4GHt}kmI9R}olyr#5x|%@gdNoPU~sA zzUCOsKQwqH^4+o)065shLyz;Z;>*VBkN71V-vNCz;$~`Ja(iemOIibscpY;R@)H0$ zHthUEUu$YeSU|o)8|LxIF>Qc^)@GSVItDFi`Mn118pK-G=B&128cpk zsM8#q44Ml`YyXqZ+Uc`%OI7@gr|o~rEk)FLJ+hg4=I4p5d3b}I9o&bLaH(9%j3d$;`>u)8dS&73_RYno*_LE_ z64}Qz;``?OG;uC?paf6~pbxWh0RB^;e|S}a^a1`f{t0!p0shO} z6Uu}G-vGmbuj}XIB2Y+`ql)maapbuQ{%IQ9eMShk(+Z1>y(Y=Mg#8&u{A z%i1J~&321tW7;M$za);e*kxvI=U!qZ@10@mrj};WuDAHjqs{!`>G7=Ldd@G_!Li8k z!K_@~5Fuf=!xUeEV{;0*uu%I0R{L_Wpyeni+|FNx)vSF;IPYs0j<>$W#&&iHKGz(= zwKJS>jq?-^cek5PU*d$AD7%n#Nns($e>qFrx;SgRvazu8$pzLdS9ezYbqMo#n~}A8 zcRcype7S#(&f||btgq|m|EqTvb%BK9PEdD9@OFZ_MnXv^sGB5U5cpr>vMR!!P{|1l z9`$*9)Ws62Izinnp_&ua^%810Q4^Bj>jeEvfI##82)q**WO4-N1O}o1(OgA(t)vAo zK-WJ3T_OKhI4;yn=S1g0?WVR;8_j?PumOQUZJ;hd&vZi|2xtN{16lyVKx?2a&>jc@ zIssjPu0VGnRc;G;LxEwy2;l4b`M3xaKFNVa_&+J*p|6j%E1pT$vg{SHb{BbMS$@h~ zRx0&!zP=+Rc}5jd1oGlyD|186)Y|@-*4EP3-iNmq?MBJ+o=qzSO>Lm_Y1ZNE$Qz4z zFA?n#HDQueDECo)hsgpPpZa%gK3*Dpw}T{J94sEI6hdBFQs+BESm=eTQgGZe;p-<;jriY}sp(jZ?>WGZEAxTf5G=Xdg6pT7ZPr=ADq)~@qXB?mM4P8oG(iv&0 z&j=}xotlkd`$b7(mL3-HGp`b8X^?O6zC z3x-@A%h_(xKiiWqSCQjvtL&UDpM$e%;A&pjb)P5Oc-S3=4zDEJG@u9claY^CoDHum z>oZ^;u)xk)TS9s{<9HQXF|4rQs@Uw{fH1ruo=&&NtC9SXY#kh&wFe{}b2)4tp-d5= zP%@W99GrD5((@oOM6ixReR#bRABR)X=lWUVpqmA3LmIC<-QS5M)rBuYe;l8*G~p1ATrd49_C z`)ZK_vxV_x7bMQ!-$wE4I$VwF;V&#XT}zoZQQ*DSK2nEv-6~g(o~9n}l~#4Ny;iRk znIarpc3Y^#y!g$R>S$iS4i+*#KdFrMxg+n-|3J%DEv@Rfb<}Tjcy29nbt5(Io4rcm zUcp-W3`4bPE?d;&@0zmW1w4dJX|@RK^Z#gi(B`U;^jcGHoXw~-+FVFIv8tfZ_~kU- zT5zP_?QHAS3Ue+9BNjAPJ%@Bv?+vP>OSi9SleSl z#!H%dD$8PF`Hch0q;2=K8b9Yz$DYfnEe^@%ceraebz-U8T82wOeAc4Zl>*uhQ^={G z`Rr?Rnrh$e&!?Nx+!R!8wLH#a8=omnKKa|)Kgq@TaK7H?txArTK625=yG-Gut0u&p z$RbaipVhBlv2=2edj05?-K6#b$WJ8$zJwRVy)pm3DJ(#e(HiNO4b^-!~qcvOtS5mQn|$W#C65? z$Uh3x_^KCj$}2a;%Ll~o6OQF5BER+Ptl0fCn?f30l|R1ADj&I6TbX1IR~o11s4TfYH4LIWRR!_L|xAeJ%aUR5>)ix5Tb7<7e zG(b9l#uOQWznnv(f3~9?^?(LIBcL(R6hQCw$Ln`N-`V&lJ>sE2Hvn&ofA!^Z);$pV z!G`@mRT{THRgNrNOo-YnF79?fES%*>cFu2(STT2LHg9qU_M~Don>gVRIIlcn`lG*! zm2V$lF0LWM!CU*-?$Hj`sa!PkDIdlHGM!^=@i-y$e129fe;BjA@6Os5TFW}J6a4Xp z4&mT;?fuS8=7c%C)Ir9bEbYme)v%WhU^UEor`4xw7HgJltc=LK;`{4w>^=*gX9(6{@&~>4(CS4rM zT6;c~qaYlAm`NCX)02(Omq+-yOAVnV_N}aTv@EaXHB&yzz}gGvW+qYmpB#+4|3@6y zKh=+`AZ{oD1412zAqg0S>F|IgV4$bN6OvHOiQDt0QG;B`}*&4T@39a zhy>%t|6lOqLVGZ<|IausXV*;4|1a@eM)!?!U4ibv|HF4V>mG!>f4o1JasNNbVTH3w zE{CLQ*}F(~cv5HX7AcjSHC^}9f`1pSWhL&qI+XIn__8n9H!m1F{ZkI|_0qW@_;-oz zW?$CJQh8d(3u|zRnV zDMRMeIVu|WWdPCw_)^rzfHeN2G=bs-BadupoM@CG8%k3?!6-*MqkPIT6gSdjlhV$x zr{hr|Y2+LAk~DNiK1l-AYXqZilBB0{h9n!KK8pWigV6z`!a@DjpC+ksPw?aF!Ub$D z4erUz+4h2GvUlffJHffcf?J6T(YcX;;4ttk&}~T4ITo9@19Jh*$$nh;im{dkpHU6= zH=#f334bX&XB}tP*Iu`+iq*LmT1(630zIA*oma}`(77j@H^*5A0Mk$h@iX8={O!P9 z*oT`rTN41U5SzD|v%G~J@~oX;ham>lvQ&O0cM@U zveidBi`$d!!kp#tTC@fxm$kM**?1rlK)#N+LM3CIeNXsg){`2_WVH#5rV z^AE4%xFewR1QL*so%sr(rsK5s=K z)74Y_{^w`a4k5GoZTY9GnSRWwR$016E0!;}GDO4LS2+&K2ZKtga=9Vul$gd^Ip6Za z+G4-54Rf<<cFh!wYp*Rg(YLxnbKzOtQM*@LoJx|oK|^X6D7KYKa0q3*D{rxq3j3}{d@<`*0NWR z)ch;CtJ8;XG+j8d%hYb_G*gE6E%?>`75pY;>!!E|o$`&ZxYgu+U=yFs`>x45TR5M2 zzvOG0)i`11$sbG)O?zuzS$$ew)%TZ#3xnfK>*g2QAwP~WMep-5wOM>j?i5_p?@Y7G zitFl0rutKS=5i^uTx!?IlKrCBK$SUvGwsW{$$+X}f_ z*7K%mrq^;S^D!l_-#{g8mFLQk`{m?S12*zrgD6&$TQaV>V2z0c}ZMemQV(Vm0grFv@{ z^Ll%M4L{$Sjj}Ie0X<)_CbQj`=f3{JhZ&JfD!q`Ui#@~a-5;^BCG)VN!EM=yV}*oq z>z=R*UWWur$tQe`=TBJLy(O7X)qQMGVGm(ly)mp>`Xp9rUJT24>WFZ1|MKcsXXx7thjHy2Q#|yvd90POvoT3k%;VH--1X{z6O- zRan%~E`&X&kJNv3Fz)gnu|fSK@NB0zd-_Qe(mFvuZvtNLI#Le2GeAc_dxEPI)CCYS zJCOyFkkyH7kc8|`xI+?%`Xl6YA{Qhfw-b3F33;8!2T9291a&I}Vt@$L#SjWRLER1E zzsmxZKv@EYNIFVE5=uK!29i+LiE@yH@=jnl^}n~fp>cyh!TL~lP4|@UBi%Q;Uv!V$ z0Ji_pSnCqx|Vbe>AHCW#Q|@Ct^=JroiCkZMW8ZJ6{rUM$IK6Gsre0o zAfO4*3}^ua1FeC!Kzkqr=mc~Dx&qySoNu z%->v=0%{f%qW3PADo?LLtPkz%M_xZt)x#a7qP931w2D{q)Dx#$vPeGh1Egvf8cSss zRFu3nU)0xwf)|p$Vtda1nik$NR$CF>T1{d+3Tmult0&1xO#_IGf#`ycW|na0$^!uSnAOu(K{fKK|ot ztp(uOu!T5uKNjK{Y)j3$?+$S>w2qN=H82!`J@o!qrAmCxozeo#G%vunie|i!}YLu0=a=O0N2Am7Qi`}xzFzF zQ{~TF+dOe;M0NE=@D5fgU!oSYd!0J-T{Sk$v|f<5RnP`4I;2&P7^9Y`!D;z+y57E=q(ex?pe7pmnSkf?rtcBa~P!yiHiqswErp!(o>G z@msds=Mw9`crv@&FOJ0>`dL{0{;eAD%LqPQLR zCq@}~ohc<7tW#Rvj8wXh{y~{PQk1WFdn$#VoJ?poXSh=HY$2t=3{E~iJ4RVBXt~m& z-HybUS31kneJ;vtVkaxb{I8o9_uA<kVrpVd3UH@@O!8qqgG?v+&5rdx#XyA@|siO-3 zY5{eCdO!o95zrXGd*RcbK*$dTx&b|aUO*q9A3*QZfdKmG-)GeQlRp?fb#BIEkt+8y z(%-xLLMb-g3v+sH5c^>kCq8cFkd`&;BHmv5NO(JwW7Av5ifi0%vR(Fg(XUOkXxR}W zHrT&U+&sxu*uS3RR}JQv{aKQbWqB+c)h&d57xI`5>vV!`DCaIbzmmkFJ)@Yrm1E~; zp|1TgY;{r%G3SHc>`ncmCh0mSL{4LQN+yG}gUw{2&P?CwNGL z-~@)t|0RzidVQn?TmbrX!*KS~+!FHtbY98%`mmwyK%h2I7og|)PvMqO&j0|Q9l!7H zhxpgE%|E@i`Q*T#%{JbT-MJAUeRH)L&3L0(ahCOA3#ETw+q~$`g*1~+Op11qvO5+^ zZgX?c+UELfIWel8sM;FPicM1Cd%5(r&5tfUF1fDVPu@e~I?wjB>z+hwn-^={S8`2P zSiI=5RlG4OJq_4tR-M%6VH2s~{W7$!xo~SpF`a{=*>jb4?-D-q5Ag8~KI} z%zvwc>Y+gP6gNP&6pVa|lg`LD>`A5!)K0@DrA%q_Ma7MgMJilZ%4g#9Ul*fssqtP| z+q^y(5Q9&Xc9l8XRY)87uC!*(_FWRzlX7sjQD!c{4S5}*n+aVgBwoC>Y7VS%?%=F= zDe7w?ML{kw>-JWB?^yTR;nU2eq1_^z{#h0F=L7*c{9o_q}Q zHL^~Ft^y=po-{wrI)&3YFq%VV{Rz5Lz&UV9;Iybs)~v|4BhQZZ#3kF3e-rUsRvEZ! z=d9q|EEF#fyg+;$y+!hRJoAOk9ZfL8RDo@U$1->(yoXPg>-?OVdpFk#KC7- zf{@Mv`392O5DOWOG_~0q$4471uMp=T(H4K?>uZ*iy*of?!e{bZs`{s`Z61+0alioe+Vf4!tNujIq^wfgjoik%xYyyAP8PI~3753I9g8R{ z@=n##^W|8U1{c`!bb)G%JPU-qE2e36Mtf`F&ogQnwTD{k3Juk!z1IrqC(KX}jJT#% z@th+Z`Dq^GuWn@H_B3MZmZp4B-vR2O9u1kN&j`77gW8&}o2(7qc3Ydj`-;|mR~GeA zx?>t&S=Pi=RkX2_i>hg)hw7g0iv<6(9%}Y}cC~Aao0jFtYpun4Pc8k7bi#wtorSdD z-C)fYUKY;RdBA4yds+VUtJ(g55SH#rnBZPyhL)vO7R~c!1GQJhTrBp0rIuG1?9DYxfD~k z`AWt;Ba|^EUn}|26;+1R_~ z!v6V*--Ps0TyE5sr`UHZ4Qp;vTpwMPw->6URCu+_bb94rQ?Ai_Op~u9C6=8!mG>Ja znpWkxZ@S^r$IqugZ{9w?BVV!CsDw-bMS0gPclgZ*U+|GVKk#m*Nv7s?*CqCScG@(X z&#bt374j?DyoJ25Y>ZO&>S@2tm2b&wj@{z3d960ti|^yt1_$wFcaJf71m2RT+4J$P z5ewzfXVd@o)c&pfog$KdYJb^Z(5Mf1QP8hf05X%%2C9Iin zjx~r25x%!YvA$C{q4(KHwsMt&|Nj16mghxJ!F5I#;Xti0CPq(X`Px(#ZmslWS+X5r zF7wLkm*xxpV{{&W#Grj$f9hWuv|@Np2*sW7f+S!7_eC;k^je{hMGQjq4_yp?KR=U( zW7>c~pf>PXSTr2x>-tl;2oyf)-4)?ay9M@2^wf6?++vTQUH2@j2QIdpt?5P#6nSd- zXX*A#-!0I|s7cmyWoZ2=u|t~2Qt{`%iXVKQi$gz5BSwupz$C2o`U2Axs+ z5T7I!dRanh>6&OMy!aKZKSk?5NqJ+kOT()5kUVqU5UX7}Em=#simflZOPLO2p}Blg z#g|^<`gK;?8BnY`JG*)RAm*R_-2qmtW*eP-qq&B4ci$s6P<-uKS)5a1q?B%U4t9BW zJzD>rjwJ~XuZZvaH<2=y9wN0a^N!{miZxI8Nqv8e{yMZzenL`b)>00mGb9`T#+Xr( zI+suB(>u$MBs-D>Do4T4(b$(@)J1tlAbTU9%2C{?!$^}Y>5X9Ilg?_FqgeMjoj!Y$>0Ozv7x0%}b4AiwJb-%>^uiPgx5fvnLmTe{u!nisx+O z9h_~VC+61yFJd`cYoxzLe5#qVWdhQYwCno=+PXXRxo)=TB=B!`&iWeI$#J%d4)9g5 zNdx4=hf@z=F|ZWC*OT=ikRSXHabTxlQ`ww6zwaG%;E8mOZ8v0IhrX5+t-VhB4H8dg ztqQ%HnX_g_{J34`j;ueT+zRNyO<6pl$1#Y@vJk(Af3R66ARY_}9!_89DF*RaJ7)z4 zWwt{H{>scjmkyW-Oaw04Im;@@?8v_YPAd$!i+FkHL>#M_gR{0r+#6U1Oo2U}6Sz0> zZ_|0L5{SnE2Y}TA^+wqQ*|Vj0(E8;d{Pj19`3pRc-luDWGe zZdQ0!2E}hv1ubx6cP;(5s0ficQe6ZuJaMV4sh)edJXX!3n5OFm;BF8cT0} z^nd#3AtU79nqhM~DB!*G)h8`Azck~qNR?R|>7Rbqd`VuJSGqdAu(%{TN_@Skq|_+A zS&VLal{J52W@~v*QIcD;QrX-^&fCGRDt5LqDYxj-!6a-?3;(XdX13rbU!nbGPnJ-! z9NRH*lW=FkC{{6zCmUmSu(@%y*@0$u;hxRRCLgcEdPTiq+xMufz`_tAgtrT&<2;1} zCpclf2PYhE8qKWV+WB))X2EZRC(DSH;PaP_X2shFv%vOGgot#U(AMJ^8@9n)h{)~9 z^1Fu#Y^t4&$QmSM53;c}Z}2d{?H_pEHw1!!CO|Ww1rQ9h z2IxnQAv_lXbOO2nU4ib-*GEspdjov|4F9;Q(rWO;&PnFU%Y<~j+v{^Qu{yke#Rr+C=6efC-G=y!z8%V0 z$_=ULf6(C|zc(7NTbq^KNh@uUo_0Od{n0EflcbK-7h7l7eku9ye@Sil(g*CRGiNCW z#~HZfU`R^20F)+~_TSQm9Whi!KBB(`(ovv%3RIrT81<#p8F8{9d&8FEDbq&zl=enD zNM{_2;)b3i)n|b6C~mZm(qB|CI*e2pvy{)o=f5sS<5J_xMh2!^&jqXoS0({INnAi7 zGZ&BnK4_tK&K8e%&khHC)WSIH0itfmbkzW*8!TBor}J@mNtzufX9iFw#cdgoHx?KQ-2vFzfQi6b=;%1j z&<@z@{1&wxam&qQy?!1G5MKp*TpxWdCtWA9_k=77oU?P*AlOU=E+rq6>at7*o&mVK zv_6)ekM>ZV7CS)4nEAzut1xLtxk0of0FC5nLFOrl)-;`0GG@2vaNwb4Zjhd$_H~R|}_ncC%G#IJ1jGLxq z+xnw6CR>s^{`4L`zFiu1W37i;!9v4XwmKvEk2%k?&Oc^kYbzh)e-(SGZ(cuTrQdW- z(7s!wzL|JLb)P$3tLuAFiwK#bKDG_eYV{tk&9vv#YOX4zHYof;J(7ro;dHCAtj3X}!rX5TsRL?lWDyO=G1shx*tg~;>~i0}!ocZW z)v-0~>eL?(Yn8TcVf~`xg>@yW3#ETrq&m_pm0QT&Ao998{_seDHt#qIoQrOK&0 zN{dM~<;e*@%4_G#N}8-zrJPtrPMG1Rgyr{@H+pmOoLiDo)jm+p6qHWh7_(ZQG^41J zcJFx8_$7z@)<(`qEE@7$j(#^vUa;V5!l8ao6pvBQ-a&TzP!)J{(RFCi%bhM%;m>! ze#MvFl8@I$ujD85xe~uA7GoNCaeTs#M~~$jo319Fd3{G=6UNDNrw1uTUX|d}Ma!!|an%%Xcnv!iZycH*sFC~>zxD|C7&<2O0j&aMqjEgRZ-c6^yIEvH#H zw#8GJ6%Z?o&TZ%G)v@!V$^{8~8^00airi&sZ+#FFkChazT_3>mTHFO~er1;Zy{~XP zT@st&Zx$Y;KO;OjUX)dCZf7-raA)SicA>{)j&Gm8Hs9av9;?7(EdcD3xZ{;W7}_c~ zTa@Mq^DWvo`PzKBe~r%Lj~KMCK52gs1`PvaeTL`fX42@jk`{0QG61eXX21=|24GP7 zuPcWkT@WY?cmSS2aR39{|C_6ZpDLAKUFH&GHl<7k(nm z7?Fmx>|a>-Nt-;aqjb_~+C(Wf9o&>4%c2}vx$C5PDRAO_PM0scDs`^aN#$M&gPfgFqEK;fW$xfC$T2W%; zq@4W&B=O2jagU=C%_5aTZg!O#cpQ~n>v_;ViB`<+l-lJwXpO44`RmX=`3Xs#S)&fb z2-Ja4FeJrkylSNXJ#LI;iOu?VP^a`qOd(f0qb_a0zXB-`3>i;AF#V8jd}K}AJTVRu*U zZrB^lii!~x3@By<%&E;;Fe@g^j1e=tySHu?vnb}Qm>txS(NP@Zw^l=Y_|NCenfu-Q zocqs_dY;!+wQ5y$b$3x+`*l?nBdYw3u{GGW5LBNjAOvrH=3s`c_OneUc&~pQzoPRLLCxBl7^8h0uZwkmvCTHCzeCCBjfB<^n z{?xt6fWt#x%5V?TFdZ-ifxQEOTV{60t#3+PBv7-lT3s+BcAUK_}2rc6QWd%_?)9kW1zs zZi4b);uEvm!vV_RNP}|o@hNs=l_^R$xjDIhaW1#0_;haaG$Yw`A%nJg_KYs6U6U4U zJdMVNr76nLuI2{q#+XB@9yiA=sHEKJGsVpN`kC#1yJKz>7pw#r6O^|-GL%i#u~vHDpu7Z1yKpAh|m+URhRt4(;Ce z8acf$o6hM}gq~RWng;h+N-ktPrwh8QrL50l=}DBgX~Cy7x!~hka;>2@a!>CJ*=0dT z**bNuJj6)n;(m^l&g}S2_U6`0KexK>w{7V<>7`Ye90a`B3qMwhw@GKK-0Lgd zur4Xh9kPb?PfC+gQmV>LqNnR_l^3K&rRVz2^74`7?8S#GQB%sxyLxw0dhaN+Advv1ro zS;wQTxtS+QbA@_M1^mB_Ud3a#QX zhq~D%(n^;YYSL#=Z;wRoP4VAIU~7TYxMbl;eq`#> zbaG4<$+6d?$*+e6a<-8(3Cqr)mf=~n#}o&$v>kj~f9#+Q9{F5b&W`()p*vK`MOBap z=UljeM8Kp^g)2xz^<21tM7Za|10(__#wuXq{J*#BK3rRu3l=1T%LPnM)!o!!Qu|-p zNe#b(Rsfiksy`)Ra-Gk${il1aY4@iM9RGrA!}XsLx61_pw}xDsaPiqTUd-7z`u~!J zBg+JIZ+HRuHp7zUBlK5BywJ~n_&_~Jv0v@deAk%y`o#yo@-_FT>L(t3pto#08lcOL z%Gve5)Jfic&}_rCbI0}Ekm340jSA@3&B@aHpHIb|+31l$1%;C7bM-eY)_f&tk-lX= zv;KMQ^LPRPKWP6XUbm$%-)_Vu{VC4cf9k>k{+vTQzSqs(xHB7H#BK+c@t1qs>Yop+ zte^jDYrSj5-}z2Suk~)?5YkbJ;LH8$V(5LTCtufR8c+JIK##iosXdGb5dIq1mSdaq zFAgZ*LxH?T5JwKHa2{Y9ZSv|Nsiw6&OrwnkERR8}TeH*hQRcmdW`||aHm^PE&{ivp zd0JVmoK^;Hf9RkMAb(q~tzdQ7V=ajZ>ZSA;VNKz0QQpJt;A^6x`lqNw_z8Owo$zZio8x^_^mj3sBiDu)#g@ns@o zSRyk1LT-KgbKQwIorfG(% zU<3Dzb*VfbUT>9{v)^1geu-*{^BVr?Z zx6_mbytSB`-6x_)?6ByFe`J3n(`>Qy;32&uV!mY-tXKbAwnI$6(Gg(-BYN}+8y?Xs zc1ZL$s{-}Ljr-OHyPiE_BEm*Q^y?cL8xvZ+x2tyb3A%loKP#)#H_}Su3z&<{8!pF3 zU8Wr??B`OFoXxej_EnB&?PgD&NHZ5ZHjUN{9z|Clh$UyQR+gov^~_~$MRT*by~^5K zv&`k@x0SC3)+dI^OO+!l8<^YLwWnM#M@*rw>9);7X#3b8Qhbps_33;_=@Yt@EXW>a zcF2Bf?mMlIxmD{;vQ?{NN}HcrDYq(~SH4sjXAW3Zi9I&%i!x&TaWZv5Yq>=2t@7F( zN0oQ2Mw@H&n`Mq0kWH;0CejYP8!g)69r4Y$NKL;#p`+hTq$4){PBuMFB4_)LP;90Q zr*S=^N#^Jda+R31N>*b(T6yk#d6HjyxxljalKE7STEM$lQevY8(&zd&W$w@|>CMUJy8FMRn>L?FmI__vrIf>u z*g5u9beSct>&_NmDplO`Qu@6?nBUh|vQ+J!z4Wy_BV{%{Bo7LcWIOk(^2mA_T(Jvo z?9%uL9D8LTn^iuTEp~GRSE0%oY0*!ftk38eZuZ>u+>YQ4+_1YW=ke1C&a+x~E+XMj z%33ygT5oWX z4ayv@T=olH!h$qiO3hoc)u#}x6XbJk%zq(hPYt=Y)>PPYP-cyF2 zpOHw@?7Gm0QGsMmra&^>Ewsy03o-Y#(B#mc>9DHd)Ote_dF<;D-=`3@x)xq+Qnuw93j##0R*)!|z3+8))J70e6>t zQXvWNF46)W=aA*soXNFE&eYgBl%!mkK~{S|BhPOI=02PsR%nAqKG&AdwdHed|8yEA zj0*XFZ5p}uPf{B={sq^TVVm&(St%+9Tj2=>e5r`p$hA>&^`pvbRg?+O*az`eGU)Zz64TGX~h zA3SycHqhZJRQ+SuF9AVa-}4>c5QAm%UEXm;L-m@-&-F|>&38L-Hh*f*sNt`1ZPq!) z-~7J{LK^utO^@jUxd5RC%tM`Kr%BXf9D}CIYnL}4^;*!bp_Rq7W}8=sWi&lX3}}lX zuN|iI=3|~#r=~}nA2MhI$lsQ0E9AulZa>KcHUyuxhEYtQyE9|_n8+Br39xn)ASJ>c zY{1prVHo31NIO|n?#fuq!WaVpl>sv|;QRuHF|Gu_r$*($+#nv8sPa#SEYLxZ!8MY| z8L4YAOG3UM41ZoAD_B%M%Lv!OecbRI0^FA$xjNjV&FE)g3=v>E2lTB$-Uf7qcq-&k zLETGD<+3EuUk4zUlmT)#U>g9qC)LMn0F)Svq35VFTf-Kv;%E0-yiIdmsE9-r?x*B+6{Sl-)bG{ zPzOHu%DMSbAOZO7{KdaB*OoHhK2BM6qA@K|b)mUPNV0s^(1A8S)s3SOz6BH%Z%`CKPrPwO3iPQdjO4J0i zx!{2$%1oAM3-|kUwjxX%tR;rEJPrueY>fLH( zb;K`byRhA6$Lv6J>@;7w#{2Qg!s)4GvSA)Ot7{v%Mci=Z@}0xV#INhjl~+>gR@;H3 z7P~;hv)YkQSF`9Y;!3*(&ZSHJ3el!cl+<_JuWXppN8V0XnhU(yLsB2FrX&4UlhCoU zl4LzeYOr~j^!VCN>6Pp$H+N;EZ1*VH-S@a$v{x;;<>JwjkJE3`rhS}rNnR*--`-A= z22GUfoi8YNeK%Kn{5gv4V3=!KHDbLq_StB5;p0c_sOqfW^xw*vMz&4UeLVhJ8guBp z&ZxGP4(RU0%3xPJ4K+ z`n7>!m zfF6z^pKHr`4u9=m?WrNx7OW-mxwd?+?Vo-SVN&ZJf5Nrx%W&k!6p815%J$MXim>R- z*F1Qeq0jW)WqaDxDALh#qQ1)XIdsB{k@WF0XF5$vq-$=irzh{fCntAjkbV0Y+9oxa z#C&FG>wDd4%sO}4I%F{Q9iK=?rUug>Z;^%$6={iX$+X?O7qr2mXEdg7BrO`yo*Ph9 zAl+<5vd}|d6K*oJaQW+GQJZ8gbF)YaERCmS)5nt~ekaM5HqPYegXd)4=VD~@1RL^Y z&^*dawV~y2FyvwVDC+d9K;Dm1$ob<8cV=iJnQIit`N7V#OlljlWq(PMHY<~CyE2lJ zz;tpWD2h6yUnOP-;jjI@{pVU~y(6D%%jeqixwd?+?K>Zk@2j+d<6m%XCoC2rzHt`r z%EsR>c2sZOVTPgZ;?v)DWt-x9UOm?UI5=Ees$VtdmdaVRc4K+xpX;c*vPG5~j60v9 zFPoYt0ymbsiyL3|_A|YMTwT@Uu53jTC*ZjTn8x+0^xW27yx!(0?>;SOcegGcYcNm$ zC_&_FIacAv?qYbi`Gfsqj}^x?q&t+ zoTIhS(eBc1dzZ_spo30hWG`*XV9Mo9r9*tLCyex{}`SJfc624 z0H+~d0{{e+%6*LliTqn6a83?TKiJ~_XNLBG$q>hKmm!Y)+C#v6F^8i9y}t-~l|Y7r z+y*w-u1%13hWIkTpy(mOz39OBS!e0~8RAf5%%8vu2wYgggE@Oj`h(0@)X=LC|0bf?_3 zO`g8{_w#E@81z8d+A5GdUwhZ=aAlR^e{wRdU!eo{a$t(`_UKk~%`Y$Hi(L;Ynbq{< z?l0Hq*c%&_l3Pq<>Bc!`rvlN+F+aUopLM`oys?uK@Q`vlTpKC+W~a=yHxH8aSJu-C z1((tm_f2%sq`urj!xUvjzX{Z)cQn^Et)bcO{&TZ``Y+1vwe!q|Rw-s5y=d+ebVPai zWQV!Ipl0&zq6x~DW6enG;^pOlO0AW|Q8l@-u3pNKWDm1$ePyyY?G_i=vkk2`a6dVC z>>M37s5`BBYXjZ>_8lG3Y!M0WcTN#2rf_~y@0AA$JPnGrC(GwmB~{nNDPLS#NGA_u z$@VoE+1+b{X}}5}$!%IiX?xlwxt+&4xlpP5atEoCY$`43qXPw-`HSfNYi`)O4qc!Jpt4jCMH9J#_T{Q8&wAO>uWz_C36@S6# zOlEtjr@RIBk890^+7@N6-WbNN-_qUh%h@z`bnI!$KL6Eb{cNpf43)gpTVSMYlc>=%?{;(!qg``oI~ZNh3iZ&oi9~>nf5N9ldG%lV!AC z-@;@|>(O+gmkp8Jy=mF)A}wFhLYIt5q;)-Z(Wx_krAMt3sinmN((ryb=~~&D>@L!T z>k^+qj1F*~XbM9b3=QTMMkmsueeO}a*Mv;ZEJQ{Qh~sK5vvA9%-ylQ61==june3dM z&SeDbB7;2`?#={nQvaHT+-aOeybCfUu}B7)T)!@vmKw?(n!b#DD4tHEqk@U)LvK3Z zzK({}gYWQ<9kkw&&$Z=qZTVbVKG*i056Jgb+Q9KIxVBkA&xMxF0`VM9~9j|2&@AG=3^O6hZ58OjJ$ft{+6$m)9TRdw0hANb(&slyOzd$44B4% z`I-&Zp|un9e#oE=Ab(q~t>6?UaEXNp43B4w&%lRG=gkBb4rYw|MaDSJ!Wi3$OrV_u zV{8EFxz3Dn45O~?G{Txw!(-4D1McUe2%H$i4?$ji(0hO^YGI5Z)&107L)r@BA^`00 zTu#Fkh#vs%2Yk^CU&NgK$xPzSWjkRieu3J`}p!yK^b3aAc1A2_h{w}AWv zdEOwu22)ZKxs6*q=)bkRS zKtB9ss$81|DfJ zQ@&lSAg$lqkBhJ1X|7!Dq>{dTr_{XhCq+*GK$$l6>F~}8^0|`Wr% z<$!Luxmx3FrKnGDQpzhv>3_Vc^83o#)IKGg%*?DpXSA?jbzdq`yoSwSdtgrUeT=@M7Id0h$Wl2kW5_3%9Cb-;F zHjH$V4qvoW;*Yg5JFX(+{?;|L#)dJ(GI5*K!I_~8y>C(W-6iVvKAm`W7)B~BJfJ+- zwq0&I{jsud))jJWO$$2rLoXuS7L_fp=1RY~%$9<~(`4t=2)RvCLFwX&GII0#?d0-_ zuYHsI^fe{h-jdF>zb8$7bWM6NPn7P3&z9YFI%%zWmFzGl*6(W4A*oQ|nx<}>KS<9@ z1hP>LuN*kHV2!C}O&^w7b4Y5Q-doCiyP0)cenb*>T$gqq8Q^!uPnNDR_2s%R@37}y z$FU=>MsxlPTe8_5u5e8%wPnTIRoHjy(o!xr$>Jt1c**&`%j9acjb!J227>LlSWmAckdKGXlGou1dGS*g^*PRvJ7*QTpfBvd zcE1zt_9ByP>gGVFZ1yA>Q}(i>9x>dI?jmVF&_e28v~a!LF4Iz>@!aGd3@KZC87^1v%H!i5%+wjI0_PNi53~$?3Uw$$*X)GAuQmya}-oxqC9#_{b94=RHHV9A(J$ zGza24YzvvweJUB=VmB)ATRzuD zp`Ro42(4q-N8_d+VZ9>z4eT8qF*vmPz<+H10d`gZm=LQ!ZDAsszhB#TM&SQQmDWH0 z1=ogtZNoUK-{gIn-z`qiR|=W^?X*!?+ev}H@-H=Gryl&;v^AuB+4FJg*#;gy@Av^z z7xEr!o(XY7vVYg5;dI$i8YwKb$e8)L z{k>LYe!@YPcbs$;&sjj9IDLG>Equ_kBKmDx4ZQ2J!|Dm95k>Cs%?|&p#)mx%(;vDw zlK1Y_NIheraF22BE!pxR>DytZ0CO06!mLHqCN zK>dG}*KDnAVy@2 zlbqGP+5#QH&#k?{80Tj&#ttBX<1!o+)$=xu?H~3EQHfa^I8e9?P|yFtFYMP1v8{#wRP7S%5exgsNSLuSBBh}(kAEGUO% zpa&Y(iaBQ&yankFdT4{Ou!S)cg}kzmhR?WR637OCWe^9x$`A{22LQY@_56i&h7l4$ z4}USJH@ZTbq99#6R}XbyKJFujyqxMkmH@WX0N!AC6Yvhu7T^guEav!~jfVIVkuh`v zJE%{E2yzF&3-acQOn@`UrCRZ+-V~=hx#vS>P&vv?63na15n0UCfm($;!>*8OoNx92c;mjLb%U=fjT)&BAE?G3m9H388hCN)Poa{MLdE_?1>|Xecd}C@qW!@uV_SmsU z*%SJKl)713p5FVs92oLIF`4gB*Ua-IZifx6mF`d0MR^h5nO)=-(`S;4wF0HY<3V(i zTLW5E87t4bmqxa*L6q^jO*?z`CRZ|I<+9xwX?Cf~(u<~??(o<&(}zGC>GZ21aosYN)rc%m@Wtdq&VTW^y+@NbUesP5{@^M-nd4~H5ST#gHDA@Wr`G)jO#q4 zeZz>fzS3a1mFG?A?U!fL;NTg4`+VE5-9{JJP0BbZwW)p2uS=1wrYGKu*>w{~NNegJ zVNY$Z!MRlX%+C1bppJ%iFBLah?Y=*;@%R=U=I!=}k%+>k{h2+5NIX_q;(G*W=_f_R#vb zT&vGVIs3^w*;B4#CD*%s*;{Vcq-KLYee1RPTpRp-|J9&9HRRg9?T(nwwdHed-}zam z^_4&2+GfnS%Qxg+=rbELbUJWt&izZ$$ATX{|J<3R780lraiIOfl4<134*h4tdz4J?+p5 z)~1%cMW_56PS#9LW}h7XN*X=mB)ATRzv8&$Z?I zwSDIU@_m&yaQp?Xt^0}Y>YC9}_d?KzP4xlm(Qq~IsjH;M3odj-86XP3tNdBTw{Cnv z`!{%=rp>jVD)jq^-DL7}+oSH`hI`6YE)Yb|Z_m`n zMoh*t6YzY8{HcA;r}eLKZFxV#NZwoJ0^`Vmq0|DV5d{ILM~U{DtyVU#)a=m~L*8O08auYvG^k$(z>7U^&!lZN_+BXl>By{2`?_fc$N_w!(Hy;8x(;DEO~gIWU1C ziHz}8IAfd*G6;C4wa$$3sf95Dk7SGx7~?3AtjHKl0O$=yHw$B|1G-Wmj|nOtX6y** zT9BW`03QW14bmkcA9s>)6fdyEdfs<4ZM=!H&I=4s_{^Uo=_$ct_kf@*IUMe zBn%^n01Mdn1(X4R4_tr~NC%L|K`Nqp{-WEG64d_Z2*w~nAfXoP$7++8$KsI zmm%O$?sFRsI(%joLFWv*sGNK84~O`(T$@gi=K%1A^mWLG`f>d!@^jz%?%$4UGkLXb zt1Rm3L{7HoXD;}NSNw|2Ce1reqvgFvnqAlKQ?h;cBh!vi)0R{#YFO}u zJbrh;Y+WbY>~}RwInnjJxoBt!B{uQ2xlrc--GfQLDMHWj z4t4XUPPS7>%D4uUtUa#O`^1<_c!=iO^|zQ~cArr84m)Qqwy(Kzq0(M+m72vAukv=v z=8yp8M86nw`3aiB-bIvwuR*vM@Jkud1Npd@?eqK zvtP7QxYruWM)stO4-cl5#+_7r-4n>AP6OrIi?V1?sis`U<5|-5r3t1I<$|OOYd^>( z>W`8hS*OUZgVW^3UB*cXBaKpDWxKSq*G^NW$w&H-6e;apnVr(iqm*oI-X*o=ADAM2 zT_ydU%~FS+R7!qb)kK!`mG+kYCN3mS@>>=uORd{_n+{)O>;MKPE+2eq$eLa*^k{y-od1ADTF`v+HoC zMvt${729->=7jW>O6(b;+cE0_=hL$mdu-28Zd%`^ocHK1Tmh?Cw%CR>61Zpj{c>^! zd-PTt-zhzcvGs=5kve$^4vG2#GgIhMA4TuE&YKKaCX(}T9>UmNS#%8e zsm-YIf-FB*idwd0(F0Ac6Ppw9+}mi82%*m87%Nbl=NYuzXp#KhGL#m)kxncAY(ri| z8%d||C{ikFF{WQYAqvi9m&k^mfCc6=}qy!sHa`ex#K zIo>bbnc+5n-cKIvPb5!^SV(ZPg|(gQMJKynCQI9|Aj>C4akKjR{`J4P|4d7*cjR+z z`CMB**Ot$`M$&bRo+af^NDY|rzD@t zwV_V+U2ADo1J57etL%-_@2wrh7jWLF7m^yNWqK~2$ydJB0sYI=ebV%I=LfVGGyRwS zZj1aD-+lTHzW9UZe8lH!cqW2AtiUU^+{g#&9&GB_2%`f8zTEgQ9`;z%!}+E{vw1Ih zhgyqyn=Qw9o7F-3wNGx6$HQHCI2V<#?zAv~DL;cZT&qIIWxwSu!gjy1-P|v#&|V@Fz27YG7@=$I!#0P@h z0QG_$@>?qR2Gar6XUqZZ#2ikm3D^h>BV>Sd2HQ^nCjj`5;eKn#!$CG<7zAh!HgHb? z$q?@Z@pzEQqRMUIwQ(J-;Sk7vke33oEZA0pcm@E<_&dXO1wlQt!EhXGBOo8jA(w_+ zow~oAH^ip^#sl_%4%(-lS859q?h*asur47HAVB&wq?dvG0$80ZM?%?D(9g)ZFEE2O zu0qZlQ+T$j&l}#K1U8T-h<|6UO*gu#qtYe)ck-!K73FY|Hqz{l0c5Y#nAV(jTlu_2 zRAz^MB{dhnkY^tLMBcBxK*rsDOM{vk&aN&+RZpJo1#-Jrhj&D^;b# z1ujUf*C$H{h8C34>WOljekIxSRnpl`HkJ3E5E-^y-zDrin-nSVs69LFXcJwLb8Af{ z&##fD?7AygeSB2+F}{f8xo%%dW`$LzTONa?NB1KnefcnUO>2(RS-)m~>0d1+ZG50S zVbE62=4vuYZMo8;$NPQAS}(18I#sv2DwURY^kH|d z{B}xh{(f!nXZ)9g_MJkmt-Y4W=i2hQw(tBd(z?f=aBV#nSa`DXw0P;@z7m4H$PVTl!AumoP zlU-v&2x*r|8!QvYJWDU(cYzvMl0u)|oV}^_dLmEs#iC zfjhj?j;swyBrA6`Aa!EB$<(z;q+V3lANxO{y|CWbgrn<0D2mZ^8C z$ChTK(l3!@<}HD|e!88k?-fhDf*JO_RTb`DmpVjRVMjK$6iLx?0mB)ATRzv8&$Z=qZQuETd|#yv9DmNWAs>eP8lEjGluVz? z*NSS%H{Rcs2fsG`R_E?2zvf-aMdiaZKQ<8-1C=>U`7X{E)N?^`zqH=ty;(>SS z8c*cf@Ep?K{oeE4`XwUYX1I3lINwp}iGFQ{&Ihg{m&Qj_KBqqynaF$9yv7F{Y|htt z>#EOgG?(vb)t`5n))n_a~Dr448-IwSZ|Ypbe(A@_Da|W%Aac)uZV! zKX2K8w%5{HIWYg$KJ7ZF`(cANfc$;Awi!&|fsst0E9}$OB#H@i7a8N;3|KD;QUSi^ zGQ>+T;PYl-j8#F`Oi<4sHCP}Xm!a}b#(@l+2WrVVmlHTAt0ZMIkygV#iG4~onR+Jh+jkW43ovIxmVXjF^R$NbI zU$JP^%p67kiQ0;MiG7a(5tm zKPM^Olin*=+>V&bc3iJ4oxQ{C>bSvdA8qkj744N+w3flm1&n z6~A@7(m-gYWS71}K66bi!Df$b{>`v9DCVQy7cCrEI3ay9c(pBn&!Ak zIytDfT&;GRT<~CL>Ga`+e%XsEo2FFsG5IMcrQw|;O}}kvFU7yov2G)MO=5{XrZ(jU z$zJUSOChxbQmQ9TkZoTsmb#~U!4IQ z)s3nm9r1kTw`%Pn)6f)NI=L%Dir;D{*YHVWw+uMP>GsTKCuJ{?f;;qOIfEj_HQLSg zq$OqBRyDqjuzxE*wlU2AUeKNx@@gHl#2@o&*wg|5?HgYN;=uAV#Q?8F02qmx zGJtXb_}>ktBA_y$D!>Kc3UC8>0BQhW#Aa#(>H_Kkd;kpr=oti~7Q+GX#~Kgt2N(c> zfW|mg2iY`NHivjiKx;r7Ks!KtKu17lKq#OaAPmq0&I{vf2QemKBoG9THIIA_jCEg7u`HX@9VUK%sm)R z4%Ks}#}6*0fu6y1M9*}3qqabmi(_d@>r_&=j7UN{2xOj7WM5B&^3_UHA5Vq6Ug%6) z*+-G!5nE-zUc^(H25eS&PsKDU@Q79LMK_Xz%rvir&giS7RNI?|M1r9F=yIkN ziEz$^3rIw@T)2WnxaGnFB*HTnI0PbU=AsrzgjX(VgGAKHMO}~x?_AUaiGazb3LlV& z2DxYm5`ljq2;W@zfkfaCi(qqs!!3g30*79N9-(!FKiO+-4A|kj$M=oz7~djrWT8hxdc`fNjV2VjBfO z0093;g8)r%kOtW-SK=+S0t5rv0zv>C0G$9`09^sy0pWn2fZl*UfJi`pz(BxYKolSv z5DOR%7zr4S*Z7eFK1>XM%8QNhA2af`P~Gc{x_6og-HBZNi2i8Eld0zzz*s*nv7sK< zh#IyXQf=U@0$x{W17CjBSM&|jKMNkDA3MUE@BMxfPQ!5>C{DxitONbfLpAjGtqNgz z;o`Gxg5=#)SWfyOH^$@IQmhBt9b@jU=Y|Z||9Zb9#l75u9;rTY{+3ZU`KHS%@xGol zke5?!uJ?DQr;gY8QK#X5%!7?#{t7BG(Xn#4E;EU(ppIz)k7 z9ZF1NK9)nE4xz;%ss>DB(Da&Jj`kn_YGt)+YIb-XEQ@*!T3ax#*`WNPf;K?>0q>Q! zFZ{coi`KMaF~bIhMMlKL^y>kehW7rpY3P`sLcN*5#ePg+UuVX63f6N5!rp1F>5Oq& zB4g|2 z3>GX-bNDNm z!eP4tq5xkY?hXin_zr+4#4mtc2iOmQ>l#)8c8EFLlo#j{AngK}1aTwC2auNqZOH(D zJ)RAUZB#isus0A$!?lou!?m#nJxB)fPlAN<=qHEwf^En3p;~A7cb!S#qg~J;rr+p@ zuz?Xh`h*RS=oLF8`rFP;1?r6(_swI-u4j*!h_De6xW#Qu-d;LRw za$a02XJuWb#WoJ$>IU~!UhmzmY*@5i${4ss*-*ABx!yg2_8K9RxFOHw6A`>}zI=?? z&h?qHV560}ZqH8g)%&j8{UT-Lj>*%MLzx}O!b%-z@td3J#9n)7jZ^QqN!D{nX6aSL z=2n(6c`KY{kT$|>6Zcq|SV=UO9%WJ{)gtD~i@eQ4lFpm$`xTa+@7k?|4xUI{ZClCf z3cXRH)8=z0OQkBahJ7^KJ$4}}eX~fdm;SVJ_Cuny89?X9ZKvIjOrn)bY~wmtO(1ks z9c6X-K-%&{5jY#68e95~E6G0dT1n}fz`0~OOS89U%k|$6mOfp*C9UkZR&w20Q2JHs zD_3AnNH<$}NcA2&N{4$qG&xUBl5Gmym%GlnBdz~^tQ6N`zFferH{1V936t-UCVr7G z?nqq{PO>4<@wy&fli1>`Zb^k=ec56ki%G-xjbuH3UT12`$CxfGJ0>NZ@|J!&a$hdn zJb<0j{0RHS6wJEJI3#s1Sd}aCv?ZHVEsfn{T~HSs(uEW4?{Y$V6|UH-*hudR)m3`l%sBZn86Kt^p!BUlT9J_Gd0SN1N>vQ3mc1HYZyb-pR4#2 z6@Qk(IQGB8cENR<0-6I_0$Kyw0NMfC13Cga1404a0AYY0fL?$IKwm&VzySPt0&);w z2w*561~3dT0x$|N=12MollNY=KJtgG*EpeG$@cmaKRNNi36YdDSoH0`-q7!v7OeO2 zTS0bJ%b@IlPIOzplC({$NP5qfp@Sv~bb0;3^uwS}q}6tjtZx!di_b_R)@?-U6>^o_ zoRUmtOg%_Dy_rF-zOc}e6)a@OC5D8M3|f8qIy(2lMH=16fex$JfDHN?%w4UN$c0UP zPkK)k$+3>%q`u9|~DE^)oc`Tllf^Rf`qqQOn>Ww&%rZrhMNHoPa7t5`@} zb_N-7G?MISDv%jJ-6s4xfrPHHa2tDx@YWe3*4#uI7d%Kdd`zdVku|9GY@R5$ys7n> z(zM{6-DvY82CY|okNp}qA?MFYdoDO+AgpqM!v_L?6d(%c!Wtw3hZO`&K~&%ngMg`% z3LI__cDX1H5@DZ<5+D%{xo`xDD4B~=AQ7c=Q3fQUY%a=yL^$Q5JV*pgFaJl`uj)`A z!Yvo>AQ2w9fGMEL^wa=}fGMkrS|AZ#xu^{iQ70F5K_a|!Q4b^nrhR|PhWSE1!Y>y( zkO(#xFqQsqv0(W5z&?QQ9N#m(Uwo(d9`W7b`@(mG?*-olK7V}Xl>k)$&VXtFd}jEZ z@cG~~!RLVYj`xfA*Z|N7fcJrIhiUKkSuoHy1GE6N0t5rv0$>XMUt_;;xP&r;0a1Wx zKrCQ5U?gBPU@Y4FhyfoihCgM)#`!Pa@w))KpW*48{GlPc=)|dxhPsPS^QB(9<7!OQ ztEYNCPH_!rQ`ky>%}_i5cJJ3`dQ{dAbeylhGqNM!c4=)ql~a%2WN^x+aBuuVJk?Xb zhS|;cIop|U9z_fpCr7KSR1@nqhM*S}48w$v>InnDfN_;e>G*1IKB~KxRcY2zU4dCG zs~lf#hJdGfVtM_S@oV&#&puaA^$c(w%C}7Dk0%N6qxU!C%P^jN-&8-||K4xBeWPgJ zf9FY@u=4{i^yCXi-!eQdAEwV(R)`Op7-FzYhK)o$n(&eHF8t^d_CIFD@=lI%z`&qM z{D9zKk~fX{_%XqNdW@r8Uir`Y+D8e@)H0aXf>yUCwQFL&R!-BQM4+vf2T?VyU0<_7 zi2?1jIF|cf9PNInpbZ#*z>ekZ6aW6_qBZW1__1+8g}@hVMLZMOIT8Lt9=NbZAPWN@ zmgLMB=VUO(NP#ha0vT>$jHw{)M3t8^wi8vKC!>wP7()amAd!K6(GnSBBglsjp^>$K z@0iFK8w-qKA8dfh>PH&+MOM&B^O0ut+~1b~mHv93iucx9oCaOMK z=qu*$05$^waPR6l2iV4`aBUYzKZE#XkdYu~gKa#>U&S2XGdIw~GYohF0KJNHAfXIA zQuVx2^aDfAO>IBilaL5$yjB+E!(=kx0bmK_M?o4U3kIw+6Vk%JpC@am^}_!yPd4Ge z(d>0f(_UWWbZ9+gXGm+=>(TGjVbd+$Zs!fkjq#E)YVJ&~&@DUVjB`!$Fu4Y8>zd4M z`)RoHIP-yW;@U2A@s{V6Cf1FWXF^kXP`BZvM3)7oTT@(=4_8Z3t4J?0H+l&jGNv!B zey$kNAHS%KTqh~c^E1trM`fAI_r0zt`|q0r<6_NL6Q?K@+T2sNeLbq|{(9A1BF>Im z{%n;}Xz~ye3Y^p`pIVCVscxk7??siv?p@9N$P3gyqY4od-jSoNkCG6(HFVPIHMGIi zuawirlOu9<_Mz1j^7A~CawaaF_&wX9Y;C!fj9!&s_8T~qd$6dRv}#>fxxlAt()=+l za)ql$BFAqoP&J~+a#>6X|r{<%skl1b*%p0 zZ(r>|zxsh=rKGHfx-gHO>{(~Vq`y5`uJLO*c4gZV(%@DpS||E@@nsX3|J|THHDt^> zX^B5(%&@ry0QhAu3@8Gy1r!4m2f)bk@AVIZ>oo%eX;}4m$34&{OsQ!zW9k1*Ajw+=S_4D0L`oX81>2IBmkZUC^wEct> zn%uGiowa2wjTjwHgXOM=^ZMauH0@-)Vnar{& z%^j#egS0vpMb-Q!FesGx%-Ek5ppf!T~M)>B!4$E@_lfTi-y6Owd_VY3VDkI-VA7zSg8?wf{yvKa`tf;(*dH;j4IF>Us7>(Cs!>H) zH+rG|P%_26&d|?H^&tb_EBKuKFH|NB z&fnyN>Mi2Q%eyMe=9u1}@4lcdm1fT7ox7y-y`B!|jZIn_{3~YR-e`u2VHteX2cCzs zKe2v(RNr3e`pwQgZTK!8YxuI|r|8q_hV#+vJiddomCCrmzH7p++fDfz&L{YaGSPpu z$ys9w`<4Z)30$IginmkkfWgxbt}$6}-C+hFxHye(=N`u6c?ZC(@wyVt`GIcTa9=b$ zuONSF4}T{R{+LX=&s(<^N2!&=vOi?d29Q5s*z)#`|BdIPHSdo&wh2K6 zvzWl-a3-)W!vr>rVghRgGsZU-;LSuhA0Ux2ZWQ25&v?f03-C#s02M*sP+$UpBQvhZ zfHjREr-_VVILPH0;DZKvFdsEoAUy>1CWy-*;n$3@sK6M!fa`(JxVksj6VS~S)w4A5 zJON`%$cHDUt`~&s8LmNo6M->0gFY4Puq^Ok2Dl#bPsXO8FAr&$PO1FebkL_m9P1wo za)-zm;0dUEn4u2dfPXm1Ss0TSzu1bqtVqX5$Y zCn3EI^cO%1VCQ9F0&YY4XOS_~0l5Thq#QS5l?Q|RkTWyb0$`dEfNc^X4pSR^o_H34 z+7=}z54l3sJ``jyJ{9%db8z^Z%!-9nU2c)aXrm+ z;BQKa&!?2-byvt9y}K!2W;Es^d*4#rd^V6^8;OnW9m!0fL zR&D*D&o7%U?EkYgW#V{g&lXSF_%@hbcsN5k7T=eh*r1Hm z&77olqI|9`_pj+M3GJyN*Vb7}7mCky>(Bp@^scoZJ8nksW2{;u_I4=veyPd*i zpAcz`?{#u-y(du;HV`wMPe4Mv$?w_Lv}|k!DKPaRX`bds_6==9D=gSR9d}>k=A{-T zE*Tcmuu2B!0qZ=+joM3o8q`T=2y-F!a4zSWfN=6)Pa%?6Hj=D+;7FX7W|B)upGfMR zk=%vC47uc$LCo3jxl?@vQjFH8g`zWPp(7%D`oJer^1K(ZU38c0;vUX5I#!2_FI$P) z$R9|sDT<6#5{X}*u7Byz?LXK^>mB)ATmBwr6#6+rkI*{CpRC=4$vtBQfJw0WGc%uS z`_AzDpQ_UO$Dea;>K3!36`BQsF z4gc?4n>MguH3b3I0Q}D$)MLOn>M*V8F^#sGPAi8}3uuGL8?|)*P8L{q30MQ^T7tT-mf^n080!hDFPSkJhC2A%8WY1|&8KtDI!5pwFiy6p92nLW zU<82QmFiozSX6!90>Z(@RbY%o1a%Fjv5^J%EkWgk&?gPg|1_3?{9XcM7@Jex0A+BW zG2H9R*ctTjUvB}&0iQsBOJodzz$ryR8b0IdHLHW{1ORF14{{O!+8ZE(T_Q*a0B~Q4u4LQc)!8S)l@&L7GEpNBqrct(IAf;R{}WY=+(9nh-ZKf?>`;tumUN7?F^9c%!EXULtW_S_pR^#-OlbDr<*>ssM5X0 zO0r;CjIzr;Th18o&b@8tPVO47D*lBVDVDde5t!RXg}ggWe2&ePyAA3~4&Ml&^`D(l zwzP^<95>cbw!Ph|ygN0Jn|k1-e8=goTs?Z5GCm}fba~FQlxYW<}7YpK_6w?13%K!wU5$0 zq!q0fnn8{h5XknO?#f_~)pXcRTavZ2hf>#tA)iX^lD4L0OI2Du)5Q!-W2=m3B)d8@ zq?DGu8_gcNS{mipN!nEMoowYQOYNISN@@B~Y0oBR@4VC(l2~Mj^lqS!-_-`r(v;vR zw$bs8DI+R9Fiop?i_N&qNKPBC%XKP@(B1Y4HqG@vDtVNyqMNy`l+=BDq;xX1Ios!b z5#8N~GuRb(_De!iE8XSGX`Gex*zd@y7%9|ew-h^cx9()(_G6{=sKNbmamgx2wwgk9?=sq3~6V)}*lqq97w(xYZ3INd;T9eXE~1|J`{hk41sZ+9ZutVnuG6;|VS? zTViYWSFy8nb=X-EPV7(d38ZYt81itFnRPfegl!xBnJpZ8i?nT##4fq&#n#^I%Utmc zWv;K8M($iSlI-jp5^;PaF$`}>dRNzyw^tsLD+dRWQzwR!$TRgwr}R;*rL~IfaNdD+ z8J$49XW24Ndjh-)-SB0Em93ea=)16Q; zo;Xd1n+$8hCTG1TQ)ka2iz{c6!(HDpOVjp|p-*;_@^KVV)il$ph;-5_;2~Ms%1qYr z9<1k?DB@^yi7idym^*!fy;i%~GH1HL8}$1O%2V-sjM|U&pMTE#8B96z7%N=U$=7_djBhq@8}7)7p8Pqt>zn1B z0;-Rh&3U)a=Bd~F`lNmmV8q&kQWnd`QYct?2|c3+S0RjVHtkhrLWwSqxbl} z_bTx&pIh+#ZuIAJTF_|i#ybm3XuA@8VJ zC}=D1?YWSLT|v3eS7!14tG{rt1{EjleA#ytcOhgTmu9z{_e>bY7k;>r?_Ri$cKYI> z+8wpi(7T$><={%5=~Z6NYn)I989%;fkGg!x6^-?04*bI2KHTbipRgCqoc(rk4Bx7h z0*K0UQJjb3d=%%U2ux!cWsV9_Iba?JrHoQfDXWxM+QGCEep^;aE5}mWRO%>gwcF(nOPLTnEm#d_-n6`(z$|c(_sDQQ}B=GKzR?2qPz6Ve+sGS6fvV+KEH5WhxI zhEWio3Gwk1>@8``_1|v-{c4EAca1Iwup0OqGvt>5z;!`?V90^#;Dx5Y4mbj62lxe! zbq?f3;CeLBhNF?v?}M^o(8fy8B|%7lr0KrfO z@@1Y6UhH}Yh(mwSh7Zdas%j{MgHi6Y%!@sQyhZ>D@-uVKO|Cx&bRK^_PxkLy|EaD_ zRg>!0oJ+RGo1~@p?}+x}qRBANZmdP9B&E!nD-F5+oT)K3L83J8$u5^&q_{efb#8f+ zta_1^>~!pcbVPkjay>InTID;Pw4)gHoP9@x(;Gia&6Zqd%f78hR&?+sq2p@NbIuiG z8xJ`{%xVjAk#QmJ8`n!Q<9(Ce4wsOY@As23G+)JzcQ;7wc3+huv~JSVJ6f`|-#+H< z=c$aQx|>v(r|8=+ZisKGiPG_dW2IWc8gh2%BUUr88u4#@ja=OKkSumJh^IfsGW)Ck zB9-r4itWZVXYJ>%CQCP|*_y%DB;oK2mX2D%Ha}jCc~y9fAUeehRG*{5l<2o&@m`IE zRH3VG>ddK^)OCh75N5ayP;Z;C&D3$XA8pZLv0xQFP7wEeqART` zpH#PVSE2gX=k&9{hxA0-aQZ550sCgwpl4fzs4rGqL?@}z>AIt*&{fx6rgvV=7S^8% zR<~GU5X+wrQ*V5;-Rr>BSRr`(DW>g>GmLEFC`~YVV3PQ_pKNU2=Cg zy>wk9an*)nM3$NEpW2p9@v&cgZUr2@F5kEOUar=!@_De-L7 z&0Xx$2JhJ|jvBILQ~+DSK9sd{2x4ufx{)_4RBVfyd)P@QHDqOJUuMs84Vls1Oy<`~ zB9|@%lcFV;klTrCiPOIRB=nOlX?s16WPrys%WWUY4*TwG-L@WNNm+?Z@ChK1%QNZ4 zmG?1SoG4QCb{uKtVP-x*A4n#~yOH)^Qpuw80nCQPP*NhRI=Q&jj;&rKl$2W5f>>;R zMh*hB+GRfMDRJ|2NOj}gMP^K#BUHJ;>pE!`*SV57ki4YlD<-FLFHY_8H#~Uw z=i8m?%6m7h$c?=G3fFJ)e4ikh)xv!@t3AHUTOO6T$Zkb77gk=xeK&Pc37gPUn!FDt zw2f>Q54LAqdau2_OLP&m8lM0fd5?H5@>G8*nf|;J|`GiDO!UCB$(atE3gF=rJ#UQ1sXq z223NcUO{|3SiiN@7ee(ua(lh zf;cu<|GAR#-Vs1~dnQocjZ!IZ*Br`_r2>00;BBS@f0Gpldk=tInn@Xu&k5B~hI&Ry zp8$N#DM*h5gcvD^v@?=xU%0Qs4a2V9QoLj%4nKGzAhvl%IHPr8Gq;P$xeht7K+D!soMUcQp$v(;sgMJg>8Kgt0+;T-g z8UbL7phs@a3nbR1;JDa6Kq&xxnd)IGgmL8U^yQ$;hTLPz9Nh<_%&Q?cr_BUlT_?aG zz#J&sALK%#yhc>!;;KV`ji6g)lzBh&pN4%yt`e`MywAZ)kZ^ADIR=0pxIc{s+J2ZT z@iir%uLqO?eolEf{;E9*{%z|&$0f!+FDZEs-$G_Y43qXnoe`g@KarY-V&uhvs#5f4 z7wOtbZ;|PLP3oZ8M8a#HWY!dqV++;%Bz~%MM=EtJOWH7Jy>y2RCDnErB?}EpC(L>! zxp+iL$=dy7MOqtX>8$mn*WAXYD;H0)j;`g&hVEmfpn+lJ$g!SMy-hqB7rISaYWFO; z(Bu+Qa#B_4OX1hd+zn6ZZK@RU;QV3I!douP;Z-i;^kt1CU#sQfwgE?^xM4}jsy*Y$ zj!g-q(AmAhv1VP#yofH$twzhq?qgY`Y1&({Q;RYzKll{6zpDcgEnhL!6MKmDJ5-cB z?k!heJD5bD@9Cy+nWNxWoEbb?k7^@cx4ZSJM?-44b z+BT%A#ya&bzj!a>lFFvO2|a~Lo%fq2JPa0=bhjAi)gybAFnyT4 zo?dAus=e$fx|-%#Qkg+!dS6|GDW-q4`f4&on|21Ot3~mq*A<5{?$vwKH|8bL8xr3# zoi=#U``YR0lGTUP;pN*2gGtB<=sr*OTo{gjao}gSUWi&5&>9W97d)59Rh3$dQfX)0!;hMtG!ii(fV( z$6#INhCSQa`A;XZyQ{>IZli!>$~Ll9cJeH#V$U+nd$!+_ZtVOG9;EY@56s@ZC&|HlIX}7#NeTSQMozuDWS?8`!{p!M z1Fa?;7vYu%m{9#Cy9YFZ;~<*m0Vc1%>-&s=o+vl|57u4cu#fi|?=Rj{ypMSA@P6Sv z!ux{v04u_(WXpxpmI&*g%i=9|U&jv(-m>^Befj+jc^6mUpTJ_wZ@?iI z)@Sl98mG&gnUmv7-aY3CPMKv3G5&!TeUEV|`U<$_5`CC)&%So$$4q*ltL~I8`y;Cr z(M*@t)L!PefG^W!FPy?HJ@}Pxk@8vp^!^p}SB6$$IA!KlrSE@lQ|5v>DjWdv2W6l~ zsmupaVo+WRibP%h7lu*>UlbLj)ueu&ew+iB(#`#!+UDvW4%DYzp_!=T72=p+)@aycz7%jJdwgVvX|JNDZ`$9F)cg zFvGC}Abl0$RBl=aX+sIKY>OrL@gcOg7O*2XAL}3t6`{-wsOt_$h5XupWWW-DE9ipo z_?p~v+6KBXIMyl9t3cxQNHS9T6UJOl3a+8N<}w~+DCEC~e3-`R(m~b%=>Pzp2>B%I7GE$oE9%6GcNa*tO~DUE{*6R72_vLrM=5Z+xcFkYGN!i z*m)bXu&%T4WpYEZqL;H+zUy#tY(RTy)rTQW{Wq&gTa8wn*SU~1*5VRdBfE~|d^$^7 zKGmv2ZXGTcI4Wno>+^eexLn{^Al+v`ufZ%$81!$LDO4U8XH5_2m^gHQy+; z(oA5>8*{{2>5rJ*$L>nWGY8RiJ69mFcUqF`WtuWscY2z}lrAMjTjwO(+xL~))V8JP zWTY?^zEI-Mw}Ygi_v57QyY5J@%f|?%8X3g)4xPNT)27p9ChVnMcC1O7we7MxtL-|` zdUUMNXhTnW-!)IQ4LwlM2su?IeEVvj7Y%zDMxvyXgy*sXWEvW@qhs!r7iRVv{S5J(@Dm;fgjB_F*Tc0Ow+qEOhX5^4UCE`f;m?Pv- z?}wyYwfQ7A=MH(Ats@al&0g0h8cA5M_vGU)Gc(@BOzh8U2#2#%UO)V(rITvMlpd{q^6Q4HQ+6n8;E6_d8GToL1aZY8xr;@Q_+8`Qn~BD#~_7-!*ibR z#PMGqVUY(*kO-?h{9urB_oDo}86-8_4+NbD1|)(YlpFpB%n=Unc#rYE+5l_;-wbo4 z4Bc=}!vVp7QGhXu{#%vGeg8woD1@zVbxK~hXUt`bxFR`TeAy_yyze4-yyBY$=w#;R ze#>Q?=uw4ly+_BTt~$hzdHs&>)mhJ#zWjx+(rq{k9=PCZiDHlKd&ylmd69e3V-;V* zr#^SX?zs9!U3vm+v>sBzx1+`#YbQxH6b4^E=cl zaUATGmw+<(V?M^QE=o*e8~N)f^^~%hr<7O9DN-q;)PbUM+5F}6*Z-|vsfT(jhwUi= z7G^Jjy%4pYpB?{<3C9QHJ#@${-rSHx{Ie zYAA2ZOiDih_>LK%tEvH?^=8VzL7W2o1l+_CiZbkpqYSk*l)hyyKVi_Bfy*$;Hb?p~ zPzLx7{Wjn-;QS2)^zR@Z1M%aTU_S)uWkz`|p`nM7GT55Ihm=v~hmd>G9iwvB$HnDJ z12m#jL3>zlAJp@J^c+an2ONj=JxDu3JSMjd4b;=0Hc~S8vobh^E@7(RcUG}00X-B^0VB~S6zqZDab=v-!jI8ii)&hpyi)j{gnypl9$ z_lV@GZ{3J-yP0GQ6bZ4Z&kQKz!#wYCTfFc(j;wklFf$*FV{4CDNDlTBr6z|xNy|xz z?66u($T8norhb{XB=%H2VZ)kO!QCc_F1yV$DarSiLfYy*5mCH?@drDcF5Ao9>%S2x%vqsc#qUlGJwcOs~4NN}1LS zUadA7zX~>S>jj@2HC_9aQN6HgV<9XsLDY2}D@eoR=rNx{)k8XNX6$?()2sZps#A+L zq-QVRP1~JrWh%Pj?SX0o1L=A>YlY{|38uM|-kG+Id_u2Z;c1HR=tWyyD8!VC)|!?# zTtgrJq^JFsM5+(8O%l2l%b}<2q`VH>1k&d|#4@de1BFqCW9g?SJcZhZFgh~*(63MF zKgtFvjQab6a>bA}>ZK$KW{t3`Fp~T_Tll6}BRH@B!WKaq->~EGa{}b}Z}qdHpz~55 zhXUE8F#b$h4j1(EYp&&^90I>uuo3Ae*a`boY>&=H((0>*Obk}B-DWf)_h)I?@f~K7 zX-6lpe*FW;jUlPT`M?prNhLm|jHJ_q1h1kVupTW3@JA`j@a$UWPVa-Hhnzu3fwLD zN*>;WoFBE47&lSOsq#0NcNVrpTO@%@(Z>;w<6dNWe+LrzA%U#wokhf|+n6$QYcf~6 zRAfFL%wj&?3MQwEN0BdejLh`x1GM!OH&W?sCb9dFhHW$P&y|aV$?qa4C;WRXQ&>1W zL;0=(4iN~8Jm7>L0h10H)*ul!dB9-=0h5;>c1my!YUcrd%%c$Qd8i8#Q7;cLL8TBd zNtDq5B%)y+JV7EF+Y9% z%me7=A6tPoPUtC$E55!vN9}*g2cJGH+cDu@icm)Jge7~-Lc1rlVRC*{nr~2Q7upf= z{$($6V+KU<&a=w#6>enlVLw&i?wm8re&XLrzOo$?OvB~24*P_lZ4{?#=)!Z?LuAiZ zXkX<}XQ}Le9@Yt>ofNlmNRZ z({OG=qif&mG`wK8DvbKC0S5}@Wq~;u#}^0&<)wjf<)xDU1%rC!<)Y|Ohixb?9;H1@ zD{UypLmdW`sKbEA#Bxgc-%6zoESo=$Pqx3gG*HHwyD17e}ojmE9__T=X;YbmKH;zF1OPxb9K1Hh!uo`o5NC-^ogL2$&&RGF_!l z<+h23?lhDlye~;H!ST{Zo3_l#CmG`5uZ2kK*NKdM`L$w`Nj}oy6Isd4i|rI=)#*f@ zg}f&LA10Fp(+&uYItQ@+kB6{@cFiEygX*xIef`MfjQXNg?GMuVQ|FoO!4bl;C5w`~ zoLMf!hHWF$`+5qEPTm!k9j_%Y)g}ucqIS{ChQ$gcTwR2q!x_RI>wBhNY0Cuv7pqKV zbeY1qn;AlhG*@AH*dU?S#7rU6ZK-;xU6in4Ot`7=jVVH-u1{#+DcjV+KUY=Hxmn2c zu1mW5=!TQ9&aR6}OF zOzSqg&}&9NH*MIlMtHPSoJ*E0$`jR0~d3gR= zwo#Mv{>T0vpz(~Mo0F1@dIDpJ@feibeK4J2otMXVB$a+oU6Whjdt1BGi zi=A;|gH&%&EtxZRJDfXjN93TcI(-Z-fnE)-M*}TVI12h{xUh=%aNR3 zlt5xiq>@{f{-m%jhqck~CO_|RXI=XbBCEE?urAvZh*)wyTgFvIy0|!yXHp|_E29w! zJZvV#g6+xrZ4S)LoJ?lsBUhsPtRX`dE+9kR1~YNxf|-nFW}+XHL3Y;eNaDtLktrz} z(zpIp^0wGRX6P{uJv1$c?AfX!PQz}I?k$#(vcq~ZKR2PsS37%RTQ`oL7i}cnZ zYSkvv?jW+HHBU#W2GHvlzykrcC|AQ?%8~EzkMdOf9{csf*ZcS7sp`+NVEFp509XNR z0Jebt2o?HxB7Co^_u1nQ1n&NeE1XFh!}~N?!ZSMp zxS)~?`6jA$e7BlwxL+!c4UVde)*_Pt?SF9&w20x z&vUj%Imak_zKumK?tW7vKkBv$`>OAMxvzdp>u0=O_Hf>M)J@sj6|{*Hc79Z(!}mU6 zFPIg>0YeEmU|>+BG6&6{#yHMPQQ|;@QYnXN1m-Ie8b8QNRx&ET6g6=is%?1fGTs?df;kr24AJkOPJq9>Z zGT(&UnPQV=XlMqX^^jIU{w&DXfOG~Jp)T~@&_qMwnmo*tIk_GXkB9PcAP;~p&6vvz zme5f8QIP%$fHL|mM%h=EYw?E!9p=)61%q$U^0)yZ)vi&A+g{wkjA z-{$LmQc~uFIg)jD6%ylqT?)LTX`jEIL%>+FhFVXkD^> zN=s9>64Rx&M-LLtw-QrkVv4ZvNq1>|tC(cEML!|++$eH)X&2J=EJu1bnk1O+-(Vev zw`Tp1`%050s))_N+oaakH{!EK+l0xEt;q9|8q?}8yQH_J7bch7^Fd7edP|tKw3Oid zi-YidS&|SO9U?4x{w8Vov1@{jTMyylN~4MIvP=l@DnYLq{#Zz|3OB_je->s>elEJ| zH9~pUab7p4?-z>Gwrb|!D;;h zI4LV~D*fc=SwgnOI{HjsO33j(mDI&PC261Gop8}K?ANFDA7vBvpE2wsPZpqD!0((V zLyiarMHturFINWfA3Rymh|!~a_Z!q_c;JBlx}g=nPFlk)rn_;Oo=I#+eI_?Gtv~zI z(FAt0T@iAn8O1u&=h*4?0qlq(0c_X6V0PZ+L1cEsPPTeTJlVT8iku5lk?jpzlksyM zNZOl5tE;Hoi8!zyPrDAq% z31E`T#gQrfgGsMNZQ1@+tCJZI_K~>hzGUB$Ya}({4%rjo%T~X}5!KaOWMf7qGxw%h z{b})3GR$Zs(T4ZL$!H+W4@8s4cg&>o@l1M4_n(-o4Ddj>x;=fZTRC_FDAKA+44I{A zPR4Fu!VJ^JG50IL8~FPS%3$$>C(Hc_pb|U=mGj^N5~0dN6_ALkd8h^wQ9Tc?AQ3h4 zP!l8qrfD+prvyapJk$Y+aL+?skcfJDz@Hls9(ia0645XZo*)s8@_;`{Ae!U>f1W^i zVkd1cy)_h(B1Xi0?WJfE55g7i|GW0QP|50GP7=J=S7y+_nH; zKnFlaKxcqIpc??D>VJMe#JtzX7^pKA5DJ(8_`#F?IiBooP+jzb#R<1p%RHH#As%@$ zX4Rm{TGuhY^8SLjw$bU0tKQ}pSH7JqjXW8ft(nQIw_0;In_c3|PuYn)8TX*t7v#x^ zWl%5H+>+K`>T1hZE0W29MHrhCRgMP^PQSSM8@`+BB6%>j3g7?zROH*_HIrrbzUPaj z72zGicCv>LROaZG9g!>J`rX>cW&S*rx1Li=;mNoqu9NtttxBRtExuAAAD+9jQ0B?N zV;ARd=!9z}`Tj@C;)I%2Hh z1ae&Yb&&j(tHSb_uLLZI0d)u^KY#nmaWEg_N>Gl4b@KNE<5(_#dDLM*y;4tBd~bi0 z7s)@AC$l^UJQ?s~m2)WXrW(o{e&;vj0G!N};dB7lhC!aAgKVc|SfPUTisoEwJ@uGBkrcc%Jm}M%fp;Appw3OU~d8uz|8kkhc-qI0F0-JZ1*yFYd{xhnKX>MFDSw zdmzeoRPb_^c`8h+ARY~Qqd>X?%zyw$--0&k7%AOUD3c191$qyFGvqCXyoMTi?V}dU zLs|J41EJh|0QAM+WzJpOI1S3fgaG$G)I+|$J0K3q$3nSah!+OvA-xXLM&PQTJq-mq z>~9DFj)!X*@tlzFLpwB09O%zOJO(7x$FyP-rp34spn-gUkl1$zh|d5?LHR(C9*|Z+ zJuD;SNr+>9YXF9S98VUW)ZJK`>1ebOueJnQoVM$Py%YM94YP+4+j9|g<$FuS zY|Ba{pi?X1gpeh?edaCsudX8Uv$WDk&0%SB*RImDlmR5VX+_essftNrM5)VEhFCZF zAigX!iK(|LQe0t~Ln^K}kdsjd1u0!&j4g%?Co8v;lOatEYO+#9B-VSW7x$O_VTqO}u)Mc#XbY$CIAix2$@U`(D#h zDbh4DttP#@VMWH$Q!=fa6(h{8u}Jv1YrepqtU^aV{A#-DlTCZ>TEGiF&=TjtKM zPwhX7FALB8SNq%kDpw5|vp!0qV8#r)TL@qYum-@$^X*%f!8yX4>c^gl%HvU>g;_Yq z>>bQ5=sJpB?b?cMUD%ebKkgYjB;-D;ws9lr8wasA**a$M+c=V4Y%OcuD3%D*!Gi2q zDKaI)NNPOvAa+t^(qxDg@zi-U^J@4rw+=I8-&IEv^UOfnRfr?)SEnT~-cruCn#g}v#VrJg<3m~?EyP2CI3~9T53@zO}KJ?(9$a+>s3iVDT?dIR0)9YlCu0?amke&01U7eoH4B;*F^My<@`$1dM|GgLK zG)cp}S=pZ$hWL}U4VyDJ&YxnYe|k@-p#h}E?h(Y^IR~DQ?>Zt-R9gc9U}f4Y?H~rpZ=hSPs$l$UIr%UWvorG(+!RXo<#G9Mp>M ztg?_jiiO^*%mGWs51A(N^?uUH-p1N&sK|FpCi0q0@DRow$_SM$&PHn%^P|pY^X((f z^PLRc`SMNI^1Wv6SkxnyU&=#_h@UwqyPKvuHfSK$J8GFQ~sMh z5pm$a0R-o!IG89vJUw!w7pKQk1v5hBCy( zQ3i7WWtb1R5hw4x=UvSVc2gAWaj2mTi!>DaRyVW)K4%TcAkeqa$Uef*=F9M2Lm4U? zWxFwb1e7@k@s*&j40;<)uDw=S(5Hg_H~{!8?J39)06s_qda!>(J2c$O4}FSZp4J!g z)BOv`A%EeJKr)6L@a{HLpWUsbULOd|9t}o;TKpM_Vw;cd!odcxd zhf6#L?h}c}KwtQHZP0(2-T*KfDSa^LG=NMf1JJ5K59M|9Af5nt2=R3wXZ`hD+rP~} z*(6i{m=co9jQM0>jqcLoM(4ysD-xNz!@HC1uct}I`(vat=NpKwbAFPlEXg3;%k%Wd z8VyLsbT=~D!cXcpWu>%rdWiVGv6Xc1L=Q1tTZyqYP8Tz@KT9K9KO=*yH8928XvR!G zxKygPO-oY0Tw=Mj)`ZEdKyFQ_Elr*OR{VndF2;6~7QXkFf^~zLqu_Jiy_iXQJ7$i! z#I}YMU2`q*nA%dkBK)%W<<>XN}c^zuvV{}$?%rfg{niJ3)46GnQo1= zpm#jEX8N$JypVV%QfU8ql(0tEPuQ$0YpPPShx%HnLtfLeQiS@KC(%q|Q6X{LFJhf0 zolRk98q>$x1`3rbS_v6nzp8=nO>=}sx_aW>qvWAG5+woe%SWWgb?W%emTa^V!Z$DlU9jJNfgYm zVQ0TdhAq#K0DkZJ{q>um|6!9>uua;+Lfg4&Z_QlYLKH6XW?oqjBymH{jCs3;+`VW;CM0S|v64B=k)G9=pkItkO)-;M z%_pgQ1`)=;*B9d5&PeQvttRuxO2%%sKVbv!lEPn9Or}+DqOp2IYE_IP))(VQ!)fQ4 z$E&U|yStnvWB0_73HokK=Rv9XpGn5Lni+$&C9?!}Z|rMrOKyeOGy7c+khx(A%%@HD zu*~-ul)>Wn7_}d3H~*Q8+HY;q{@qL(zCJ7fRsb6SOiRBFo3y;w$8b0wm|o}l%?J6z zCJio(GEn>>gEmRK>RhU(y8Bt(=FzLs22Ez0jCo8MtgS?wGYxn$wOO&sS#gkrNB?Gkm<|ogQsh`|uNME#%&*Jh(19thw8U z;@SlnD`fk)ahJYoUMCy)emDB_wwBJkE=EFq5bQ4H`6`|I3PR^|%IzceQ@C@^^b6O?~DgWt=@k&j?u{{$#mWvR&6(%2;rV zSZIDC3vFmpq+O1%^2ky0>{@T)r@0|MniWM>jUJP1bv8uW-gTJNTL9sDG@{E?GPbme~H@Ee;=PWMksmCmk~1}&aTpDNKMx$G@kTC;IK@hLW+Y3(;zem`!Xl^7G);(TGg3W#Q=rhVW4~XY(ti{`7MAzF^>+y6iXl7p z>*Xt$9mB3FZ*P3F7Y5h?iUMH7_;x*;eb0sg1=^d1@pDwIIO}HbIelqgA{H{U?)&4| z)>nhsAuWSRTu1`pqBGfY(^s?9<<3N0AIDlouVkZ{_e^@z35;J{99eL|gXr7DFw3iD zlIclZ$?;#dlQB^fN$JQaQnBhv=FZdr60x}@iHLs0Y7b?SPLI5psg+jJGvfC#5rKo~ zoNfuENFN6hF)yCD>^((afB!Qx^`4pesb4VhXe+ zIk5K#{qmzfJmueIP)3U1W5dG2;r}DwRZ%`3EI@})J_ulPA%Ae-(1AdP1cAc{!Zr^$ zq#$5YBm;*Rgnb@xs6iCZLkW-wn7GJ*$)D_C5hi!?3P6|;%FY(cfJBtd157k2MEN{8 zf<(X%k}@iSL^$Qa86*NGgEA_EM7ZQZ1rkvu4^=@Ts^y_NNQ7%1YJf!4%!3<9M6Ep3 z28pPX2X~N&x_PJv5&=K<{##dQ{vj)-JP3cVG811Dc;E4U}`cl*DWG~$__pW@<#lE<+ zBd@<&3s+w9C8ej_&{n;8eb_c+#?Z?dZv@5)Jc;S|eSXN>y_q3)u^Kn=|f>b0OZd_5*9?fUJr@K;_MrE3LoU12^}p_KO$;JOBTP=;U3ly|LE z%DWW!CEISK3@Iwv4$8Y^Fs!eHx6LRG=*^U2osrVT!5b(CbO)gfOb_$}Aszzx@fu3D zQGzE!|HMe?KY-pHP}d0jm|3<5lkJpLP`?LYD&)#4wq!oamZCI90JNjk zfDZbm3x;$Y^kYtdY_lcT)q@_|Kp$mTUaso^?ZN9@XP?I*c|tlFZ~%1B2JU;Q#dh$# z4g#<~^g%ZW08;>Y56V*@HBdhl%C~^HFGzUxqfQU6e%!ZGYlQS;h{NvHWz%^9OmvNa_1R9Iv4Vl*t670~~VukAD84J97A|IIe%2AOA4Z_L`L# z-C>iM-JN0<`Cb>J3ilE+KVO!-_NOp6Ro8^j4=1JT9!f=bRFbw# z^dd7wkvVc=ApN{jfH-f*QD%mj6_1Wu#q_ImN7}vhI`e$<6RCg3DqgpW53)cz2<%w0N^ma{1JHbi(1{q}J!>V)Qvr=|HKz;_8^HOx%YP;`tr3 zrQLqnLV&)Fob=<= zuPeV3qO+3ey6jn@SWqFgvGg{fnEPV&xfc^mdxowNR*wu9wiJIV)*ZgqRO@~?U9Ddo zxazQ@XsdOOrku9BM2qSbP406ViY}3B zguVmTH@z^|MF=JB)K8y#3U0S{2_Dw{y`uIO7bev1rtY3$X}VA|UG#bo=(YNlCmrt< zE2MXOm3Z)UKcT<>8G2dYAA42i{g?iEq5NMX$JJj+{KGje{Lp|a;Fl*mLA(o~E1)}| zC!jZ=51=1l03Z-B7%&tt3@`#P5-=JN0vHGQu~+49y^)1+{HMcgc*{X-cn)C)In7`P z79YsA-=ED^JM)yBD&s(W$DSukj{-+!dQWEMfWO6{mn7$vhQt-hWMY>)kp3?zvc$0x zS(o^jj5r)fmK5&JL_PS4)G!2)Qsrth2D|3Os&NKc)INYT^w>!H|MH$V%&bp_2pW3# z{!Hc=c;{!T3}Op6eM;J{+e%!f*^v^pLx|5Jd!o{2l7*k}&QWC1u#YGi$Dyl9y{nCw zO_jWeJvWNDHIV2vhc+_f9IG>*`uUJ@qwbR7k1mnuil0f1PgBS+^&L`g>^0IpR7LzY z-J>7a#*p6DW>UK)%oo0|pbQQ_IIjQy92ZRLe&uxBA^x{=T5x$r}7=~*Xx#bxvD=fW%jB*@m;6JdsDs zFx>Yt?Q1mO&)b^s(xWs#+K1)Q$_w}}oQCt|F1*EQIEVXGI$r9+`_J-cZifID(sU^d26c`*6#fcla;^*GO{K2PdHyf6l2q!>jhp;5#{7%I z%yHqsfP9c800#@}Jc;`JY0O8RqQ^Q2ERT6g8siF3hizb;{5qv9=3zX4{rtyN%0Usi z97-&!^bw_U45gmZAEiw^HkMJ!Vp^#W(eEcH1H?a)vAV&O_hJ=g7!G{W za^PtWXXe^?ZPS1q7Vsy)+u(kXhI){W*2q5i^}yYD>r|A10i6@*Ez~jUKu*?jo3-eaA|3W@Yp9<&;fHq|w3fjgc=xwz+ZrX2_oa>3EQHjlbHV>9O2HXwNtI zIJy8x!!hJ_hoI9v1wa|S3Q!f=ii5m>+&0l>3vIw;yRCg7tsoEk1^-oOlZL+2^hY3` z33(WY>nrnT+abQiD4z@Rc-W>4D5r;?)3ANr2GE)R!5r751A#$H#cZz(GVQ#RG<@U> z(XQzpa0Yb3qnDv(`Edoc%oVcB9MJ~HzX+?bY4HjwRphs8*tu5{sM zq;%cojx@7mniTxxMRJ*$wZ-Ua#ie#-^x~x+S<=U^zQSB5U#Ua$NK)f^KYHrig-mRp z2GX4Pc}%w|*OM*Y*CQvcSddo!=g0`JY2v)k16jw&B4l_eXQ@L!716q-5u3IP#q8JJ zgwXReNgdQs{3&4$$$8m0x#WRJsl|vB!qEvsgcfU-3jN=HOuW+5F)5~!P8iVqrdXyC zElB-p3&kv#nJjL2CLOOcSn$eeFQm*#@hZ}Lu`oyfN_cPB)AUh~4g&R_Q6KmzOz@9y zMmv02ELiYW)jjL$OeeEa==Et42UgU*XYw!CQ&@bbh_LmEr#dy%TS)fnBGym&K#yeW z(1~@=(YsyCs;@_trLPLdX^U{z#Ojr`!jxBS8Qbz>=zT?!=>?lV2m`iLLKnA`q}|)5 zo0bQq&_hN&q^qf)2)3!K)q4iH2!;w-!gN^wxNp}wliLwm*zDMfzH(`)scelvA;#84 zEPPm(H04p2uqygqYbrPV*sC({Li`D#Tr*_51}KSw*{(^@WFdg^<}VC!I{=zn6a$n1 zpg9GaP?QD0xG0-Oz<4d2K)8T}aaJ~Qa0OWtPz!)23;0O~dKA63*F0wA+Bjy`kve2?b6ckUwt-AqMifcf zQjtX8PJrV@F<;zflX6w<$nphIOrcR(q*uEHGCfO0f){~B*UXR1g9DSv*3>vMKfNC9 za5|c#siI^8i!WU#+ERh%766#4{^zn_(6^3&&H#TvHvoLf{P4k# zuf_jOPzH)WWWy%OdsR+oSeApmD*5pl9e>@c5`6IUBO8_Dx;ih>w)(uBcM^%bAEe@g z-!J+IZ@;u8UxXRN*FSuSy)!5Tee3gso+tC338Q$Yv~(_eavbk9K#O}v=J&ymzVP)^ zdS}Ys#en7FZijZ^L;WN9J;reEY4b@Muk6QsE!9aLti$-4YaZhIMcMOLrJJ3(2T9d5 zA4B)>;3-Tu|JVxNb^HasR#tI7xNQXM8h4fp=Aw~7ldZkLD;Rn=!wEb0!LhU4KmW29 z`QGk5_|~rc_da1Sm=(hTLkaL*D+fj5925tW{ArBi{1iieJ(g4Etr%C3Ux)1>l==|; zHLV;=(V{aPOd6zU(-aULN!?QTbPzCrQc!3&D0B_V3)mGs%qgvh`tTiwdrsoo zK;(jSi$J%|NEsHWa@Y4=g1i$NdEK6&jhWKVG0MK=kyq1dpllz=*Ml4fbt0Q4}KK)Wu(W~01bQsw|VK-ycA>#M6J9Bd-S8xn-M!4&x91dYT3DaxaC?B*Y(gt0 zsYrJ*y;XB*Ma~+s{>esC;Ym5x`B6z?-q}wqF>sBv!=*L3K19PrFK8#t56_m~{HzvB z-0UPZd&NjO)9Q=&Ki8MOhV)Br*~FF@??#G~-+y7=28D_v2KSU&*<{dHN<5Id7r88D z*Oo}KxfJPKI*5#a-I9r(IF+sC)SF!E*pe+Vv@S80ea9R>Hd(4-7$-%{jg+1p^JKlZ zz9Wm@ZzJVgeWc8x6@^1TpA_1M^I|#gS;Df#8%&=nr+BS6Hcqhgt1nFI^4xT)pQn&o z$>=rrmyxE2>mQ3H(qo0#Z5PDWlhXy^O*XyQs+jt6``DzAI+ILUjXKa}l18cf)Ej4- zu(2`yr06v-yTy+M{hY$I?F~lge$+{r(m%`;RjRl!WAk;f@QHVHNB2lNKISCd>2xu5 z58%+2XP>7xE%j5cxj9a#s?yS5`pso(PoBjTo;#IZ8Xm|rsA@wW)%2(9`fp^a1eB+} zUM@Dd@3|^0uODn$<*-KBfAz3XTv#JI&kPa#V)XQ`UCo*4b9d2;7kR4JE()aQRa@k> z|D8{gruH`BPVHD_DEnveW#RBY_jd;6sv%=GP)QWbm|=I7S%x*lze&an&g=hS%Ro2j zfAhKUE!9yTj{?_3hV%XX?{f8+Gu)+lvE<2GBUjYNz+PUM$~GRD%398LWG-q_*(M3~ z*}^&lYkTw|d8ab7Z4XW)qZupG>y?p2B)?~btd)#zyOAVWZzD@STan0(6-fH6P;$^O zfUw8+5ubR9#2ZstRnOu~#uADYU+he{C+A6}%MQe4r;6D&wjMFwNT*|bebvbelbE$n zA2Mz_4WnI~N}`g^kvezch-K?x%%d%X$hqVTB%<6Yvf`>QY2VpQDm@J#Q56Yuq(U~6 zJd|RZl}uoMnczX{*R&<3>F3C-4#SzWGlR&qY8{!ctApv!CjyvrHcRN+yF=j#`L2WV zbo?HJ_QMDNx5c2T;Ymjzi-!1DnKXQ@SO8!$E`K=Mf`o}bWe+G0fC=rlw`LN~2`1t{ zeDEs+#~(6k;kfQlGvHQv?oa~DRo?8zId`0^Z&cbr_7DaP8{a6sy|&oLbY44s0(XD1 zHMeTsP2ACvH^PS%+JM!3vy9z-CE3PdKA}C^3EQo(O!&i(Kwx-^un2UX*mGw z%p$dngCCbtKR{RADIMFEy_Ai;w;Da0@ik`j89)kP*z!Lc zf5%l)x>pd#7Vcv?kMfRBr@V;~Y_NcDYZm|#IJH3<%J4=b+jMz5LcE8OGMF;K|2;(+ znrkSaw{mUImc`|APBD;902qNcN;Fai%1jw%K)LgfPNFEZS2H+)L^~_!7489PsA`t| z_M<(OA>1f)L9!1p;I(9)EEx3hM#|6$+5vk8eHVb^|6%Vt;G#&j^;-!FD1sQlfC>^! z2&gk%HPge)5X_jfpnzFKMKL=D6cb`x%$P9;3`}>UqoSf~&RJB<3A1Zh|K~K*KHh!H z{_neYulrWFe!q`Xb?Q`gPuEOU^~b3yKnehEK(Ej+I>^_-bU+sgm~D`_Ej-sz+M9nK zI?-5({OJG~5~a_j2N})eacXey8UvI~0HlJAD@X=( zPzJd;&JX;#SO8` zoahXzS8HkV6P>C^_HnA6;wToWJ%*B{KEef9qxox?hxp{(FflkPR-C)lMO-~%ONRZh z_Co6uDzR>IqBz$Sm{H|jW9oEdf#CGZbYk!DKrE7ePIR8B5*J*I6lRxVGCU3M==MDh z)TMMiRi)B{=+>N@bor7xB(&CUk%o<+F`W|W(#v(pCeNj!_Wn}3cv>BCV9!0|u5V|t z^st5*K?XY`v!E*P7v{oGT&v@4S~7fY)dap)mD~KOsdEJ9b5qhcw>!qyBRR6p}oHpF( zJ!B#8Up13o?Ow^ayig8**usyk9sALESHlQpRp;2vJ`>n}Pc*FZ(1rAla~rewcK0V0 z_FrZDRc=E@jataM4-a5>O;fWrXWJRe1wAu*W)9-#%&x;O@qcb~dB7-EYZ!KUF$?3Y zsEuruAz^%r8Fh?N4wu+7jl+x{Z`ukBdB=NM?_;NpSZnM*z7-p0f0bWTwk$u@_qae? zm;d^${Y&jN_J3s{K(4K){0RT%+WzL+euE^GzaGECwFQjbruJ+9PMtLNoXX`{FLn9; z3srNT4pY?=htr4&;i}r|6qVh`1$54?EY;jT3>98Iq*=Eb(tU0GY1tE}h`qmto_mu{ zLlZ*i!lN-Xt=A-4uCIx=i2C=)V{q&K!Grwm_?v6{&#%=)hhBuY8R*=LsA&c|`XXwZflj{&nCwZY z3liaLh95`-OiCrdWSl|NH=_Yagu;x!xwe17YYmzPkuq~HOXtt08Wzg8Vpnq`*jBLW4MPHa&Xd)`^dF*Iebjg6W`&Ij2x51 z6)CovTJ)24{8yi*d+FNGAu8}F!?mEeYd&&cI^&~oU5DKl(0feH?0lkrKE5)p>Ewni zj+gdIi&~k^Rjs2zeZaiUzu+3qfY^h@1GXJH&DoKX>LbKjeQ`Wj{N8yrw!`-UVGKnTNm`ind??>De`Vyizr{@`Bb?{W&WPp!*2z` zKhL$HwKV|$FAQ(LQXJD5FATtdd8o^;m-FSk{AJM&%VM5f2SmT>WPN@cEQ5Lsvc$No zM~OkcF2?ig@|VFp4Dz*6%JoPYKk6U31NqBxZH2Effjfa~s|>zufw@eeyNS`iNC939 zjS)XEb?+ma86u6!J21W;bj&1>@C%H1(VGN_ctzmRsLCyq>hWIt$bUH(P zj0t?qAe~~6_${3V^zWf;49H24U)mt8tCTn_H%J4&g?sel+Dqh(^n;)*Oda$J6Qi5L zNWN{z%SoIWa7lU<*p3Hmhdh{)=s+i(9|`pbz!y@x25k}Bgdrd9#P$5hYX7Puk5d6nhlnY9uOHd_-m#`UEi*R_3?IIM6-ro&OKzMe)4Y9!D3?ZJhl6S2o~7%>vCpb0*B52jB^?<)Vene9 z$iu1Re#$3f(-WRzQ>F$fG-jsQ=zc%(ObLOWU;LVm7`&UZZ?f1~B^i}XYJa+N+B7<5 znOgYZG?YB-_gwVJeovBaF!Z*=Lb2H6D&nr|L9|hk6Qb|cF#adcXi^ZaiS8s4CVnetF*1xL|rmzPayRQ-R#fL?h_~9VD`-6Hf*z+o7k138!4BbnJG9g zU1)R&-)FqF^bG6p>K*Srvo>4e-gEZ)bVhmLj%akeW5;j1HJ@K~uz&jUg*}y3;hci0 zYjTY1TQ~}Z-W8D>`>*A{HXMF;e@>8}7qV%+wNE0{u&g>nhoa^YpSTe z)Yq$*%`wqweSB08bhTA;;!depEkkVw_)zbkl2rNtH=3OjLtjtIRdw=+QI$A!nl7`d zPCgy0N=sBqp$-$m*&6j~(#7S<(*8dd!D4!HUhxKr!9=mes@om6}U1>`n$DX0> zhWDc}?NaFIV*6 zf<%-v1ExFw(cStzpnim>88GeqQ`s;Uu8$yQP>=|iLQ7DC{AYGB!{Gqi9NQS%7TXis z5Zevg3fl+U1ls|hJw9(|Km|Z0fGeOXzzt9xfX~MpP!mua-~;dl_ydsHQvmS3@m}#B zH2^I@4+sK;02;~NGsN*b+zb#3XbETyXbWf$=m_Wx=n4o2bO%HNdH{L>`T+U?qOm@Z zF@QmUSin%gF!?&)yTpfx;dj}t;Q@zDCQZfO9_U$yOc8pPY46V(C$UDZ4{PJPM?9Mn zJ~bcZO*vV0SlVq27%S;~%GJs5qeGr3V@KIh!4 zvFusK4S29qbiOueQd}+PZa3p5o+M@??Xx zr_yd{g|}AZVqd@e(I(dgvs(Elve+TW9RozAcwvw@P+-6~=F4f+VLX2t^AQ-ZJ~>~G zqs$M?$9hqRA^-I-E$7Sfw`^q{N(?CFxTG-u!E2x%>yq!mob`PRxkD&`y~_U`__hy1 zzOjOQ#D)i1yk-K|rAj_x`Xj(mMW12ilK}Kj8-9zA7 zZoxRSn32{V>g$`B09T0bOkwofvZeD9^)?ztZ)alk6#;(0p9BDIKnIo%GS$FnZ$mr* z>VUxm&yCc3o20dsy3dT{zogNCPGgYtdf=+`Zjj#(%EEP|eZt`VMF#_xZavsAP{%W{ zu`o%Tm#!kD9Uw2oAn{I6jl}Wj+JOE&00u5x`zY}@P&U8^(lAhJGa-&?llgjeL8pOw zKEgd2Kv&to=qy1N(nx!x>8(t8=Vw-eGM50ZVA~zaz~_T z&JVdH-BHj%IgJM714v&6Jv<*==c%&?3C|aOzNCD(uGRp0gF)iS@SX$0Auk1V)gTY= z{|e~fv*Et`2&_kA`u6-(UHM!0@A6Zlch9KPL@adUGj&<06T_^R3MqCqiD8L~4t3#0 zuR~YG1a3Hcwe%3-ROowhcKb+S%-ySW-L7Qnx~YSZJ8_rT?cOb7ch(@z8XPG!d)tH#34(U<9!EpO=9+jVG*&CdKuDI8qmRKiVU=G%&kQ*vl? zj}yH8jxprrsTTaQ9M~0SZhav&s0=UOYAdX)7NxRoUV}!c$B=z9vgz!R%W0M1>-5m0 z!!)*SJ7H&$p+-}NI(Qbre4qEMwU(W;y18=JIlaQW@-*e! zWh<0k!&ey7UOYCgn=ptSc>aJfwca7VTRRi4d{C8tH1Z%@FT1fKGE1vWy6Db3swOM5 z-(>L0azhkNE`{)}50@zu7R9ksJ3QtadsI^%+To-OX*Sfjc5gE_&59!y-dC0F{O+?U z%{&z!UWBpf@kaL9-FUYC+um#$zc{{*eM9!-h!Lz;HkZDnV=%j`{e3=Q*aBtXoAL6O z=dZRKH?>rcya>!@}mP; z(diMj?pBW+)K;L$wOiAMHx$&#TS0Q~XObH=YtuRn+Y`&2ilkXvd_`u+(vl+e*q=gs z`3xejc21{H$0gB&9yMwE&`?^!W&#~Jdp+9yh(Ycwev8xkdw;UO*6K?9vLhOpp#X_c zngLVKKZN7L;iE7Brlitq9!zEbe2xq50l&-50HJ{YHMeCRKKen~XaG#3|2ww@=@EcY z-#fQe(C3poir?kDMhEm>Jx1eJ^Ji(VuZC$QxfiRcYlojW4~3nyM;Ul_sT-YdFRgZTe&i*U4WD_Ovv#`5`Im^)GUXH0Z+$Cs zjkYIpZ7cfXX_o5peJ!|-uBVan;#^7{lTN^V6(Mr1qV{r;@5f6V7@Putb>V8xfXWRA z<8J@lfX_*|ic{jl!oF1J0=8sHCt%`<18_1XH?)T>PT28uOg-iV_3FiKfAk4^!5r8>PL8qjkb#{D0_UO_a9%2>(FXPT^DsYuSwvAYN>AkR_Z?nUuf;#=yR0N5X+03upAt0WUO+9*7uyC`eo2#>$^!^gB$9?h)vE zfNqqA(VaBp?XeI1i(U_L7?gCIAU^`IFPqWBK&-C=JPzaAo5hY zM$l1ZgIo)C4iNW&coN_j;B|mA!@c-%eWGp|;0quN>fCH#bS@w(n(}z336Q=D<-@^t zD*&FcZZGH(0r0+u=S3n1CHZAlg|sWAy+H!!B<+unX$_P!06^+if`og~GK|EBX)q7s zl7ALVGBnv>^Tv?Jt)V^zFdl5+zNPyQgEU_AIM^HldB7mmr~k>o=wPCPX96HErniTD z_>8!xn$`{MVBkfcD_naj>EO9a+?@ubE7$;+r&|qhhj=ak%fWTgZw>Do{l4%yO8db< zebQP?`M$P7dVL<`FU7Z7Gx>+@Pd3^(zj-~83DMB9=O>75JLL$=Z`UL}Q|How$qPjP z)~&?l1MP$+rpuz|!6jsSB|pJ6M@ttZHKEm7KNg2=v{EcudJfGRA5Z(;Z$;N!Y(frQc_UWX$@3=bQN(%C zeK96}q{x1*Pc686!h%ULVpe<=}9m!NB6%fj$3<9wBHjaE-O8g zl7Q~2Lb^*NbKyXt`KlG-xMdGm>x;X^tI2JIjZ+fn+3K!D-D4Zff zWzW)AijQREo#DJwinFozi6n*Xjmo_CW~8y!;?L}cVa~kUgOdE9>0kIo4Hp{QoZYSb z^m8j^WS^eKyHne+ZN1L(bMIOT#ky8hWUl#atUT07`6(cZulGrBwAbwB9b#gQM^~@r zQ-7{+?4r$9J_&zr+`Rrdf6=!pAK|1mwheU`+-}A3gT~fU9txhrHoW1+zN|K0xxCv# zCI6tO@l40@inbd=`S2I(`5X6EDvDl=QzT9(#0OSBE?6GftIT;*IsKIDO@49oa&~Xq zBsO3}4Zd5av26QOe#RF&*Rr*4v|_U=EmS_Mca)vdvv7l)8h-5Eicx&Vj*-e;sr`+9 zMQ?olw*IBoO8(#I_K_#+BR{|&j3;A$=d?=mOVHmu89bx{eZ59=&f~pQv$}LvJ)Pl3 zjm=$Y?m9h9P4!VZIc%jZu7%P*Q(OCK^*YfaMY_8^;HLQu$Vt&a zHZ1U=4XfCao#Rds$L8+|lafRYqbO~?^%FUfdyT}W#gUJ!GvQ-=Xxx-+^78a1YNbr2 z&6;ea^-@#dVK6l5(?r^~#|n)9h(Ycw{^rSk+?A0k_~Ikf2>AI zD!P+fzpw7~IMx*g;H#xI0H(HoeVzT!NxL?2e!PrV1?yGN~ zIi1s7*(&j4lY#;z-V0B()V$x#b?ID-13pZ>FK7ri>~qb*7davUYvXp8ys zb+J4KS&w;gd6XD15AA=*AP*#eQJ$Z_r5lYT^D^diaNxHXQhwbzt8WumQ?MfP?{4R~_X16h^lSY%W0h ziUIcY(lEL{psxsNlR?@uOzR5inqX53_?~2tkk-uuoiEtd0Xf~3(G3G#0OY|StXpW1 zu7T%KqQ8`WsD{yXhIk6*frR^!_8B_?@hs56XVE?a*(uK+`6hh{lf=g%mxMlHSXK*C z;=pbi7~Me7g#t_fO`aaFt${SI!9=~p{VfOS25BFtvnRv@0j^NjR*)q@BG;9kmoGho zMo>oz+jhZs&#iAD0Vy`YG z>FE-FWJj6pbalc-l9?4GD(4SkBZgNMo+_RBa#n3KRAcV3sY73hb=ocytA4yGz8zjf zm{)I!IF8>dK7I0wu)OP1#p{WE*kx^pvqec~7G~TULCL<9^C`JVseOaZ`nx1TQe0P4b z|59a#BX^C-5!Dp@j_&N1SiSLSi}prw&oX}4ws7`vKp1O#iBT?o7Rz@DUCBPTOjbNk z%2vLA8N%Dy)DVhW9OjvGvBuYqAJ@vw;tppUU^%yHN19)U%}qL>P;&s>XZm zd(Bp_-;*!VyC!>a-%I{^;j_xRCzdOVJhm_%U-pjA95sNaMc(mc_g>*IG%C(6y_e3H z8vn5glNbK>Co?~Ye?rL540*D?a^eT$$;>Y^fBTaa;1M8yEehtz)J5hTP^nv( zO0SP$RLgtKrB`a#rRPhhlC7y4^5OJw8k)J4KCBQIf~?r%v8-Ag6syKkWl-CxpSsl#aTVI}FAkK<|O3O&fsX{pp=#7Wx4kU~p5 zH_#^M9jNP=HDr@j3_FL0u)Vw!>DtCAB$HGkGg@q7?}yE#HQKczCM!=`?c`PJn4Cq< zPMbhp&(+h0>tmGXyC#t}Yp>DJgS}|+w%2I+e&Mvsu`jgnvK#p0VNK6mX&I|3Wa9H{ zv`uz0EmHClX?|u8sWpwEbuSr6YCRaaf6O3%EB@xm{`x!_`jR33_9y$>pR9mE;9pnE z9mVhSWU4xrS!&&&)?CdiYR&+(Yjn;oloBd#-pch(yQMB(@j0hlZ>9b`uq79LC7Elo zU8_Fa@H4KVly(9`U#@{sXF0OYnd`FSj{1G(X>QE?#p-(xjp%=-el>2o#Iu#2HVW5K zl8u^VuDG@V*W+Xz&cD$euH?W#;#KsX`bE`#$a|@8UY#kWtyd{jnLA!e99yr%)9U0x z;p$UM_Np^&&#A9PC#r9hZj83-7q?2Pj`a#qXFu!9!M)&w9oI;zYuvlVwQ)Gjg)CnO z*VuyGp6cnZ+3IqYr*Xw^KmO4t?7z>GA)$_(kp;jKP{=IhIO4sGN-xvX55TwYGgc5)e6|6BKfc^Kq8`M%{c^0j5VJnJ9muiRn$Re7>V zCU6Vv3+AkAlGx}~OM!zte(YFE#|7g-zGBCR5An$0T z^@Zp=rZoWvBY@6Q1AFJ27~LL714pCVVqkF3eB{4$^8srCP&e*FuLC|uzt<%3TFCq8 zm!(J?l;j_UJWy{yaljMcdLkj;(ZJ{u07iqvA?a=#q-KvU?gG!hSmT$wHc z$|3JG7wmw8)4_KY{nLMTjKENe0poc%mPiYLGpB2t%bHLsk>Ny3N z2zdzrSI7rD9q?_^-eyH1?*gRHgH(Vn3nT;SGJs29n*wqYpd6qRq)q1XFl(2%u&w5L zUgnhzz_Ni*$5Oxth+hVID6b6iaasfDs)2+$u`b;#gCvm?!?bi(=PsyA19|Y7QLi(9 zCcNLT-`H=oFW4W(lZ{mDFE&Hicjf{0Yw?rlk>bsN9KM;(+&fnoKc&A|X82QaeT5v> zckBi+pnl5_1q!1}T@{-j|D53x zy#UTdJ4}A5d5FF*-JDJ``T*}1s+#;_8k_m{nAk3U9Z74(h=%6V*gdO8h=nFh&+zXW zC+?y|SR;gq8>k=gLpIODX;K)!0lq5Rg($A!A84?@XiANd|J&y_{{ zTks7lcIUmn9Oo}sB(V|IS}L2ie4x1eDg*x2wJv@8xx4J_y8D&A`bF^N&plB-dys2< z>wU$Tws;z!Qpt~>zka?@T2q>z+~>HmYM%{k;KbwXPscCruJ(QlTV~ubRyoU2Innhw zzaZqkqCuPoyE0c`pT=jf7mg;eb&niU&IoPErabP zT-bb&O?I(RR*vF~4YkwxW8DVx-_37?}cpg%xbX(_)5KzcA>2p|qHT-N_6QvNy=$cl~RiigIk zOe1HjlN%SJk6nCJ*Dotn!%JtYh9!Sc*&Ozym9K22x%<;p4x880Wbo8Fd((%mYH^sp zNX~(M8dK=xfez%?Tc@b)}sYQ0v_{=t8^cB*IF=PK>QhTMRal17${$bqm4Mtk(=$vbTm1cN4XKx`Py5*o!=U z8c9z6v;$gR3bgc^Y1Hj>Kf18&DB5@Mep&ycNcr3FTWr|KvGAM7_aLx~Kom9uy9W`dzH}6ysIM$)gJ)B! zd)F$Z?iR>PaibW^H7o7NRhiUTV#ngDf8@Me4|5LL?bR?Icnep7YFAWt<*I~^ zLPiTc$vFG^gYaxh^)J@~rCrO=!>naJA9)(i1=XF4`~FL3Yqpxd|3{sM7tDHL2O$S} z5I~6m2MRghAc1M@OfZfC?c@PPma9GB}uDPJ4o`3EgIo&P%d%VWNr zhvhJibzxkt6QW=1L|uM8=6&};?jQ^xUlOuyH^-SRUki2szs{!BT zlg$Jc-U|Lrz*Vsv9bdYBk}0}Z1;5uUe?yEEuA0AU73 zmu8UG^y#N*fa_uy-C00W0IXHfq=3`_o*VMcZ1jP62Pl`OVFFG8PXoSP+7JN5_485~ z-4X-r;bmZSBIx#m?F5kFz~4APerpY*n+SOm42*U&H#1X;-dg=fHPp5 zU|@7=h$AQU!XWKeFRl56`$m3F>k7z(Jg^Ud`n5iA-E05@Wi3IU0(S73@vKQ*CCG<5 zF<+Ykcmz81O@q&hHh6v9Hw>STv>zMZOC(?oq_aT6HPHVHp9S8xZiYeHYfW1Wbe`Xy zVsVNG{_(;^t76n%{a9F+X%fdz8$*Xp3l%EwnkqIZe1bnb|GqHid0%nS zyLQyGa($Xs`2cym&rZ12>5}kdxgdt6&1LV@nk}SenKGKaug)urIf^5a28!7m{b;wA z#mM!m-RbH~KUI-=FUhGhL8=L)vCy$XDL9ewF8i3@AlejLD>#n-AdVQ^hO~ciRX98= zL1=>Ff_mW=Vb5ZQdX?QKF3x0y!P^;e^>Q}DdFWNzU`zc-* z?YVOFXbU}^e7L5n;x<=$VcSa!fNO+-u2~H3abWf~*?&pSi<-3GB;r2cIhp100pFozAn9-X1XS4?mW^cHVZr zsB<@dpktshOVdfQ{`o%R<7X$8$(dg4yn0*sl1;DjTWkj_*^w9cWyg*ik9PXNZ)Pap zwSRx1^u9xE%~S`aPpyOOfzQ9P-OjC5zG%%DJ%Z-&v5dPhZmu7DLAjkB+hR5wJ={l0 zjOnCUKm?nV?ZGl3Q&=I(#Ln7lP%e);!LPANN)I@_Lb=CcB=6*5!&l8bt>h-S8Q0&p z<5w5+VGWZS7_WC&D1S-*T0UP$nEV+*ep<+9^_LR`^I3SC_@avAwiTcVzy@FkfZp-X z-91cxfq?sH4rl>r1!x0k2Y^w5=>+HkfYsa0Hzd-&fPW`rfN7ab&j5?usN0re&mTsARNwwIey(+p~UpjnK5`AANkqSqmY4pla z8s8^`CKmUhDQ^#}N)AaT#~X#x*xY zJjw*EBn4tI)B%p}s!9hAOQ4}`3zO@H_S9*DhP?jbN>-1b^>t!AG~ z;`SMc6?=;IKC7UPXG+QS(B-i+sLsKay6ny-Z!gc0_1~+MTmQHCs<^T6ozM5du?s-p zv>k!n0m9M@>>3a_bw^+~fhcMQb{PodI1t!Y`>*j-`Ra**ItBq^0Yhc|_bTxrV)$J?DlTB;u$Sr%m$#`EVKs1< zFZJE@YT9k~>pA43IM^xP052Mi5}%?(;EF?ukJ495;9%9D`ax)aTn&gj&*Lh`0Lz=Q55)^yC8P9p~aA zA|)=$C$T*_zuuT3z0^t00%6?FH#qVAlZbk)wfOQCiRV)R1=uVK}6>Ks*WRzIuc|8NW8!O28nkR)jJJ09;>g{BN`$S6!ui!GD)q8j@ajsV!-6 zu8+{%dH^jNq+yR}U`ONOtAzO4Rj5~^%f`0#gNeuCLPCdmj>Nl+4Q21P5}FQgBzk#< z@`YNwqsmoDq<*xE*h_bnOo&aXKT_|coE`mAbXjU5iQfIh7rPmn^5G%b*>t5~F~T6) zSC}r^i!a1G2YZlpnk;c=)I16sd(pbJ=kPOK29m|ezT)c9CzZZ;{79;MlF-s7o`h^# zFJ$;HCm}&ogn8p?h>0ay2~|6PVn>+vQA3M?g7c)N%0_ei=#}K=WGQVfx-~mXiyX5e z{wEIzq|kK2R~sez1ZV}Ha#KW`PA|mi2Rt(BrS)j=bihyS)_l!sjghl*xIWaduE)#c6j_)X&1>T z`DPc5ITj<7hLtsq=Y#!t>wtF38CAaUFLQeGL3d6og6tph;~%YJ>&^OT^m3@qS`BQ< z&bxJy^=LYZy&Lp_FTHpWTb)>^@7or}KY7h4m!4|Mwm##{myBtvRNGESk6%CDn7X8n z(zj+jsrS&4FLiAsdu+ItZ$KIhT4}CiAX`4=G4QfKR?TDdU z$DSaM1ANHk0g2SF!baMC-LK@lDu_BB&7!OOSEn7wR`OuxF4A?ChFl1lPJ%vGpu=ta z>B7B1WOI?)v}w)_k`SsOgQq{Bg?iK^OM4Lk)c!H_Y-<4K8R7%3sXVQn(`kokzj9a%x6+B7B`c21<$ehtXPvkv6>ulLDM zYh2mDhcFW61+q(XigdqXNqQfOWRH*cC(DmU(^iF^kY6`_ppA~eXa;r8>&vhQ(;V0_ z4PEm}eSd%DR{t#qX~)HzHUoeD2um}tD?s3c9f92fqNo|zMIexcKwx)) zC}u`+kO+G-N`OQ-m;qC~|5FSSOtB<(#2qBU!wgT52ro0dK_Y6HQ4=JhmKn7{BI=ld zUs43JMF@X0U<&xVjFA%Z5v&>iDszP0JGL>lE4CxHAGQ~^6SfVuM@c{_z<-=M!fqC> z69SOVMFiOd&;Lp{!g3fOFC5Sv5DDl3=mqEl=m+>8XCvm7`u_gnL&Na9 zjL{H@u|WpKwc}B)!jS!VW}!Ox^#j~5=h;@t+sQJgv9tyc z*57f}Yrf@FZU;GUdj+0{h!bJ8LtIDBzW+3w2y@y!jk)g4?x_y+wo=>XD!7;r9Grpp zmaAQT6W7nZi*zQUt~D=Dgw;RQoP@)cPzRMv0;0s`gu+6`HkZ-CW zerQOLg&Pw%#eoSN5yR+V4jCLC3*x*`1y%*Rez_sRs9^Q8(zn@(oVX(w9=!b;V3cm|rhb#`E@du+(#%?uFd4S9SJTub^4kPnYR3g3zs zY9L?m-{plyD*TGTzsB7IsNL0vqJOK3LTs=%4bRmIqn@OT-o;(SZ09U~e~%QgSASPp z`&w-(EQ%uzZa2khtv-r2j>E-CV?r}5&dw6+*)q!Zqqm8+0S=-nWRqxYHh{Jnae^#d z-;}

r5v{@M4+cw#2lfsMuNvVW+-2D>ewKD$Ko|BOcD~E%t52iN22w8AU%%=Ud0j zQ(BBk7gPgEl3|*WVilL4D9mfb=;zgimG>5li?Wnv_ARfGCBH;CM{%EpT!8N6Sb z-|qdkDaM1lf8mdBN#mzjT;*-7Uh|{ctmOkL^)wFamB7zT-on2xAET&q{fcqsPdC|? zZwD(aCxjTsojb+rBh~D%C02a1a~1jc;6uhs9eOHOTD0T4hQ;$mb|mvRBen>mTx|KQ z9dp>?@q5|m!b@211+5f)XOCvBopg$KEAH~Wj~-9|B{YeB9^QqWIqi;dqO~2n*3^uR z|9Lp;P-{6`Q9qJ>F(oOz-_`y692*PX#?X>KbYV3+spMy6>D7_E&5i&zG?!N@hd<;4 z2PgC6ZgWD>16$aM8?;LABX5M#&(n-IUk;YPG=D9=Xr%eK^=AnAi6Lt=Ku#3Q8sV+t z$c!Vd6`%+JUkC9O5MTSCCzW3BoIsWalm(OrxB#Hn|IeIaC{OgE{>A_paekjQg8VQ* zH$Vg+3eXeK8_*ZfA20wQF-0J8l!e~;?{#(EqI*US?&KC(P5z#YRNwA&RMn?ymb&-l zNE*+APtvXjs+l&~s!AWP(FNzqk?GUgs|q!#NSikIq!-nf=w(L}-MRT1O>8-zHciPU z2N_qkv$cjzJkyzGPQ63*2|3iB^Q0cNlIXZj?P-;rmC3a-47F(-N;OZ4(ue0l>5{-u z+V6IMvV6`da(Mn+c4gmeBDxzI93P&|7&uyvCjZj)| z6-$SiLdbzhp)}&?R_ZxDn7nE*ifCX5sa0(>;)4 z;>c2(`txQI-#(noc^OPr9syBY*C83^ol5HMkp@PCbEss{Ika5KXLB*N1SFOUdtGircD z)HI_ONJMQj>VQP}m{Aub0{+n`;ooJQ2-Ji4SJ@{VCa~?Xy|In4U9l~({jj~ToxU0S z1lI}yNX!!s6%fboax*|Epg{Hs^1=b#0g-?nfL?$;fPR2zKn!3IAQmtbFbweby1MAd z-m$$0MF01pA|UbRBHVpl&0k-twwtn5JzC?St26H?XMi21U^jMpcW4!^Bwc{JvLnNz zT9vR=TVrT#$scIus6w2+#sXxA)N}0{X-+Oa%?HOEiIEMT(|8??mzw^J?+hQny#mfI($TR$Q zf8|>%h|3xoWHFryOonxJT~gpo!W1U3v55(+;KS(01AnqVT=FTBIH(dP;HnJ3X@Rr= zSy;p9X9JhA&mgT83kV0Ust9miFb&dO1Hg1gzcyRi(@EMpYPo^Y!ROW;1{{Mj*^uvH zf_cG4Z0v#h#Me33CfQ!rPEZHKCFY@xt^&XT@{!Ae`Xvs}Gw-uV`B)yFqs|iS zssMTb;M;+`l@@jOAmQ@`z%{k^0Ixv@(;$rjbXy?}z~?Nd@fl-XT6o^*+a#?SglQx4 zkI19pePMkX4M@c|=eT_Tuyu6<(zOeh60hoy1kN>@Y#tJ;oVVPaypG%{3_Y-!79F^i z-ITMR%)V2IKl`Mu=sW#9wYKyW{93mc?RSUK!cR)m{l^SqL(6pH@TDUeU&evX`E;7^ zwtKV~5wplRJ*g+(qe~3+AJdg|>3&=2G;|&9>eVDOokpoVKMbNx zd>OW6|AAsZ=X+#a{6b;A&kb>P*M?-uvOxBdLC-B3U-(|~oo2*#d=au3mYr#ieYQwL4 zblmth^0+di=5D2h{|&aj%2C;?uh5{vA~kD$|Fh!w*q@Cn*gAaY!qbeUhZf<#WREq@ z4Sb-~xOZY3?*GVMoRY@Y@P4jH8SKZudd?UdhLll0oI61=Yt0v9&Ej0T>-n+9$1(NT zzAwisZWemnz)!E|(^ePZ!yCFQ%Jj10hwL1deyh*p^xMt5uF`m%>gX{(9`};FDKB20lEPq08xORfZl+s1o{?nypd4zvI-kzyUXxs}noFi`SWFZTLutk3&&Z@X+ewt;MjF+xi^=VnEQ|}a=u2MBn~4BRR-$xcpbYxB8ffTItQ)UWrwn;D!LjS9(IpQtf@(Tm9)=0vEiiGuO^)o$5ht5A{1&A9*T@ z9zp7JyF{+u)>7)l$6j)s3<@>wxwL-sG_Jx!C)_Dqb+yh@oQkSbmUrR;8#t>6o_&Qo zf^)@AuEVLQTI*YxYjLx&`pd;8T))%ZIlIp3>S=dwqh}N6GO&XB@u6DM>3{X_7LwM^ z)o_ecU#!|tI)$%X>JzS6xwYTxRJ35;27kc#g=M%(Wy$Uoo$co=NkZyDs< zDTsR+5M)^j{D>Yffun#I_^5&Xi+mVevVjTg9mD8nhQk^$6Qd^@*t^Ii`P1m;zyuqJ z1idTRPdDW870`w28-bla*qnm+{%l6O2S$KwfC0Dw7#fft2y6iUM`a+5oB|BrdX0wB zZG$@CiJ)%{+G;hRuVP?y?vOS?+)u*_SpKNKWPLv$w$jBY!~5nz7?>Syw@foo0zSb-iS@+lev#6R-f!M<#OY zb_j7+Tam7fKJZx;I+FQGMd%dA3}Hy4M`CblKXPDG4`HHWl(4ht`Hb>6?ishg@en=I z+{EBT3&q#h-3Xs>n+7HgBeRU&V(}0gc6J9>^6Wu3{)x34VPc)>(o>#f%tUupslcX` z_DrU0Up*6MOqeRR?vP1$4?av5xxb++?i?n2Kc5#}4*H6gj)G9Ak-hO9e>=lp%}|%d zCxq#t!-cq)zl!Z%C5krtn~U?hvHYX=OEYZjvXrw29cGOema_pX+9}58v{fEUT)n%0 zrYmnh&Ws(Bq)c-2097xzFy^bsQUMZ^>;c}6b z&V0qr3SwCA+Y!d2;SB2&;m59hHZeWTv%m3E=t1M^=P&u_rCZrFafBa+d zkMrUsKcT^}bMlwwuf@HLG=J6q3?V-;{_oNlwB8TB~w<(q~;LN!+x9%s$+S zxG%6L7lLiclJfp!c8{N-)fiIxdQI|kz;t%p$Q1U)aR;SmbysR>J%)C)aaE>O&Lyh` zw5D~RXsNcCJ*}i>Y3QkNTDWScRMtCVE3G=ki)=i(g%;g@jBNI~M2j8>BiXw{lv?*` z)Os6?t3OtdJBQ!mc}9+f-%!5CAy2srgAQR~h9yV@b{z<7Gmzs!6gA^p^E_qYx(Jwz zN%*6ApK4Gq!p#hKkO&VmJV7G7%s}o3@kjGN$ekdN)sKW=~3;10=2=euSAV3J95#ZnAg3QB2AE>7vAQ}(@7zBs~ z3gLbn06A3erB@_k5R0 zE7q#nW~<7aFRZ@QHI0kieph|^?x*~x&`G=!tY+i1>&vK1jmuUqW47a}H1%3Vl