diff --git a/CMakeLists.txt b/CMakeLists.txt index 31c0e56..fa5e8e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,7 @@ set(STREED_HEADER_FILES ${PROJECT_INCLUDE_DIR}/tasks/tasks.h ${PROJECT_INCLUDE_DIR}/tasks/optimization_task.h ${PROJECT_INCLUDE_DIR}/tasks/cost_sensitive.h + ${PROJECT_INCLUDE_DIR}/tasks/instance_cost_sensitive.h ${PROJECT_INCLUDE_DIR}/tasks/f1score.h ${PROJECT_INCLUDE_DIR}/tasks/group_fairness.h ${PROJECT_INCLUDE_DIR}/tasks/eq_opp.h @@ -97,6 +98,7 @@ set(STREED_SRC_FILES ${PROJECT_SOURCE_DIR}/tasks/optimization_task.cpp ${PROJECT_SOURCE_DIR}/tasks/cost_sensitive.cpp + ${PROJECT_SOURCE_DIR}/tasks/instance_cost_sensitive.cpp ${PROJECT_SOURCE_DIR}/tasks/f1score.cpp ${PROJECT_SOURCE_DIR}/tasks/group_fairness.cpp ${PROJECT_SOURCE_DIR}/tasks/eq_opp.cpp diff --git a/README.md b/README.md index c94579d..d1a7f14 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,13 @@ Note that currently `STreeDCostSensitiveClassifier` does not support automatic b See [examples/cost_sensitive_example.py](examples/cost_sensitive_example.py) for an example. +### Instance-Cost-Sensitive Classification +`STreeDInstanceCostSensitiveClassifier` implements an instance-cost-sensitive classifier. Each instance can have a different misclassification cost per label. + +The costs can be specified with a `CostVector` object. For each instance, initialize a `CostVector` object with a list of the costs for each possible label. + +See [examples/instance_cost_sensitive_example.py](examples/instance_cost_sensitive_example.py) for an example. + ### Classification under a Group Fairness constraint `STreeDGroupFairnessClassifier` implements a classifier that satisfies a group fairness constraint. The maximum amount of discrimination on the training data can be specified by the `discrimination-limit` parameter, e.g., 0.01 for maximum of 1% discrimination. diff --git a/data/instance-cost-sensitive/README.md b/data/instance-cost-sensitive/README.md new file mode 100644 index 0000000..ae35391 --- /dev/null +++ b/data/instance-cost-sensitive/README.md @@ -0,0 +1,24 @@ +https://maxsat-evaluations.github.io/2021/index.html +This dataset contains data about 439 out of 539 instances from the MaxSAT 2021 unweighted complete track. +The excluded instances were removed as no algorithm was able to solve them before timing out. +For each instance 32 features listed below were extracted and binarized according the threshold listed in the info file. + +Each row is one instance, the first value is the index of the best performing algorithm, followed by the differences in runtime between between all algorithms and the best and the binary feature values, with a 1 indicating the feature is smaller than the threshold, or 0 otherwise. + +Algorithms in order: MaxHS, CASHWMaxSAT, EvalMaxSAT, UWrMaxSAT, Open-WBO-RES-MergeSAT, Open-WBO-RES-Glucose ,Pacose, Exact + +FEATURES: +* Size features + - 0 -> number of variables v + - 1 -> number of clauses c + - 2-4 -> ratios v/c (v/c)^2 (v/c )^3 + - 5-7 -> reciprocals of above + - 27-31 -> length of clauses, mean, var, min, max, entropy +* Balance features + - 8-12 -> fraction of positive to total per clause, mean. var, min, max, entropy + - 13-15 -> fraction of unary, binary, ternary clauses + - 16-20 -> fraction of positive occurrence for each variable, mean, var, min, max +* Horn features + - 21 -> Fraction of horn clauses + - 22-26 -> occurrences in horn clauses per variables mean, var, min, max, entropy + diff --git a/data/instance-cost-sensitive/maxsat21-32f.txt b/data/instance-cost-sensitive/maxsat21-32f.txt new file mode 100644 index 0000000..451fbbd --- /dev/null +++ b/data/instance-cost-sensitive/maxsat21-32f.txt @@ -0,0 +1,439 @@ +2 252.3548 95.80779999999999 0.0 69.06880000000001 154.8748 566.5108 14.130699999999997 3542.1368 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +2 250.85920000000002 77.8554 0.0 81.02619999999999 92.2082 94.2552 5.671499999999998 3578.3842 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +6 288.5439 7.896100000000004 2.9934000000000083 28.9199 333.1509 263.6699 0.0 3514.3819 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +2 20.93811 17.33821 0.0 17.87781 11.57491 2.45862 0.6150800000000001 78.46620999999999 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +2 228.74500000000003 25.482800000000005 0.0 41.0474 176.06900000000002 35.68280000000001 8.784200000000006 3562.27 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +2 0.38829189999999997 3.0319159 0.0 0.076981 0.0395718 0.024715800000000003 0.003959000000000001 0.1440109 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 +2 432.90400000000005 386.046 0.0 230.46499999999997 967.1299999999999 10.508000000000038 65.697 3156.79 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +6 281.87 630.91 61.15300000000002 1660.0699999999997 902.07 551.7200000000001 0.0 2835.33 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +2 1154.92 1010.98 0.0 2502.21 2392.03 830.3500000000001 352.6100000000001 2502.21 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +6 2751.3360000000002 3051.916 3051.916 3051.916 3051.916 3051.916 0.0 3051.916 0 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 +6 203.17499999999995 3237.568 3237.568 3237.568 820.058 475.832 0.0 3237.568 0 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 +6 1143.4 1143.4 1143.4 1143.4 1143.4 1143.4 0.0 1143.4 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +1 129.2255 0.0 3.1704999999999988 177.6975 47.769099999999995 3.9726999999999997 1.410499999999999 846.6775 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +5 94.47242 2.90836 7.74622 3.93982 8.132719999999999 0.0 4.28827 94.74872 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +1 48.769090000000006 0.0 3.61369 7.982290000000001 17.47179 0.18872 1.5243900000000004 191.63329000000002 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +5 86.14641 1.1717000000000004 4.26761 1.6436200000000003 5.540640000000001 0.0 1.0874699999999997 51.32051 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +2 117.61659999999999 25.554499999999997 0.0 48.3368 125.2556 98.0696 23.741300000000003 3564.6186 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +3 0.10775590000000002 41.8448719 0.0374909 0.0 0.9778318999999999 0.2445019 0.060604899999999996 0.7941509 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +3 0.0825669 21.1896029 0.039873900000000004 0.0 1.1086229 0.21119390000000002 0.0469638 0.8784858999999999 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +3 0.0829551 21.398989099999998 0.04222019999999999 0.0 1.7675091 0.5068731 0.03626909999999999 0.8547621 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +0 0.0 207.846122 0.191152 0.3839119999999999 12.113622000000001 7.432692 0.3341299999999999 12.658122 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +6 0.164188 318.109358 0.3683479999999999 0.19547800000000004 2.6394779999999995 3.4316180000000003 0.0 9.074638 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +2 0.04024699999999992 222.407936 0.0 0.11968199999999996 10.943136 5.277686 0.7682759999999998 13.048136 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +0 0.0 342.061798 0.791258 0.357518 11.705798 1.8966880000000002 0.09597199999999995 13.485498 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +0 0.0 191.97151 0.4989300000000001 0.342658 22.86861 4.26059 0.386703 9.89611 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +3 0.022897 3.779439 0.003410999999999999 0.0 0.12915 0.0668411 0.0123151 0.107192 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +3 0.019734099999999997 4.757758 0.011643 0.0 0.16363999999999998 0.0100909 0.013179899999999998 0.198478 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +3 0.0174068 4.9428809000000005 0.0101749 0.0 0.0637458 0.0226438 0.0138379 0.036816 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 +2 353.55600000000004 6.869 0.0 27.01399999999998 290.61799999999994 445.37799999999993 37.31299999999999 3476.963 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +2 83.76058 16.64428 0.0 14.07838 41.22048 43.27298 1.5390800000000002 694.57028 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +5 0.10750900000000001 0.718459 0.742652 0.16299799999999998 0.01003599999999999 0.0 0.27171999999999996 0.66621 1 1 1 1 1 0 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 +6 208.10909999999998 8.497599999999998 11.3155 19.5863 169.17409999999998 30.9673 0.0 3560.9321 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +2 1.254279 0.9987889999999999 0.0 1.182689 32.696599 25.641899 3599.677899 3.245939 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +3 8.52996 3598.34416 30.64916 0.0 43.97446 34.893860000000004 3598.34416 4.722160000000001 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +2 2.532965 1.2533750000000001 0.0 1.401955 36.359885 33.325185 3599.125785 7.900705 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +3 30.88888 723.53398 2.81718 0.0 34.24008 29.453380000000003 3597.82898 14.574779999999999 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +1 0.7651100000000004 0.0 1.74594 0.12405 26.6702 19.1645 3597.6554 8.7125 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +2 3.558783 1.0916730000000001 0.0 0.9413530000000001 45.861633000000005 37.023433000000004 3599.150333 2.9271529999999997 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 +2 1.093979 0.8742190000000001 0.0 0.9873590000000001 32.454739 24.350538999999998 3599.444339 3.434019 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 +2 8.72773 1.75309 0.0 1.07917 35.385510000000004 23.454310000000003 3599.54641 3.4558999999999997 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 +3 4.12177 304.76455 6.23482 0.0 30.27215 21.83155 3597.96455 5.48377 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +3 1750.2273 44.6811 50.0574 0.0 151.1003 72.5986 3589.3373 3589.3373 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +3 190.58499999999998 76.914 39.056 0.0 274.914 180.216 3535.063 209.57799999999997 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +1 96.62912 0.0 15.163820000000001 157.37612 35.861320000000006 21.052419999999998 3592.20412 82.23712 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +2 0.0346259 0.10658400000000001 0.0 0.0029449999999999997 0.0033710000000000025 0.003369900000000002 0.109736 0.09481 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 1 1 1 1 0 +3 8.3076 0.01570000000000249 377.8623 0.0 35.98480000000001 645.0092999999999 357.9353 442.1603 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0.0 699.833 3277.823 3277.823 1291.333 3277.823 3277.823 3277.823 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0.0 605.09563 0.06455000000000011 2.5485300000000004 1.42187 1.25249 1.54924 4.94712 1 0 1 1 1 0 0 0 1 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 +0 0.0 668.0719999999999 3319.488 569.347 103.71600000000001 3319.488 3319.488 3319.488 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0.0 601.61058 0.27027 3.7755199999999993 17.37558 9.01268 24.18218 125.01558 1 0 1 1 1 0 0 0 1 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 +2 2.2110000000000012E-4 0.007172999999999999 0.0 7.740999999999998E-4 0.003030099999999999 0.0010559999999999996 0.0023110000000000006 0.0027948999999999995 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 1 0 +2 213.35799999999995 3177.683 0.0 3177.683 3177.683 3177.683 3177.683 3177.683 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 +2 318.42 3446.615 0.0 3446.615 3446.615 3446.615 3446.615 3446.615 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 +0 0.0 3082.75 1628.0900000000001 3082.75 3082.75 3082.75 3082.75 3082.75 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 1 0 0 1 1 1 1 1 0 1 1 1 0 0 +2 1.6338400000000002 601.4449699999999 0.0 23.64387 1557.6019700000002 3596.46197 99.59397 3596.46197 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 +2 14.32829 605.66989 0.0 50.75189 848.9458900000001 1128.26389 141.78789 3595.02389 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 0 0 +3 0.0014228999999999995 11.849666899999999 5.538999999999995E-4 0.0 0.0072469000000000006 0.006574799999999999 0.007092899999999999 0.021519800000000002 0 0 1 1 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 1 1 0 1 0 1 0 0 +2 0.1665429 600.1347129000001 0.0 0.05797390000000001 2.2945428999999997 0.5042579 0.2623539 6.0516229 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 +0 0.0 3462.2690000000002 3462.2690000000002 3462.2690000000002 3462.2690000000002 3462.2690000000002 3462.2690000000002 3462.2690000000002 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 0 0 0 1 0 0 0 0 1 0 1 +0 0.0 3460.176 3460.176 3460.176 3460.176 3460.176 3460.176 3460.176 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 1 1 0 1 1 0 0 0 1 0 0 0 0 1 0 1 +3 0.021243099999999997 0.105294 2.360000000000001E-4 0.0 0.017459099999999998 0.0012008999999999995 0.017201 0.11568400000000001 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 1 1 1 1 0 +2 4.34143 26.46938 0.0 27.11708 1.3917500000000003 1.8732499999999999 1.8099800000000001 11.13928 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 +6 16.4783 7.305129999999999 2.9288800000000004 7.68129 39.2999 26.9599 0.0 40.5819 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 +0 0.0 572.6750000000001 2962.265 412.78499999999997 2962.265 2962.265 2962.265 2962.265 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 +2 1.1524769999999998 8.102997 0.0 8.322937 17.465807 18.456207000000003 0.17773899999999998 3.1569369999999997 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 +2 28.1207 123.09939999999999 0.0 122.93740000000001 72.2634 10.6693 9.3461 138.89640000000003 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 +2 1.10509 4.35465 0.0 4.50915 11.098109999999998 11.207709999999999 0.02548600000000001 3.8082000000000003 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 +2 12.486939999999999 23.564639999999997 0.0 25.187940000000005 25.642740000000003 0.40217999999999954 3.2377400000000005 33.707840000000004 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 +2 1.45239 3.84811 0.0 4.10454 30.999419999999997 31.12002 2.5910400000000005 8.53895 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +2 0.0835999999999999 1.1703700000000001 0.0 1.28662 18.36042 22.22612 0.05909000000000009 1.83088 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +6 1.6404460000000003 2.957096 0.03900300000000001 3.1417360000000003 15.306876 15.515376000000002 0.0 4.280456 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 +2 4.97059 73.17285000000001 0.0 74.31325000000001 1.45682 0.4287399999999999 0.6175599999999997 13.452250000000001 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +3 1.3143000000000002 3594.72132 9.89962 0.0 77.33212 18.95082 10.12892 100.26532 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +5 0.0296789 0.1892269 0.0248569 0.004006900000000001 0.0014889000000000013 0.0 0.4863659 0.2362519 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 1 1 1 1 0 +7 0.0019991999999999996 0.014811 0.0017371 0.002286100000000001 0.002988000000000001 0.0011961999999999997 0.001039 0.0 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 +1 1.8108499999999998 0.0 37.55967 0.58873 3.0618900000000004 3.0109 40.17657 11.80217 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 1 1 +1 1.80761 0.0 37.835429999999995 0.5870699999999998 3.3488399999999996 3.2740199999999997 43.41253 11.76383 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 +2 3.792551 2.241711 0.0 2.823811 5.272221 5.614241 0.7395910000000001 13.788411 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 0 1 0 0 1 1 1 +1 1.7735799999999995 0.0 37.89779 0.5947 3.34836 3.5704499999999997 39.32029 11.90429 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 +1 1.8065100000000003 0.0 35.25485 0.58792 3.6927899999999996 3.4980900000000004 35.93815 12.023050000000001 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 0 1 1 1 1 0 1 1 1 1 +2 3.86591 2.25916 0.0 2.82688 5.102200000000001 5.20936 0.7339699999999999 13.77497 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 0 1 0 0 1 0 1 +5 21.285200000000003 23.6464 4.896099999999999 31.93 2.9700000000000006 0.0 32.383900000000004 3586.5234 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +5 127.35660000000001 457.03760000000005 37.2996 482.0746 18.799499999999995 0.0 374.0846 3534.9966 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +5 128.9654 457.25939999999997 37.756400000000006 483.0744 19.9583 0.0 376.7354 3536.1034 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +5 129.42000000000002 458.06 39.843999999999994 483.80400000000003 22.237099999999998 0.0 373.871 3537.378 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +2 15.384600000000002 42.0201 0.0 45.733999999999995 7.002199999999998 1.0601999999999983 12.8717 3568.0551 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 +2 15.1984 45.64939999999999 0.0 45.397299999999994 6.585299999999997 0.818099999999994 12.837299999999999 3567.9646 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 1 1 1 1 0 0 1 1 1 +4 228.89088 2.4950799999999997 47.19928 0.33065999999999995 0.0 0.05163000000000029 6.10396 2.2956000000000003 1 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 +5 373.38860000000005 157.1516 10.877600000000001 64.1599 1.2342299999999997 0.0 65.6608 45.9441 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 +5 13.972420000000001 30.501820000000002 21.93102 5.2200299999999995 1.5472200000000003 0.0 8.28492 256.26642 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 +2 3.0863880000000004 2.302148 0.0 2.9510579999999997 64.742038 56.394437999999994 25.126138 10.053738000000001 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +1 19.0536 0.0 1.0334000000000003 1.1043000000000003 90.4674 27.6062 24.3204 19.4761 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +2 17.65823 17.90533 0.0 22.42973 136.32923 20.52853 24.05483 47.86173 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +2 26.47804 63.407340000000005 0.0 13.91184 8.76214 8.16964 31.85994 308.79233999999997 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 1 0 1 +2 17.77491 51.29901 0.0 9.50831 8.72251 8.01591 10.351609999999999 239.01081000000002 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 1 0 1 +3 518.1917500000001 10.874749999999999 85.30595 0.0 84.52664999999999 36.904349999999994 108.23375 3590.10175 0 1 0 0 0 1 1 1 0 1 1 1 1 1 0 0 0 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 +5 368.91937 16.29587 7.163169999999999 13.552470000000001 39.16707 0.0 4.69225 29.426770000000005 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 1 1 1 0 1 0 1 +3 1123.8612 78.7662 598.0022 0.0 59.160700000000006 1.0075999999999965 358.8032 3564.1711999999998 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 1 1 1 0 1 0 1 +3 146.18609999999998 0.7218 18.723100000000002 0.0 123.40809999999999 1.135299999999999 418.3851 3586.6351 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 0 1 +2 1.3773199999999999 600.02821 0.0 0.013809000000000016 0.682513 0.28795800000000005 0.089669 1.5354299999999999 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 +2 0.00763902 0.23590602 0.0 0.00630002 0.007781119999999999 0.006735019999999998 0.008204119999999999 0.05485012 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 0 0 0 1 1 1 0 0 0 1 0 0 +0 0.0 284.00259 220.29558999999998 3594.08359 3594.08359 3594.08359 3594.08359 3594.08359 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 286.11285999999996 338.99086 3594.03986 3594.03986 3594.03986 3594.03986 3594.03986 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +6 0.2912069 0.2698889 0.012291999999999997 0.3102959 18.760729899999998 17.5722299 0.0 1.4092199 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 +6 2.8548100000000005 1.30097 0.8103800000000003 1.32225 65.26136 55.95536 0.0 7.676089999999999 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 +2 3.32662 1.9866599999999999 0.0 2.04887 78.72416 68.70626 0.41642999999999986 10.73076 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 +6 13.6064 41.379400000000004 14.005400000000002 40.558899999999994 27.8528 4.9825 0.0 210.0814 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 +6 2.954636 3.9317159999999998 0.299806 4.361846 1.8382059999999998 0.14011699999999994 0.0 27.013876 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 +2 0.674064 1.7637049999999999 0.0 1.875115 55.871395 56.248195 7.379999999999887E-4 3.9154649999999998 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 +2 0.2723881 0.20014710000000002 0.0 0.23702410000000002 10.7226351 10.6188351 0.015944200000000006 2.0671151 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 +0 0.0 1502.0 1502.0 1502.0 1502.0 1502.0 1502.0 1502.0 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 +6 0.341872 0.859945 0.012897999999999993 0.9100729999999999 22.232196000000002 25.280696 0.0 3.324796 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 +0 0.0 2439.02 2439.02 2439.02 2439.02 2439.02 2439.02 2439.02 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 1 0 0 1 1 1 1 1 0 1 0 1 1 0 +2 0.649911 601.772051 0.0 3599.437051 12.825851 8.054131 1.093541 4.0763110000000005 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 +5 1.890961 0.268927 0.007981999999999989 0.36638899999999996 0.02798900000000004 0.0 0.42402799999999996 90.066661 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 1 1 1 1 0 0 1 0 1 +5 0.006435099999999999 0.041125999999999996 0.055268 0.0128021 7.399000000000017E-4 0.0 0.12018600000000002 0.0658329 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 1 0 1 0 0 0 0 1 0 0 1 1 1 1 0 +4 0.011374000000000002 0.05450800000000001 0.047815 0.0350019 0.0 1.131000000000014E-4 0.11533600000000002 0.09334300000000001 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 0 1 0 1 0 0 0 0 1 0 0 0 1 1 1 0 +5 0.10248389999999999 0.21629990000000002 0.5300479 0.2462439 0.015951900000000005 0.0 3599.9088069 1.3747469 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 0 0 1 0 1 1 1 1 1 0 +0 0.0 3.901699999999998 128.6741 7.032899999999998 343.40909999999997 155.0551 43.6877 317.5421 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +0 0.0 7.944599999999994 369.10490000000004 8.637899999999995 319.3819 320.89790000000005 286.3529 1351.2339 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +1 2.07747 0.0 66.95157 0.35228000000000037 65.39467 51.55807 67.88797 221.55437 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +6 15.721100000000003 18.246800000000004 37.226699999999994 17.4487 144.6669 55.87780000000001 0.0 56.66550000000001 1 1 0 0 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +1 9.131900000000002 0.0 64.5798 3.816899999999997 119.74780000000001 48.3783 28.8881 516.9568 1 1 0 0 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +0 0.0 2422.58 2490.25 2083.37 2490.25 2490.25 1812.87 2490.25 1 1 0 0 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +5 0.3202400000000001 8.253060000000001 10.293569999999999 7.56529 0.7194 0.0 3598.98787 14.632570000000001 1 1 0 0 0 1 1 1 0 0 1 1 1 1 1 0 1 1 0 1 1 0 0 0 1 0 1 1 1 1 1 0 +3 1051.08182 604.7248199999999 49.62512 0.0 33.58422 0.20203999999999933 619.19382 3592.37182 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 0 1 0 0 0 0 0 1 1 1 0 0 1 0 0 +5 240.88656999999998 41.89187 34.377269999999996 19.26787 0.7745300000000004 0.0 3596.44857 3596.44857 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 1 +3 925.4830000000001 608.914 50.4452 0.0 43.5441 21.280600000000003 750.743 3583.812 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 1 1 0 0 1 0 0 +5 10.392058 631.509758 2.040848 0.505408 0.255576 0.0 40.576558 19.639558 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 1 +5 6.960192 649.574072 1.994202 0.16549000000000003 0.11621999999999999 0.0 26.295071999999998 45.951372 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 1 +5 8.725511999999998 612.038172 2.792772 0.723822 0.078766 0.0 42.921471999999994 41.077172 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 1 +3 13.627619999999999 606.18742 0.62751 0.0 0.81189 0.16826000000000008 6.00622 8.949919999999999 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 +3 361.87296 602.1119600000001 3.30217 0.0 28.59786 2.35103 217.52295999999998 3596.92996 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 +3 22.71892 600.77102 2.07876 0.0 0.6475799999999998 0.11863000000000001 54.883720000000004 29.52102 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 +3 201.34813 602.18813 1.80383 0.0 9.500330000000002 1.8496299999999999 307.37413 23.35283 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 +5 51.039159999999995 600.07066 0.9006900000000002 0.011830000000000007 0.92228 0.0 21.249660000000002 12.34706 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 +3 133.34126 602.49726 2.53237 0.0 3.63888 0.8793700000000002 104.48726 8.17021 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 +3 384.15706 603.6890599999999 4.733 0.0 1.8076599999999998 0.033279999999999976 237.87506000000002 63.28306 1 0 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 +2 46.735600000000005 134.1981 0.0 510.76709999999997 3582.8381 3582.8381 3582.8381 2012.6081 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 0 0 0 1 0 1 1 1 1 1 0 +3 1.69574 0.805793 0.617911 0.0 5.99728 6.04078 0.065778 0.148477 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 +2 1.8465950000000002 28.778235000000002 0.0 0.012399 5.263915 5.501855 0.051503900000000005 0.147808 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 +6 100.648106 0.06516499999999997 0.9039759999999999 0.08901599999999998 14.018006 12.486605999999998 0.0 2.000576 0 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 1 +0 0.0 247.85239990000002 0.014626899999999998 0.025807800000000006 0.0611849 0.043752799999999994 0.0058869000000000005 0.4086749 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0 0 1 1 1 1 1 0 1 0 1 1 0 +5 143.53829 46.16949 19.178289999999997 16.58039 1.9849099999999993 0.0 3594.85929 3594.85929 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 0 1 0 0 1 0 1 +5 0.880659 8.283419 0.8372290000000001 0.32948500000000003 0.011268 0.0 0.212938 54.412228999999996 1 0 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 0 0 +5 0.33680889999999997 3.6273239 0.6885859000000001 0.24223989999999998 0.001599800000000002 0.0 0.022209899999999998 3.7706439 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 +6 1711.649 808.6689999999999 1002.6489999999999 776.0889999999999 398.579 198.09999999999997 0.0 300.517 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 +5 1735.581 1631.9509999999998 1148.491 1464.8410000000001 698.5910000000001 0.0 37.59000000000003 2988.7110000000002 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 +4 422.55999999999995 879.1999999999998 1362.15 2481.87 0.0 287.6299999999999 2481.87 124.92999999999984 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 +5 1128.1399999999999 1320.48 2294.5299999999997 1231.05 1040.96 0.0 754.335 426.65100000000007 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 +3 1048.5886 22.48 146.1266 0.0 3580.1486 27.3374 31.6632 3580.1486 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +1 274.1617 0.0 91.2787 3.6997 43.422399999999996 19.179499999999997 2.7342999999999993 890.0757 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +3 59.42618 2.9489600000000005 31.698780000000003 0.0 34.21818 17.898880000000002 6.131479999999999 45.97598 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +6 552.8019999999999 19.2546 148.523 14.4464 25.770799999999998 24.567199999999996 0.0 3580.127 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +5 377.6249 59.08089999999999 199.3909 35.812000000000005 53.500899999999994 0.0 46.1565 3546.5049 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +1 3528.4211 0.0 559.8911 193.22509999999997 147.6441 59.8741 364.9751 3528.4211 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +6 516.2275 4.4780999999999995 49.938500000000005 10.958700000000002 24.7755 26.540800000000004 0.0 295.74150000000003 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +3 130.0498 1.7459000000000007 78.1541 0.0 43.4729 25.5409 9.6982 3586.6338 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +3 28.855359999999997 1.9195799999999998 12.03106 0.0 22.08176 11.57566 1.1099499999999995 9.477160000000001 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +3 244.58839999999998 2.7104999999999997 87.5517 0.0 47.994800000000005 49.7434 8.9305 3587.7004 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +3 78.14995 5.47775 37.60575 0.0 38.07625 20.147350000000003 13.975050000000001 58.060249999999996 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +3 62.866609999999994 1.7915400000000004 47.73971 0.0 24.807810000000003 6.33241 0.8525099999999997 1400.3802099999998 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 1 +1 922.9730000000001 0.0 499.42499999999995 36.33699999999999 1715.9730000000002 3440.093 3164.393 3440.093 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +1 1339.0502000000001 0.0 261.4382 17.6608 278.7512 231.3942 282.5382 3570.1202 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +6 2.162316 113.241696 0.338859 0.019354999999999983 0.493275 0.159369 0.0 2.8774859999999998 1 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 0 0 1 0 0 +6 3557.4771 80.7801 138.8631 1.4968000000000004 66.98509999999999 62.2741 0.0 2436.0871 1 1 0 0 0 1 1 1 0 1 1 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 1 1 1 1 1 0 +5 45.589839999999995 1.02229 0.4949399999999997 1.3708399999999998 0.04772999999999983 0.0 2.07345 731.16934 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 +3 218.62040000000002 1.8153000000000006 31.8926 0.0 41.549 7.530400000000002 127.0854 3587.2734 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 +5 110.97652 0.29799 4.8270800000000005 2.1547799999999997 2.9898300000000004 0.0 26.623620000000003 1066.51952 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 0 1 +2 77.755086 0.784846 0.0 0.18453599999999992 4.017526 0.223086 15.970285999999998 185.984286 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 0 1 0 1 +5 136.01656 11.66556 13.56596 12.27006 27.44506 0.0 33.134159999999994 347.82956 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 +6 3.9387109999999996 602.3182310000001 2.340141 0.8249709999999999 1.157691 0.155399 0.0 8.374811000000001 0 0 1 1 1 0 0 0 1 0 1 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 0 0 0 1 0 0 +6 7.649456 603.515076 6.930726 4.604736 3.312226 1.1844459999999999 0.0 48.734376000000005 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0 1 0 0 +6 41.69885 62.86225 3.6551899999999997 1.5280399999999998 0.2356 0.017963000000000007 0.0 121.83475 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 0 0 1 0 1 0 0 +6 129.20818 613.96218 54.95558 16.73578 8.184379999999999 5.12355 0.0 991.51018 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 1 1 0 1 0 0 0 0 1 0 0 +6 116.982597 611.881597 7.266887 5.600657 1.0185170000000001 0.19162099999999999 0.0 876.850597 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 0 0 1 0 1 0 0 +6 11.293922 607.7531220000001 1.600422 4.166462 5.602702000000001 1.6611820000000002 0.0 2952.4281220000003 0 0 1 1 1 0 0 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 0 0 +6 108.62221389999999 605.0192139 36.6830139 1.7435638999999998 0.5903239 0.1574319 0.0 3599.9232139 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 0 0 1 0 1 0 0 +6 108.4668191 602.1608191 32.4400191 49.2345191 0.8056291 0.2360101 0.0 3599.9168191 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 +6 107.7201141 603.1741141 38.6403141 4.2332241 0.5330450999999999 0.46774010000000005 0.0 3599.9381141 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 1 1 0 1 0 1 0 0 +6 35.59557 678.5059699999999 40.84667 133.05597 41.12867 30.513569999999998 0.0 3592.76897 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0 1 0 0 +4 42.45866 658.36916 43.45816 133.30216000000001 0.0 3.0721600000000002 0.7981699999999998 3592.96016 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 1 1 0 1 1 1 0 0 1 0 0 +6 134.670531 617.4045309999999 6.376541 9.855531 6.898320999999999 3.107271 0.0 3599.806531 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 1 1 0 1 0 1 0 0 +3 3467.493 285.265 3467.493 0.0 3467.493 3467.493 3467.493 3467.493 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 0 +3 3115.83 101.36499999999995 3115.83 0.0 3115.83 3115.83 3115.83 3115.83 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 +1 2513.4300000000003 0.0 2513.4300000000003 428.73 2513.4300000000003 2513.4300000000003 2513.4300000000003 2513.4300000000003 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 +3 27.893060000000002 0.47944999999999993 1.78468 0.0 35.329159999999995 11.528559999999999 3598.73186 9.297659999999999 1 1 0 0 0 1 1 1 0 0 1 1 0 1 1 0 0 1 0 0 0 0 0 0 1 0 1 1 1 1 1 1 +3 129.94795000000002 2.32005 29.88675 0.0 10.063749999999999 5.8424499999999995 3591.60595 37.58795 1 1 0 0 0 1 1 1 0 0 1 1 0 1 1 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 1 1 +3 69.11958 0.2219199999999999 6.83638 0.0 104.13398000000001 35.46968 3595.30598 10.214879999999999 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 1 1 +3 0.6715400000000002 0.5794999999999999 5.45087 0.0 786.6753699999999 3597.75537 3597.75537 21.796969999999998 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 1 1 +3 7.7257 0.9636999999999993 13.693000000000001 0.0 3585.0855 3585.0855 3585.0855 49.19499999999999 1 1 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 1 1 +5 61.385200000000005 9.4313 71.51939999999999 0.899799999999999 6.813500000000001 0.0 3584.6689 14.880200000000002 1 1 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 1 1 +3 3582.6731 5.755100000000002 25.0001 0.0 3582.6731 3582.6731 3582.6731 64.762 1 1 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 1 1 +3 8.461390000000002 2.47797 8.21229 0.0 2693.17189 3594.02189 3594.02189 28.360689999999998 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 1 1 +3 29.48854 0.85466 4.337540000000001 0.0 20.14024 3593.86744 3593.86744 61.95134 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 1 1 +6 0.07256599999999999 22.262113 0.120725 0.007683999999999996 0.0043239999999999945 0.011479099999999999 0.0 0.047075 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 0 0 1 1 1 1 0 1 0 1 0 0 +6 328.32399999999996 64.018 217.706 62.339 637.775 80.18100000000001 0.0 618.876 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +2 40.585429999999995 3.61617 0.0 1.30008 0.3268900000000001 0.12349999999999994 1.41166 406.12073000000004 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 +3 1.7316729 9.0320829 0.0039199000000000005 0.0 1.9490129 0.3584379 0.1449519 248.5979329 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +2 5.6990659 25.3268659 0.0 8.618999999999988E-4 0.0341588 0.037558 0.23410889999999998 363.0737659 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +2 2.880199 43.675819 0.0 0.131443 24.071419 3.535809 0.104141 40.486119 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +2 100.1944769 184.1554769 0.0 0.37774189999999996 2.6245469 0.13399090000000002 0.9124939000000001 1788.1134769 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 141.434188 0.007955900000000002 0.04357300000000001 3599.956188 3599.956188 0.744958 1152.996188 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +2 18.680549099999997 111.6016491 0.0 1.2044991 21.3885491 1.7201291 0.8413731 3599.9436491 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +2 103.080052 141.883052 0.0 0.26526700000000003 0.300788 0.217984 0.5530759999999999 3599.884052 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +2 122.064024 3599.637024 0.0 3.5126839999999997 7.6640239999999995 2.1923739999999996 5.706904000000001 3599.637024 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 311.596706 0.26988600000000007 0.13623300000000005 10.925305999999999 0.2879259999999999 2.8555460000000004 3599.269706 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 433.129797 0.144248 0.18146 9.907197 0.7021569999999999 3.475117 3599.766797 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +2 103.22397 604.71497 0.0 14.36217 9.576469999999999 10.26197 78.55117 3597.78497 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +3 1.7001000000000008 601.6486 5.361800000000001 0.0 27.7027 49.009699999999995 27.720800000000004 3584.2706 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +7 219.1309 318.4399 308.7449 124.6149 101.0329 118.81289999999998 244.7729 0.0 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 0 1 1 0 +7 334.997 3297.478 3297.478 3297.478 2656.918 3297.478 3297.478 0.0 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 0 0 1 1 1 0 0 0 1 1 0 +7 350.12620000000004 853.8442 219.2082 140.0322 283.01020000000005 166.2972 275.85519999999997 0.0 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 1 0 +0 0.0 699.1086 47.7841 133.8896 151.1996 784.3416000000001 205.40560000000002 588.6186 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 1 0 1 1 0 +7 1553.8603500000002 2596.9403500000003 3598.43035 3598.43035 3598.43035 3598.43035 3598.43035 0.0 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0 0 0 1 1 0 +2 104.43834 600.28134 0.0 3.4700800000000003 23.50384 1.9585100000000004 275.02934 179.88434 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 0 1 1 1 +2 202.76680000000002 707.3828 0.0 257.8698 128.4128 26.145400000000002 2514.2058 3564.6758 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 1 1 0 0 1 0 1 1 0 +2 11.595773000000001 0.817733 0.0 1.106213 5.859193 3.4509730000000003 20.284073 7.170513 0 1 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 1 0 1 1 1 +7 47.7405 652.4025 207.23549999999997 23.57249999999999 1226.6685 380.6965 111.93449999999999 0.0 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 1 0 1 1 0 +3 109.3181 14.999400000000001 12.805900000000001 0.0 46.26390000000001 24.0574 222.74509999999998 1113.7041000000002 0 1 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 1 0 1 1 1 +2 165.8059 56.262899999999995 0.0 30.836499999999994 74.0649 5.403399999999998 27.034100000000002 1705.0279 0 1 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 0 1 1 1 0 1 0 1 1 1 +5 174.3844 20.840400000000002 4.172499999999999 20.9366 23.988500000000002 0.0 43.345800000000004 582.8104 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 1 1 1 +5 71.3774 611.8854 161.4554 8.86 128.0664 0.0 3569.8294 1263.3094 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 +0 0.0 609.17185 14.92355 8.51255 44.036950000000004 4.11508 3597.17685 95.35835 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 +3 76.64447000000001 600.51987 24.75157 0.0 82.01616999999999 13.972470000000001 3591.15287 230.99187 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 +2 20.25637 57.57877 0.0 2442.10557 2796.5655699999998 1046.88557 3596.82557 3596.82557 0 0 0 0 0 1 1 1 1 0 1 1 0 1 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +5 4.2768060000000006 24.171765999999998 0.4784280000000001 0.826986 0.952386 0.0 3599.480566 0.8554460000000002 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +3 0.24680599999999997 1.9506830000000002 3.454163 0.0 34.821782999999996 3599.597283 3599.597283 3.170783 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +2 13.04067 579.9813700000001 0.0 3597.42037 85.76877 3597.42037 3597.42037 3597.42037 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +0 0.0 2329.1 2329.1 2329.1 2329.1 2329.1 2329.1 2329.1 0 0 0 0 0 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +3 1.1277409999999999 9.500021 4.727640999999999 0.0 27.728801 14.384301 239.985501 2.2840510000000003 0 0 0 0 0 1 1 1 1 0 1 1 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +5 4.30761 169.87523 1.58155 1.218 9.64313 0.0 3598.79923 13.64223 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +5 0.23468509999999998 2.4602241 1.0995141 0.1204181 0.05105009999999999 0.0 3599.9065741 0.7006241 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 16.8014 188.2208 3589.9088 3589.9088 3589.9088 3589.9088 3589.9088 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +0 0.0 38.616339999999994 188.41694 3590.51794 3590.51794 3590.51794 3590.51794 3590.51794 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +0 0.0 7.84893 4.2076 159.93533 3597.73933 3597.73933 3597.73933 3597.73933 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +3 4.9914000000000005 4.995100000000001 51.4567 0.0 89.4119 238.0099 3589.2559 223.8769 1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 0 0 1 0 0 1 1 1 1 0 +2 0.101818 1.858575 0.0 0.0014939999999999988 0.145509 0.14271499999999998 5.759999999999984E-4 0.016346899999999998 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 +3 322.5799999999999 150.98000000000002 322.5799999999999 0.0 322.5799999999999 322.5799999999999 322.5799999999999 322.5799999999999 1 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1 0 1 1 0 1 0 1 0 1 1 1 1 1 0 +0 0.0 599.8767 11.6572 196.3717 1306.2477 3320.6776999999997 3505.1077 3582.7477 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 +2 0.05589619999999999 0.0769171 0.0 0.0889901 0.0199332 0.019735200000000005 0.005897100000000002 0.3723261 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 1 1 1 1 0 +0 0.0 0.3936311 11.3700431 7.3192031 164.7383431 90.8138431 4.7156131 0.1548641 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 +7 1597.8092199999999 5.81852 3595.00922 3595.00922 3595.00922 3595.00922 3595.00922 0.0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 +3 6.615469999999999 4.08067 39.5616 0.0 209.5901 369.7631 54.3874 765.2411 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 +3 0.004982200000000001 0.3801631 0.0031450000000000002 0.0 0.0022331 0.0018211000000000008 0.002519200000000001 0.22136609999999998 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 +5 3.024541 17.926631 1.206451 0.08951699999999999 0.37323 0.0 0.290263 3.5444310000000003 0 0 1 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 +5 1.2742740000000001 22.393283999999998 0.182285 0.0254601 0.090803 0.0 0.034318999999999995 0.446652 0 0 1 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 +5 13.156600000000001 80.093 430.33119999999997 16.0516 6.525600000000001 0.0 158.77820000000003 3582.1982 0 0 1 1 1 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 +5 14.884421999999999 30.567022 12.771222 0.6080730000000001 0.851602 0.0 7.876902 227.29572199999998 0 0 1 1 1 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 +5 7.9548700000000006 28.92056 54.95886 0.009419999999999984 1.3576199999999998 0.0 6.30086 133.28516000000002 0 0 1 1 1 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 +0 0.0 56.609399999999994 3528.5864 3528.5864 3528.5864 1852.2364 3528.5864 3528.5864 0 0 1 1 1 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 1 0 1 0 0 +0 0.0 12.398799999999994 1276.9898 2282.8298 233.95879999999997 157.3628 3505.5298 3505.5298 0 0 1 1 1 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 0 0 1 0 1 0 0 +0 0.0 128.9717 3539.2967 3539.2967 1069.7067000000002 822.2407 3539.2967 3539.2967 0 0 1 1 1 0 0 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 +1 110.13299999999998 0.0 3461.421 3461.421 3461.421 3461.421 3461.421 3461.421 0 0 1 1 1 0 0 0 1 0 1 1 0 0 0 1 1 1 1 1 0 1 0 0 1 0 0 1 0 1 0 0 +0 0.0 109.5396 3518.9036 3518.9036 3518.9036 3518.9036 3518.9036 3518.9036 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 0 1 0 1 0 0 +0 0.0 132.7467 3516.4717 3516.4717 3516.4717 3516.4717 3516.4717 3516.4717 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 0 0 0 1 0 0 +0 0.0 11.4336 704.1419999999999 852.7379999999999 3585.141 3585.141 3585.141 3585.141 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 1 0 1 1 0 1 0 0 0 0 1 0 0 +6 522.383 530.733 1708.523 815.223 1083.703 318.06500000000005 0.0 3006.423 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +2 20.451819999999998 0.8816099999999998 0.0 1.18776 0.1924999999999999 0.055709999999999926 1.5643099999999999 677.9810200000001 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 0 1 +5 53.80983 14.531129999999997 5.536449999999999 9.19023 0.3675900000000003 0.0 11.974329999999998 3596.45263 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 0 1 +3 63.4978 1.2726000000000006 88.8018 0.0 279.0538 43.90740000000001 35.11579999999999 367.7378 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 +3 484.64800000000014 156.94600000000003 343.6980000000001 0.0 2778.518 2778.518 2778.518 2778.518 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +3 827.734 118.95399999999995 187.31499999999994 0.0 2959.334 2959.334 2959.334 2959.334 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +3 2781.124 371.18399999999997 267.884 0.0 2781.124 2781.124 2781.124 2781.124 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +3 2609.303 32.93299999999999 156.08299999999997 0.0 2609.303 2609.303 2609.303 2609.303 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +0 0.0 1077.7800000000002 1077.7800000000002 1077.7800000000002 1077.7800000000002 1077.7800000000002 1077.7800000000002 1077.7800000000002 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +3 136.54299999999998 138.415 36.536 0.0 3469.706 3469.706 790.724 3469.706 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +3 172.428 237.978 139.961 0.0 3349.276 3349.276 3349.276 3349.276 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +3 122.07300000000001 123.75300000000001 20.349000000000018 0.0 3471.638 3471.638 409.475 3471.638 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +3 713.833 110.875 167.74199999999996 0.0 2832.803 2832.803 2832.803 2832.803 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +2 1328.4500000000003 7.085000000000036 0.0 29.641000000000076 2857.09 2857.09 2857.09 2857.09 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +3 61.06700000000001 106.32900000000001 42.61500000000001 0.0 3490.535 3490.535 315.43999999999994 3490.535 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +0 0.0 3080.457 3080.457 3080.457 3080.457 3080.457 3080.457 3080.457 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +2 0.009613 0.206291 0.0 0.006717000000000001 0.022855999999999998 0.021873100000000003 0.0016538999999999998 0.027947999999999997 0 0 0 0 0 1 1 1 0 1 1 1 0 0 1 0 0 1 1 0 0 0 0 0 1 0 0 1 1 1 0 0 +6 1.5038600000000002 2.5553800000000004 3.33678 2.4669600000000003 6.683660000000001 6.30217 0.0 4.38704 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 +6 2.14922 3.0510000000000006 6.35078 2.8848 13.835240000000002 7.60684 0.0 7.40774 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 +6 5.19496 2.34535 11.299159999999999 3.6769599999999993 31.439860000000003 9.455259999999999 0.0 54.373760000000004 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 +3 0.5357000000000056 0.39970000000000994 151.7987 0.0 347.1497 55.419700000000006 31.74170000000001 470.8607 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 +6 125.56299999999999 13.177999999999997 482.368 0.8279999999999745 575.5029999999999 86.793 0.0 1830.146 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 +0 0.0 140.95000000000005 1093.2800000000002 680.1300000000001 1733.7800000000002 280.74 737.2800000000002 2217.77 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 +0 0.0 692.9789999999999 692.429 420.87700000000007 2783.0789999999997 521.125 868.2790000000001 3222.129 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 +0 0.0 705.0450000000001 2231.375 1407.5249999999999 2354.5649999999996 770.2049999999999 1321.5249999999999 2965.4049999999997 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 +3 0.1560819 11.1999969 0.020033899999999993 0.0 0.028557799999999994 0.006638999999999999 0.005120999999999994 0.7803209 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +2 0.0033390000000000017 1.093721 0.0 0.0026639999999999997 0.0011279000000000011 9.078999999999997E-4 0.010010100000000001 0.0073110000000000015 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 +3 0.0110149 2.9288578999999997 7.240000000000007E-4 0.0 0.007336900000000002 8.190000000000107E-5 0.007650800000000001 0.022666000000000006 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 3.544399 3599.297659 3599.297659 3599.297659 3599.297659 3599.297659 3599.297659 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +5 2.044381 0.724537 7.188931 2.448341 0.254077 0.0 3599.775661 4.264931000000001 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 0 0 0 1 1 1 0 1 1 1 1 0 +0 0.0 15.339249999999998 3598.87055 3598.87055 3598.87055 3598.87055 3598.87055 3598.87055 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 1 1 1 0 0 0 0 0 1 0 0 1 1 1 1 0 +5 0.122815 0.359521 0.12938699999999997 0.044911900000000005 0.120328 0.0 10.38039 1.2442 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +5 0.5722210000000001 9.022786 0.311024 0.06961299999999998 1.0450059999999999 0.0 3599.812336 3599.812336 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +0 0.0 2.57286 2183.7939699999997 3596.05397 3596.05397 3596.05397 3596.05397 3596.05397 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +0 0.0 6.182333 241.83728299999999 3599.064283 3599.064283 3599.064283 3599.064283 3599.064283 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +5 0.051518100000000004 0.8451081 0.6566911000000001 0.08093410000000001 0.15246010000000002 0.0 23.2525231 5.979443099999999 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +5 0.0043458 0.0015837999999999998 2.999000000000005E-4 8.459000000000001E-4 0.0016150000000000001 0.0 0.0020599 0.0020388000000000003 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 +6 0.0030691 0.019122099999999996 3.320000000000007E-4 3.3009999999999984E-4 0.0011871 0.0027951 0.0 0.004721100000000001 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 0 1 0 0 0 0 0 1 0 0 1 1 1 0 0 +5 0.2868111 0.8981631 0.009194200000000003 0.0526532 0.049592 0.0 0.1452991 0.2369421 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 0 1 0 0 0 0 0 1 0 0 1 1 1 0 0 +3 0.078853 600.0130809999999 0.10044499999999998 0.0 0.34814 3.241851 0.008203999999999989 1.2389510000000001 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +3 1.748522 7.248742 0.109848 0.0 2940.6655119999996 1818.245512 3599.945512 1.6438819999999998 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 +0 0.0 0.874716 21.530186 0.449576 150.144486 433.620486 3599.383486 38.482586 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 1 0 1 1 0 0 0 1 1 1 0 1 1 1 1 0 +0 0.0 145.402402 0.17026200000000002 0.11940200000000001 0.346176 0.17597000000000002 0.10667599999999999 6.602322 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +5 0.04166700000000001 148.253266 0.17076599999999997 0.163007 0.06537500000000002 0.0 0.15792699999999998 5.003456 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 87.401148 0.070849 0.180126 0.024445999999999996 0.063168 0.050536 1.089458 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 0.110689 0.0020809999999999995 9.960000000000004E-4 0.57211 0.784461 0.014615 0.0192631 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 0.09707009999999999 0.0028500999999999995 5.60999999999999E-4 0.1655771 0.2245481 0.0113952 0.0198312 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 0.1174819 0.007350799999999999 0.0014249999999999992 0.1917139 0.24980590000000003 0.0026749999999999986 0.0188568 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 +2 0.0555261 2.470099 0.0 14.887609 118.286109 42.954108999999995 329.892109 0.254768 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +6 213.7309 19.858800000000002 58.11789999999999 121.1009 603.8019 284.3509 0.0 3525.1919 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +1 122.38593999999999 0.0 24.00184 0.31881000000000004 70.61524 51.36694 11.888940000000002 228.15294 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 +1 0.0019942 0.0 0.0028631999999999998 8.900000000000002E-4 0.0020581 0.0012511999999999992 0.011038199999999998 1.2009999999999972E-4 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 1 1 0 1 0 0 0 0 1 0 0 1 1 1 1 0 +1 0.001680899999999999 0.0 0.0027408999999999975 0.0010048999999999995 3.119999999999998E-4 0.0041530000000000004 0.0056369 0.0023838999999999996 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 1 1 0 0 0 0 0 0 1 0 0 1 1 1 1 0 +3 13.841699 556.964399 0.908719 0.0 8.270559 0.905329 4.996719 476.89139900000004 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 1 0 +6 2622.284 2622.284 2622.284 2622.284 2622.284 2622.284 0.0 2622.284 1 1 0 0 0 1 1 1 1 0 1 1 1 0 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 +2 0.0387639 0.08812899999999999 0.0 0.07628299999999999 0.0160261 0.013677099999999998 0.033682899999999995 0.29262499999999997 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 1 1 0 1 0 0 0 0 1 0 1 1 1 1 1 0 +3 0.926277 25.391467 7.014017 0.0 0.6874979999999999 1.405017 0.37878 0.301484 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 1 1 0 0 +5 2.353052 10.043462 2.954702 0.5770820000000001 0.12051299999999998 0.0 3.387752 3.9180720000000004 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0 1 1 1 1 +5 2.55466 13.01833 3.8184699999999996 0.78087 0.20012399999999997 0.0 5.04329 4.3777 0 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 +5 0.83353 8.13253 2.8331999999999997 0.710019 0.24323499999999998 0.0 4.274 4.24831 0 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0 1 1 1 1 +5 8.497378 2.591118 1.600888 0.582451 0.14304699999999998 0.0 7.910268 3.1089879999999996 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1 0 1 1 1 1 0 +5 0.549974 5.0097949999999996 2.4383049999999997 0.374128 0.07608399999999998 0.0 3.8863149999999997 3.006865 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 +5 1.0810309999999999 12.417811 3.3754109999999997 0.627183 0.11255400000000004 0.0 3.587901 3.371671 0 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 +5 0.5886100000000001 2.182794 1.113624 0.34657400000000005 0.11069399999999999 0.0 6.760434 3.556184 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1 0 1 1 1 1 0 +5 1.909399 7.360389 2.314299 0.44579699999999994 0.09670499999999999 0.0 2.590039 3.9740789999999997 0 1 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0 1 1 1 1 +5 0.599839 2.197563 1.318053 0.36280200000000007 0.138768 0.0 6.761782999999999 4.225473 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 1 0 1 1 1 1 0 +5 2.620584 8.593104 3.098274 0.580431 0.10226300000000002 0.0 3.2856940000000003 3.817384 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 +5 2.2959359999999998 8.772066 3.130946 0.535495 0.127947 0.0 3.5356959999999997 3.3698259999999998 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 0 1 1 1 1 +6 1.213789 1.8450989999999998 0.094887 2.190179 4.141259 4.151498999999999 0.0 6.216508999999999 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 0 1 1 0 0 0 1 0 1 0 1 1 1 1 +2 1.958789 2.2754689999999997 0.0 2.660599 8.912579 8.815949 115.237019 109.97001900000001 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 0 1 1 0 0 0 1 0 1 0 1 1 1 1 +6 1.6286040000000002 2.3626840000000002 0.10861399999999999 2.844644 0.6510539999999999 0.10589300000000001 0.0 7.049624 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 0 1 1 0 1 1 0 0 0 1 0 1 1 1 1 1 1 +6 7.904503999999999 112.173344 1.4478240000000002 0.24747300000000005 1.406374 0.03612900000000008 0.0 4.034243999999999 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 +3 2.9554470000000004 347.684397 2.720397 0.0 2.688007 0.13422599999999996 0.10297800000000001 4.824107000000001 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 +2 0.0016769000000000003 0.012449100000000001 0.0 0.0022021000000000002 7.290000000000005E-4 3.131000000000002E-4 0.0019381 0.0030201000000000013 0 0 0 0 0 1 1 1 0 1 1 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 +6 0.739393 9.913352999999999 0.128056 0.059647900000000004 0.317303 0.059044 0.0 0.48695499999999997 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 +2 0.0088729 0.0323671 0.0 0.004043999999999999 0.0029879999999999993 0.0017011000000000005 5.1100000000000104E-5 0.024001099999999997 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 +5 3.5561800000000003 3.4890600000000003 22.83842 4.37233 0.003161999999999998 0.0 0.4964700000000001 24.27102 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 0 1 1 1 1 +5 3.5760750000000003 3.497885 22.803695 4.376635 0.016460999999999948 0.0 0.16687699999999994 24.396295000000002 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 0 1 1 1 1 +4 3.611798 3.542888 22.898648 4.400918000000001 0.0 0.025221999999999967 0.08275900000000003 24.222948 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 0 1 1 1 1 +5 3.568662 3.5255419999999997 22.812552 4.360652 0.03350200000000003 0.0 0.474012 24.456752 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 0 1 1 1 1 +5 132.78922 57.82282 103.06722 3598.54222 0.4811399999999999 0.0 3598.54222 179.95721999999998 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 0 1 1 1 1 1 0 1 1 1 1 +2 0.0017748 0.22834790000000002 0.0 0.0017160000000000005 0.0011488000000000002 0.0012729000000000004 0.002833800000000001 0.0394169 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 1 1 0 +0 0.0 0.23686610000000002 0.0011319999999999993 0.0019760999999999997 0.0018540999999999992 6.219999999999993E-4 0.0029810999999999987 0.039945 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 1 1 0 +5 8.914670000000001 5.1940100000000005 0.42076999999999987 3598.17567 1.0799100000000001 0.0 7.00803 412.90367000000003 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 +5 8.64573 4.95071 0.15286 3597.91333 0.5684600000000004 0.0 8.36483 462.74933 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 +5 8.96668 5.27404 0.5024799999999998 7.051729999999999 0.87277 0.0 4.16481 474.68548 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 +5 86.89225 64.71685000000001 100.99765000000001 70.75375 0.9014199999999999 0.0 317.44365 58.29275 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 +5 61.52307 86.62887 141.38707 71.53097000000001 0.80566 0.0 106.28807 250.52907000000002 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 0 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 +5 157.50547999999998 72.40568 135.15248 80.69728 0.28362 0.0 10.45668 2063.13848 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 +2 144.0514 32.825900000000004 0.0 10.775499999999997 9.8368 44.9217 45.763099999999994 3576.4434 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 +5 2442.8417 1541.7317 95.8737 4.3064 70.3371 0.0 683.6797 3588.7317 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 +2 0.0993499 0.5983129 0.0 0.1961469 0.1277199 0.1314149 0.021443899999999988 0.44573890000000005 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +5 0.6990770000000001 11.54836 0.5053610000000001 0.26618600000000003 0.002832000000000001 0.0 0.15927699999999997 45.32226 1 0 1 1 1 0 0 0 1 1 1 1 0 0 1 0 1 0 1 0 1 1 0 0 1 1 1 0 0 1 0 0 +2 0.296191 0.31810799999999995 0.0 0.468892 0.567919 0.586353 0.052521999999999985 1.350181 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +5 0.280157 0.307026 2.951797 0.419791 0.09980800000000001 0.0 0.077905 1.1865269999999999 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 +6 0.22586199999999998 0.21972500000000003 0.05127499999999999 0.34092 0.9311829999999999 0.8623129999999999 0.0 1.113843 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +6 0.18900600000000004 0.22645099999999999 4.300000000000137E-4 0.35545499999999997 0.501589 0.46464799999999995 0.0 1.255326 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 +2 0.40999800000000003 0.487922 0.0 0.7200360000000001 0.465915 0.445779 0.022859000000000018 1.913 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 +5 3576.7322 78.3902 260.69719999999995 71.3502 391.0852 0.0 62.783899999999996 2040.8121999999998 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 +5 144.29591 23.351010000000002 89.17161 23.39001 7.79211 0.0 15.892510000000001 80.78371 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +6 3564.9764 50.629000000000005 198.0664 626.3844 401.2794 97.56840000000001 0.0 843.8414 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +6 3584.0205 144.9385 143.9135 151.4505 39.3739 1.2767999999999997 0.0 92.0945 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +6 3588.2282 143.65619999999998 84.8738 162.37019999999998 160.4252 3.7821 0.0 385.0222 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +5 2353.9056 17.258499999999998 77.9753 12.0662 7.8057 0.0 1.6851000000000003 386.97060000000005 1 1 0 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +2 146.8998 41.2466 0.0 46.572100000000006 145.96079999999998 185.93779999999998 25.081999999999997 3580.7848 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 +5 0.43537800000000004 2.31184 0.19975699999999996 0.349311 0.21333399999999997 0.0 1110.87744 45.17714 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +5 0.795148 1.782858 3.9652879999999997 1.5597379999999998 0.07766499999999998 0.0 3599.274168 9.994568 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 0 0 0 1 0 1 1 1 1 1 0 +0 0.0 3582.2333 3582.2333 3582.2333 3582.2333 3582.2333 3582.2333 3582.2333 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 +6 0.001242 4.5033520000000005 0.004659099999999999 1.4299999999999903E-4 4.901000000000003E-4 6.380999999999991E-4 0.0 0.0240231 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 0 1 0 1 1 0 0 1 1 1 1 0 +2 0.1180121 1.3446171 0.0 0.0018449999999999994 0.0126002 0.0114821 0.003906999999999999 0.035808 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1 1 0 +3 0.11443700000000001 0.857093 3.3410000000000037E-4 0.0 9.52999999999999E-4 9.221000000000003E-4 0.0035849999999999996 0.0028520999999999998 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 1 0 1 1 1 1 0 0 0 0 1 1 0 +3 2.407777 600.130367 0.11949099999999996 0.0 0.9547570000000001 0.44796199999999997 0.23121199999999997 1.534187 0 0 0 0 0 1 1 1 1 0 1 1 1 0 0 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 0 +2 0.004981899999999999 15.572203 0.0 0.0011799999999999988 0.015823900000000002 0.0143669 4.2199999999999876E-4 0.07112109999999999 0 0 1 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 0 0 1 0 1 1 1 0 1 1 1 1 0 +2 0.0035147999999999985 1.8302499 0.0 0.0019529000000000005 0.027855799999999997 0.0270879 0.0034409999999999996 0.08312900000000001 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 0 1 0 1 1 0 0 1 1 1 1 0 +6 0.012450999999999999 30.919317 0.002116 0.006166099999999999 0.0652809 0.06261900000000001 0.0 0.10921700000000001 0 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 +2 0.0033878999999999992 0.707329 0.0 0.0024451000000000004 0.005680899999999999 0.004319 0.001637099999999999 0.03363 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 1 0 1 0 0 0 1 0 1 1 0 0 0 1 1 1 0 +6 2186.3199999999997 362.97 2186.3199999999997 1466.74 2186.3199999999997 2186.3199999999997 0.0 2186.3199999999997 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 +5 38.31686 29.08956 6.46396 9.860560000000001 0.7960200000000004 0.0 32.60606 3592.81996 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 0 1 +1 16.79234 0.0 10.08934 6.346800000000001 11.639140000000001 9.07294 0.013570000000000082 64.76264 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 +3 3368.613 907.473 1712.953 0.0 3368.613 3368.613 3368.613 3368.613 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 0 1 1 1 1 1 1 1 0 1 0 0 +5 2.427159 231.60037899999998 1.946349 0.24012599999999995 0.12379299999999993 0.0 22.383479 5.7018189999999995 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 0 1 1 1 1 1 1 1 0 1 0 0 +5 44.951277 345.035577 6.215207 1.704727 0.24729800000000002 0.0 46.365177 12.394577 1 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 0 0 +5 7.816559999999999 602.88804 7.16451 2.10289 0.29014799999999996 0.0 53.18604 17.55934 1 0 1 1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 0 0 +5 5.93676 278.04494 2.9318999999999997 0.37185999999999986 0.22983999999999982 0.0 46.70154 7.1841 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 0 0 +4 6.989770000000001 601.02309 4.08728 0.48560000000000003 0.0 0.12834000000000012 42.66009 8.50692 1 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 0 1 0 0 +4 35.043400000000005 16.927 5.75814 10.468700000000002 0.0 0.78667 8.786100000000001 3596.8372 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 0 1 +6 79.97161 3.0400899999999997 37.41601 3.78971 18.20721 8.440710000000001 0.0 54.71631 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 1 1 1 0 0 1 0 1 +2 0.0722611 0.5623611000000001 0.0 0.1535281 0.0586271 0.059480099999999994 3.2122461 0.6271131 1 0 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 1 0 0 0 0 1 0 0 +2 0.114689 0.857764 0.0 0.23542000000000002 0.080966 0.07782399999999999 5.064589 0.828451 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 1 0 0 0 1 1 0 1 +5 0.0639721 0.2647061 0.0417581 0.03095520000000001 7.061000000000012E-4 0.0 0.5316951 0.2412251 1 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 1 0 0 0 1 0 0 0 1 1 0 0 +2 0.005536900000000001 0.0721428 0.0 0.0138368 0.005581900000000001 0.004280800000000001 0.050839800000000004 0.0758399 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 +2 0.056177000000000005 0.3298059 0.0 0.0932129 0.040348800000000004 0.03862890000000001 1.8498819000000002 0.3743819 1 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 1 0 0 0 1 0 0 0 0 1 0 0 +3 1.0251199999999998 0.8601800000000001 1.93039 0.0 2.2563500000000003 2.01748 12.42379 3.8684700000000003 1 1 1 1 1 0 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 0 1 0 0 0 1 1 0 1 +5 0.051197099999999995 0.1692991 0.0027840000000000018 0.015133 0.0016702000000000036 0.0 0.4025851 0.1692651 1 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 1 0 0 0 1 0 0 0 0 1 0 0 +5 0.045430000000000005 0.10356399999999999 0.01253 0.005574900000000001 9.610999999999995E-4 0.0 0.238992 0.10406699999999999 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 +2 0.021417000000000002 0.15066300000000002 0.0 0.034453 0.015592100000000001 0.014823099999999999 0.134103 0.143537 1 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 1 1 0 0 0 1 0 0 0 0 1 0 0 +2 19.6136 29.8582 0.0 30.3347 17.6493 24.686600000000002 10.4345 51.75240000000001 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 0 1 +3 419.92599999999993 222.78599999999997 805.216 0.0 2058.861 399.981 1115.5810000000001 3413.391 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 0 1 +1 785.9620000000001 0.0 2463.672 267.302 2992.292 1709.172 2141.792 2992.292 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 0 1 +0 0.0 68.4537 190.78470000000002 69.96170000000001 1348.2907 610.3186999999999 209.5837 1489.4007000000001 1 1 1 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 0 1 +3 446.91549 3.3581700000000003 325.91249 0.0 41.86189 36.315690000000004 2376.32249 3595.04249 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 1 0 1 0 0 0 0 0 0 1 0 0 1 1 1 1 1 +0 0.0 624.0617 99.9597 18.191 68.99510000000001 271.0827 3577.9607 698.0396999999999 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 +3 47.8026 603.4637 66.3447 0.0 116.8537 213.7357 3559.4717 411.8797 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 +6 0.0012332000000000003 0.06645319999999999 6.770000000000005E-4 0.0024942000000000002 0.0017651000000000003 0.005813199999999999 0.0 0.008613999999999998 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 0 0 0 1 1 0 0 +3 0.0027679000000000002 0.004213099999999999 0.0024548999999999994 0.0 0.0013781000000000002 7.679000000000002E-4 3.298999999999993E-4 0.0029169 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 0 0 +2 50.089439999999996 417.54704 0.0 0.04037999999999986 237.23604 86.71994000000001 32.75194 3598.27504 0 0 1 1 1 0 0 0 0 1 1 1 0 1 1 0 0 1 1 0 0 0 0 0 1 0 0 1 1 1 0 0 +3 21.55652 602.26722 0.73559 0.0 43.54462 36.95402 52.62692 2184.30822 0 1 0 0 0 1 1 1 0 0 1 1 0 1 1 0 0 1 0 1 0 0 0 0 1 0 0 1 1 1 1 0 +0 0.0 600.1637460000001 0.292732 0.07035300000000001 1.968796 0.270818 3.1998860000000002 4.290856 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 1 0 0 0 0 0 1 0 0 1 1 1 0 0 +3 0.0077289 2.249147 0.0230879 0.0 0.16016599999999998 0.16351 0.005183900000000002 0.0485111 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 1 0 1 1 1 0 0 +3 13.374280000000002 60.23228 6.96098 0.0 12.52608 0.40817999999999977 3595.28658 15.36448 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 0 +3 21.0918 99.8444 16.78 0.0 36.251599999999996 4.6685 3589.7474 34.373799999999996 0 0 1 1 1 0 0 0 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 0 +3 0.283234 0.5580080000000001 0.04496 0.0 3.393364 0.631707 6.2141139999999995 0.24396600000000002 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 0 0 1 1 0 1 0 0 1 0 1 0 0 +3 1.0453519999999998 5.072042000000001 0.05189100000000001 0.0 10.268262 2.064162 6.616202 0.306353 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 1 0 1 0 0 1 0 1 0 0 +6 1536.33 1847.7799999999997 2411.87 2411.87 2411.87 2411.87 0.0 2411.87 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 +3 0.0075379999999999996 0.09556110000000001 0.028841099999999998 0.0 0.057201100000000005 0.05094510000000001 0.002666100000000001 0.04373010000000001 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 +6 1.3697539 3.8088139 0.1617429 0.004230900000000003 8.7607739 7.6124939 0.0 0.1405759 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 +1 3566.9466 0.0 454.4846 348.9376 3566.9466 3566.9466 3566.9466 3566.9466 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 0 1 1 0 0 +3 0.3013361 0.3587561 0.053046100000000006 0.0 3.9410670999999997 0.7027771 3.0320370999999997 0.2775911 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 1 0 0 1 1 1 1 0 0 0 1 1 0 0 +3 0.121335 0.218147 0.0298221 0.0 0.033060900000000004 0.0229079 0.047335 0.26762400000000003 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0 1 0 0 1 1 1 1 0 0 0 1 1 0 0 +6 0.0073439 0.132279 0.013550099999999999 0.0011189999999999985 0.0280069 0.026568099999999997 0.0 0.07904989999999999 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 0 0 +0 0.0 3.52699 7.004679999999999 1.59808 24.10567 7.15128 26.42547 193.15657 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 0 0 1 0 0 0 0 1 0 0 +3 0.8480299999999998 5.54323 2.4043 0.0 10.07216 2.31834 3.7715300000000003 70.37066 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 0 0 1 0 0 0 0 1 0 0 +0 0.0 5.67895 4.297610000000001 0.3279799999999997 61.46366 25.00176 910.6097599999999 545.17876 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +0 0.0 6.58218 3.4740900000000003 0.07086000000000015 301.29481 379.45081 3598.58281 438.42681 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +3 0.9389860000000001 3.224706 0.06721599999999994 0.0 99.65608599999999 29.579986 2089.687086 42.353086000000005 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +3 0.8033710000000001 4.203531 9.123800999999998 0.0 370.752601 377.644601 1739.645601 539.195601 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +4 0.023375 0.15470299999999998 0.006728999999999999 0.004737999999999999 0.0 3.089999999999968E-4 1.71859 0.250977 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 +5 0.028962210000000002 0.16133911 0.00959221 0.00935111 0.0076972099999999995 0.0 1.88072511 0.23600611 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 0 0 1 0 0 0 0 1 1 0 +5 291.4827 166.5247 34.8182 11.404200000000003 43.7052 0.0 0.07310000000000016 3575.6967 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 +6 319.5013 221.5173 30.1338 4.7597999999999985 45.1585 1.1759999999999984 0.0 3579.0263 0 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 +3 21.9709 31.289299999999997 16.530699999999996 0.0 44.1855 20.4839 8.4656 2187.9248000000002 0 0 1 1 1 0 0 0 0 0 1 1 0 1 1 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 +4 1238.6789999999999 784.415 1796.789 271.294 0.0 34.43100000000001 7.164999999999992 3487.309 0 0 0 0 0 1 1 1 0 1 1 1 0 0 1 0 0 1 1 0 0 0 0 0 1 0 0 1 1 1 1 0 +2 46.05388 1.22561 0.0 1.66548 0.2597200000000002 0.21042000000000005 5.00816 1531.2713800000001 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 +5 170.78715000000003 2.24952 13.540249999999999 3.49541 0.7298399999999998 0.0 3596.80815 753.51815 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 0 0 1 0 1 +3 3580.4949 591.1439 181.3439 0.0 112.8519 81.3129 68.5186 3580.4949 0 0 0 0 0 1 1 1 0 0 1 1 0 1 1 0 0 1 0 1 0 0 0 0 1 0 0 0 1 1 1 0 +2 3.1898300000000006 600.99275 0.0 1.5149 27.031650000000003 11.42425 3594.93675 336.51875 1 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 1 +2 22.34548 599.6851800000001 0.0 0.19431999999999938 21.58528 22.40848 3590.69718 743.28318 1 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 1 +2 25.02654 614.49604 0.0 14.61554 19.02014 23.53364 3595.47204 597.11604 1 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 1 +2 30.415360000000003 599.70836 0.0 0.2467100000000002 23.48496 30.27036 3593.85536 359.41936000000004 1 0 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 1 +3 9.432199999999998 599.4434 89.35640000000001 0.0 21.2559 21.038700000000002 3580.5964 188.33239999999998 1 1 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 1 +3 95.4906 599.9186000000001 159.4716 0.0 9.243099999999998 41.67509999999999 3565.1996 1376.0095999999999 1 1 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 1 +2 12.736200000000002 599.3787000000001 0.0 0.2694799999999997 49.2953 21.895899999999997 3591.3467 244.6427 1 1 1 1 1 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 0 0 0 1 0 0 1 0 1 0 1 diff --git a/data/instance-cost-sensitive/maxsat21-32f_info.txt b/data/instance-cost-sensitive/maxsat21-32f_info.txt new file mode 100644 index 0000000..f18b2c6 --- /dev/null +++ b/data/instance-cost-sensitive/maxsat21-32f_info.txt @@ -0,0 +1,32 @@ +feature index: 0 threshold: 13980.0 +feature index: 1 threshold: 83832.0 +feature index: 2 threshold: 0.21964298831998824 +feature index: 3 threshold: 0.04824304231813449 +feature index: 4 threshold: 0.010596245980402713 +feature index: 5 threshold: 4.552842809364549 +feature index: 6 threshold: 20.728377646782477 +feature index: 7 threshold: 94.37304511894645 +feature index: 8 threshold: 0.45109388458225663 +feature index: 9 threshold: 0.0651367501572155 +feature index: 10 threshold: 0.0 +feature index: 11 threshold: 1.0 +feature index: 12 threshold: 10.439579908918455 +feature index: 13 threshold: 0.034280817026139124 +feature index: 14 threshold: 0.4864387270398651 +feature index: 15 threshold: 0.17018532233770772 +feature index: 16 threshold: 0.4603800662334622 +feature index: 17 threshold: 0.013677687801700178 +feature index: 18 threshold: 0.023809523809523808 +feature index: 19 threshold: 0.9333333333333333 +feature index: 20 threshold: 9.470678001840568 +feature index: 21 threshold: 0.29340573213873516 +feature index: 22 threshold: 2.8584124720717283 +feature index: 23 threshold: 8.238888888888699 +feature index: 24 threshold: 0.0 +feature index: 25 threshold: 36.0 +feature index: 26 threshold: 7.918714299188948 +feature index: 27 threshold: 2.525265066681101 +feature index: 28 threshold: 1.5079626017459662 +feature index: 29 threshold: 1.0 +feature index: 30 threshold: 8.0 +feature index: 31 threshold: 11.2336204336583 diff --git a/examples/instance_cost_sensitive_example.py b/examples/instance_cost_sensitive_example.py new file mode 100644 index 0000000..cb17c65 --- /dev/null +++ b/examples/instance_cost_sensitive_example.py @@ -0,0 +1,31 @@ +from pystreed import STreeDInstanceCostSensitiveClassifier +import pandas as pd +from sklearn.metrics import accuracy_score +from sklearn.model_selection import train_test_split + +# Read the data +df = pd.read_csv("data/instance-cost-sensitive/maxsat21-32f.txt", sep=" ", header=None) +# In this file, +# Column 0 is the optimal label (with lowest cost) +# Columns 1..8 are the costs of assigning the labels 0...7 +# Columns 9... are the binary features +X = df[df.columns[9:]].values +y = df[0].values +costs = df[df.columns[1:9]].values + +X_train, X_test, y_train, y_test, costs_train, costs_test = train_test_split(X, y, costs, test_size=0.20, random_state=42) + +# Fit the model by passing the cost vector +model = STreeDInstanceCostSensitiveClassifier(max_depth = 5, time_limit=600, verbose=True) +model.fit(X_train, costs_train) + +model.print_tree() + +# Obtain the test predictions +yhat = model.predict(X_test) + +# Obtain the test accuracy +print(f"Test Accuracy Score: {accuracy_score(y_test, yhat) * 100}%") + +# Obtain the classification costs on the test set through model.score +print(f"Test Average Outcome: {model.score(X_test, costs_test)}") \ No newline at end of file diff --git a/include/tasks/instance_cost_sensitive.h b/include/tasks/instance_cost_sensitive.h new file mode 100644 index 0000000..442a9a8 --- /dev/null +++ b/include/tasks/instance_cost_sensitive.h @@ -0,0 +1,105 @@ +#pragma once +#include "tasks/optimization_task.h" + +namespace STreeD { + + template + struct PairWorstCount; + + struct InstanceCostSensitiveData { + + InstanceCostSensitiveData() : costs() {} + + InstanceCostSensitiveData(std::vector& costs) : costs(costs) { + worst = *std::max_element(std::begin(costs), std::end(costs)); + } + + static InstanceCostSensitiveData ReadData(std::istringstream& iss, int num_labels); + + // Get the cost for classifying this instance with the given label + inline double GetLabelCost(int label) const { return costs.at(label); } + + // Add the label cost to the cost vector + inline void AddLabelCost(double cost) { costs.push_back(cost); } + + // Return the number of possible labels + inline int NumLabels() const { return int(costs.size()); } + + // Get the worst possible score for this instance (max of costs) + inline double GetWorst() const { return worst; } + + // The costs for classifying this instance with each of the labels + std::vector costs; + // The worst cost (max of costs) + double worst{ 0 }; + }; + + class InstanceCostSensitive : public Classification { + public: + using SolType = double; + using SolD2Type = double; + using TestSolType = double; + + using ET = InstanceCostSensitiveData; + + static const bool total_order = true; + static const bool custom_leaf = false; + static const bool preprocess_train_test_data = true; + static const bool custom_similarity_lb = true; + static constexpr double worst = DBL_MAX; + static constexpr double best = 0; + + explicit InstanceCostSensitive(const ParameterHandler& parameters) + : num_labels(int(parameters.GetIntegerParameter("num-extra-cols"))), + Classification(parameters) {} + + inline void UpdateParameters(const ParameterHandler& parameters) { + num_labels = int(parameters.GetIntegerParameter("num-extra-cols")); + } + + // Compute the leaf costs for the data in the context when assigning label + double GetLeafCosts(const ADataView& data, const BranchContext& context, int label) const; + + // Compute the test leaf costs for the data in the context when assigning label + double GetTestLeafCosts(const ADataView& data, const BranchContext& context, int label) const; + + // Compute the leaf costs for an instance given a assigned label + void GetInstanceLeafD2Costs(const AInstance* instance, int org_label, int label, double& costs, int multiplier) const; + + // Compute the solution value from a terminal solution value + void ComputeD2Costs(const double& d2costs, int count, double& costs) const; + + // Return true if the terminal solution value is zero + inline bool IsD2ZeroCost(const double& d2costs) const { return d2costs <= 1e-6 && d2costs >= -1e-6; } + + // Get a bound on the worst contribution to the objective of a single instance with label + inline double GetWorstPerLabel(int label) const { return worst_per_label.at(label); } + + // Inform the task on what training data is used + void InformTrainData(const ADataView& train_data, const DataSummary& train_summary); + + // Compute the train score from the training solution value + inline double ComputeTrainScore(double train_value) const { return train_value ; } + + // Compute the test score on the training data from the test solution value + inline double ComputeTrainTestScore(double train_value) const { return train_value; } + + // Compute the test score on the test data from the test solution value + inline double ComputeTestTestScore(double test_value) const { return test_value; } + + // Compare two score values. Lower is better + inline static bool CompareScore(double score1, double score2) { return score1 - score2 <= 0; } // return true if score1 is better than score2 + + // Provide a custom lower bound based on the worst values possible per instance + PairWorstCount ComputeSimilarityLowerBound(const ADataView& data_old, const ADataView& data_new) const; + + // Preprocess the training and test data + void PreprocessTrainData(ADataView& train_data); + void PreprocessTestData(ADataView& test_data); + + private: + std::vector worst_per_label; + int num_labels{ 1 }; + }; + +} \ No newline at end of file diff --git a/include/tasks/tasks.h b/include/tasks/tasks.h index 1247ba6..0fd68cb 100644 --- a/include/tasks/tasks.h +++ b/include/tasks/tasks.h @@ -5,6 +5,7 @@ #include "tasks/accuracy/cost_complex_accuracy.h" #include "tasks/cost_sensitive.h" +#include "tasks/instance_cost_sensitive.h" #include "tasks/f1score.h" #include "tasks/group_fairness.h" #include "tasks/eq_opp.h" diff --git a/pyproject.toml b/pyproject.toml index 1d14a14..c1c2329 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta" [project] name = "pystreed" -version = "1.2.2" +version = "1.2.3" requires-python = ">=3.8" description = "Python Implementation of STreeD: Dynamic Programming Approach for Optimal Decision Trees with Separable objectives and Constraints" license= {file = "LICENSE"} diff --git a/pystreed/__init__.py b/pystreed/__init__.py index 14b6462..c2e04da 100644 --- a/pystreed/__init__.py +++ b/pystreed/__init__.py @@ -4,4 +4,5 @@ from pystreed.survival_analysis import STreeDSurvivalAnalysis from pystreed.prescriptive_policy_generation import STreeDPrescriptivePolicyGenerator from pystreed.group_fair import STreeDGroupFairnessClassifier +from pystreed.instance_cost_sensitive_classification import STreeDInstanceCostSensitiveClassifier from pystreed.data import * \ No newline at end of file diff --git a/pystreed/data.py b/pystreed/data.py index 1e003f7..10d812c 100644 --- a/pystreed/data.py +++ b/pystreed/data.py @@ -1 +1 @@ -from .cstreed import SAData, PPGData, FeatureCostSpecifier, CostSpecifier \ No newline at end of file +from .cstreed import SAData, PPGData, FeatureCostSpecifier, CostSpecifier, CostVector \ No newline at end of file diff --git a/pystreed/instance_cost_sensitive_classification.py b/pystreed/instance_cost_sensitive_classification.py new file mode 100644 index 0000000..a80e4d9 --- /dev/null +++ b/pystreed/instance_cost_sensitive_classification.py @@ -0,0 +1,169 @@ +from pystreed.data import CostVector +from pystreed.base import BaseSTreeDSolver +from sklearn.utils._param_validation import Interval, StrOptions +from typing import Optional +from pystreed.utils import _color_brew +import numpy as np + +class STreeDInstanceCostSensitiveClassifier(BaseSTreeDSolver): + + _parameter_constraints: dict = {**BaseSTreeDSolver._parameter_constraints} + + def __init__(self, + max_depth : int = 3, + max_num_nodes : Optional[int] = None, + min_leaf_node_size : int = 1, + time_limit : float = 600, + feature_ordering : str = "gini", + hyper_tune: bool = False, + use_branch_caching: bool = False, + use_dataset_caching: bool = True, + use_terminal_solver: bool = True, + use_similarity_lower_bound: bool = True, + use_upper_bound: bool = True, + use_lower_bound: bool = True, + upper_bound: float = 2**31 - 1, + verbose : bool = False, + random_seed : int = 27, + continuous_binarize_strategy: str = 'quantile', + n_thresholds: int = 5, + n_categories: int = 5): + """ + Construct a STreeDInstanceCostSensitiveClassifier + + Parameters: + max_depth: the maximum depth of the tree + max_num_nodes: the maximum number of branching nodes of the tree + min_leaf_node_size: the minimum number of training instance that should end up in every leaf node + time_limit: the time limit in seconds for fitting the tree + feature_ordering: heuristic for the order that features are checked. Default: "gini", alternative: "in-order": the order in the given data + hyper_tune: Use five-fold validation to tune the size of the tree to prevent overfitting + use_branch_caching: Enable/Disable branch caching (typically the slower caching strategy. May be faster in some scenario's) + use_dataset_caching: Enable/Disable dataset caching (typically the faster caching strategy) + use_terminal_solver: Enable/Disable the depth-two solver (Enabled typically results in a large runtime advantage) + use_similarity_lower_bound: Enable/Disable the similarity lower bound (Enabled typically results in a large runtime advantage) + use_upper_bound: Enable/Disable the use of upper bounds (Enabled is typically faster) + use_lower_bound: Enable/Disable the use of lower bounds (Enabled is typically faster) + upper_bound: Search for a tree better than the provided upper bound + verbose: Enable/Disable verbose output + random_seed: the random seed used by the solver (for example when creating folds) + continuous_binarization_strategy: the strategy used for binarizing continuous features + n_thresholds: the number of thresholds to use per continuous feature + n_categories: the number of categories to use per categorical feature + """ + BaseSTreeDSolver.__init__(self, "instance-cost-sensitive", + max_depth=max_depth, + max_num_nodes=max_num_nodes, + min_leaf_node_size=min_leaf_node_size, + time_limit = time_limit, + cost_complexity=0, + feature_ordering=feature_ordering, + hyper_tune = hyper_tune, + use_branch_caching=use_branch_caching, + use_dataset_caching=use_dataset_caching, + use_terminal_solver=use_terminal_solver, + use_similarity_lower_bound=use_similarity_lower_bound, + use_upper_bound=use_upper_bound, + use_lower_bound=use_lower_bound, + upper_bound=upper_bound, + verbose=verbose, + random_seed=random_seed, + continuous_binarize_strategy=continuous_binarize_strategy, + n_thresholds=n_thresholds, + n_categories=n_categories) + self.n_classes_ = None + + def _initialize_param_handler(self): + super()._initialize_param_handler() + + def _check_data(self, y_in, reset=True): + y_out = [] + if isinstance(y_in, np.ndarray): + extra_data = [] + if len(y_in.shape) != 2 or y_in.shape[1] < 2: + raise ValueError(f"The y-array does not have the right shape. Expected shape is a two-dimensional array with at least 2 columns.") + if reset or self.n_classes_ is None: + n_classes = y_in.shape[1] + else: + n_classes = self.n_classes_ + if n_classes != y_in.shape[1]: + raise ValueError(f"The y-array does not have the expected shape. Expected {n_classes} columns, but found {y_in.shape[1]}.") + for row in y_in: + extra_data.append(CostVector(row)) + else: + extra_data = y_in + + num_labels = 0 + for i, inst in enumerate(extra_data): + if not isinstance(inst, CostVector): + raise ValueError("Each instance in y is expected to be of class CostVector.") + y_out.append(np.argmin(inst.costs)) + num_labels = max(num_labels, len(inst.costs)) + + if reset or self.n_classes_ is None: + self.n_classes_ = num_labels + return np.array(y_out, dtype=np.intc), extra_data + + def _process_extra_data(self, X, extra_data): + return extra_data + + def fit(self, X, y): + """ + Fits a STreeD model to the given training data. + + Args: + x : array-like, shape = (n_samples, n_features) + Data matrix + + y : array-like with shape (n_samples, n_labels) + Cost vector. For each instance specify the classification costs per label + + Returns: + STreeDInstanceCostSensitiveClassifier + + Raises: + ValueError: If x or y is None or if they have different number of rows. + """ + y, extra_data = self._check_data(y) + return super().fit(X, y, extra_data) + + def predict(self, X, extra_data=None): + """ + Predicts the target variable for the given input feature data. + + Args: + x : array-like, shape = (n_samples, n_features) + Data matrix + extra_data (optional) :array-like with shape (n_samples, n_labels) + Cost vector. For each instance specify the classification costs per label + + Returns: + numpy.ndarray: A 1D array that represents the predicted target variable of the test data. + The i-th element in this array corresponds to the predicted target variable for the i-th instance in `x`. + """ + if extra_data is None: + extra_data = [CostVector(np.zeros(self.n_classes_)) for i in range(len(X))] + _, extra_data = self._check_data(extra_data, reset=False) + return super().predict(X, extra_data) + + def score(self, X, y_test): + """ + Computes the score for the given input feature data + + Args: + x : array-like, shape = (n_samples, n_features) + Data matrix + y_test : array-like with shape (n_samples, n_labels) + Cost vector. For each instance specify the classification costs per label + + Returns: + The score + """ + y_test, extra_data = self._check_data(y_test, reset=False) + return super().score(X, y_test, extra_data) + + def _export_dot_leaf_node(self, fh, node, node_id, label_names): + if not hasattr(self, "_colors"): + self._colors = _color_brew(self.n_classes_) + color = self._colors[node.label] + return super()._export_dot_leaf_node(fh, node, node_id, label_names, color=color) \ No newline at end of file diff --git a/setup.py b/setup.py index c23180f..9d41765 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ # Define package metadata package_name = 'pystreed' extension_name = 'cstreed' -__version__ = "1.2.2" +__version__ = "1.2.3" ext_modules = [ Pybind11Extension(package_name + '.' + extension_name, @@ -24,6 +24,7 @@ ext_modules=ext_modules, dev_requires=['pytest'], install_requires=['pandas', 'numpy'], - long_description=open('README.md').read(), + # Add read me as long description and replace relative example links with absolute links + long_description=open('README.md').read().replace("](examples", "](https://github.com/AlgTUDelft/pystreed/blob/main/examples"), long_description_content_type='text/markdown' ) \ No newline at end of file diff --git a/src/bindings.cpp b/src/bindings.cpp index 6ffde81..68ec204 100644 --- a/src/bindings.cpp +++ b/src/bindings.cpp @@ -15,6 +15,7 @@ enum task_type { accuracy, cost_complex_accuracy, cost_sensitive, + instance_cost_sensitive, f1score, group_fairness, equality_of_opportunity, @@ -26,6 +27,7 @@ task_type get_task_type_code(std::string& task) { if (task == "accuracy") return accuracy; else if (task == "cost-complex-accuracy") return cost_complex_accuracy; else if (task == "cost-sensitive") return cost_sensitive; + else if (task == "instance-cost-sensitive") return instance_cost_sensitive; else if (task == "f1-score") return f1score; else if (task == "group-fairness") return group_fairness; else if (task == "equality-of-opportunity") return equality_of_opportunity; @@ -259,6 +261,7 @@ PYBIND11_MODULE(cstreed, m) { DefineSolver(m, "PrescriptivePolicy"); DefineSolver(m, "GroupFairness"); DefineSolver(m, "EqOpp"); + DefineSolver(m, "InstanceCostSensitive"); py::class_> cost_sensitive_solver = DefineSolver(m, "CostSensitive"); cost_sensitive_solver.def("specify_costs", [](Solver& solver, const CostSpecifier& cost_specifier) { solver.GetTask()->UpdateCostSpecifier(cost_specifier); @@ -284,6 +287,7 @@ PYBIND11_MODULE(cstreed, m) { case accuracy: solver = new Solver(parameters, &rng); break; case cost_complex_accuracy: solver = new Solver(parameters, &rng); break; case cost_sensitive: solver = new Solver(parameters, &rng); break; + case instance_cost_sensitive: solver = new Solver(parameters, &rng); break; case f1score: solver = new Solver(parameters, &rng); break; case group_fairness: solver = new Solver(parameters, &rng); break; case equality_of_opportunity: solver = new Solver(parameters, &rng); break; @@ -312,7 +316,12 @@ PYBIND11_MODULE(cstreed, m) { .def_readonly("predicted_outcome", &PPGData::yhat) .def_readonly("optimal_treatment", &PPGData::k_opt) .def_readonly("counterfactual_outcome", &PPGData::cf_y); - + + py::class_(m, "CostVector") + .def(py::init&>()) + .def(py::init<>()) + .def_readonly("costs", &InstanceCostSensitiveData::costs); + /************************************* Label ************************************/ diff --git a/src/main.cpp b/src/main.cpp index 224751b..1410624 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -51,6 +51,9 @@ int main(int argc, char* argv[]) { } else if (task == "cost-sensitive") { solver = new STreeD::Solver(parameters, &rng); STreeD::FileReader::ReadData(parameters, data, train_data, test_data, &rng); + } else if (task == "instance-cost-sensitive") { + solver = new STreeD::Solver(parameters, &rng); + STreeD::FileReader::ReadData(parameters, data, train_data, test_data, &rng); } else if (task == "f1-score") { solver = new STreeD::Solver(parameters, &rng); STreeD::FileReader::ReadData(parameters, data, train_data, test_data, &rng); diff --git a/src/solver/branch_cache.cpp b/src/solver/branch_cache.cpp index c1a6159..7f651c5 100644 --- a/src/solver/branch_cache.cpp +++ b/src/solver/branch_cache.cpp @@ -215,6 +215,7 @@ namespace STreeD { template class BranchCache; template class BranchCache; + template class BranchCache; template class BranchCache; template class BranchCache; template class BranchCache; diff --git a/src/solver/cache.cpp b/src/solver/cache.cpp index dceaaec..ac9beae 100644 --- a/src/solver/cache.cpp +++ b/src/solver/cache.cpp @@ -72,6 +72,7 @@ namespace STreeD { template class Cache; template class Cache; + template class Cache; template class Cache; template class Cache; template class Cache; diff --git a/src/solver/cost_combiner.cpp b/src/solver/cost_combiner.cpp index 7c5054c..6b90032 100644 --- a/src/solver/cost_combiner.cpp +++ b/src/solver/cost_combiner.cpp @@ -476,6 +476,7 @@ namespace STreeD { template class CostCalculator; template class CostCalculator; + template class CostCalculator; template class CostCalculator; template class CostCalculator; diff --git a/src/solver/cost_storage.cpp b/src/solver/cost_storage.cpp index c0e0ca5..edab99b 100644 --- a/src/solver/cost_storage.cpp +++ b/src/solver/cost_storage.cpp @@ -70,6 +70,7 @@ namespace STreeD { template class CostStorage; template class CostStorage; + template class CostStorage; template class CostStorage; template class CostStorage; template class CostStorage; diff --git a/src/solver/dataset_cache.cpp b/src/solver/dataset_cache.cpp index f391027..fad356f 100644 --- a/src/solver/dataset_cache.cpp +++ b/src/solver/dataset_cache.cpp @@ -228,6 +228,7 @@ namespace STreeD { template class DatasetCache; template class DatasetCache; + template class DatasetCache; template class DatasetCache; template class DatasetCache; template class DatasetCache; diff --git a/src/solver/define_parameters.cpp b/src/solver/define_parameters.cpp index 1f77636..33aba17 100644 --- a/src/solver/define_parameters.cpp +++ b/src/solver/define_parameters.cpp @@ -21,7 +21,7 @@ namespace STreeD { "accuracy", "Main Parameters", {"accuracy", "cost-complex-accuracy", "f1-score", "group-fairness", "survival-analysis", - "equality-of-opportunity", "cost-sensitive", "prescriptive-policy" } + "equality-of-opportunity", "cost-sensitive", "prescriptive-policy", "instance-cost-sensitive"} ); parameters.DefineBooleanParameter diff --git a/src/solver/result.cpp b/src/solver/result.cpp index b860c5b..7462f05 100644 --- a/src/solver/result.cpp +++ b/src/solver/result.cpp @@ -11,57 +11,4 @@ namespace STreeD { return num_nodes[best_index]; } - /*Performance Performance::GetAverage(const std::vector& performances) { - runtime_assert(performances.size() > 0); - const int n_objectives = performances[0].train_result.scores.size(); - const int n_test_objectives = performances[0].test_result.scores.size(); - const int n_classes = performances[0].train_result.class_count.size(); - Performance result(n_objectives, n_test_objectives, n_classes); - for (int i = 0; i < n_objectives; i++) { - for (const auto& p : performances) { - result.train_result.scores[i] += p.train_result.scores[i]; - } - result.train_result.scores[i] /= performances.size(); - } - for (int i = 0; i < n_test_objectives; i++) { - for (const auto& p : performances) { - result.test_result.scores[i] += p.test_result.scores[i]; - } - result.test_result.scores[i] /= performances.size(); - } - - result.train_result.metrics = std::vector(performances[0].train_result.metrics.size(), 0); - for (int i = 0; i < result.train_result.metrics.size(); i++) { - result.train_result.metrics[i] = 0; - for (const auto& p : performances) { - result.train_result.metrics[i] += p.train_result.metrics[i]; - } - result.train_result.metrics[i] /= performances.size(); - } - result.test_result.metrics = std::vector(performances[0].test_result.metrics.size(), 0); - for (int i = 0; i < result.test_result.metrics.size(); i++) { - result.test_result.metrics[i] = 0; - for (const auto& p : performances) { - result.test_result.metrics[i] += p.test_result.metrics[i]; - } - result.test_result.metrics[i] /= performances.size(); - } - for (const auto& p : performances) { - result.train_result.average_path_length += p.train_result.average_path_length; - result.test_result.average_path_length += p.test_result.average_path_length; - for (int c = 0; c < n_classes; c++) { - result.train_result.class_count[c] += p.train_result.class_count[c]; - result.test_result.class_count[c] += p.test_result.class_count[c]; - } - } - result.train_result.average_path_length /= performances.size(); - result.test_result.average_path_length /= performances.size(); - for (int c = 0; c < n_classes; c++) { - result.train_result.class_count[c] /= performances.size(); - result.test_result.class_count[c] /= performances.size(); - } - return result; - } - */ - } \ No newline at end of file diff --git a/src/solver/similarity_lowerbound.cpp b/src/solver/similarity_lowerbound.cpp index 6684448..79707a2 100644 --- a/src/solver/similarity_lowerbound.cpp +++ b/src/solver/similarity_lowerbound.cpp @@ -139,6 +139,7 @@ namespace STreeD { template class SimilarityLowerBoundComputer; template class SimilarityLowerBoundComputer; + template class SimilarityLowerBoundComputer; template class SimilarityLowerBoundComputer; template class SimilarityLowerBoundComputer; template class SimilarityLowerBoundComputer; diff --git a/src/solver/solver.cpp b/src/solver/solver.cpp index 95e4793..5451183 100644 --- a/src/solver/solver.cpp +++ b/src/solver/solver.cpp @@ -1014,6 +1014,7 @@ namespace STreeD { template class Solver; template class Solver; + template class Solver; template class Solver; template class Solver; template class Solver; diff --git a/src/solver/terminal_solver.cpp b/src/solver/terminal_solver.cpp index 78ea2ed..a050bc1 100644 --- a/src/solver/terminal_solver.cpp +++ b/src/solver/terminal_solver.cpp @@ -453,6 +453,7 @@ namespace STreeD { template class TerminalSolver; template class TerminalSolver; + template class TerminalSolver; template class TerminalSolver; template class TerminalSolver; template class TerminalSolver; diff --git a/src/tasks/instance_cost_sensitive.cpp b/src/tasks/instance_cost_sensitive.cpp new file mode 100644 index 0000000..5cfcf6e --- /dev/null +++ b/src/tasks/instance_cost_sensitive.cpp @@ -0,0 +1,114 @@ +#include "tasks/instance_cost_sensitive.h" +#include "solver/similarity_lowerbound.h" + +namespace STreeD { + + void InstanceCostSensitive::PreprocessTrainData(ADataView& train_data) { + if(num_labels > train_data.NumLabels()) train_data.GetMutableInstances().resize(num_labels); + } + + void InstanceCostSensitive::PreprocessTestData(ADataView& test_data) { + if (num_labels > test_data.NumLabels()) test_data.GetMutableInstances().resize(num_labels); + } + + double InstanceCostSensitive::GetLeafCosts(const ADataView &data, const BranchContext &context, int label) const { + double costs = 0; + for (int k = 0; k < data.NumLabels(); k++) { + for (const auto i : data.GetInstancesForLabel(k)) { + auto& et = GetInstanceExtraData(i); + costs += et.GetLabelCost(label); + } + } + runtime_assert(costs >= 0.0); + return costs; + } + + double InstanceCostSensitive::GetTestLeafCosts(const ADataView &data, const BranchContext &context, int label) const { + double s_costs = GetLeafCosts(data, context, label); + return s_costs; + } + + void InstanceCostSensitive::GetInstanceLeafD2Costs(const AInstance *instance, int org_label, int label, double&costs, int multiplier) const { + auto& et = GetInstanceExtraData(instance); + costs = multiplier * et.GetLabelCost(label); + } + + void InstanceCostSensitive::ComputeD2Costs(const double& d2costs, int count, double &costs) const { + costs = d2costs < 0 ? 0.0 : d2costs; + } + + void InstanceCostSensitive::InformTrainData(const ADataView& train_data, const DataSummary& train_summary) { + OptimizationTask::InformTrainData(train_data, train_summary); + worst_per_label.clear(); + auto n_labels = train_data.NumLabels(); + for (int i = 0; i < n_labels; i++) { + worst_per_label.push_back(0); + } + for (int i = 0; i < n_labels; i++) { + const std::vector& instances = train_data.GetInstancesForLabel(i); + for (auto inst : instances) { + for (int l = 0; l < n_labels; l++) { + double current = GetInstanceExtraData(inst).GetLabelCost(l); + if (current > worst_per_label[l]) worst_per_label[l] = current; + + } + } + } + } + + PairWorstCount InstanceCostSensitive::ComputeSimilarityLowerBound(const ADataView& data_old, const ADataView& data_new) const { + int total_diff = 0; + double worst_diff = 0; + + for (int label = 0; label < data_new.NumLabels(); label++) { + auto& new_instances = data_new.GetInstancesForLabel(label); + auto& old_instances = data_old.GetInstancesForLabel(label); + int size_new = int(new_instances.size()); + int size_old = int(old_instances.size()); + int index_new = 0, index_old = 0; + while (index_new < size_new && index_old < size_old) { + int id_new = new_instances[index_new]->GetID(); + int id_old = old_instances[index_old]->GetID(); + //the new data has something the old one does not + if (id_new < id_old) { + total_diff += 1; + index_new++; + } + //the old data has something the new one does not + else if (id_new > id_old) { + total_diff += 1; + worst_diff += GetInstanceExtraData(old_instances[index_old]).GetWorst(); + index_old++; + } else {//no difference + index_new++; + index_old++; + } + } + if (index_new < size_new) total_diff += size_new - index_new; + for (; index_old < size_old; index_old++) { + total_diff += 1; + worst_diff += GetInstanceExtraData(old_instances[index_old]).GetWorst(); + } + } + PairWorstCount result(worst_diff, total_diff); + return result; + } + + + InstanceCostSensitiveData InstanceCostSensitiveData::ReadData(std::istringstream &iss, int num_labels) { + InstanceCostSensitiveData extra{}; + + double tmp; + for (int i = 0; i < num_labels; i++) { + iss >> tmp; + extra.AddLabelCost(tmp); + } + extra.worst = -DBL_MAX; + for (int i = 0; i < num_labels; i++) { + if (extra.GetLabelCost(i) > extra.worst) + extra.worst = extra.GetLabelCost(i); + } + return extra; + } + +} \ No newline at end of file diff --git a/src/utils/file_reader.cpp b/src/utils/file_reader.cpp index 827e5d7..7ece14a 100644 --- a/src/utils/file_reader.cpp +++ b/src/utils/file_reader.cpp @@ -160,6 +160,7 @@ namespace STreeD { template void FileReader::ReadData(ParameterHandler&, AData&, ADataView&, ADataView&, std::default_random_engine*); template void FileReader::ReadData(ParameterHandler&, AData&, ADataView&, ADataView&, std::default_random_engine*); + template void FileReader::ReadData(ParameterHandler&, AData&, ADataView&, ADataView&, std::default_random_engine*); template void FileReader::ReadData(ParameterHandler&, AData&, ADataView&, ADataView&, std::default_random_engine*); template void FileReader::ReadData(ParameterHandler&, AData&, ADataView&, ADataView&, std::default_random_engine*); template void FileReader::ReadData(ParameterHandler&, AData&, ADataView&, ADataView&, std::default_random_engine*);