From 93e54cfab1beec88ffaa80614ee19504cc555eba Mon Sep 17 00:00:00 2001 From: Andrei Gherghescu <8067229+andrei-ng@users.noreply.github.com> Date: Sun, 31 Aug 2025 22:00:58 +0200 Subject: [PATCH] add downsampling example using minmaxlttb-rs Signed-off-by: Andrei Gherghescu <8067229+andrei-ng@users.noreply.github.com> --- README.md | 7 +- docs/book/src/SUMMARY.md | 1 + docs/book/src/fundamentals.md | 3 +- .../fundamentals/timeseries_downsampling.md | 14 + examples/Cargo.toml | 5 +- examples/downsampling/Cargo.toml | 12 + examples/downsampling/assets/timeseries.csv | 5001 +++++++++++++++++ examples/downsampling/src/main.rs | 112 + 8 files changed, 5151 insertions(+), 4 deletions(-) create mode 100644 docs/book/src/fundamentals/timeseries_downsampling.md create mode 100644 examples/downsampling/Cargo.toml create mode 100644 examples/downsampling/assets/timeseries.csv create mode 100644 examples/downsampling/src/main.rs diff --git a/README.md b/README.md index 6d796956..bc263975 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ * [Exporting Static Images with plotly_static (Recommended)](#exporting-static-images-with-plotly_static-recommended) * [Exporting Static Images with Kaleido (legacy)](#exporting-static-images-with-kaleido-legacy) * [Usage Within a WASM Environment](#usage-within-a-wasm-environment) + * [Timeseries Downsampling](#timeseries-downsampling) * [Crate Feature Flags](#crate-feature-flags) * [Contributing](#contributing) * [Code of Conduct](#code-of-conduct) @@ -222,7 +223,11 @@ pub fn plot_component() -> Html { } ``` -More detailed standalone examples can be found in the [examples/wasm-yew](https://github.com/plotly/plotly.rs/tree/main/examples/wasm-yew) directory. +## Timeseries Downsampling + +In situations where the number of points of a timeseries is extremely large, generating a plot and visualizing it using plotly will be slow or not possible. + +For such cases, it is ideal to use a downsampling method that preserves the visual characteristics of the timeseries. One such method is to use the Largest Triangle Three Bucket (LTTB) method. The MinMaxLTTB or classical LTTB method can be used to downsample the timeseries prior to generating the static HTML plots. An example of how this can be achieved can be found in [examples/downsampling](https://github.com/plotly/plotly.rs/tree/main/examples/downsampling) directory using the [minmaxlttb-rs](https://github.com/andrei-ng/minmaxlttb-rs) crate. # Crate Feature Flags diff --git a/docs/book/src/SUMMARY.md b/docs/book/src/SUMMARY.md index 4b70fa75..56495bf9 100644 --- a/docs/book/src/SUMMARY.md +++ b/docs/book/src/SUMMARY.md @@ -8,6 +8,7 @@ - [Shapes](./fundamentals/shapes.md) - [Themes](./fundamentals/themes.md) - [Static Image Export](./fundamentals/static_image_export.md) + - [Timeseries Downsampling](./fundamentals/timeseries_downsampling.md) - [Recipes](./recipes.md) - [Basic Charts](./recipes/basic_charts.md) - [Scatter Plots](./recipes/basic_charts/scatter_plots.md) diff --git a/docs/book/src/fundamentals.md b/docs/book/src/fundamentals.md index 07eeb663..ee090a81 100644 --- a/docs/book/src/fundamentals.md +++ b/docs/book/src/fundamentals.md @@ -26,4 +26,5 @@ Functionality that applies to the library as a whole is described in the next se - **[ndarray Support](./fundamentals/ndarray_support.md)**: Integration with the ndarray crate for numerical computing - **[Shapes](./fundamentals/shapes.md)**: Adding shapes and annotations to plots - **[Themes](./fundamentals/themes.md)**: Customizing plot appearance with themes -- **[Static Image Export](./fundamentals/static_image_export.md)**: Exporting plots to static images (PNG, JPEG, SVG, PDF) using WebDriver \ No newline at end of file +- **[Static Image Export](./fundamentals/static_image_export.md)**: Exporting plots to static images (PNG, JPEG, SVG, PDF) using WebDriver +- **[Timeseries Downsampling](./fundamentals/timeseries_downsampling.md)**: Downsampling Timeseries for Visualization \ No newline at end of file diff --git a/docs/book/src/fundamentals/timeseries_downsampling.md b/docs/book/src/fundamentals/timeseries_downsampling.md new file mode 100644 index 00000000..c4a8d840 --- /dev/null +++ b/docs/book/src/fundamentals/timeseries_downsampling.md @@ -0,0 +1,14 @@ +# Timeseries Downsampling + +In situations where the number of points of a timeseries is extremely large, generating a plot and visualizing it using plotly will be slow or not possible. + +For such cases, it is ideal to use a downsampling method that preserves the visual characteristics of the timeseries. One such method is to use the Largest Triangle Three Bucket (LTTB) method. + +The MinMaxLTTB or classical LTTB method can be used to downsample the timeseries prior to generating the static HTML plots. An example of how this can be achieved can be found in [examples/downsampling](https://github.com/plotly/plotly.rs/tree/main/examples/downsampling) directory using the [minmaxlttb-rs](https://github.com/andrei-ng/minmaxlttb-rs) crate. + + + For more examples see the [minmaxlttb-rs](https://github.com/andrei-ng/minmaxlttb-rs) crate. + +## Example downsampling + +{{#include ../../../../examples/downsampling/output/inline_minmaxlttb_downsampling.html}} diff --git a/examples/Cargo.toml b/examples/Cargo.toml index ebbe9f87..17dcd263 100644 --- a/examples/Cargo.toml +++ b/examples/Cargo.toml @@ -1,11 +1,12 @@ [workspace] members = [ "3d_charts", - "basic_charts", + "basic_charts", "custom_controls", "customization/consistent_static_format_export", "customization/density_mapbox_example", "customization/multiple_plots_example", + "downsampling", "financial_charts", "images", "kaleido", @@ -17,6 +18,6 @@ members = [ "statistical_charts", "static_export", "subplots", - "themes" + "themes", ] resolver = "2" diff --git a/examples/downsampling/Cargo.toml b/examples/downsampling/Cargo.toml new file mode 100644 index 00000000..e2921870 --- /dev/null +++ b/examples/downsampling/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "downsampling" +version = "0.1.0" +authors = ["Andrei Gherghescu andrei-ng@protonmail.com"] +edition = "2021" + +[dependencies] +ndarray = "0.16" +minmaxlttb = "0.1" +csv = "1.3" +plotly = { path = "../../plotly" } +plotly_utils = { path = "../plotly_utils" } diff --git a/examples/downsampling/assets/timeseries.csv b/examples/downsampling/assets/timeseries.csv new file mode 100644 index 00000000..2e69d72c --- /dev/null +++ b/examples/downsampling/assets/timeseries.csv @@ -0,0 +1,5001 @@ +X,Y +0,29.3579959478222 +1,29.4093247960621 +2,29.2816858200616 +3,30.4099655791089 +4,30.7726859735917 +5,30.839942247539 +6,30.7606116422647 +7,31.2036630042297 +8,31.3889960352557 +9,30.8902999169557 +10,30.4678119449116 +11,30.5968378680695 +12,30.5978959350977 +13,30.1969306246508 +14,29.8908133073455 +15,29.5466800290106 +16,29.5489073942222 +17,30.5374376017147 +18,30.7406603231706 +19,30.3774450601516 +20,30.0951488899866 +21,30.057979182918 +22,30.3646554211685 +23,30.2934500537736 +24,30.1457823034099 +25,30.277772879952 +26,30.3711931235659 +27,30.3559326609926 +28,29.994740831603 +29,29.9380128850237 +30,29.5572687604512 +31,29.1616129760462 +32,29.6921163421055 +33,30.2462706282922 +34,30.2109551546809 +35,29.3829646689341 +36,29.5289202390664 +37,29.7197420657322 +38,30.0138566369459 +39,29.8186361697769 +40,27.9312248269333 +41,28.1030578736784 +42,28.2760259023568 +43,28.1934974877898 +44,28.2209917148829 +45,28.0687243124181 +46,27.2398358852504 +47,26.6065043583179 +48,27.2203081362139 +49,25.8079089897857 +50,26.0603348380626 +51,25.8961103682256 +52,25.8244332422083 +53,25.8921219326021 +54,27.2896366987241 +55,27.2082599847808 +56,27.2982114808866 +57,27.0561633070231 +58,26.4347018696439 +59,26.2193818831823 +60,26.4028777594688 +61,26.3260193579673 +62,27.5926351044603 +63,27.5974684054343 +64,27.5334100810506 +65,27.3071396483073 +66,27.1707897127514 +67,27.6101663011457 +68,27.6198473323199 +69,27.5597434399665 +70,28.1688034920937 +71,28.2842298624526 +72,28.2926380867604 +73,28.5237181782623 +74,28.5226859141056 +75,28.576637206596 +76,27.7637154619468 +77,27.4848807531007 +78,27.3040064602818 +79,26.9020256196663 +80,26.6901620791324 +81,26.5227728673887 +82,26.0940678991905 +83,26.0290399849836 +84,26.1451811084296 +85,24.7533591254934 +86,24.7877723951262 +87,24.9666520937264 +88,25.3362142160608 +89,25.2928308142908 +90,25.4274523062317 +91,25.3433445056435 +92,25.971939771661 +93,25.9079106384008 +94,25.971895864171 +95,26.4484194179283 +96,26.4610573964945 +97,26.332417666691 +98,26.1739566775231 +99,25.31812191934 +100,26.092918888835 +101,26.0809032845833 +102,26.6571393564478 +103,26.9022733539235 +104,27.1490479148176 +105,27.4577515672704 +106,28.4769331777205 +107,27.8995268848051 +108,27.2740942748061 +109,27.0073204525281 +110,27.7675942986965 +111,28.669197835798 +112,28.782870953615 +113,28.7440629412083 +114,29.2661362018366 +115,29.2963134656355 +116,29.3057672122468 +117,28.9241725686791 +118,29.1720209520873 +119,29.3657211852995 +120,29.4078823940972 +121,29.2458167568713 +122,30.374496989862 +123,29.7586748422917 +124,29.7249773495009 +125,29.76623284523 +126,29.7554250257332 +127,29.89151581303 +128,29.2248425909029 +129,29.198948617507 +130,28.8772606490545 +131,29.1001607638567 +132,29.1130319425489 +133,29.4714993701304 +134,29.7254307070667 +135,29.8756459220223 +136,29.3233683774063 +137,29.6592234589148 +138,29.9161224601504 +139,29.9475912683722 +140,29.9127206609762 +141,30.0300013055628 +142,30.0160306268816 +143,30.2063058742739 +144,29.6547983080682 +145,29.5100518679639 +146,29.4792492981031 +147,29.5046545569265 +148,28.6683904967233 +149,29.7023519345497 +150,29.6516216442299 +151,29.5146463947099 +152,29.5060062338002 +153,29.8509447648675 +154,29.8154534560163 +155,29.9424334719242 +156,29.690047803042 +157,29.0811148740794 +158,29.0644999548783 +159,29.1742776165293 +160,28.4813545451465 +161,28.4361434739251 +162,28.6158306901362 +163,27.244815449582 +164,28.0308399371416 +165,28.0943374082074 +166,28.1340905108074 +167,28.3333355454145 +168,28.1878603859515 +169,28.2756472078652 +170,28.1106637809044 +171,27.9411083959461 +172,27.1558393341306 +173,27.486338387798 +174,27.822551655906 +175,27.8637457219807 +176,27.5149212391274 +177,27.838454503669 +178,27.1433461639043 +179,26.4705102294807 +180,27.0302606993551 +181,26.5300468831785 +182,26.0613437146646 +183,26.4519442040733 +184,26.430516873003 +185,27.545606496456 +186,27.6074557321282 +187,27.3151823435893 +188,27.0155083532905 +189,27.5641042707741 +190,27.4010044070248 +191,27.1582360153069 +192,27.1556008239151 +193,27.052060260661 +194,27.170854273897 +195,27.7646494421106 +196,28.3748576218003 +197,28.6936449639141 +198,28.6399889459212 +199,28.5541591303333 +200,28.2272698739389 +201,28.1719358760925 +202,28.326544342537 +203,27.6420737432913 +204,28.2813211491863 +205,28.8789584528696 +206,28.1885303551898 +207,27.5438261047286 +208,27.5186685579694 +209,27.5010054438921 +210,27.4034023213343 +211,27.8191923071989 +212,28.5175254549185 +213,28.4564287181799 +214,28.2814341362301 +215,28.9552224505716 +216,28.8177584131145 +217,28.5128553740486 +218,28.5364901393821 +219,28.0377416474161 +220,28.7587623672328 +221,28.4112255267952 +222,28.0813826580954 +223,28.0181979666784 +224,27.6698405754169 +225,27.7294826227985 +226,27.4480495015126 +227,27.0573575031596 +228,27.0266766465158 +229,26.9903407942147 +230,27.6244603740124 +231,26.6107079586933 +232,26.5866327402663 +233,26.5050306825742 +234,26.5280949475622 +235,27.4258611022518 +236,27.5860799764696 +237,27.1197518881806 +238,27.0868761269987 +239,26.5089059499707 +240,27.3112684723833 +241,27.2416466529306 +242,27.2068378996643 +243,27.806910729195 +244,27.9438718896873 +245,27.6821337347686 +246,27.7175672809166 +247,28.5075477523541 +248,28.5226186461292 +249,28.1194501700737 +250,28.1424467984731 +251,27.4938753843251 +252,27.2328660085329 +253,26.8158194083915 +254,26.6680660589433 +255,26.8327953163199 +256,26.6709072973403 +257,26.8053396144679 +258,25.8770914157391 +259,25.7866384806084 +260,26.2926885297099 +261,26.1354056826059 +262,26.950679537489 +263,26.7436001632818 +264,25.8809784654903 +265,26.6253493164873 +266,27.7265963581136 +267,27.6786601956917 +268,27.7129155677968 +269,27.721698306913 +270,27.905267233295 +271,27.9571871594552 +272,27.8581940944006 +273,28.0819329320409 +274,27.735044748608 +275,27.0327934977211 +276,27.5079393113617 +277,27.5746459541421 +278,27.5740510952257 +279,27.7597617814176 +280,27.3657952766654 +281,26.6176672152698 +282,26.7980970334172 +283,26.1959890545247 +284,26.9769381349092 +285,26.8919884834659 +286,27.1472503513737 +287,27.4394852754376 +288,28.0008367927751 +289,28.2316970693211 +290,28.7967810312443 +291,29.5127598434235 +292,29.4155535103595 +293,30.705374678427 +294,30.3320096551799 +295,30.3685386903988 +296,30.734402656546 +297,30.9677990526575 +298,31.2239232385432 +299,31.122470949743 +300,31.1404323513543 +301,31.1372985523794 +302,30.7167894536327 +303,31.0556061788542 +304,31.0253106124294 +305,30.7463176637761 +306,31.1698966294139 +307,29.6232260750913 +308,29.1170772144621 +309,29.6714624194015 +310,29.3265687222477 +311,29.3600343446641 +312,30.1930736019409 +313,30.0512828532249 +314,30.0948091760261 +315,30.6261693879306 +316,31.2473834577519 +317,31.2889519359754 +318,30.7936800719611 +319,30.8552307220796 +320,30.1727891221 +321,30.1658822696024 +322,30.0289679559674 +323,28.7102569080277 +324,28.7884459574001 +325,29.1408413103479 +326,29.1547933921138 +327,29.5099565182441 +328,29.9197664793761 +329,30.8097902782286 +330,31.5199443482782 +331,31.1436088713428 +332,30.9600097288679 +333,31.0077575922272 +334,29.9125291629279 +335,30.4305491326099 +336,30.2862704100874 +337,30.2985306709895 +338,30.2848450235832 +339,30.2649148646112 +340,30.269814084877 +341,29.4874377765678 +342,29.2532422905558 +343,29.3224085984498 +344,28.8457491482927 +345,28.2573441494784 +346,28.2224446049695 +347,28.2127277977558 +348,28.0997092527612 +349,28.1576865421658 +350,28.1511019259023 +351,28.2421183376558 +352,29.5336748299535 +353,29.5325850196417 +354,29.9436538426689 +355,28.6474067871318 +356,28.6278784218591 +357,28.859480174395 +358,29.4218372081876 +359,29.2136746891627 +360,29.5885246594414 +361,29.8717366513706 +362,29.9753658141037 +363,29.0908481267812 +364,29.0736762464958 +365,28.9361826883491 +366,28.4789805626128 +367,27.7014506323191 +368,27.7031446330239 +369,27.6906334683939 +370,27.7124184700058 +371,28.0436095109692 +372,27.8993193696362 +373,27.6795305710195 +374,27.337130997411 +375,27.7152752822617 +376,27.0945798074044 +377,26.5649047189097 +378,26.8518057204845 +379,27.1797189949068 +380,27.2030354209462 +381,26.9883392178954 +382,27.3376969508508 +383,27.3667319962051 +384,27.2236771201643 +385,27.2957744465174 +386,27.24426813335 +387,27.8043455593492 +388,27.8110724188812 +389,28.0071419020811 +390,28.196204812447 +391,27.5707240947397 +392,28.3539477428913 +393,28.2642858081347 +394,28.0015440749435 +395,28.0736935991743 +396,28.1394817064853 +397,27.7246917685699 +398,27.3720569177324 +399,26.7666428867918 +400,26.7265303300899 +401,26.7365945649683 +402,26.3528236387954 +403,26.9536554148037 +404,27.0377286602388 +405,26.3911228522602 +406,26.4563730596724 +407,25.7848631816848 +408,25.920786766978 +409,26.4970571420541 +410,25.8680975238372 +411,26.5344136620158 +412,27.2263575471854 +413,26.7125255389415 +414,26.4350024514233 +415,26.9214554614815 +416,27.0604568622019 +417,27.0941838230327 +418,28.0110988529199 +419,27.8969594387529 +420,27.9140427256957 +421,27.5473684370917 +422,26.7100134753044 +423,26.673327788756 +424,26.6246594248829 +425,26.5717237980956 +426,26.8466971746218 +427,25.8834697613218 +428,26.0400273638686 +429,25.9227709646984 +430,26.5509776461413 +431,26.7196171595444 +432,26.5769336897348 +433,26.7549374889027 +434,26.6892390698125 +435,27.5780540731246 +436,28.491944955523 +437,29.4620675177625 +438,29.049663449716 +439,29.2912539821108 +440,29.7163999384691 +441,29.6977959123295 +442,28.8424263410189 +443,27.9957942680145 +444,27.5687071734941 +445,27.5721949003224 +446,28.9487628964649 +447,28.8275877788052 +448,28.2012272580081 +449,28.9825438246183 +450,28.9876451098271 +451,28.4766383743303 +452,27.8971845311884 +453,28.3575990043877 +454,29.5500671697161 +455,29.0599869133073 +456,29.446982010925 +457,29.4448932226058 +458,30.2987283695555 +459,30.4907531956854 +460,30.3712818585665 +461,31.0309224639863 +462,31.1306416649066 +463,31.2040207554903 +464,31.3027616700914 +465,31.287884426896 +466,30.4941467862675 +467,30.9842218570926 +468,30.8824758621791 +469,31.6562789074925 +470,31.3003734823633 +471,31.0094129150522 +472,31.1353193857711 +473,31.1429471890763 +474,31.0958257281067 +475,31.4027332942366 +476,31.3481615460837 +477,31.6007668804424 +478,31.5173202389853 +479,31.218212979786 +480,31.4313104994878 +481,31.536799819024 +482,31.5905762956716 +483,31.4942961632267 +484,32.1816892011556 +485,32.6123932703791 +486,32.6990257647762 +487,32.8914648733237 +488,33.8756429099305 +489,33.8904556064027 +490,33.8295470579556 +491,33.8307016292651 +492,33.5772637054616 +493,33.8051677896014 +494,34.2621206539621 +495,34.4134739195819 +496,34.7255425508218 +497,34.7082104992009 +498,34.6027900542569 +499,34.231204914439 +500,34.0993895510239 +501,34.228031098889 +502,34.6103843655072 +503,34.9025736833071 +504,35.0720672663373 +505,35.0209523408235 +506,35.2102983038526 +507,36.399394898969 +508,36.4962684365068 +509,36.9175986713652 +510,36.622521634809 +511,36.6370525479172 +512,37.0728913204425 +513,37.9437490799966 +514,37.316789884805 +515,37.1020702384055 +516,37.5010318891075 +517,36.7115562966999 +518,36.6998520159352 +519,35.8830550861913 +520,35.8191773489292 +521,35.2386629676887 +522,35.2044738488846 +523,35.7317192521889 +524,37.1065409919161 +525,36.9783211769861 +526,37.8894442227062 +527,37.5667659456689 +528,36.95210841993 +529,37.1617287734526 +530,36.7943244995866 +531,36.8353771854806 +532,37.2417950322695 +533,36.981727204475 +534,37.1284885236997 +535,37.1442011718991 +536,37.2910840124256 +537,37.2036128045203 +538,37.1467304160097 +539,36.5653904556021 +540,36.4605285898933 +541,36.5770358380312 +542,36.4134349399806 +543,36.830541819856 +544,36.7086011646173 +545,36.7540282521303 +546,36.8688028104506 +547,36.2052265355912 +548,36.1901685393917 +549,35.6066007801853 +550,35.5838048065583 +551,36.1557489735454 +552,35.9660358727257 +553,36.0184626655771 +554,36.1246059100681 +555,35.7762260623423 +556,35.5375643827478 +557,36.0928569116227 +558,36.0248212415638 +559,36.0724257585049 +560,36.9020474367449 +561,36.7833716184936 +562,36.9731250516923 +563,38.3398773120853 +564,38.1221112597953 +565,37.8673440655703 +566,37.9129422040304 +567,37.9042156145451 +568,37.5293232322582 +569,38.0906595056194 +570,38.3481668904528 +571,38.3885341707688 +572,38.8287548877644 +573,39.301002065524 +574,39.2287266878167 +575,39.2637799297271 +576,39.1128698714888 +577,38.559962702621 +578,39.5375998484016 +579,39.434972831723 +580,39.5845695940678 +581,40.0246915633313 +582,39.8379951841673 +583,41.0663103081845 +584,41.2496741585694 +585,41.8440532475826 +586,42.4419785092818 +587,42.4443558669878 +588,42.5145085865283 +589,42.4970798841809 +590,41.8620133845737 +591,41.9743091091717 +592,42.3860439589026 +593,42.7770151210504 +594,42.9177127273998 +595,41.9273357458599 +596,41.9800127051281 +597,42.217094411566 +598,41.7310111806813 +599,41.5115669035013 +600,41.1518437496547 +601,40.936735208748 +602,41.0767002226142 +603,41.003108832627 +604,41.1756579305926 +605,39.6505744192111 +606,40.591973078712 +607,40.1932800830863 +608,39.966421228218 +609,39.9805549832828 +610,39.198802516126 +611,40.2888195630674 +612,40.8350016306504 +613,40.9684001904919 +614,41.4780328419983 +615,42.311176925877 +616,42.5650174452204 +617,40.7501742698596 +618,40.5447473777353 +619,40.322992072846 +620,40.5923354104915 +621,39.7993694032339 +622,39.9074025615651 +623,39.8465658977013 +624,40.5186373808025 +625,40.369278972222 +626,39.5774660209277 +627,40.2405962437923 +628,39.8886547848097 +629,39.0645956631549 +630,39.2182462589982 +631,39.7079496212284 +632,39.6862655989382 +633,39.2326702666684 +634,38.7222678894945 +635,38.9014397039293 +636,38.5811441252651 +637,37.4776407072171 +638,38.1428786814123 +639,37.9548964039796 +640,37.9784793103165 +641,38.088701576824 +642,37.8665027939831 +643,37.8315840039142 +644,37.6613398610024 +645,37.7702846831017 +646,38.1987350355038 +647,37.8418130606393 +648,36.1595335269108 +649,36.1595474567622 +650,36.7003965410167 +651,36.7474049280487 +652,36.4544061808699 +653,36.5037534455334 +654,36.1249997117538 +655,36.2554063916198 +656,36.1412834102263 +657,36.1355012630094 +658,36.4763629048986 +659,36.5293458151114 +660,36.1806841913147 +661,36.1345774586021 +662,35.8873475348009 +663,35.9101140943039 +664,37.4946248940148 +665,37.3883224814904 +666,37.5194960716146 +667,37.4267241642622 +668,37.6074318951505 +669,38.1169043451165 +670,38.1987019443922 +671,37.672228180889 +672,37.5735979961436 +673,37.6147554963191 +674,37.704351969732 +675,36.5265034651318 +676,37.1428371176089 +677,37.042216595367 +678,37.1994334765791 +679,37.0307538375575 +680,37.2983210944619 +681,37.3490919184597 +682,37.3966677643155 +683,37.7151397023897 +684,37.0359638224003 +685,37.0913296683428 +686,36.6713632466692 +687,36.7252715475387 +688,36.7327653046095 +689,37.0497569268577 +690,37.1004259164891 +691,37.8084955784121 +692,38.0037016891715 +693,38.6506430112875 +694,38.1613700880475 +695,38.1662869073875 +696,38.5098689836363 +697,38.5132909483443 +698,38.6340984683532 +699,38.3355113957865 +700,37.8617812697024 +701,37.2062517687552 +702,37.1386401301661 +703,36.5989563140193 +704,36.7322517087082 +705,36.64590992546 +706,36.9313780336727 +707,37.1515969818777 +708,37.2049945021873 +709,37.3125343140767 +710,38.2341222135663 +711,38.2348201903869 +712,39.5082168580329 +713,39.3687472311753 +714,40.4351436540995 +715,40.4468238929569 +716,39.81067959969 +717,39.4239320658717 +718,39.5462013650977 +719,39.7080754729704 +720,39.6623701359239 +721,39.7202382031975 +722,40.0282900539407 +723,39.9923106822397 +724,39.8822997391972 +725,39.5777786323049 +726,39.4271345365905 +727,39.4366494833956 +728,39.9031431216311 +729,40.0074157410701 +730,40.7177664595581 +731,40.7204509927907 +732,38.3054003174184 +733,37.633941190701 +734,37.1901285973428 +735,37.6380239239622 +736,37.0965907767939 +737,37.0843008266587 +738,37.0319260299115 +739,36.9276226655435 +740,36.7682839606863 +741,36.8098611842102 +742,37.0002358484007 +743,37.3775722732916 +744,37.6523710828726 +745,37.6543111926661 +746,37.7820291198731 +747,37.2675557651615 +748,37.2538783623629 +749,37.2518114935371 +750,38.0468539871394 +751,38.5208855099424 +752,38.5006073650311 +753,39.7211688299028 +754,39.7149778065333 +755,41.2027128451164 +756,41.2713538350567 +757,41.4275639497289 +758,41.2079188999672 +759,41.5154289024757 +760,41.5332711250069 +761,41.5743109538139 +762,42.4329787964978 +763,42.6974866166711 +764,42.943817792211 +765,43.0032684463977 +766,43.041223734778 +767,42.7238593212583 +768,42.9156393808361 +769,43.0978989097045 +770,43.2193914790334 +771,42.5935009858061 +772,42.5520744225063 +773,41.9662504764096 +774,42.4376002199676 +775,42.1503660872471 +776,42.0180117023884 +777,42.1082512060654 +778,42.1372079789818 +779,41.7345106937541 +780,41.9886119727354 +781,41.8558908045909 +782,41.8365395651709 +783,41.8472924987965 +784,41.3445159190392 +785,41.1989378556418 +786,40.9934126996872 +787,40.3319388654739 +788,40.4217709329879 +789,40.5642383211839 +790,40.5693007821244 +791,40.4400179215341 +792,39.362394920152 +793,39.2299512438198 +794,39.9893052878256 +795,39.7875326112455 +796,39.7771218730521 +797,40.0807855773992 +798,39.9026881045777 +799,39.8465988229347 +800,39.8191659885486 +801,39.7795363462232 +802,39.4171840513579 +803,39.042482280468 +804,39.0446747174621 +805,39.1997666870649 +806,38.6260841465019 +807,38.5695060679527 +808,38.1142782192769 +809,38.0035648119672 +810,38.9186775339263 +811,39.3228071124008 +812,39.3706604064615 +813,39.3577155016215 +814,39.8259392768721 +815,39.4151191278105 +816,39.6320891253828 +817,39.7013716770543 +818,39.7187132420518 +819,39.3691037472924 +820,39.4630528375144 +821,39.4635575905731 +822,39.8414984824029 +823,39.7311129444935 +824,39.465532732306 +825,38.9830013177745 +826,39.111806633973 +827,39.1124198658213 +828,39.0608154867192 +829,38.6210661240982 +830,38.4572652764436 +831,38.4624311426865 +832,37.8108960364185 +833,37.0648969899455 +834,35.6580121521941 +835,35.5980444674131 +836,35.5126955287432 +837,35.2647997026829 +838,36.5553133589528 +839,36.70785536973 +840,36.5489032234404 +841,36.3485272462068 +842,36.3651627321193 +843,36.1758837926067 +844,36.1664335209654 +845,36.7213020461578 +846,36.7387516479604 +847,36.499637035176 +848,36.4618821876001 +849,36.4743136611973 +850,36.1382032846412 +851,36.4745888999919 +852,36.9122685068765 +853,36.8419371983697 +854,36.0168691499641 +855,35.9086267433612 +856,35.8530571925242 +857,35.4940070360132 +858,35.2332836821522 +859,35.4338102772879 +860,35.4419123965663 +861,36.1198056238613 +862,35.9870818726489 +863,35.3547420461285 +864,35.1143717018005 +865,35.1007574462714 +866,35.3306197917407 +867,35.26826901332 +868,34.7642076637085 +869,34.368255047229 +870,33.9531009003111 +871,34.7685490661826 +872,34.9694122021485 +873,34.8908247749872 +874,34.9302266735484 +875,34.818344629527 +876,33.4675259173141 +877,32.4461932776035 +878,32.6309388162151 +879,32.5715492742733 +880,31.702737437511 +881,31.5605701346567 +882,30.1189624223741 +883,29.9767534918134 +884,30.1514700494205 +885,29.9686676528113 +886,29.9141088619002 +887,29.3152974257265 +888,29.4650965371281 +889,30.3841231303499 +890,30.5290059366563 +891,30.3771116616767 +892,30.690112657457 +893,31.1966509656389 +894,30.231801661652 +895,30.2145752608305 +896,30.618877918681 +897,31.6951645315218 +898,31.7246571277381 +899,31.3260343161325 +900,31.4485764765679 +901,31.3841970513672 +902,31.423826045145 +903,31.7793347032581 +904,31.5452721038461 +905,31.6628590654048 +906,31.9522332760703 +907,31.7104294065038 +908,31.6991092879399 +909,31.2605480675029 +910,31.2529137409018 +911,31.0693562162799 +912,31.4503760529455 +913,31.4466023085789 +914,32.8884872409774 +915,32.9740547499259 +916,32.9598954300212 +917,33.5022816040686 +918,33.5737681162579 +919,33.4945587328876 +920,32.7396757951819 +921,32.696833917246 +922,33.8140193479228 +923,33.6850411987268 +924,33.0847383536931 +925,32.7178393663995 +926,33.5766293148794 +927,33.4966693772087 +928,32.3232398020277 +929,32.1954008394555 +930,31.6815622947452 +931,31.2193655398813 +932,32.023503011382 +933,31.9939169606478 +934,31.2222946414347 +935,31.4939332755539 +936,31.6056287789703 +937,31.7197475019641 +938,31.6313372281095 +939,31.8765991950532 +940,31.8399756772957 +941,31.5799806162426 +942,32.2471563735697 +943,33.1345322540472 +944,33.5714822658199 +945,33.6788160680426 +946,34.2762774467161 +947,34.2667236377486 +948,35.0394972266412 +949,35.0622155602982 +950,35.3178316109724 +951,35.4765095626566 +952,35.9288465279803 +953,36.4017111434168 +954,35.6517330349144 +955,36.0210388861038 +956,36.1946209592244 +957,36.1440599122134 +958,36.0227111832835 +959,36.0161779270349 +960,36.7186443684206 +961,36.658954226071 +962,36.5867520246073 +963,35.8907867901779 +964,35.947493843771 +965,35.9283831726261 +966,34.3249006491257 +967,33.6832935087476 +968,33.7278006037481 +969,33.521931400031 +970,33.4854637848441 +971,33.7296713790931 +972,32.4831387641102 +973,32.7006114384554 +974,31.8820585983386 +975,31.8597810371616 +976,31.3603551100913 +977,31.3385066624478 +978,31.4975196000238 +979,31.6365165660355 +980,31.7692855494276 +981,31.5965658262253 +982,31.2450460352209 +983,30.9768560799955 +984,30.7761496141145 +985,30.3690225118918 +986,30.6582346430432 +987,30.5369614237553 +988,30.5431710960173 +989,29.7090333480168 +990,29.7877751533151 +991,30.0200980114596 +992,30.1615700037007 +993,30.1105946537218 +994,30.2695217650714 +995,30.887702552351 +996,31.0925012929907 +997,30.9623506020159 +998,31.3710527251323 +999,31.6524615529747 +1000,31.9253820303524 +1001,32.0971827971819 +1002,32.4047059956471 +1003,32.4039985467942 +1004,32.105619052543 +1005,32.1239022113927 +1006,32.2689493091664 +1007,32.0657118580498 +1008,32.2713853388585 +1009,32.4594683773919 +1010,32.4563710429592 +1011,33.9735541648109 +1012,34.0733724432628 +1013,34.5555098545999 +1014,34.0019924337956 +1015,34.0287753750395 +1016,33.1544451701603 +1017,33.2599955115286 +1018,33.5688963084204 +1019,33.8360080735929 +1020,34.6557254577998 +1021,34.1691578652984 +1022,33.9135588651546 +1023,33.5381494493521 +1024,33.7309324603453 +1025,33.7792572217047 +1026,33.5590165607611 +1027,33.5224115436343 +1028,33.3083770228556 +1029,33.4687248700056 +1030,33.3984283323721 +1031,32.7813067800282 +1032,32.5691137584527 +1033,31.5857179072034 +1034,32.1617242793812 +1035,31.6619796211795 +1036,31.6321750658445 +1037,31.7895467410312 +1038,32.2651337236924 +1039,32.1830432883045 +1040,32.7136263966214 +1041,31.2992685965292 +1042,27.7925370584771 +1043,31.3852590779318 +1044,30.5910658586071 +1045,31.2723388765559 +1046,31.6734171656899 +1047,31.1854854166175 +1048,31.2911610141594 +1049,31.4200456990243 +1050,32.7202785667106 +1051,32.7072846428271 +1052,32.8448875459619 +1053,33.199713707231 +1054,33.0008740249497 +1055,32.9907734089926 +1056,32.8323212910778 +1057,32.3049826231154 +1058,32.3094609437612 +1059,32.9408913391518 +1060,32.6885419268141 +1061,32.7336340933033 +1062,32.7958975858131 +1063,32.2897915322943 +1064,32.6860472009999 +1065,33.330782434655 +1066,33.54826648297 +1067,33.408655660168 +1068,33.4129647131508 +1069,32.7718214501206 +1070,32.3322472726691 +1071,32.272031570516 +1072,32.2610990526639 +1073,32.9214990967951 +1074,33.3839517589334 +1075,33.7876885519026 +1076,33.4423672230268 +1077,33.2379138549948 +1078,31.1472322938217 +1079,31.1464821260468 +1080,31.7115078011765 +1081,31.8142963124846 +1082,30.9558594290804 +1083,30.9872596491371 +1084,30.8906591078158 +1085,31.1657958646141 +1086,31.1187332181366 +1087,30.5332732976009 +1088,29.2528340711599 +1089,29.6857434348056 +1090,29.7059205233229 +1091,29.8506984250203 +1092,30.3883050386156 +1093,30.1617585908066 +1094,30.7796522829412 +1095,30.9119007288091 +1096,31.5652871028194 +1097,31.7680658185804 +1098,31.8230334699979 +1099,32.1658225590106 +1100,32.1840224741824 +1101,33.487267406897 +1102,33.5190208915567 +1103,33.398334310341 +1104,32.5071348362378 +1105,32.6653062193101 +1106,32.7892712665021 +1107,32.6509647265463 +1108,32.7070614843129 +1109,32.916943844199 +1110,32.4900408875304 +1111,32.9456194816047 +1112,33.0310139308802 +1113,33.0115948763086 +1114,33.1741474921225 +1115,34.2121998857876 +1116,34.0004323884538 +1117,33.6192348551028 +1118,34.2759480398094 +1119,33.8794407237764 +1120,33.5736187205654 +1121,33.6077785024378 +1122,33.9551982978981 +1123,34.1018661300916 +1124,35.0834417685438 +1125,35.2900456579983 +1126,34.9978952316078 +1127,35.1116251234238 +1128,35.1502030270755 +1129,34.9547553234651 +1130,35.6826756081619 +1131,35.9453033373308 +1132,36.4068442000217 +1133,36.9089743688657 +1134,36.6892505641305 +1135,36.7724177969245 +1136,36.7768373962142 +1137,36.6155595243025 +1138,36.1510857121081 +1139,36.3188716699947 +1140,36.2535969627283 +1141,36.0404863503404 +1142,36.0063128706691 +1143,36.4594837860913 +1144,36.5237119142372 +1145,35.7650296412406 +1146,36.1860363454792 +1147,36.143227345895 +1148,35.4284697281921 +1149,34.2255155238459 +1150,35.0853567107291 +1151,34.9784083459536 +1152,35.021629126279 +1153,34.6749544956021 +1154,34.5294083257531 +1155,33.9893617912509 +1156,33.9056040955421 +1157,34.2281918005911 +1158,35.0997986646459 +1159,35.4595973942718 +1160,35.0284138706613 +1161,35.0736516386423 +1162,35.0084556746958 +1163,34.8702798715398 +1164,32.7374098290874 +1165,35.8628892081059 +1166,36.3844873025645 +1167,35.6919879220529 +1168,35.7287802068078 +1169,35.6704791179124 +1170,35.6593156267615 +1171,35.6386025580495 +1172,36.2837791402718 +1173,36.3172443358281 +1174,36.428733157211 +1175,36.5529379788183 +1176,36.688583647182 +1177,36.6854238341932 +1178,36.5963064072429 +1179,36.4691997832362 +1180,35.9761249949224 +1181,35.974700282044 +1182,36.8818675450627 +1183,36.8918076255642 +1184,37.3986249731931 +1185,37.6485574658129 +1186,37.5994479307544 +1187,37.5212304447669 +1188,37.545545238118 +1189,37.635683984321 +1190,37.6011729267332 +1191,37.7673730310786 +1192,37.7967089337929 +1193,38.4478888405212 +1194,38.4335263341304 +1195,38.5326136105856 +1196,38.2062519319175 +1197,38.2168928589557 +1198,38.1062481707439 +1199,38.3149836882206 +1200,38.2817167023393 +1201,38.0350459889033 +1202,37.4693811490706 +1203,37.6458438659948 +1204,37.9968635468616 +1205,37.3901086323182 +1206,37.9164846200978 +1207,37.9792008265341 +1208,37.5640238221235 +1209,37.642368288583 +1210,38.2004860468254 +1211,38.1135776386156 +1212,38.0692673633327 +1213,37.8510998018314 +1214,37.8667193253515 +1215,37.7973198923969 +1216,37.7956929050979 +1217,37.5076806658501 +1218,37.8653899845554 +1219,37.9741340634345 +1220,38.1531898716706 +1221,37.7059459199114 +1222,38.0030186384107 +1223,37.9780497565937 +1224,37.8600581964092 +1225,37.7462234743868 +1226,37.2427301376958 +1227,37.4718479781864 +1228,36.574577925568 +1229,36.8981124039862 +1230,37.9326282592858 +1231,37.9835075865291 +1232,37.3327630080204 +1233,37.8725362835211 +1234,37.0346562888639 +1235,37.3628779234913 +1236,37.2579208922322 +1237,37.3550205972238 +1238,36.4261238138983 +1239,35.7184996076002 +1240,35.5697370011802 +1241,35.6393287783728 +1242,36.6750541476064 +1243,36.5298770259062 +1244,36.1780574729835 +1245,36.2073006115278 +1246,36.7654190000416 +1247,36.066963570874 +1248,34.8031546241356 +1249,34.7920449744697 +1250,34.962824169307 +1251,35.2952532857197 +1252,35.3927667496722 +1253,35.1778911333977 +1254,35.1734239698592 +1255,36.2718626876133 +1256,36.1296903284465 +1257,35.5679746817272 +1258,35.4139529834793 +1259,35.4735543983817 +1260,34.9597804001504 +1261,34.7056128479871 +1262,35.122081505219 +1263,35.5464723441157 +1264,35.5658516559087 +1265,34.0716333027366 +1266,34.061764136955 +1267,34.9871848274018 +1268,35.1944783772481 +1269,34.8147791630973 +1270,35.6333906628462 +1271,36.2480186142938 +1272,35.8993172217299 +1273,36.0270767329471 +1274,35.4792882510502 +1275,35.3392266590958 +1276,36.0436582206029 +1277,36.1297506519495 +1278,35.6573280193405 +1279,35.9245697454861 +1280,36.3306569141579 +1281,36.1920881200395 +1282,35.4873487953304 +1283,35.2096758969683 +1284,35.1652828317777 +1285,35.0545015167303 +1286,34.0836607741244 +1287,33.77246885388 +1288,33.2919135170688 +1289,33.40417208662 +1290,32.607679572699 +1291,32.6080066686287 +1292,32.6060770265256 +1293,32.5026031343724 +1294,32.6670835409524 +1295,32.6668202774743 +1296,33.0078376785496 +1297,32.79448909601 +1298,33.330554515665 +1299,33.8072087238092 +1300,34.0366201861043 +1301,33.4715617706053 +1302,33.4645422782007 +1303,33.5135192502925 +1304,33.5221056790792 +1305,33.4867320917633 +1306,34.102696294453 +1307,34.2841040210456 +1308,34.5082109497008 +1309,34.2800121277366 +1310,34.0769958344476 +1311,33.2903289899108 +1312,33.44741654842 +1313,33.070702899057 +1314,32.7644143317985 +1315,32.3536409586924 +1316,32.1945313674411 +1317,32.0012275697655 +1318,32.1893553685659 +1319,32.1719296135705 +1320,32.0515617508873 +1321,32.013195219954 +1322,31.3615407975979 +1323,31.3587370487163 +1324,31.4094163556713 +1325,31.3856741509075 +1326,30.3978215722779 +1327,30.4309933183081 +1328,30.5591517346179 +1329,30.7090529457841 +1330,30.7624806291931 +1331,30.4288232456714 +1332,30.5493693606012 +1333,30.4015241535384 +1334,30.8625147849637 +1335,30.5431797514833 +1336,30.5468761052802 +1337,30.8118556608746 +1338,30.7330827758612 +1339,31.0958684915235 +1340,30.4435435435282 +1341,30.5744386263889 +1342,30.4331125145596 +1343,29.6046806505655 +1344,29.518027759834 +1345,29.5307167324752 +1346,29.2585744441618 +1347,28.9621397411612 +1348,30.0945894116085 +1349,30.0278805300888 +1350,30.0017365765988 +1351,30.7570211333231 +1352,30.9054558741386 +1353,30.9577601414042 +1354,31.259249611635 +1355,31.2878161406864 +1356,31.2592240929676 +1357,31.4714905320812 +1358,30.6699369645789 +1359,29.516019313814 +1360,29.6583595279554 +1361,29.4987761442288 +1362,29.0952884352307 +1363,27.5838442339282 +1364,27.1042684599058 +1365,25.9514421078083 +1366,25.8234645034167 +1367,25.7251416285776 +1368,25.6541238156742 +1369,26.0519791471887 +1370,25.8415973486168 +1371,25.0308800025975 +1372,24.4043052611309 +1373,24.3945086171505 +1374,24.8682581109614 +1375,24.8789194599009 +1376,24.8268292039592 +1377,24.7231274665273 +1378,25.1891011081518 +1379,24.9998920266133 +1380,25.4039524656578 +1381,25.3958189124198 +1382,25.3614887012609 +1383,25.1688377083676 +1384,25.8229740642866 +1385,25.1846339981517 +1386,25.6733925934471 +1387,25.4931153194684 +1388,25.6168855629524 +1389,26.2618550233456 +1390,26.6367172171663 +1391,27.4165961402853 +1392,27.1800010274998 +1393,27.3119158635831 +1394,27.4151650719356 +1395,27.6215425731824 +1396,28.3333291039032 +1397,28.4903640506942 +1398,28.2827372296619 +1399,28.4873684113276 +1400,27.6199919042291 +1401,27.7752287462909 +1402,27.7578478885877 +1403,26.3880085033627 +1404,26.3904467594566 +1405,26.8048418637284 +1406,26.6451615834869 +1407,25.97856015082 +1408,25.9280091253297 +1409,25.9282373018829 +1410,25.7506770967584 +1411,25.3386270250864 +1412,25.1407745603167 +1413,24.3407426060745 +1414,24.754961425981 +1415,24.7301944132838 +1416,24.9204507958772 +1417,25.0248019971245 +1418,24.6651943693905 +1419,25.1949603397205 +1420,25.342294355102 +1421,25.305380825552 +1422,25.4128410369148 +1423,25.5056686598214 +1424,25.9304342412785 +1425,25.9582676331452 +1426,26.0314514339389 +1427,26.5869901963068 +1428,27.292096678546 +1429,28.120714883835 +1430,28.028321445001 +1431,28.5838614842269 +1432,28.7940426637426 +1433,29.7382959179819 +1434,29.7200073893927 +1435,29.6363377894011 +1436,29.688410368232 +1437,29.5750331229605 +1438,29.5391498975484 +1439,29.8068624990329 +1440,30.862182502539 +1441,30.4249314144959 +1442,30.4277034738986 +1443,30.5027603529668 +1444,30.5375095842352 +1445,30.206448675311 +1446,30.2301721083844 +1447,30.1643647729852 +1448,29.4172593891086 +1449,29.2804951271543 +1450,29.3317762464498 +1451,28.9866286299084 +1452,29.7525103065715 +1453,29.7006601024385 +1454,29.357272975383 +1455,29.2501659076767 +1456,29.3552451175633 +1457,29.533981898101 +1458,29.5690179027276 +1459,29.6119763734571 +1460,29.7318052901386 +1461,29.7579942131976 +1462,30.0901622202274 +1463,31.2793934849563 +1464,31.2289156844248 +1465,31.3998744680298 +1466,30.8152324483904 +1467,31.1931981137979 +1468,31.2186906613599 +1469,31.3780647266602 +1470,31.3650344873763 +1471,30.8907236564357 +1472,31.2782710184481 +1473,31.2735126694436 +1474,30.9064335240459 +1475,31.0941993816376 +1476,32.2244632934978 +1477,31.7556764956781 +1478,31.8633295800868 +1479,34.1769485077606 +1480,33.6710900695249 +1481,34.0325605998938 +1482,35.17463593455 +1483,34.6868049108599 +1484,35.3432318690402 +1485,36.0684619731692 +1486,35.7547456791672 +1487,34.9587968139711 +1488,34.915132720895 +1489,34.2742954543234 +1490,34.4767758753865 +1491,34.8837191993053 +1492,34.8886822298832 +1493,34.6615444728743 +1494,34.6916978749379 +1495,34.6731372057471 +1496,34.6195880011057 +1497,34.6792480264681 +1498,34.7114672266888 +1499,34.3784962987666 +1500,34.0190650506562 +1501,34.1921149855785 +1502,34.6459396950356 +1503,34.5532577859566 +1504,34.8370139700809 +1505,34.3201819146262 +1506,34.2143396389352 +1507,34.20980791341 +1508,34.2950329026111 +1509,34.3725335579645 +1510,34.2924967402818 +1511,34.1793952178106 +1512,34.2302720416277 +1513,34.3002465517751 +1514,34.2907629099181 +1515,34.8725278813936 +1516,34.8818313861343 +1517,34.9979306564086 +1518,35.1167188304833 +1519,35.110465334652 +1520,36.0144385565844 +1521,36.0236090514249 +1522,35.9148204338454 +1523,35.8092745120111 +1524,35.5961977300051 +1525,35.4401954312214 +1526,35.6414478060463 +1527,35.5808098235966 +1528,35.4526249327456 +1529,35.4672388347119 +1530,35.0410739670629 +1531,34.270221670378 +1532,33.7786721966805 +1533,33.6754461488804 +1534,34.2964957931285 +1535,33.8006309423008 +1536,33.8370667309656 +1537,34.1981369931884 +1538,34.6789834115474 +1539,34.6156517082841 +1540,34.8843522253934 +1541,34.7480384998247 +1542,34.8883698673378 +1543,34.3166643468662 +1544,35.1429379016867 +1545,35.2365183864238 +1546,35.4800225076958 +1547,35.5112984889232 +1548,35.5507422855762 +1549,35.4796546227592 +1550,35.1614123321548 +1551,34.649935916462 +1552,33.8314085292975 +1553,33.6865914983035 +1554,34.7634807080267 +1555,34.7543617564252 +1556,34.6705192362563 +1557,34.4074380125058 +1558,35.0382160096565 +1559,35.0740598818576 +1560,34.6631317995205 +1561,34.0512252012833 +1562,34.3692612695048 +1563,34.3068624105114 +1564,34.3551343734125 +1565,34.4201669954911 +1566,34.3241188275094 +1567,35.104443153661 +1568,35.2166741543425 +1569,34.5623539406542 +1570,34.9956953832732 +1571,35.0514625297877 +1572,35.6590198813097 +1573,35.3091947031553 +1574,35.434276483073 +1575,35.2610587363741 +1576,34.9842100662194 +1577,34.9749155292325 +1578,34.6425005308125 +1579,34.8550511421043 +1580,34.6193544744781 +1581,33.3009595067496 +1582,33.5215917502929 +1583,33.3024584752087 +1584,33.2201701054693 +1585,33.3025098582256 +1586,33.3790418157515 +1587,33.2529844007496 +1588,33.2537289062104 +1589,33.5563329021262 +1590,33.5642403069466 +1591,33.7755453135317 +1592,33.7774742763199 +1593,33.7583757751925 +1594,34.3641725864186 +1595,34.3164488207932 +1596,33.5518263986908 +1597,33.5621904711017 +1598,33.4411023019971 +1599,33.3785377646387 +1600,32.0352063305641 +1601,32.091659309762 +1602,32.3728274207352 +1603,32.3229653234856 +1604,32.2488763921883 +1605,32.2486900311155 +1606,32.3082758735529 +1607,31.5560015055203 +1608,32.2750314280732 +1609,32.2787984276402 +1610,32.1268550695265 +1611,32.0423275162258 +1612,32.3717511617595 +1613,32.9049942672799 +1614,31.3416034150686 +1615,32.7993598493976 +1616,33.3133749284244 +1617,33.3300669499197 +1618,33.6696207424472 +1619,33.4472741689495 +1620,32.9370353549174 +1621,32.420981939766 +1622,32.4091902092157 +1623,32.4092661543082 +1624,31.9193949695035 +1625,31.745665996112 +1626,31.7622455699263 +1627,31.7651027867448 +1628,32.1889580525513 +1629,32.1788423105814 +1630,31.6348104627413 +1631,31.5699675354361 +1632,32.2957883289302 +1633,32.9307323526515 +1634,33.0393498836693 +1635,33.2163540964386 +1636,33.2613263848848 +1637,33.3965598031469 +1638,35.1194507830717 +1639,35.0765724686263 +1640,34.9585661884489 +1641,34.850195500979 +1642,34.7078711267945 +1643,34.6439673146787 +1644,34.0352325480772 +1645,34.599545249438 +1646,34.9111361157443 +1647,35.1292312308387 +1648,34.1977189895638 +1649,34.0811637173389 +1650,33.9520211635893 +1651,34.0390956396065 +1652,33.8260040754233 +1653,33.6950118356226 +1654,33.5410191263257 +1655,33.5343988383966 +1656,33.5514790851753 +1657,34.1701467928318 +1658,33.6829822567978 +1659,33.9149561358232 +1660,33.8535069684764 +1661,33.5930418617416 +1662,33.6985857400039 +1663,33.5316470964696 +1664,32.942749249598 +1665,32.7892729336151 +1666,32.8056229757264 +1667,32.6788347315394 +1668,32.4900586513883 +1669,32.4559867426962 +1670,32.3830501861196 +1671,32.3984966016769 +1672,33.2608253273435 +1673,33.3201417010549 +1674,33.730042100398 +1675,33.7242987768621 +1676,33.6842353925473 +1677,33.5631596822536 +1678,33.4661059806011 +1679,33.4657640118816 +1680,33.6082093792797 +1681,34.0682982997604 +1682,33.7877347662862 +1683,33.8470573780242 +1684,35.2502714182214 +1685,35.0976725376339 +1686,35.0748614573639 +1687,35.4014049737261 +1688,36.3180788170433 +1689,37.9315397157672 +1690,37.9691775765462 +1691,38.2219878703405 +1692,38.2367836853737 +1693,38.2059959080466 +1694,38.683693174691 +1695,38.7921551160946 +1696,38.8021095028451 +1697,38.7534957042297 +1698,38.9642187463121 +1699,38.9082123325008 +1700,39.1618242511975 +1701,38.8538310573377 +1702,38.6361109929366 +1703,38.2447485298897 +1704,38.3846900917406 +1705,38.3287209440399 +1706,38.1537373384843 +1707,38.2649233328067 +1708,38.2805637580446 +1709,38.1875046672622 +1710,38.5698306648102 +1711,39.5050856575554 +1712,39.6987297432223 +1713,40.3920414457787 +1714,40.485537850536 +1715,41.3269897150344 +1716,41.6095815276557 +1717,41.6589269605719 +1718,41.8373132171488 +1719,41.8289668854985 +1720,42.1588186270428 +1721,42.7371005358843 +1722,42.3484562074928 +1723,42.0961578241237 +1724,41.9225355695192 +1725,41.9171378540366 +1726,41.9760861314369 +1727,41.7257443129302 +1728,41.2486162727963 +1729,41.8747294318782 +1730,41.87568170648 +1731,42.179099114149 +1732,42.0491776619363 +1733,41.9747482824496 +1734,41.3565410034974 +1735,41.2219592977742 +1736,41.1940304100511 +1737,41.3924797934759 +1738,41.3484354684894 +1739,41.3440252870515 +1740,42.0766196252598 +1741,41.5264789691062 +1742,41.4456109786169 +1743,40.9584701918375 +1744,41.0378299038216 +1745,41.0720519586433 +1746,41.4690663753365 +1747,41.4934322495774 +1748,40.6101828041951 +1749,41.0178018248102 +1750,40.7905936631951 +1751,40.7044196604917 +1752,40.7050398153566 +1753,39.9368357490537 +1754,39.7522393967365 +1755,39.7645522699645 +1756,39.5558874039273 +1757,39.7472715627236 +1758,39.9737782466988 +1759,40.3969357502046 +1760,40.2166743727552 +1761,40.251367635805 +1762,39.3855640754578 +1763,39.2611959249774 +1764,39.1619528645275 +1765,38.8694892348599 +1766,39.6160097431145 +1767,39.3952211277051 +1768,39.5140898666905 +1769,39.4579975685874 +1770,38.9057052757916 +1771,38.8047838153404 +1772,38.8332216715718 +1773,39.6429703981512 +1774,40.3322330168434 +1775,40.4169472849511 +1776,40.0602038379944 +1777,40.0736188120016 +1778,39.7791644855644 +1779,39.9689368487002 +1780,40.5789408195922 +1781,39.8979749661861 +1782,39.3526155812324 +1783,39.3600898998769 +1784,38.0512977550727 +1785,38.2640005819251 +1786,38.2616962336598 +1787,39.1025238576584 +1788,39.2708896650962 +1789,39.1521645367691 +1790,39.4104932770233 +1791,39.3990771943944 +1792,38.8232866915788 +1793,39.3580460949602 +1794,39.528708779031 +1795,40.5622089828596 +1796,41.0150897763402 +1797,40.8708325218439 +1798,40.5399499942005 +1799,41.02575733506 +1800,41.1761937325644 +1801,41.1968502356485 +1802,40.9818957306535 +1803,41.1597633600416 +1804,41.5942155255712 +1805,41.2080664008828 +1806,40.4146998318368 +1807,39.9241596637478 +1808,39.6260654610427 +1809,39.8571802639754 +1810,39.5908010789336 +1811,39.6974862276464 +1812,39.4422290529189 +1813,39.3019918081784 +1814,39.4802572086723 +1815,39.5287187420122 +1816,38.8535634400158 +1817,38.7774907535714 +1818,39.1296023265864 +1819,39.0783853411999 +1820,39.1492922776993 +1821,39.0077481415413 +1822,38.6358945127164 +1823,38.9550156827091 +1824,38.4982817921926 +1825,39.1008850015232 +1826,39.5962116086845 +1827,39.4583335406208 +1828,39.5993642176114 +1829,39.5705392461565 +1830,39.5566052818388 +1831,39.7156967411619 +1832,39.7132863012162 +1833,39.5500745849456 +1834,39.5208112230229 +1835,38.7403292012789 +1836,39.1986453011754 +1837,39.0694757192452 +1838,39.3442288568902 +1839,39.6353362225693 +1840,40.7145969634643 +1841,40.6649695246857 +1842,41.0067782367778 +1843,40.9890421331168 +1844,40.1087337044638 +1845,39.4221593695927 +1846,39.2384235007032 +1847,37.5311701848496 +1848,38.0535352210841 +1849,38.3111132066436 +1850,38.6490061042296 +1851,38.6864842493476 +1852,38.6843419782588 +1853,38.7233245890729 +1854,38.8111976408488 +1855,38.4649343358534 +1856,38.5155631797494 +1857,38.7640105357505 +1858,38.5529492976775 +1859,38.0783661139426 +1860,38.4298896136144 +1861,39.0470140683293 +1862,39.5326358430817 +1863,39.1057199342333 +1864,39.6013142008091 +1865,38.8168013835723 +1866,39.2508217608061 +1867,38.1567722040951 +1868,38.6255521025406 +1869,38.4713278836527 +1870,38.4877146816262 +1871,38.3988883072832 +1872,37.5497510553062 +1873,36.6204968998332 +1874,36.7659293931188 +1875,36.7741792719779 +1876,36.7845731319002 +1877,36.7265561574018 +1878,37.1948433968094 +1879,37.1207508541439 +1880,36.9772584198801 +1881,36.9107802578885 +1882,37.0213007240142 +1883,36.5553512181192 +1884,35.9894672573055 +1885,35.9630322681372 +1886,36.0107528226069 +1887,36.0278770472245 +1888,36.4932657039806 +1889,36.2393454284175 +1890,35.8777601532874 +1891,35.0979752851866 +1892,35.0770652903252 +1893,35.3114140019539 +1894,34.5730550920903 +1895,34.6842074805997 +1896,34.8018303140163 +1897,35.4710126430774 +1898,35.1704839458549 +1899,35.0891753688322 +1900,35.2250916012215 +1901,35.0126167923684 +1902,35.2062163588134 +1903,35.3729426417021 +1904,34.4590277146679 +1905,35.0921547615914 +1906,34.8517351148361 +1907,34.8655027206225 +1908,35.1256008704019 +1909,34.8344628822164 +1910,34.7824211207797 +1911,34.312036026021 +1912,34.279540168695 +1913,35.1096803630126 +1914,34.5142338493007 +1915,34.5353986777929 +1916,34.2794140524347 +1917,34.364552674657 +1918,34.101749004204 +1919,34.4117516380003 +1920,34.291999205288 +1921,34.1959401304291 +1922,34.188383645641 +1923,36.0739248312091 +1924,36.0509843155532 +1925,36.7609596418159 +1926,37.8286356002705 +1927,37.5298049331901 +1928,37.5352750356914 +1929,37.5126687168306 +1930,37.1110622760964 +1931,37.3499786439698 +1932,37.2097920739884 +1933,37.2905994313098 +1934,37.1267555257549 +1935,37.3402125558586 +1936,37.3386380269411 +1937,36.9379322584499 +1938,36.9614785518514 +1939,37.0795447750503 +1940,36.9680049336761 +1941,36.621305153148 +1942,36.6465422479927 +1943,36.564393168165 +1944,36.7679851026885 +1945,36.3448450046793 +1946,35.7762242927 +1947,36.2886146135931 +1948,35.6230801953062 +1949,35.4413174854964 +1950,34.8539290976881 +1951,34.5513366861009 +1952,35.0920259063736 +1953,34.7681229611924 +1954,35.0237231414231 +1955,35.1138403353437 +1956,35.0985991678112 +1957,35.6307314070539 +1958,35.4755624838355 +1959,34.8782646012494 +1960,34.8795900389097 +1961,34.0253650908621 +1962,33.8043800046546 +1963,32.7802094654493 +1964,32.7591843184612 +1965,32.7585131492175 +1966,32.9319837547973 +1967,35.2582807446055 +1968,34.2824069356664 +1969,34.3398644323734 +1970,34.1239737641313 +1971,34.7901134161287 +1972,34.6468610375532 +1973,34.5993130289732 +1974,34.5324293413493 +1975,34.6065484574554 +1976,34.8327234410255 +1977,34.4991315709836 +1978,34.704375572568 +1979,35.1956558892661 +1980,35.1854922442625 +1981,33.5507876664605 +1982,34.0248458015423 +1983,34.1504479321526 +1984,34.5433137029493 +1985,34.4938389349185 +1986,34.6946843993565 +1987,34.3614091694597 +1988,33.1995357648386 +1989,33.5408918537118 +1990,33.2554352629549 +1991,33.1262501397983 +1992,32.1006804695537 +1993,32.1179362575076 +1994,31.5471413108941 +1995,31.3588485387345 +1996,30.9632419207188 +1997,31.0814335778586 +1998,31.0046116044597 +1999,30.8628476754352 +2000,30.1054333071612 +2001,29.3202417028622 +2002,29.3196582365828 +2003,29.7589582558552 +2004,30.1176636323411 +2005,29.5488908245289 +2006,29.3504458501519 +2007,29.3876275904027 +2008,29.3919506865075 +2009,30.3533802497101 +2010,29.4689998449075 +2011,29.3358611569567 +2012,29.3611438153196 +2013,29.2560229385244 +2014,29.2078744973145 +2015,29.2661150457955 +2016,29.1103724653344 +2017,29.9883397535021 +2018,29.8273564281132 +2019,29.1963696797902 +2020,29.0913373628746 +2021,29.3539830547531 +2022,29.5460441679287 +2023,28.362163181178 +2024,28.1725457984243 +2025,29.1678963469895 +2026,29.134747648858 +2027,28.0133642954549 +2028,27.976946860275 +2029,28.3741940725681 +2030,28.3709515308803 +2031,28.3882168588488 +2032,27.9923295338698 +2033,27.3678701489954 +2034,27.2519954829614 +2035,27.7467296706648 +2036,27.6793302903547 +2037,28.0287290730683 +2038,28.028705243795 +2039,28.3507863670096 +2040,28.35202643267 +2041,28.2258674295056 +2042,28.2111399100848 +2043,28.1265322635429 +2044,28.0111605756859 +2045,28.0379868303072 +2046,27.7710482053044 +2047,28.1012828985053 +2048,27.9567543555583 +2049,28.8984517684263 +2050,28.338035604298 +2051,28.5121969637179 +2052,28.6870323319396 +2053,28.5192562617951 +2054,28.5344118228895 +2055,28.4758784633004 +2056,28.4258237207538 +2057,28.5314583633522 +2058,28.3719863211517 +2059,27.2810106742586 +2060,27.2854238463928 +2061,26.9829703997752 +2062,26.7799178911942 +2063,27.3340184348531 +2064,27.2618446453563 +2065,27.0864395837284 +2066,27.3994567008932 +2067,27.3506473123165 +2068,27.2796462395323 +2069,27.5942689159708 +2070,27.5295308031424 +2071,27.5703248873732 +2072,27.4481123592095 +2073,26.840190037017 +2074,25.8482840395088 +2075,27.8425680408513 +2076,28.053732543317 +2077,28.6267660432645 +2078,28.1472208461609 +2079,28.1169296241708 +2080,28.0067077263198 +2081,28.3010429186481 +2082,28.3389427208618 +2083,28.4488107844691 +2084,28.4076650904194 +2085,29.1202668681288 +2086,29.3317588176526 +2087,29.6650404749726 +2088,29.5135525450384 +2089,29.6925971230313 +2090,28.981378296215 +2091,29.0955192433064 +2092,29.1030360689285 +2093,29.5463156635479 +2094,29.9576334942901 +2095,29.904489752089 +2096,29.9052432643979 +2097,29.0461151521612 +2098,29.0449528298721 +2099,29.2662404454678 +2100,29.5924500935491 +2101,29.7115950984136 +2102,30.019093648315 +2103,30.0284470923788 +2104,29.9560268426836 +2105,29.9666498317987 +2106,29.8701321991506 +2107,30.0544691071536 +2108,30.0004732723894 +2109,29.5647804160606 +2110,29.9014647538795 +2111,29.6229076486477 +2112,30.3096302326643 +2113,29.9644743090015 +2114,29.4910041980106 +2115,29.9614219898962 +2116,30.3461349154731 +2117,30.6044263494008 +2118,31.1121599196654 +2119,31.4227242015046 +2120,31.585365400844 +2121,31.9969847245829 +2122,32.0181922016432 +2123,29.8355214613791 +2124,30.09604616585 +2125,30.1037825040407 +2126,30.0536317879426 +2127,29.9067505191007 +2128,29.9061389404484 +2129,29.8526497884458 +2130,30.2076150160682 +2131,30.8201650553556 +2132,30.66806843164 +2133,29.9339378534558 +2134,29.8369302497135 +2135,29.6439875953615 +2136,30.1907478431292 +2137,30.2254273667557 +2138,29.8537356605228 +2139,29.8455715150053 +2140,29.8391930193258 +2141,31.1563027242587 +2142,31.2554610112381 +2143,31.1084539189388 +2144,30.6668605140557 +2145,30.6453331864567 +2146,30.1701512956892 +2147,30.2952078090195 +2148,30.8518824742632 +2149,31.1135769988512 +2150,31.3160495461918 +2151,31.3125857497525 +2152,30.86470494967 +2153,30.894522811439 +2154,31.2334238558523 +2155,31.4047847217176 +2156,31.1880581471766 +2157,31.8371546442013 +2158,31.8068496948461 +2159,31.730917911347 +2160,31.6405597060153 +2161,31.0407092443371 +2162,29.8081887447235 +2163,30.5605295230683 +2164,30.6066708875634 +2165,30.4037299739648 +2166,30.7201994734462 +2167,30.7615476985702 +2168,30.9709255623601 +2169,31.0196505198588 +2170,31.2293801406181 +2171,31.3888645143138 +2172,31.3543016108507 +2173,30.9927627408193 +2174,31.9151795610185 +2175,31.9185762058354 +2176,33.1591038413938 +2177,33.2978780985265 +2178,33.0125216934659 +2179,33.0207347172739 +2180,32.9960663580247 +2181,33.0072841028935 +2182,34.0560773837631 +2183,33.1585877422361 +2184,33.43289159047 +2185,33.4955768254167 +2186,33.4985094124301 +2187,33.6849166584474 +2188,33.9484151314696 +2189,33.3030476680581 +2190,33.2210839435669 +2191,32.6988292349938 +2192,32.4279373139254 +2193,32.188585922783 +2194,32.3210325399389 +2195,32.7148524098956 +2196,33.3352020959596 +2197,33.2631960441708 +2198,32.7100357248001 +2199,33.1541033896707 +2200,33.4916243198615 +2201,33.7105784252751 +2202,33.3254385382681 +2203,33.2552776429319 +2204,33.468397553307 +2205,33.6832038148391 +2206,33.7381043181822 +2207,33.2683913724174 +2208,32.8700153666662 +2209,33.0065562661342 +2210,33.4612311498924 +2211,33.8942342399864 +2212,33.5030914743108 +2213,33.579287468108 +2214,33.6679150584839 +2215,34.389674353699 +2216,36.2818122489723 +2217,36.8835735102798 +2218,36.8487828066257 +2219,37.4721700839106 +2220,37.8481743111595 +2221,37.904172630338 +2222,37.8398787244463 +2223,37.3299709668841 +2224,37.4853701637283 +2225,38.1019809555541 +2226,37.6348795403808 +2227,37.458475294952 +2228,37.2408443663241 +2229,38.4524960900222 +2230,37.8569941621757 +2231,37.356385250204 +2232,37.3424435249881 +2233,37.6181619752285 +2234,37.1664917384902 +2235,37.4732295306824 +2236,37.2333430674181 +2237,37.1497726349914 +2238,36.9396650849167 +2239,37.0692126984882 +2240,37.1303128541295 +2241,37.1263799317195 +2242,36.9177732495947 +2243,36.8913091806338 +2244,36.8328750387122 +2245,37.2020207514119 +2246,36.8352425727979 +2247,36.8309447388907 +2248,36.9800061857253 +2249,37.4248247972147 +2250,37.6303640569343 +2251,36.6673662985375 +2252,36.7528930080458 +2253,36.353792852733 +2254,36.684797000231 +2255,36.6914150390566 +2256,36.8735047982181 +2257,36.1652337551122 +2258,35.7335531988793 +2259,35.4880563628068 +2260,35.6202060598352 +2261,35.633174461262 +2262,35.8437425347841 +2263,35.9725442605288 +2264,35.3048145130258 +2265,34.7998562167897 +2266,35.207935030843 +2267,35.1509595645042 +2268,35.5206300049754 +2269,35.7847373835048 +2270,35.4149729701676 +2271,35.2079081023712 +2272,35.0159632908953 +2273,35.1521411598824 +2274,34.7677733076443 +2275,34.4880577506128 +2276,34.487549416751 +2277,34.3124159028159 +2278,34.3991234142892 +2279,34.2148139207796 +2280,34.2807330987524 +2281,33.4899109776971 +2282,33.4800735183235 +2283,34.3589134532352 +2284,34.8184733106359 +2285,35.01545093767 +2286,35.5229624899408 +2287,35.4137445712856 +2288,36.1101268505651 +2289,36.2221140879296 +2290,36.1896745647924 +2291,36.1998871753395 +2292,36.8249737102428 +2293,36.8286870177476 +2294,36.8144973880756 +2295,36.8382077292184 +2296,37.2434544157703 +2297,36.9259731775898 +2298,35.8576345692627 +2299,35.8855506552642 +2300,36.0699017221022 +2301,35.9411761119227 +2302,35.9173025250352 +2303,35.6784084068046 +2304,36.2462201595222 +2305,36.3620909907333 +2306,36.5308451306996 +2307,37.1005743048279 +2308,36.9953860390907 +2309,37.3172854219161 +2310,37.0238534187258 +2311,37.3311412230849 +2312,36.8562932336869 +2313,36.8728683454017 +2314,37.2954428216128 +2315,37.1623645343859 +2316,37.1257840882286 +2317,37.2718114163076 +2318,37.4312789350087 +2319,37.1323776056654 +2320,37.1121155758923 +2321,36.8242524461256 +2322,36.9987119622029 +2323,36.5390086203621 +2324,37.0286143865595 +2325,36.8786430224915 +2326,37.3547101676727 +2327,37.4832074900339 +2328,37.9066966717823 +2329,38.2265167158351 +2330,38.2251738598216 +2331,38.5175976282771 +2332,39.1317139296685 +2333,38.4351957501261 +2334,39.0195386451731 +2335,38.9681638401919 +2336,39.1898044209205 +2337,39.2062608685605 +2338,38.9150821701782 +2339,39.7688777361036 +2340,39.7757620064805 +2341,39.7034006678978 +2342,39.2851487536839 +2343,39.4502095265304 +2344,39.3915593660826 +2345,38.9857536865919 +2346,39.0745774959012 +2347,39.3155690141254 +2348,39.5342236312578 +2349,39.4649608615891 +2350,39.6892003676086 +2351,39.7699113302327 +2352,39.5355288823894 +2353,38.7846433719167 +2354,38.848021651349 +2355,39.139694053421 +2356,39.5723331909327 +2357,39.4775906546037 +2358,39.2234511378987 +2359,38.5780929944973 +2360,38.5764510726824 +2361,38.9721373124723 +2362,38.4804597383773 +2363,38.1335659212492 +2364,37.5882050810996 +2365,37.2016987393017 +2366,36.9467166820105 +2367,37.2977080973896 +2368,37.5690047316842 +2369,38.1070057303399 +2370,37.662308616851 +2371,37.911795808486 +2372,38.0219820054747 +2373,37.9800264942281 +2374,37.9361459993972 +2375,38.0221145323328 +2376,38.1848189574916 +2377,38.0015623393468 +2378,38.1711592413259 +2379,38.0293318557201 +2380,39.2667288645966 +2381,39.4388868187304 +2382,39.6326667857194 +2383,39.6943172462407 +2384,38.4522924681969 +2385,38.9204429238219 +2386,38.7193095015133 +2387,38.7432361800416 +2388,38.9834293094507 +2389,38.9742042371834 +2390,38.7215640748561 +2391,37.2973718369254 +2392,37.451244302981 +2393,37.5283704369243 +2394,37.9522293764375 +2395,37.835984298622 +2396,37.497742223483 +2397,37.4454801025047 +2398,37.3097160096267 +2399,37.3529363445592 +2400,37.5364580428046 +2401,37.3999023384286 +2402,37.3530787669716 +2403,37.2088495915368 +2404,37.3772195566731 +2405,38.1636018424244 +2406,38.1744583572895 +2407,38.225268863251 +2408,37.7453710895805 +2409,37.6959774767313 +2410,37.1323992805183 +2411,37.5895119746992 +2412,37.595014414032 +2413,37.8352174960965 +2414,38.1948267683525 +2415,38.816154078805 +2416,38.9695450562298 +2417,38.5101448128433 +2418,38.7094978962987 +2419,38.8330673644232 +2420,38.7985293678031 +2421,38.3698994780343 +2422,38.3829995269691 +2423,38.3791129351112 +2424,38.3052367484386 +2425,38.2780523618985 +2426,38.1123873605934 +2427,38.146761901654 +2428,38.1657742604299 +2429,37.2150305952346 +2430,37.2019486190468 +2431,37.9362906152352 +2432,37.7374040480474 +2433,38.1942864346536 +2434,38.6650825908453 +2435,38.7365459919102 +2436,38.9162186444249 +2437,38.9158327938509 +2438,39.0701117237776 +2439,39.0209032222789 +2440,39.1169171626756 +2441,38.4805738752562 +2442,38.5356869611868 +2443,38.6436730212155 +2444,38.2603117409412 +2445,38.2256315712904 +2446,38.0295479903636 +2447,38.3722144779522 +2448,38.3968960241565 +2449,38.3984100070267 +2450,38.4246635237572 +2451,38.5418219729211 +2452,37.9716885102501 +2453,37.9807292312045 +2454,38.5000487294446 +2455,38.5120460196147 +2456,38.5711957778233 +2457,38.667971707912 +2458,38.4204839077627 +2459,38.3737432369008 +2460,37.3296809596791 +2461,37.082630129997 +2462,37.5030813796961 +2463,37.7422895963259 +2464,37.7406903677509 +2465,37.1784983202642 +2466,36.9666226544114 +2467,36.9474731281315 +2468,37.4780038991305 +2469,36.7853881197979 +2470,36.7216633814324 +2471,36.05942648742 +2472,35.8709033749384 +2473,35.8642218785975 +2474,36.1941566923908 +2475,36.4304121266589 +2476,37.3789805517048 +2477,37.5077774548991 +2478,37.1957829652079 +2479,37.1797729404091 +2480,38.216074640195 +2481,39.7698726179335 +2482,39.7101234367902 +2483,39.4644174605393 +2484,39.8873909481966 +2485,40.4794052839249 +2486,40.9617300450543 +2487,40.8036657387837 +2488,41.5417562317159 +2489,41.9020390419709 +2490,42.3343962739462 +2491,43.4251096951839 +2492,43.3467495490359 +2493,43.5587095218806 +2494,43.6877125550424 +2495,43.5164043044117 +2496,43.5024165182309 +2497,44.2910170290377 +2498,43.5574452148976 +2499,43.935648461977 +2500,43.4431376494478 +2501,42.2022585001965 +2502,41.7943508900046 +2503,41.7619635051267 +2504,42.3033543446105 +2505,43.1008405738783 +2506,43.1789944744682 +2507,42.4284810948314 +2508,42.5473547733084 +2509,42.7622285470331 +2510,41.822511081589 +2511,39.959791511893 +2512,39.9582107547494 +2513,40.7968150822435 +2514,40.8170805070675 +2515,40.8609837702499 +2516,41.3706616734486 +2517,40.8118353964161 +2518,41.7521093517927 +2519,42.0816420666664 +2520,42.0829078500821 +2521,42.2430073587105 +2522,43.4699964264085 +2523,43.0795342138199 +2524,42.7586120438945 +2525,42.6828543636571 +2526,42.7055775925386 +2527,42.4885346761481 +2528,42.5794276958185 +2529,41.641644251782 +2530,41.9951532973185 +2531,41.9484913924611 +2532,42.1073684353185 +2533,42.0910445073705 +2534,41.8448933807731 +2535,41.6046678418426 +2536,41.6644798897133 +2537,41.721596977397 +2538,41.0397000565002 +2539,41.0255451262014 +2540,40.8779487576946 +2541,39.9042078121361 +2542,39.9175562938944 +2543,39.8544726726307 +2544,40.0748000711598 +2545,39.6725403832968 +2546,39.7554630699818 +2547,39.738281539976 +2548,40.688711153608 +2549,40.6344063663075 +2550,40.8256104979298 +2551,40.5613440113403 +2552,40.4931694990408 +2553,41.4119804478498 +2554,41.4570851492373 +2555,41.6269978572249 +2556,40.738479742936 +2557,40.9036273444639 +2558,40.8355834752206 +2559,40.6927266422781 +2560,40.0215650879599 +2561,39.5972770257663 +2562,39.8591550429094 +2563,40.2577625467013 +2564,38.9805816562127 +2565,39.1962652467168 +2566,40.27851337856 +2567,40.4219807858205 +2568,40.8432423500582 +2569,41.4393655013054 +2570,41.0177858452135 +2571,41.7174129657547 +2572,41.8076478110938 +2573,41.8690694502264 +2574,41.2614866120337 +2575,41.053304282423 +2576,40.8587675555278 +2577,41.2032708979578 +2578,41.7221106782239 +2579,42.2493951003989 +2580,43.0203226988992 +2581,43.1696014354063 +2582,43.0324055740865 +2583,44.0584946163585 +2584,42.6963216887965 +2585,42.7023369894165 +2586,42.6946972277584 +2587,42.8876412939041 +2588,43.0891382726261 +2589,42.8973434064475 +2590,42.5415481080087 +2591,42.8102582394388 +2592,41.8660475623367 +2593,41.6272150860949 +2594,41.4239705823216 +2595,41.2269158980084 +2596,41.3622783182826 +2597,40.5533504513675 +2598,40.5322762882076 +2599,40.5580457255411 +2600,40.5965484744473 +2601,40.6007595472378 +2602,39.8867402415103 +2603,39.744419362919 +2604,39.4574717226145 +2605,40.0602745080408 +2606,40.1308788164322 +2607,40.0343474202078 +2608,39.9995940281517 +2609,39.964364081701 +2610,40.0582954363418 +2611,39.3643340501938 +2612,39.1872872862201 +2613,39.2449551988511 +2614,39.0775709522766 +2615,39.2744743627839 +2616,39.1048495363647 +2617,38.8214518138354 +2618,39.148919443231 +2619,38.3896500692483 +2620,38.3935308818041 +2621,37.5842486836372 +2622,37.5057206794953 +2623,37.4765200727779 +2624,37.4607629481641 +2625,37.7036010232665 +2626,37.9284949964923 +2627,37.9496532304638 +2628,38.7335220955414 +2629,38.2610297503545 +2630,38.3279429219656 +2631,38.1522585680911 +2632,37.9092816459287 +2633,38.2396476742896 +2634,38.5212344443828 +2635,38.4210488276622 +2636,38.960225429562 +2637,39.2410081568865 +2638,39.0879347995083 +2639,39.0888478249427 +2640,39.5579812000194 +2641,39.1056103347288 +2642,39.0076306912507 +2643,38.2058250207565 +2644,37.543315900245 +2645,37.5755549369115 +2646,37.2869297536006 +2647,36.2329570379358 +2648,36.1891895596591 +2649,36.0896739916921 +2650,35.9597647446486 +2651,36.1919722709153 +2652,36.6607492970525 +2653,36.6449423921186 +2654,36.4255829357047 +2655,35.6375906092785 +2656,35.7067452401171 +2657,35.5706861711474 +2658,35.3736795014911 +2659,34.6729067667864 +2660,34.6317173016052 +2661,34.6789381269452 +2662,34.6548477022528 +2663,34.6540209259431 +2664,34.7716069023402 +2665,34.8877041018433 +2666,35.0261334781343 +2667,34.464782404385 +2668,34.6856827290362 +2669,34.4431239689885 +2670,34.2123487489851 +2671,34.2264165359138 +2672,34.1282238764291 +2673,34.1124259872688 +2674,33.969467199214 +2675,33.9632382394413 +2676,34.1071137008286 +2677,33.6192191884287 +2678,33.8692123441853 +2679,34.3830071784869 +2680,34.4761241343414 +2681,33.8783585162222 +2682,33.9545031731332 +2683,34.1591444309007 +2684,33.8706108159827 +2685,34.3820028488345 +2686,34.3849945322783 +2687,34.540332423206 +2688,34.1802539706813 +2689,34.2391715948376 +2690,33.3409032838207 +2691,33.3175846558236 +2692,33.7742622214822 +2693,33.9846940233314 +2694,35.188977149921 +2695,35.2783405297664 +2696,35.3094721288331 +2697,34.697407680417 +2698,35.4808224274085 +2699,35.5646766043388 +2700,35.5342054792685 +2701,35.5415418840851 +2702,35.5877310518374 +2703,35.2064946637445 +2704,34.2384090946175 +2705,34.034443422095 +2706,33.7653665283479 +2707,33.8388906265172 +2708,33.5801963947725 +2709,33.4043085152064 +2710,32.5794052072048 +2711,32.5851045467234 +2712,32.2662796281948 +2713,31.7638502087358 +2714,31.8246846674664 +2715,31.6933754090282 +2716,31.7135897964033 +2717,31.8944280552301 +2718,30.539601797885 +2719,30.4195623557416 +2720,30.5705117363315 +2721,30.4362983756888 +2722,30.4150717914012 +2723,30.6543406118643 +2724,30.55584352843 +2725,30.6660732880682 +2726,30.6313866377493 +2727,30.2536537398135 +2728,29.7096599147817 +2729,28.8960445185174 +2730,28.6156388326623 +2731,28.7019153420006 +2732,29.2014266969034 +2733,29.5560932811507 +2734,28.6568928777273 +2735,29.0794216220002 +2736,29.2650132186867 +2737,29.6469549751579 +2738,29.3349350139452 +2739,29.05015946798 +2740,29.0197508395469 +2741,28.7745180598701 +2742,29.4062308381593 +2743,29.3843198120355 +2744,28.1625291170492 +2745,28.3709680574262 +2746,28.4756566933163 +2747,28.5578592945407 +2748,28.6124779375588 +2749,28.2906520738052 +2750,27.951340656361 +2751,28.4231655499608 +2752,28.4454887998975 +2753,28.4355714945169 +2754,28.0410815982372 +2755,27.0370259185113 +2756,27.0370467177392 +2757,26.7666233044014 +2758,26.6999176490049 +2759,26.8898059765988 +2760,26.8010479591086 +2761,26.7601346020116 +2762,27.1834370368399 +2763,27.168597365053 +2764,27.0459911418833 +2765,27.071374890482 +2766,27.9985081841808 +2767,27.9000829528288 +2768,27.6440354650087 +2769,27.5261299213258 +2770,27.1747757241983 +2771,27.341255122695 +2772,27.281292839268 +2773,27.4571941136281 +2774,27.1258318191807 +2775,27.1534889005969 +2776,26.4054827675571 +2777,26.2066441936364 +2778,25.4474438973661 +2779,25.4362130631925 +2780,25.8069167709233 +2781,25.9112623328508 +2782,25.8274671869223 +2783,25.9338693456325 +2784,25.8714186734348 +2785,26.1279035798678 +2786,26.1159406408171 +2787,25.9683832861704 +2788,26.1281916302333 +2789,26.5283832522533 +2790,26.6304122627631 +2791,26.1230892978977 +2792,25.8245565573786 +2793,25.7052783275147 +2794,25.5331793881134 +2795,25.1119555759366 +2796,25.1930694260865 +2797,25.3156100179789 +2798,25.5464738896382 +2799,25.4877716891677 +2800,25.8121615304518 +2801,25.7639877758251 +2802,25.9025262922984 +2803,25.9684284828361 +2804,26.4132313011954 +2805,26.4988270224775 +2806,26.4921301863588 +2807,27.5419049376704 +2808,26.5355805999166 +2809,26.5743232062982 +2810,26.9015918403259 +2811,26.5872656076135 +2812,26.5929166871268 +2813,26.4233736140906 +2814,27.8668609105853 +2815,28.2075576727602 +2816,28.4961724165125 +2817,28.4242990229285 +2818,28.5246481083178 +2819,28.6111223506824 +2820,27.7329691934439 +2821,27.3999702766023 +2822,27.9053447385748 +2823,27.9420788108011 +2824,27.804282414772 +2825,27.8069558632371 +2826,27.832235140508 +2827,27.3761044901628 +2828,27.4487685509664 +2829,27.7728375703382 +2830,28.1682018516004 +2831,28.1492999642817 +2832,28.1310562910614 +2833,27.9002586748536 +2834,27.900129431797 +2835,27.7038043314102 +2836,27.2334029785441 +2837,28.6227012019656 +2838,28.753984952852 +2839,27.8494503718511 +2840,28.6070997133215 +2841,28.5819221330543 +2842,28.4459823162024 +2843,28.5021263227897 +2844,28.3325535610835 +2845,28.2853056973526 +2846,28.099775852278 +2847,27.7579454050782 +2848,26.3926885372256 +2849,26.4251656732928 +2850,26.5458353034527 +2851,26.4395384643288 +2852,26.2699364773784 +2853,26.5121098993595 +2854,27.5122783455939 +2855,28.0827152433768 +2856,28.4159609471068 +2857,27.4586297192028 +2858,27.3925777193831 +2859,27.3634533343562 +2860,27.471517779392 +2861,27.9508948277903 +2862,27.6076493076373 +2863,27.6081322613298 +2864,27.3727499955423 +2865,27.5211457515945 +2866,27.9401764247473 +2867,28.35191115083 +2868,27.8343293476476 +2869,29.1578634447024 +2870,29.7949882866272 +2871,29.5689551837728 +2872,29.5172800374924 +2873,29.6396177690848 +2874,30.6621908269734 +2875,31.7193887652202 +2876,31.8265980988323 +2877,31.8265438569142 +2878,31.7896431168987 +2879,31.9218052843292 +2880,31.8095947146048 +2881,31.6814030186368 +2882,31.1919571593197 +2883,30.9120441429387 +2884,30.3467182632482 +2885,29.9800619386498 +2886,29.4723554197914 +2887,29.4794942935953 +2888,29.7526403473993 +2889,30.0971809145295 +2890,30.4313875605426 +2891,29.4966958327986 +2892,29.24649598664 +2893,29.2224279749488 +2894,29.1248587283037 +2895,28.9650285969656 +2896,29.0871417914965 +2897,30.4283543168946 +2898,31.2152293651522 +2899,31.1507128882606 +2900,30.8575908319853 +2901,31.4601286570515 +2902,31.1594273148915 +2903,31.1656179561567 +2904,31.2999140149453 +2905,31.1169096303351 +2906,30.967174302858 +2907,30.9958858408761 +2908,31.2963696005883 +2909,31.4348586182526 +2910,31.4166757489104 +2911,30.2054487057369 +2912,29.9356503419768 +2913,30.3437065902166 +2914,30.2195710999022 +2915,30.8528268031768 +2916,30.9683617477685 +2917,30.0090668029723 +2918,29.9321541810203 +2919,30.0937826710753 +2920,30.4048448748896 +2921,30.3315466534657 +2922,30.1477678488235 +2923,29.7091177239305 +2924,29.3659833798085 +2925,28.8627742096162 +2926,28.5144822461168 +2927,28.7679392892829 +2928,28.6734967467501 +2929,28.4724437708239 +2930,29.0223030064654 +2931,28.0063747393925 +2932,28.0310084336111 +2933,27.7291832091583 +2934,27.9366018038988 +2935,27.6406594622461 +2936,27.171697419833 +2937,26.4087877884369 +2938,26.2820413855127 +2939,25.932006217742 +2940,26.1696272294997 +2941,25.8222797984397 +2942,26.355869612207 +2943,26.1813239795777 +2944,26.0445396316137 +2945,25.9740957141294 +2946,27.0509183731881 +2947,26.9746935134448 +2948,27.0720694246649 +2949,26.2509044240527 +2950,26.7359616936372 +2951,25.9056712103994 +2952,25.6911139228605 +2953,26.2995327122052 +2954,24.9695568377894 +2955,24.8888691985792 +2956,24.6012112349734 +2957,24.0341144879435 +2958,24.0247432024297 +2959,25.019008794538 +2960,24.4327732219539 +2961,24.544330149849 +2962,23.8502386659045 +2963,24.0364087630692 +2964,24.088765506558 +2965,24.0563981344346 +2966,23.7181483708505 +2967,24.7033354171486 +2968,24.7791637809988 +2969,24.8396410432404 +2970,24.8538704916741 +2971,25.8402551195387 +2972,25.8187297776292 +2973,25.7366219467767 +2974,26.312249087826 +2975,26.081048566805 +2976,26.0396366205327 +2977,26.0356872681953 +2978,26.0630079174539 +2979,26.0746274847466 +2980,26.0406514632642 +2981,26.1722894953643 +2982,26.6226915199774 +2983,26.5210781228433 +2984,26.4814336141772 +2985,26.4359711610748 +2986,26.4792539198101 +2987,26.0524348961235 +2988,26.0654036801623 +2989,26.0707480345872 +2990,26.0540771556332 +2991,25.6528318464154 +2992,25.8766623129698 +2993,26.3165746366424 +2994,26.2746544387421 +2995,26.4998434985628 +2996,26.4272053430256 +2997,26.7982592766295 +2998,26.9018085223723 +2999,26.7607938805337 +3000,26.9518682337363 +3001,27.0345249577124 +3002,26.8761497083656 +3003,26.0886317792688 +3004,26.2584871660592 +3005,26.2631166695416 +3006,26.5566421472344 +3007,27.1359861481772 +3008,27.0563672193533 +3009,27.782632975155 +3010,28.2394612311296 +3011,28.1713214530131 +3012,27.3888298946016 +3013,27.7652063941865 +3014,27.6655236880662 +3015,27.6522013885136 +3016,27.7633015949682 +3017,27.6527452281658 +3018,29.1649398031314 +3019,29.7601863267187 +3020,29.5245982418873 +3021,29.8719515671954 +3022,29.9720220316943 +3023,29.9913289775567 +3024,30.5111403901749 +3025,30.3588330522833 +3026,31.1134374165969 +3027,30.7303445573233 +3028,32.4110882993258 +3029,32.4487793876585 +3030,32.4026156555705 +3031,33.3231893068226 +3032,33.539865331771 +3033,34.1423820432872 +3034,34.3242046511566 +3035,34.5539423218414 +3036,33.809171474871 +3037,33.8763755447363 +3038,33.5262757028056 +3039,32.7100905523838 +3040,32.8755823112247 +3041,32.837237321026 +3042,32.6828662718459 +3043,32.6456296597022 +3044,32.4855778544006 +3045,32.5446497360317 +3046,32.7282413828786 +3047,32.5690499414089 +3048,32.0561399692609 +3049,31.4185783547534 +3050,31.9748029322941 +3051,31.5178760270871 +3052,31.4787717199659 +3053,32.3332172633776 +3054,32.1590742284129 +3055,32.393865572851 +3056,32.9228810496773 +3057,32.5820565915577 +3058,33.0297916862335 +3059,33.1045779438429 +3060,32.7508051872267 +3061,30.7594813166574 +3062,29.9390831649738 +3063,30.1689955234642 +3064,30.2342012009372 +3065,29.6025774582141 +3066,29.424264544918 +3067,29.7807857546034 +3068,29.7588573793246 +3069,30.3393416774814 +3070,30.1750965978074 +3071,30.39121521041 +3072,30.392680930371 +3073,30.1198099790675 +3074,29.7553216848506 +3075,30.2545344214864 +3076,30.2712805652359 +3077,30.2691297301444 +3078,30.2684061854513 +3079,30.8088128154765 +3080,30.5410347634829 +3081,30.6160713564172 +3082,30.4903462935892 +3083,30.327451475881 +3084,30.2017283758855 +3085,30.5526155563254 +3086,31.0186208965893 +3087,31.0168269542398 +3088,31.0325747137182 +3089,30.763888356344 +3090,30.7507738485655 +3091,28.9073449827412 +3092,28.8851255543008 +3093,29.2356026597739 +3094,29.2270881091526 +3095,29.2659270781469 +3096,29.6311352744105 +3097,30.3258434271988 +3098,30.3662775579824 +3099,30.8112565690104 +3100,29.607530596143 +3101,30.1573335159836 +3102,30.1864693406562 +3103,30.2737941529411 +3104,30.2893657304252 +3105,30.2835402470332 +3106,31.3271006355368 +3107,30.3809218998309 +3108,30.22467645076 +3109,30.2336229814573 +3110,30.6187521565777 +3111,30.9883778463503 +3112,31.0326073913847 +3113,30.9769686902155 +3114,31.79541274582 +3115,32.3083733755849 +3116,30.9584847207333 +3117,31.2483235677869 +3118,31.1708029537933 +3119,31.490285494334 +3120,31.2829946158936 +3121,31.1274653839266 +3122,30.3041346094675 +3123,30.4827833633357 +3124,30.8000007115444 +3125,30.9231769720672 +3126,30.929851715678 +3127,31.2378714972887 +3128,30.0822382640226 +3129,30.6089077906634 +3130,31.2359399867052 +3131,31.1432337577158 +3132,31.3291864386949 +3133,31.4731264148951 +3134,31.4660632540901 +3135,31.4258325097172 +3136,32.1719990071092 +3137,32.4159230768932 +3138,32.676500312625 +3139,33.355363312077 +3140,33.6557023279789 +3141,33.0486231017881 +3142,33.0318145865332 +3143,32.679526451001 +3144,32.5877155318016 +3145,32.6052616177459 +3146,32.5914441101727 +3147,33.32872460398 +3148,32.8273611665673 +3149,32.585413549083 +3150,31.9093667871734 +3151,31.890172235321 +3152,32.0103093089156 +3153,31.8760267871202 +3154,31.1770034266085 +3155,31.2691522456179 +3156,31.3212993731546 +3157,31.185431050212 +3158,31.3330840324963 +3159,31.3967184318767 +3160,30.9670568350148 +3161,31.9370366357121 +3162,31.7829995395046 +3163,31.4632316247295 +3164,31.4623302056742 +3165,32.3814934084204 +3166,31.4907267666287 +3167,31.1801813199883 +3168,31.285452919047 +3169,32.6172567257116 +3170,32.5447660081362 +3171,32.8676774156902 +3172,32.8512305769484 +3173,32.4478759336937 +3174,32.3274972511581 +3175,32.5403060935674 +3176,33.2199082610567 +3177,33.0535454845065 +3178,32.9134686126942 +3179,32.9728770443426 +3180,32.9378608228411 +3181,33.0510839204754 +3182,33.8953760361673 +3183,33.821842209415 +3184,33.8354750654662 +3185,33.4698180906863 +3186,33.4801408857879 +3187,33.9953500816416 +3188,34.134687943016 +3189,34.1163579326176 +3190,34.3777412140907 +3191,34.4743379693158 +3192,35.3290632894256 +3193,36.3896485830722 +3194,37.1528458144995 +3195,37.0469876778229 +3196,36.9249863400552 +3197,36.7239514880529 +3198,37.0999372439924 +3199,37.0358695551998 +3200,36.8565951589831 +3201,37.6870171550943 +3202,36.9456323066749 +3203,36.9801530400879 +3204,37.124204726165 +3205,37.21769294584 +3206,37.3624456070619 +3207,37.1779586560481 +3208,37.1723472632736 +3209,37.2334453881957 +3210,37.443103290909 +3211,37.4760190737922 +3212,37.492358954797 +3213,37.7596583354501 +3214,37.4461435766295 +3215,37.3603806309608 +3216,37.0595081306628 +3217,38.181032113607 +3218,36.5368304739227 +3219,36.8340387507692 +3220,36.7993221758927 +3221,35.7634360106971 +3222,35.732925176029 +3223,36.030449190392 +3224,35.5353595811826 +3225,35.4668216864087 +3226,35.7377586219048 +3227,35.6126135690276 +3228,35.6040196178085 +3229,35.7950184685732 +3230,35.6807319126485 +3231,35.9173446445623 +3232,36.215345080857 +3233,36.1699863166467 +3234,36.196366204479 +3235,35.684160875176 +3236,34.7823827602803 +3237,34.6822052639609 +3238,34.6915019903415 +3239,34.0185084424943 +3240,34.4916461650554 +3241,34.8182183165134 +3242,34.1736720463545 +3243,33.5025712392865 +3244,33.7460512368265 +3245,33.2071461272322 +3246,33.3501311134501 +3247,33.3110884518605 +3248,33.2520831611307 +3249,32.9686092089807 +3250,32.8165695550331 +3251,32.5960847037539 +3252,32.726816162335 +3253,32.9892013918558 +3254,32.7209339766491 +3255,32.7660799868776 +3256,32.9717314004966 +3257,32.9782920430595 +3258,32.9657149907695 +3259,33.54075000082 +3260,33.4282108708377 +3261,33.3748050917716 +3262,32.0440114326225 +3263,31.7581763933183 +3264,31.6407482366252 +3265,31.6402496169962 +3266,32.1212032748601 +3267,32.0940914538551 +3268,31.8210829282953 +3269,31.7673058080903 +3270,31.6148588796854 +3271,31.2574795768674 +3272,30.3430987489761 +3273,30.3100659933277 +3274,30.0814746621784 +3275,29.0616085175514 +3276,29.6491336697165 +3277,29.4795762016499 +3278,29.5373418180783 +3279,29.8751859281833 +3280,30.0264307498932 +3281,29.0704776358158 +3282,30.0807211327342 +3283,30.2133540816128 +3284,30.5844191778069 +3285,30.5541970327405 +3286,30.7434518666988 +3287,32.7227335037044 +3288,32.5559660565028 +3289,32.5824093096578 +3290,32.4249897719475 +3291,32.6102996510938 +3292,32.9308941823172 +3293,32.8948372212909 +3294,32.8588155704686 +3295,32.7267853257936 +3296,33.0411888310021 +3297,33.8357118019856 +3298,33.6473940093375 +3299,33.5205402875736 +3300,33.1621685289112 +3301,33.5083060244462 +3302,33.5255074799863 +3303,33.5220771191746 +3304,33.6278218073065 +3305,33.1985154564667 +3306,33.4260717205477 +3307,33.0779150106183 +3308,33.1079776352633 +3309,32.8421512728495 +3310,33.0529252782727 +3311,32.9571858342701 +3312,33.0623069794898 +3313,33.6176452266192 +3314,34.3994082345058 +3315,34.2989748853115 +3316,34.2131370903112 +3317,34.15640542042 +3318,34.1890753196695 +3319,34.0659953483347 +3320,33.9996316765221 +3321,33.8245841456506 +3322,32.6290377647226 +3323,32.0719793149016 +3324,31.2120416546096 +3325,31.3552928960258 +3326,31.7957522206645 +3327,32.0551539130031 +3328,32.1207881269768 +3329,32.1163036027294 +3330,32.1378535975572 +3331,32.0990361511594 +3332,32.3064849682928 +3333,32.0750889404656 +3334,32.2347793725574 +3335,31.7516271420997 +3336,31.1756175553555 +3337,31.1327224281853 +3338,30.7400135555371 +3339,30.8044068191697 +3340,30.3891285440235 +3341,30.9237058762168 +3342,30.5706816864898 +3343,30.5696091115406 +3344,30.5725732283214 +3345,30.5628325887367 +3346,30.7576860786267 +3347,30.7051233366032 +3348,30.7366003883147 +3349,31.1463761753328 +3350,31.20431061055 +3351,31.2012352206363 +3352,30.9786656099679 +3353,31.0989733789873 +3354,31.5922513608547 +3355,31.6580033778731 +3356,31.7493582916261 +3357,31.6150185742936 +3358,32.1334801900466 +3359,32.2675411490675 +3360,32.1141086459904 +3361,32.0934966895363 +3362,32.1274399207413 +3363,33.2685577743463 +3364,33.2067272062878 +3365,33.2220545025476 +3366,33.2765655571131 +3367,33.2461637577288 +3368,33.2254695727585 +3369,33.1971457155643 +3370,32.8922618386178 +3371,32.6375337880002 +3372,32.8539262533649 +3373,32.6547388253173 +3374,33.5262920648891 +3375,33.5519069154179 +3376,33.0133008507173 +3377,32.4522406708909 +3378,33.5367303998553 +3379,33.3820255206977 +3380,33.6524694789022 +3381,33.7290817816262 +3382,33.6891480945669 +3383,34.2714267584386 +3384,34.3384613970915 +3385,33.0412309809661 +3386,33.0127355341983 +3387,33.8101891080075 +3388,34.245857595321 +3389,34.6176954644978 +3390,34.8361761505348 +3391,35.197775455649 +3392,35.4119448161706 +3393,36.9780235236172 +3394,36.9553612450726 +3395,36.4677684808889 +3396,36.4393656406733 +3397,37.0195743464706 +3398,36.9003155151757 +3399,36.34320496911 +3400,36.2754046688417 +3401,35.4994458890259 +3402,35.4387674770985 +3403,35.2381900839431 +3404,35.1937735074566 +3405,35.2448671454409 +3406,34.7863039859037 +3407,34.6823305285893 +3408,34.6860629421749 +3409,35.1586565941554 +3410,36.1524592222781 +3411,36.0922537095876 +3412,36.4334878253381 +3413,37.1774033366956 +3414,37.0995914315991 +3415,37.1928354790398 +3416,37.0671399928742 +3417,37.1289653368752 +3418,37.3748694413237 +3419,37.001095013732 +3420,35.8685171365076 +3421,35.7790596667844 +3422,35.7670992141838 +3423,35.668462946708 +3424,36.0400174655038 +3425,36.0480945234249 +3426,36.0219720044613 +3427,35.6031289934208 +3428,35.6174321392228 +3429,35.4813368126507 +3430,35.6265808419118 +3431,35.5873642337276 +3432,34.9246012343094 +3433,34.9097913240706 +3434,35.1266083868991 +3435,35.2741435917606 +3436,34.4572696783567 +3437,34.8551883689602 +3438,34.7694402963776 +3439,34.6579960219436 +3440,34.63813926026 +3441,34.8774370063703 +3442,34.1531468437782 +3443,34.255400076641 +3444,34.3966422834653 +3445,33.7193656070393 +3446,33.6418595538811 +3447,33.2477857006358 +3448,33.0342596826879 +3449,31.7352156679701 +3450,32.520749788983 +3451,32.5100172381584 +3452,31.9889033847035 +3453,32.0063586800323 +3454,33.150341142045 +3455,33.1507088172432 +3456,33.1604436450387 +3457,33.251457448114 +3458,31.8554569897655 +3459,31.5406917693583 +3460,31.2273163478285 +3461,30.1099437430876 +3462,30.0816784139405 +3463,30.0714621393397 +3464,31.8118524787242 +3465,31.7817438259946 +3466,31.6584278022655 +3467,31.6452324573693 +3468,31.5778086974409 +3469,31.9656227306825 +3470,31.5585118989519 +3471,31.5540057907318 +3472,31.6153095443871 +3473,30.5779648175459 +3474,31.380957115506 +3475,31.659677662348 +3476,31.6506320805201 +3477,31.5835118850189 +3478,31.4686623733416 +3479,31.5153917320423 +3480,31.6836742972186 +3481,31.8434756553534 +3482,31.8334744818495 +3483,31.83374497628 +3484,31.2971152209437 +3485,31.8454806377613 +3486,30.7616513938635 +3487,30.7793806936164 +3488,30.5601747241553 +3489,31.4426443491657 +3490,31.2345615028941 +3491,31.4706572442626 +3492,31.0438820025108 +3493,31.8873817422054 +3494,31.02271573367 +3495,31.1327243341765 +3496,31.2541311026335 +3497,29.4707071346363 +3498,30.1023501471755 +3499,30.8034715051926 +3500,31.1066296186317 +3501,31.0696760166708 +3502,31.267592644022 +3503,31.4693157014187 +3504,31.4282901086285 +3505,31.2030470778889 +3506,30.8804597903588 +3507,31.7327918102781 +3508,31.6668631842174 +3509,31.0372666719452 +3510,30.9555799760679 +3511,31.9802232929188 +3512,32.0120178868264 +3513,31.6900743347404 +3514,31.7685814477233 +3515,32.1585238677385 +3516,31.8538095761768 +3517,31.8491329949091 +3518,32.4327167981263 +3519,31.639885035847 +3520,31.6346772925576 +3521,31.659313516625 +3522,31.6409920422849 +3523,31.1073624840493 +3524,30.9534849188958 +3525,30.393864884359 +3526,30.08263974944 +3527,31.1895863279365 +3528,31.4383974036983 +3529,31.313018471683 +3530,31.2419026884161 +3531,31.373635460402 +3532,31.266356754485 +3533,30.9829371222093 +3534,31.4313194457978 +3535,30.662258590717 +3536,31.5550870703164 +3537,32.9801401719533 +3538,32.7185730868745 +3539,32.6937436584701 +3540,32.3344284584621 +3541,32.7998170565295 +3542,32.5480988965004 +3543,32.2552929176622 +3544,31.7855449577811 +3545,31.6891013264432 +3546,31.6172208514277 +3547,31.5490332747875 +3548,32.9222363287741 +3549,32.8330770506699 +3550,33.0145918542233 +3551,33.3637911928343 +3552,33.0555405093966 +3553,32.4658224220294 +3554,32.0992795161555 +3555,32.6873388126407 +3556,33.8632098811631 +3557,33.9449421473851 +3558,33.5294120100329 +3559,33.4888869543669 +3560,33.3803595090142 +3561,33.310121714822 +3562,33.485350731963 +3563,33.5973922611604 +3564,33.4512300687611 +3565,32.8183892404059 +3566,33.4168596917608 +3567,33.4415874497623 +3568,31.8646311806924 +3569,31.699724721983 +3570,31.6297828446303 +3571,33.0210921233115 +3572,33.0129628846186 +3573,32.5415423726241 +3574,31.4913463730213 +3575,31.61535069255 +3576,31.8047328035146 +3577,31.7859709673341 +3578,31.3021735276405 +3579,31.0667685986266 +3580,30.8390287274202 +3581,30.6471892131011 +3582,30.6792839712473 +3583,30.6352209188767 +3584,30.4741945414562 +3585,30.3231712218082 +3586,30.2318805211125 +3587,30.1416531265082 +3588,30.5879321803234 +3589,30.5157978153626 +3590,30.6975801287929 +3591,30.5092767324158 +3592,30.2293328665362 +3593,30.3998837203642 +3594,30.5636553221651 +3595,30.9162844828116 +3596,31.266903691899 +3597,31.2779531041286 +3598,31.2483437810433 +3599,31.6655467133053 +3600,31.7807363486402 +3601,32.5607057342435 +3602,32.5894912503177 +3603,32.6483791219255 +3604,32.6489942093026 +3605,32.8926254139492 +3606,32.3867065344682 +3607,33.1047607335827 +3608,32.127562371704 +3609,32.0802175855001 +3610,32.0182873413998 +3611,32.149616630644 +3612,32.2493927603021 +3613,31.9082694781033 +3614,31.7598011391378 +3615,31.5991771964661 +3616,30.828834534651 +3617,30.8058481821951 +3618,30.6701536150769 +3619,30.8255135719144 +3620,31.2319002754828 +3621,31.3957032659256 +3622,31.2204787318158 +3623,31.1910572594833 +3624,31.7125673822864 +3625,31.7673533300073 +3626,31.7421965553774 +3627,32.1693200340675 +3628,32.8304553408256 +3629,33.0908298467253 +3630,33.0914188822394 +3631,33.5346982943154 +3632,34.9886001519478 +3633,34.887785100601 +3634,34.526124392706 +3635,35.2229984294008 +3636,35.3269607385233 +3637,33.9161426379316 +3638,33.955178987781 +3639,32.9882112300599 +3640,31.5461242565493 +3641,30.4717919413041 +3642,29.1218010872502 +3643,28.9807575633475 +3644,29.2112034155845 +3645,28.9432452203529 +3646,30.6104016486952 +3647,30.9386448007631 +3648,31.8896408560086 +3649,31.1042552366577 +3650,30.8073995210955 +3651,30.8706197949502 +3652,30.5062853597677 +3653,30.5268269373241 +3654,30.3973324816242 +3655,30.3962537100633 +3656,30.5007326578623 +3657,30.4649414641846 +3658,30.397674823493 +3659,31.5598288032946 +3660,30.4775995110338 +3661,30.6053734303983 +3662,30.9597810791955 +3663,30.6863763356179 +3664,30.4539446356741 +3665,30.8365694435954 +3666,30.4100428766331 +3667,30.7619788311441 +3668,30.1703768907351 +3669,30.0579139860945 +3670,30.0875832833881 +3671,30.2187822400526 +3672,30.2464480769593 +3673,30.5883911354954 +3674,31.4742693043764 +3675,31.0105295260107 +3676,31.3034220515144 +3677,31.0031002202798 +3678,30.9832620908855 +3679,30.6918377979468 +3680,31.2233676250347 +3681,30.7892800757557 +3682,30.198292165533 +3683,30.3635953694425 +3684,30.2793555325493 +3685,30.1261971935347 +3686,30.7986398530265 +3687,31.0475954032181 +3688,30.9022867351879 +3689,30.5433880172891 +3690,30.7043561440924 +3691,30.6397322943953 +3692,30.6831061950381 +3693,30.6035497593079 +3694,31.3749348234638 +3695,31.3894607464524 +3696,31.9042737134845 +3697,31.8850638821768 +3698,31.8205240138173 +3699,31.8277066843738 +3700,31.6212939169217 +3701,33.010398859105 +3702,32.8109362209341 +3703,33.1160692036635 +3704,33.4523613055799 +3705,34.357687500966 +3706,33.4804613722405 +3707,33.7341142902612 +3708,33.8927906501737 +3709,34.23881544216 +3710,34.9357899773074 +3711,34.7748118879979 +3712,34.736661681901 +3713,34.0492908602664 +3714,34.3821020789841 +3715,34.6030641653466 +3716,34.6959410339899 +3717,34.1798098225718 +3718,34.1651876502832 +3719,34.2376358788502 +3720,34.6015962816817 +3721,35.4175582873499 +3722,35.5974907134769 +3723,34.3292578663439 +3724,34.5163764521718 +3725,34.5259501517259 +3726,35.9980697954006 +3727,35.9635512748848 +3728,36.036689984026 +3729,37.2478176884221 +3730,37.2775143365981 +3731,37.3086390260382 +3732,36.7921713519167 +3733,36.7906434931863 +3734,36.0010986522843 +3735,35.8648142850177 +3736,35.948022068703 +3737,37.1402744715049 +3738,36.2585498968182 +3739,36.8023480376125 +3740,36.8933533279458 +3741,37.908095460582 +3742,37.7138753791973 +3743,37.2506023302936 +3744,36.9119711030055 +3745,36.6216267872715 +3746,36.7859856339007 +3747,36.7886768724762 +3748,36.8462115528813 +3749,36.6845117847412 +3750,36.308802188358 +3751,36.7449037254748 +3752,36.9377673804153 +3753,36.9279457352949 +3754,36.8870224457073 +3755,37.0327523522083 +3756,37.0903158798509 +3757,37.2586121378881 +3758,37.0208483030904 +3759,37.446273140732 +3760,36.6032600282503 +3761,36.5349242191796 +3762,36.188447674655 +3763,36.582843122966 +3764,36.5017348608143 +3765,36.0475163335627 +3766,35.3296808998523 +3767,36.2898350065304 +3768,35.9811194049413 +3769,36.1045190371681 +3770,36.3468713352612 +3771,36.3160925680309 +3772,37.6381882818011 +3773,38.4308316771073 +3774,38.4572779722331 +3775,38.5007437052192 +3776,38.5790546274566 +3777,37.9455696892786 +3778,38.2501744811978 +3779,38.8701664655159 +3780,38.9635641159144 +3781,38.8143675744656 +3782,38.7081380514254 +3783,38.3625795591003 +3784,38.3345873007677 +3785,38.5733345338349 +3786,38.7069373630248 +3787,38.4568784842693 +3788,38.596522875622 +3789,38.8730348245627 +3790,38.2670757897323 +3791,38.0871005811089 +3792,38.1076118731826 +3793,37.8734857410641 +3794,38.4673435816673 +3795,38.5228497122973 +3796,38.8003055274267 +3797,39.3144407705237 +3798,39.367143391997 +3799,39.2655100405848 +3800,39.3575724963346 +3801,39.2302908794092 +3802,40.2364769901295 +3803,40.4044727489668 +3804,39.9005005937968 +3805,39.8296853891873 +3806,39.5687965642378 +3807,39.6684474767739 +3808,39.4894700155362 +3809,39.0780446692593 +3810,39.0846813337229 +3811,39.4090771671789 +3812,39.5938881352103 +3813,39.6129255495471 +3814,39.5300606919401 +3815,39.4342486749323 +3816,39.3643250462333 +3817,39.248785406392 +3818,38.9103063803018 +3819,39.1902140754998 +3820,39.5246587316422 +3821,39.3057905454248 +3822,39.0663340493009 +3823,38.4459198937064 +3824,38.8233151239473 +3825,38.7227513583875 +3826,39.1891898972599 +3827,39.3325423377068 +3828,40.0716495427504 +3829,40.0707450506732 +3830,40.2730585702651 +3831,40.2984189357326 +3832,40.3563284119559 +3833,41.2595477697326 +3834,41.0866164459917 +3835,40.9308604402824 +3836,40.6703527098634 +3837,40.5968602310703 +3838,40.9663068320721 +3839,41.7320601112697 +3840,41.8331388092191 +3841,42.7100275684988 +3842,43.0929835496369 +3843,43.9748163122313 +3844,43.0698480231532 +3845,42.8868204965943 +3846,42.7039134079231 +3847,42.6773344370498 +3848,42.3125175472824 +3849,42.6824897300312 +3850,41.8985106037351 +3851,42.4993650914349 +3852,42.0428569203964 +3853,42.3633565937116 +3854,43.0085929066748 +3855,42.6459536821073 +3856,42.8434441914631 +3857,42.5855440224406 +3858,42.9497732297417 +3859,42.9705619621969 +3860,43.0938713108859 +3861,43.5526747563676 +3862,43.5983946676386 +3863,43.4914011906455 +3864,43.8908475553166 +3865,43.9055498075593 +3866,43.2941974832005 +3867,43.1927181704081 +3868,43.1579845080259 +3869,44.9363546999491 +3870,44.9258965643045 +3871,45.1413138502668 +3872,45.1580555338271 +3873,45.1751462743154 +3874,44.6028739178972 +3875,43.9842521006413 +3876,44.2111244402122 +3877,44.3120794689293 +3878,44.3291525619252 +3879,44.5400364024645 +3880,44.4338878367602 +3881,44.3779139519588 +3882,44.0866015511851 +3883,44.0840888444283 +3884,44.6789082827429 +3885,44.690905076219 +3886,44.6639982351604 +3887,44.7000340660855 +3888,44.642171613522 +3889,44.5984276075949 +3890,44.6418363854788 +3891,45.3133851261264 +3892,45.2130568812037 +3893,45.8375131162053 +3894,45.9779847784437 +3895,46.6955439762466 +3896,46.7804769142718 +3897,46.4216145236782 +3898,46.485265361947 +3899,46.4634192274639 +3900,46.4061951875047 +3901,46.0665450999882 +3902,46.5768953043811 +3903,46.2308359800604 +3904,46.5742706852038 +3905,46.7850704577922 +3906,46.7623253228708 +3907,47.0131711154647 +3908,47.3568490971263 +3909,47.4657377277685 +3910,47.7916868419806 +3911,46.8648110599287 +3912,46.1910260421761 +3913,45.5751227947596 +3914,45.2769700468609 +3915,44.4323310540143 +3916,44.4891325851143 +3917,44.0573907033077 +3918,43.4332683866785 +3919,43.1810158451205 +3920,43.1266120774296 +3921,43.2023558121614 +3922,43.2112458505449 +3923,43.5415886224101 +3924,43.5057178286319 +3925,43.7113641806318 +3926,43.1816867587953 +3927,42.8985409701913 +3928,42.9105837306461 +3929,43.1851040531494 +3930,42.6399529881356 +3931,42.7974657013668 +3932,43.4428681217202 +3933,43.1959424228057 +3934,43.4232798449755 +3935,43.6375543241064 +3936,43.5666479279194 +3937,44.4771812289048 +3938,42.7189355425382 +3939,42.6861901121923 +3940,42.764744246822 +3941,42.3681412115786 +3942,42.7217724242814 +3943,42.5829051475206 +3944,42.5001091214566 +3945,43.0691702888763 +3946,43.1390878438651 +3947,43.6756642037648 +3948,43.3287916640619 +3949,43.1228280341091 +3950,43.5350487195367 +3951,43.1134179085645 +3952,43.0946090019321 +3953,42.9752783933925 +3954,43.0271662629788 +3955,43.2884176059547 +3956,43.1501378130684 +3957,43.0500587101804 +3958,42.6432915254842 +3959,41.4033027330339 +3960,41.1904832013028 +3961,41.1885125511512 +3962,41.1392270535087 +3963,41.2629574268353 +3964,41.5618810520459 +3965,41.2917861273281 +3966,42.1903083759515 +3967,43.2450254023458 +3968,43.5363655058651 +3969,43.2653460646287 +3970,43.0828330670327 +3971,42.4092975371573 +3972,42.3397474885903 +3973,42.1793843033004 +3974,42.9302231459865 +3975,44.1410437570249 +3976,44.3265418183702 +3977,44.8510373054009 +3978,43.6860226990202 +3979,43.5204537705475 +3980,44.0669497910752 +3981,43.5494379740764 +3982,43.55681098163 +3983,43.62378293786 +3984,43.2771986952593 +3985,43.520080202226 +3986,43.488333206963 +3987,43.5286927841151 +3988,43.3957273334579 +3989,43.6666990983328 +3990,43.6276246027299 +3991,44.9908540845351 +3992,44.9578852071906 +3993,44.756082390569 +3994,44.7920531891142 +3995,45.0715672864366 +3996,45.0773216187218 +3997,45.2062865558007 +3998,45.0423407993316 +3999,44.4045978096383 +4000,44.849117794177 +4001,44.8467921612669 +4002,44.9926860827092 +4003,45.3324767856617 +4004,45.325992585167 +4005,44.9719610290228 +4006,44.9755328955978 +4007,45.0319075440463 +4008,43.6603955870326 +4009,43.8298925813115 +4010,44.0612613423232 +4011,44.3052960618104 +4012,44.4465839353138 +4013,43.738910733073 +4014,44.212806733919 +4015,44.1063007704395 +4016,43.9956305345742 +4017,44.0955666513774 +4018,43.8345082594076 +4019,43.8484657698678 +4020,42.7150503738641 +4021,43.0048890869609 +4022,42.4995621932694 +4023,42.2858898038247 +4024,42.3049541067598 +4025,41.5809026682741 +4026,42.195928955837 +4027,42.3289145270491 +4028,42.3944215986327 +4029,42.8851442817523 +4030,42.8841101750161 +4031,42.444652341711 +4032,42.4231613606905 +4033,42.0602480950142 +4034,41.4698376723303 +4035,41.4505400922356 +4036,41.5518247821327 +4037,41.4975818903585 +4038,41.7433767892822 +4039,42.0145808876007 +4040,42.000161946829 +4041,42.0980907610379 +4042,40.4012172206386 +4043,40.4053475345443 +4044,41.4559601596638 +4045,41.3452402466817 +4046,41.4879012486058 +4047,40.8522647848296 +4048,41.7264442270427 +4049,42.2805482680183 +4050,42.4708893508038 +4051,42.5870728373239 +4052,43.3760334726404 +4053,43.2734635928592 +4054,42.9165354326723 +4055,43.6883732751984 +4056,44.3555022009908 +4057,44.3038621193057 +4058,44.26899453907 +4059,44.1229155825087 +4060,44.1599738705354 +4061,43.84789117318 +4062,43.8860580080509 +4063,43.7662248592387 +4064,44.0804909420947 +4065,43.5284070513117 +4066,43.4758861754427 +4067,43.4254714936691 +4068,43.6201643057253 +4069,43.624696139866 +4070,43.357227210122 +4071,43.1152330467863 +4072,43.212702447195 +4073,42.7990085040538 +4074,42.5794410104704 +4075,43.6164673348507 +4076,44.2185784268149 +4077,44.0965208002251 +4078,44.0761228189068 +4079,43.8821457026067 +4080,44.0251732713952 +4081,44.0867522836172 +4082,44.0828058001284 +4083,44.0890907646956 +4084,44.6302771241822 +4085,44.6425780655334 +4086,44.6348893018603 +4087,43.4918576910588 +4088,43.8192276036149 +4089,44.557709096556 +4090,44.4957685524759 +4091,44.7052956808182 +4092,44.6082673609396 +4093,44.3219214020864 +4094,44.3291314933929 +4095,43.9208395804592 +4096,43.9362969915908 +4097,44.4200609618675 +4098,44.43656049398 +4099,45.0338192830165 +4100,44.8909225203473 +4101,45.2288360619549 +4102,44.9631561644989 +4103,45.3172521603581 +4104,45.3699223441705 +4105,44.9980933511983 +4106,45.3135001082594 +4107,45.2864250863476 +4108,45.2375319169761 +4109,45.5500447595464 +4110,46.058774601854 +4111,45.8355779623613 +4112,45.6789388094122 +4113,45.5858642912512 +4114,45.4833364419066 +4115,44.9532497996577 +4116,44.7665114870409 +4117,44.863928712529 +4118,45.5211058595073 +4119,45.5977892710228 +4120,45.5482186396588 +4121,45.5671964393491 +4122,45.6684048123162 +4123,45.4212801415913 +4124,45.4213195684828 +4125,46.4856542964802 +4126,46.6919788616563 +4127,46.7203310903226 +4128,47.8326963283902 +4129,47.8180721485122 +4130,47.9048598858692 +4131,47.7041273974865 +4132,47.6972072711167 +4133,48.0031429708658 +4134,46.5603902204343 +4135,44.9041384609923 +4136,45.5251477432524 +4137,46.0586219574318 +4138,46.1258868258928 +4139,46.5822759249725 +4140,46.1705555429481 +4141,46.807849681893 +4142,46.4950851839398 +4143,46.5003092702785 +4144,46.4148351724203 +4145,46.3040755821905 +4146,46.2281993915084 +4147,45.8549016316091 +4148,46.1644983631875 +4149,46.3660715961569 +4150,45.3376569613523 +4151,45.5178494911196 +4152,45.2746423264612 +4153,45.6435497153438 +4154,45.5767621483266 +4155,45.5656988005771 +4156,45.6458248292724 +4157,45.6060530616635 +4158,45.7837690810801 +4159,45.9203728838421 +4160,45.9301871210065 +4161,45.0443561537015 +4162,43.9759167373558 +4163,43.6080429041592 +4164,43.2555966034163 +4165,43.3056050297964 +4166,43.3216292968002 +4167,43.2207979295891 +4168,43.8895890403142 +4169,43.926139270376 +4170,43.2857046854595 +4171,43.3375854695085 +4172,43.3820078187117 +4173,43.3743915138757 +4174,43.6211414515918 +4175,42.5831550752512 +4176,41.7925720297438 +4177,41.5301578370286 +4178,40.7284665512272 +4179,40.9074303438794 +4180,41.4868288416814 +4181,41.4369395583999 +4182,41.2546947003751 +4183,41.3152306690082 +4184,42.0575612332012 +4185,41.9767651163128 +4186,42.5532989094096 +4187,42.3276387711573 +4188,42.3316214099987 +4189,41.6785722701103 +4190,41.7816762200054 +4191,41.5784159292791 +4192,41.4158258779059 +4193,40.8290118015357 +4194,42.5798508436351 +4195,42.4375122885433 +4196,42.3257582518516 +4197,42.8006006390226 +4198,42.0726700093959 +4199,41.9918907798377 +4200,42.0112583467013 +4201,42.017838723165 +4202,41.9963332733173 +4203,42.2264225459579 +4204,42.419314468687 +4205,42.5104434476498 +4206,42.5182004144096 +4207,43.102746622012 +4208,43.0375243889841 +4209,43.1932393257348 +4210,43.1525335774219 +4211,42.1580822913236 +4212,42.1853048591956 +4213,42.1796727347096 +4214,42.0837084369473 +4215,42.06222302147 +4216,41.6783894295254 +4217,41.4950676431801 +4218,41.5988171688832 +4219,41.9260242362614 +4220,42.1194756703316 +4221,42.2618778753939 +4222,42.6501525363943 +4223,42.4410427701548 +4224,43.0869058795647 +4225,44.3931098642494 +4226,44.9446125720658 +4227,44.7880477605556 +4228,45.5379785970703 +4229,45.551878837088 +4230,45.8853768320674 +4231,45.8251855178727 +4232,46.07574947105 +4233,46.0608847164123 +4234,45.7616004349964 +4235,45.7693107283781 +4236,45.5195949325544 +4237,45.5546776422296 +4238,45.524260939539 +4239,46.1099456606861 +4240,45.9925741437773 +4241,46.0789480860626 +4242,44.2860863488747 +4243,44.4865400708932 +4244,44.2349137978232 +4245,44.160339748309 +4246,43.449660493812 +4247,43.0844781853975 +4248,43.205930480035 +4249,43.2717417185899 +4250,43.3782920778009 +4251,43.10867398252 +4252,43.1430567467915 +4253,43.1845843908332 +4254,43.2384965784782 +4255,43.6426967282231 +4256,43.9502418257636 +4257,44.34389839799 +4258,44.7790967537814 +4259,44.8158434335725 +4260,44.8628979714615 +4261,44.8090953306794 +4262,44.8225868969579 +4263,44.942579595452 +4264,44.7064932670046 +4265,44.8340380195612 +4266,44.6937574177606 +4267,44.2469093475858 +4268,44.3113199210026 +4269,44.3087039635433 +4270,45.277184693727 +4271,45.325741450057 +4272,45.3578794532753 +4273,46.2669642725245 +4274,46.3349833461467 +4275,46.2623670036475 +4276,45.8841508222047 +4277,45.6908877232473 +4278,46.3074465369734 +4279,46.109976226035 +4280,46.0065977192176 +4281,45.9832728847559 +4282,45.9368315864716 +4283,45.8270174456412 +4284,44.8987807866681 +4285,44.8579464479016 +4286,44.7812902965033 +4287,44.4609797807686 +4288,43.7813707138445 +4289,43.8034638569229 +4290,43.701365330349 +4291,43.5960558745241 +4292,46.607110892817 +4293,43.2099911622121 +4294,43.6170581056769 +4295,43.1011546577316 +4296,43.3842679876464 +4297,43.3358174672943 +4298,43.4505357681864 +4299,43.2762455973888 +4300,43.7426470543236 +4301,43.8004710678988 +4302,43.1793620620206 +4303,44.0684489143975 +4304,44.1229580151189 +4305,44.1686847805963 +4306,43.7633550090118 +4307,44.2424501274674 +4308,43.6667108237416 +4309,43.4475593180005 +4310,43.8388540119679 +4311,43.8468453281305 +4312,43.891606967283 +4313,43.6160931845018 +4314,43.5039131364456 +4315,43.4370124294098 +4316,43.3205124987187 +4317,43.4331776288897 +4318,43.4415652298658 +4319,43.8916623792071 +4320,43.792970966398 +4321,42.8661639775037 +4322,42.4928170706031 +4323,42.4635977349043 +4324,42.0992039793409 +4325,43.1483523792837 +4326,43.1439398382212 +4327,43.8029204657623 +4328,43.7874388941265 +4329,44.8390211407645 +4330,43.9210831019679 +4331,44.1601627944992 +4332,44.6037061527031 +4333,44.6029921449433 +4334,45.7189615714241 +4335,45.7186083077643 +4336,46.1322377140044 +4337,45.2981081165962 +4338,45.4489370492641 +4339,44.5675683973038 +4340,44.8485742241543 +4341,44.5910114898243 +4342,45.832174813793 +4343,46.2456833248099 +4344,46.2797249052582 +4345,46.2200377603276 +4346,46.2678569768689 +4347,45.910291242561 +4348,46.0133303345578 +4349,45.5564013410283 +4350,45.0733232894366 +4351,44.0503449505112 +4352,44.3763164174266 +4353,44.4751037939746 +4354,44.4815369873854 +4355,45.0981545241982 +4356,44.2354526929759 +4357,44.3519088894035 +4358,44.4437651220619 +4359,44.3537758225603 +4360,44.1829568406673 +4361,44.4297999192324 +4362,44.1347387995812 +4363,44.0559954028504 +4364,44.0054713351618 +4365,43.2575880979434 +4366,43.8179080959864 +4367,43.8220567614773 +4368,44.1447741050239 +4369,43.7974865050742 +4370,43.7980096340896 +4371,42.8796997482786 +4372,42.8855642449174 +4373,42.7772752730962 +4374,42.3577830815079 +4375,42.1697546655208 +4376,41.9302855351808 +4377,42.0956371562717 +4378,41.1720461068961 +4379,41.7857242777118 +4380,41.9215020527196 +4381,42.0974133810304 +4382,43.693864811632 +4383,42.9674203521011 +4384,42.3435801109761 +4385,42.2239946594922 +4386,42.6091386627358 +4387,42.5688961889064 +4388,42.6441030248712 +4389,41.9588613168554 +4390,40.8068123920642 +4391,39.3833135779089 +4392,39.784273615037 +4393,39.9381007898151 +4394,40.1335216928506 +4395,40.2177817071059 +4396,40.1697062578506 +4397,40.4925709850354 +4398,39.5269631878207 +4399,39.3963217040028 +4400,38.6514641441925 +4401,38.6962219519802 +4402,38.8282408495783 +4403,38.3589446763195 +4404,38.3742883108932 +4405,38.3020198786516 +4406,39.0404981028537 +4407,38.7390329170128 +4408,38.2151375730497 +4409,37.7941267167029 +4410,37.5728631846337 +4411,36.7165939816464 +4412,36.9686014580944 +4413,36.6139679675384 +4414,36.2199252731571 +4415,36.544907354858 +4416,36.9470202918493 +4417,37.0407121231035 +4418,37.8698331623979 +4419,37.9133259993023 +4420,37.7404626323457 +4421,37.8033458287509 +4422,38.0666917512499 +4423,38.8256994317422 +4424,38.796451663072 +4425,38.1381830233871 +4426,37.3433890106109 +4427,37.0689320348456 +4428,36.9740426443556 +4429,37.1087894334416 +4430,36.9219961420874 +4431,36.3192710468822 +4432,36.3186467503382 +4433,35.9395939217879 +4434,35.9579282767751 +4435,36.5780322092012 +4436,36.487298771308 +4437,36.089342587037 +4438,35.9207581563709 +4439,35.9779085320545 +4440,37.1042871921735 +4441,37.347639495698 +4442,37.5455536681417 +4443,38.2166494164702 +4444,38.1591067321573 +4445,38.1838930294323 +4446,38.1503277170723 +4447,38.2576443046143 +4448,37.899353206429 +4449,37.9280697205207 +4450,38.4487625436642 +4451,38.3920729889101 +4452,37.6886824462222 +4453,37.5187537924215 +4454,37.5191413954074 +4455,37.0954010827062 +4456,37.7354630649604 +4457,37.8136941195486 +4458,36.8362616461084 +4459,36.9399407127075 +4460,36.9501857910031 +4461,37.2670900975363 +4462,37.1523703025423 +4463,37.0493949706092 +4464,37.7162630971784 +4465,37.7782992826631 +4466,38.7303151463877 +4467,38.7451015147541 +4468,38.6170571949584 +4469,37.8728655564919 +4470,37.89246439251 +4471,38.1678895615994 +4472,37.860151832562 +4473,37.7372637245645 +4474,37.69142767993 +4475,37.6323200655003 +4476,37.4238776740836 +4477,37.4556569056629 +4478,37.9642149930851 +4479,37.8121186324017 +4480,38.0570264775346 +4481,38.2108849264341 +4482,38.3125648175485 +4483,38.6074646961431 +4484,38.6140909427831 +4485,38.0177656763736 +4486,38.132553233845 +4487,38.0837150382019 +4488,39.747844433806 +4489,39.5810765766244 +4490,39.5609695871403 +4491,39.6332302807004 +4492,39.4716793618942 +4493,39.8511629216482 +4494,40.1333457977556 +4495,40.6345679331649 +4496,40.7107325761434 +4497,40.6148258372386 +4498,40.5209319514248 +4499,40.625992282699 +4500,40.6127933380284 +4501,40.6031283670507 +4502,40.4512430870517 +4503,39.8131795824606 +4504,39.4005660837191 +4505,39.4000360141448 +4506,40.0682926852506 +4507,39.8585115925862 +4508,40.2242676106852 +4509,40.2017943085756 +4510,40.1958670596877 +4511,40.1784164476682 +4512,40.3388393416641 +4513,40.4309704372217 +4514,39.9793568601363 +4515,40.3520160230583 +4516,40.362381301668 +4517,41.6461763946263 +4518,41.0905255924604 +4519,40.7973076841504 +4520,40.729211993615 +4521,40.4188945521056 +4522,40.3794241345508 +4523,40.3943645020214 +4524,40.0095681033382 +4525,40.6051976110538 +4526,40.2021300791873 +4527,40.3901516056915 +4528,39.9454660982101 +4529,39.0750011101769 +4530,39.134549820855 +4531,39.6480585026411 +4532,39.6481441191188 +4533,39.3242073616114 +4534,39.5399752650596 +4535,39.975570441754 +4536,40.26787350849 +4537,40.1736977868651 +4538,40.4400664131213 +4539,40.5708349156139 +4540,40.6668932687195 +4541,40.6518795552791 +4542,39.9342746377048 +4543,40.3003301364885 +4544,39.967275063438 +4545,40.0423150391359 +4546,40.1428305736086 +4547,40.0612580014009 +4548,40.4049092593696 +4549,40.4503928650024 +4550,40.8726903044991 +4551,41.2965996151231 +4552,41.3045887684166 +4553,41.9016702549605 +4554,41.9230253659811 +4555,42.1617019697773 +4556,42.1036141555382 +4557,42.1012986598842 +4558,42.3119756623593 +4559,42.8262479779936 +4560,42.7472835908435 +4561,42.6673318330717 +4562,42.9286319618471 +4563,43.0008317848725 +4564,43.3735749040496 +4565,43.2237675498371 +4566,43.8613700489772 +4567,43.9841628833986 +4568,44.0470084423368 +4569,44.1139170086657 +4570,43.3335123760088 +4571,43.3475703499637 +4572,44.1460892123901 +4573,43.3151449806916 +4574,43.1647218607577 +4575,42.1020238399938 +4576,42.0455756312737 +4577,41.9217237903967 +4578,41.6111274803728 +4579,41.4665588359312 +4580,42.1355931158508 +4581,42.2858820132687 +4582,42.1547296217946 +4583,41.7528389753924 +4584,41.9134724801334 +4585,41.9268136149736 +4586,41.9507666881852 +4587,41.9030122914856 +4588,41.9507993621344 +4589,42.0155049884793 +4590,42.1301213535523 +4591,42.1195767473649 +4592,42.1167766940178 +4593,41.4317299957202 +4594,41.4938886451992 +4595,41.3738029001535 +4596,41.3700358456798 +4597,41.8131789315874 +4598,41.718756954521 +4599,41.7298553763554 +4600,41.5389409530653 +4601,41.7544788358154 +4602,41.885739012 +4603,42.0629063933968 +4604,42.0176553219365 +4605,42.0996369386342 +4606,42.121746882846 +4607,42.4028905345118 +4608,42.4390481014832 +4609,42.0730854507831 +4610,42.0038840066627 +4611,42.0239120671071 +4612,42.4314395580106 +4613,42.4184441145055 +4614,42.5013018653595 +4615,42.5086180498527 +4616,42.8667351445971 +4617,43.2708291680743 +4618,43.2588752301824 +4619,43.4198312561507 +4620,43.0254016974492 +4621,43.0367178133606 +4622,43.511158133553 +4623,43.6206946640261 +4624,44.2812837759845 +4625,45.2896523394624 +4626,45.9849972401862 +4627,45.9839582287619 +4628,46.0655636800812 +4629,45.1960817380353 +4630,44.6515960373533 +4631,45.8360412664365 +4632,45.0309753740892 +4633,45.345230813751 +4634,45.5168977961242 +4635,45.4129010304535 +4636,45.7830867613358 +4637,45.7293755016327 +4638,46.3054306242314 +4639,46.9767270108854 +4640,46.4774454072406 +4641,46.4346028381316 +4642,46.1765355152955 +4643,46.1267773587671 +4644,46.0707875309091 +4645,45.9046320617415 +4646,45.5524982167616 +4647,46.1045217889216 +4648,46.657238306998 +4649,46.6764464058687 +4650,46.6193110554781 +4651,46.7514553995907 +4652,47.1561462669832 +4653,47.8791023123323 +4654,47.9031579042608 +4655,48.1374870669098 +4656,48.1401251866932 +4657,48.1247883453479 +4658,47.7217108298399 +4659,47.7588214279167 +4660,48.6217529967268 +4661,49.4497356060962 +4662,49.4565559083677 +4663,49.4673840790743 +4664,49.3663208251097 +4665,49.3615390898599 +4666,48.9237925081004 +4667,48.8293696030932 +4668,48.6968275330511 +4669,49.0219925360394 +4670,48.887929465299 +4671,49.0496987870917 +4672,49.0842325410723 +4673,48.9282912705894 +4674,48.3828940835407 +4675,48.9257919871645 +4676,48.4913252995104 +4677,48.5411565836109 +4678,48.220706752606 +4679,47.9283851978581 +4680,47.7322527110091 +4681,45.9911353411014 +4682,44.7289954905561 +4683,44.5568745171909 +4684,44.556284717762 +4685,44.4493061636188 +4686,44.6951450184352 +4687,44.0899779875756 +4688,44.3267764240342 +4689,44.5246373562509 +4690,44.7702420660957 +4691,44.412796605893 +4692,44.2909062440869 +4693,43.4945287494888 +4694,43.3190691518602 +4695,42.9363175071141 +4696,42.8877273620333 +4697,42.0549097105125 +4698,42.1407247981418 +4699,40.8045588361868 +4700,41.4831646083566 +4701,41.520721767809 +4702,41.5348100852975 +4703,41.7569266945616 +4704,41.4964371152513 +4705,42.3595496591147 +4706,42.2544434863873 +4707,42.3464282308276 +4708,42.261522119953 +4709,42.9781699884985 +4710,42.5232084653801 +4711,42.9213684022889 +4712,42.4918772408749 +4713,42.4380879391694 +4714,42.3138673196169 +4715,42.4050367109832 +4716,41.5195699649346 +4717,41.5166640007768 +4718,41.4742664442403 +4719,41.642970570173 +4720,41.6218707241665 +4721,41.1518091285826 +4722,41.8947601565519 +4723,42.0925947142904 +4724,42.2763554611999 +4725,42.6983206872408 +4726,42.9805045247776 +4727,45.8765831003521 +4728,43.6183451512828 +4729,43.9219715298655 +4730,43.9740315579525 +4731,43.8377622460083 +4732,44.0199878749477 +4733,43.7413782782321 +4734,43.5184205884543 +4735,43.2824595936267 +4736,42.9313980420438 +4737,42.817852847371 +4738,43.3507423739577 +4739,42.5362637754814 +4740,43.3231843219092 +4741,44.1194336467924 +4742,44.2569007897612 +4743,44.4716782623899 +4744,44.5282632388676 +4745,44.2832438859261 +4746,44.2388515876811 +4747,44.1180087320188 +4748,44.1260761547717 +4749,43.9204190059742 +4750,43.4729675107165 +4751,43.5431018997471 +4752,43.5306694251216 +4753,44.4909732605711 +4754,44.6010718331409 +4755,42.7709056026419 +4756,42.9933467765062 +4757,42.9291999544912 +4758,42.4663653797701 +4759,42.6351041735338 +4760,41.1525215040589 +4761,41.6506266617332 +4762,41.6356959574788 +4763,41.8016760281217 +4764,41.5430566397448 +4765,41.0985163578816 +4766,40.4456396670158 +4767,40.5338804502517 +4768,40.8690019227734 +4769,40.8893712424686 +4770,41.1838095651639 +4771,41.2370288967627 +4772,41.9844890791128 +4773,41.9503209410029 +4774,41.8311479172696 +4775,41.6138451656544 +4776,41.3378553495235 +4777,41.3169138875603 +4778,41.0082436065165 +4779,40.663030529235 +4780,40.7523396052322 +4781,40.7469172399132 +4782,41.2242202779521 +4783,41.2417689811437 +4784,41.1922729100206 +4785,41.455618057186 +4786,41.7933142275837 +4787,41.1690856325984 +4788,41.1476875329111 +4789,41.3086889265342 +4790,41.1597869240049 +4791,41.8142881123724 +4792,41.5525467915363 +4793,41.6370720917887 +4794,41.3658090992464 +4795,40.8104706952526 +4796,40.9086166601022 +4797,40.9449761604474 +4798,41.1518195053205 +4799,41.1378921800591 +4800,41.0850914127772 +4801,41.0536589133556 +4802,40.9809116528961 +4803,41.7342034548891 +4804,41.3191600799219 +4805,41.4215682147432 +4806,41.5141441746877 +4807,42.3711148232461 +4808,42.7094380474371 +4809,42.6667576079963 +4810,42.1214705304096 +4811,42.4641008103483 +4812,42.6213944169638 +4813,41.9463743503028 +4814,41.9968456344992 +4815,42.5481679486134 +4816,42.2822326508769 +4817,42.2455093090059 +4818,42.2824913060753 +4819,42.5842349556374 +4820,41.3598611112881 +4821,42.1048135370276 +4822,42.2494109396009 +4823,41.1994199066459 +4824,41.2136418444606 +4825,41.7250618425951 +4826,42.5360177116018 +4827,42.6742005446469 +4828,42.7642605732984 +4829,42.7879854806992 +4830,42.7614892312411 +4831,43.5550001806463 +4832,43.5281856413766 +4833,43.7103022762803 +4834,43.6955985975149 +4835,42.7539090321675 +4836,42.954528757785 +4837,43.3650667756873 +4838,43.3681479038274 +4839,43.8933373984582 +4840,43.989916759215 +4841,43.5625359824639 +4842,43.3777434547471 +4843,42.9244006158824 +4844,43.1230467011904 +4845,42.5828852092472 +4846,42.6192440085378 +4847,42.6506054078847 +4848,42.4122262303534 +4849,41.646360968683 +4850,41.4241349172738 +4851,41.1086841326965 +4852,41.172396017699 +4853,41.3600458880489 +4854,40.8000779882809 +4855,40.8691229017618 +4856,39.8812536875338 +4857,40.41356233658 +4858,40.3073936680039 +4859,40.4448665834484 +4860,40.6799203684629 +4861,39.1932304187935 +4862,38.934776988262 +4863,38.6635282389286 +4864,38.0189507185519 +4865,38.0467451813921 +4866,38.0185329265602 +4867,37.7102160713922 +4868,38.4228467674065 +4869,38.4500199698934 +4870,38.3997470792123 +4871,38.3436199817712 +4872,39.0919803994634 +4873,39.5198852558182 +4874,39.5472385581927 +4875,39.5223600776691 +4876,39.3796994945283 +4877,40.222868236832 +4878,39.6666128622084 +4879,40.2830428544446 +4880,40.2297164165852 +4881,40.445190873458 +4882,41.2037278880387 +4883,41.409197841844 +4884,41.4020513611003 +4885,41.4895966574823 +4886,41.6332080592411 +4887,41.7450147233908 +4888,41.5946333922735 +4889,41.8916541816463 +4890,42.4299067567213 +4891,42.5156633427085 +4892,42.4311265109744 +4893,42.655734123909 +4894,42.5649774287204 +4895,42.2057862733808 +4896,42.1990518640427 +4897,42.0630606214865 +4898,40.8631606909062 +4899,41.4015851042295 +4900,40.8894445973744 +4901,41.3657216190373 +4902,40.0819076324279 +4903,40.1109142214592 +4904,40.970871041376 +4905,41.1580572948619 +4906,41.2789686422098 +4907,41.1701301103775 +4908,41.0190959160646 +4909,41.1982345410951 +4910,40.7122235248772 +4911,40.6040965855801 +4912,40.2242872644759 +4913,38.8608483694206 +4914,38.7004174631092 +4915,38.8194506164692 +4916,38.6446718289734 +4917,38.6398702436568 +4918,38.929014450695 +4919,38.800879089492 +4920,38.4747356947351 +4921,38.6630004787302 +4922,38.6844550380396 +4923,38.2926562134211 +4924,38.4901741007779 +4925,38.8874857131034 +4926,39.345619289246 +4927,39.410787598395 +4928,39.7534324018881 +4929,39.6672549658757 +4930,39.6450303972145 +4931,39.7443463321635 +4932,39.2442248581757 +4933,39.3571763477031 +4934,39.0838687430732 +4935,38.7795815429915 +4936,38.7847394370519 +4937,38.8441693077278 +4938,38.531983904134 +4939,38.1383998242135 +4940,38.1983411629914 +4941,38.3848787903599 +4942,37.417880489915 +4943,38.3282507805379 +4944,37.2757154348569 +4945,37.381643210594 +4946,37.1394003833686 +4947,37.686425234249 +4948,37.603432975092 +4949,37.6435909741819 +4950,37.2332923236785 +4951,36.9948494622209 +4952,36.8267050979792 +4953,36.1085042929677 +4954,36.1051527853101 +4955,36.2758586686844 +4956,35.8771069502233 +4957,35.0690241747229 +4958,35.6895449671715 +4959,34.4299750160705 +4960,33.9039081124664 +4961,34.5099473426013 +4962,34.2472650863431 +4963,34.2719656699541 +4964,34.5385460323763 +4965,33.1802916904698 +4966,33.7484974008645 +4967,33.7660814446232 +4968,33.6907313943447 +4969,33.7568704528652 +4970,33.9438244133349 +4971,33.5634179026983 +4972,33.6438761046993 +4973,33.6031991069995 +4974,33.5549017674191 +4975,33.7637956215869 +4976,33.7631540159745 +4977,32.8267558087521 +4978,32.4524127613127 +4979,32.5573346396462 +4980,33.3198017237548 +4981,33.5934112661578 +4982,33.7308192326943 +4983,34.3734676468818 +4984,35.071765487661 +4985,35.3759195910906 +4986,35.471233571042 +4987,35.1301612251718 +4988,34.6509971956226 +4989,34.371110741125 +4990,34.515233318219 +4991,34.3571894448321 +4992,34.3640753716414 +4993,34.3412443526508 +4994,34.7170132599387 +4995,34.5351111244447 +4996,34.1281960795543 +4997,33.4768052019688 +4998,33.2136457188321 +4999,34.0762260478213 diff --git a/examples/downsampling/src/main.rs b/examples/downsampling/src/main.rs new file mode 100644 index 00000000..7a35cc14 --- /dev/null +++ b/examples/downsampling/src/main.rs @@ -0,0 +1,112 @@ +use std::error::Error; +use std::fs::File; + +use minmaxlttb::{LttbBuilder, LttbMethod, Point}; +use plotly::{common::DashType, Configuration, Layout, Plot, Scatter}; +use plotly_utils::write_example_to_html; + +const DATA_PATH: &str = "assets/timeseries.csv"; + +// ANCHOR: minmaxlttb_downsampling +fn minmaxlttb_downsampling(show: bool, file_name: &str) -> Result<(), Box> { + let original_data = load_timeseries_data()?; + let ratio = 4; + + println!("Loaded timeseries data with {} points", original_data.len()); + + let thresholds = vec![100, 250, 500, 1000, 2000]; + let mut downsampled_results = Vec::new(); + for &threshold in &thresholds { + let downsampled = LttbBuilder::new() + .threshold(threshold) + .method(LttbMethod::MinMax) + .build() + .downsample(&original_data) + .unwrap(); + println!( + "MinMaxLttb (threshold = {threshold}, ratio = {ratio}): downsampled = {} points", + downsampled.len() + ); + downsampled_results.push((threshold, downsampled)); + } + + let mut plot = Plot::new(); + let x_orig: Vec = original_data.iter().map(|p| p.x()).collect(); + let y_orig: Vec = original_data.iter().map(|p| p.y()).collect(); + plot.add_trace( + Scatter::new(x_orig, y_orig) + .name(format!("Original Data ({})", original_data.len())) + .line( + plotly::common::Line::new() + .color("black") + .width(1.5) + .dash(DashType::Dash), + ), + ); + let colors = ["red", "blue", "green", "purple", "orange"]; + for (i, (threshold, downsampled)) in downsampled_results.iter().enumerate() { + let x: Vec = downsampled.iter().map(|p| p.x()).collect(); + let y: Vec = downsampled.iter().map(|p| p.y()).collect(); + plot.add_trace( + Scatter::new(x, y) + .name(format!("MinMaxLttb ({threshold}")) + .line(plotly::common::Line::new().color(colors[i]).width(1.5)), + ); + } + let layout = Layout::new() + .title(plotly::common::Title::with_text( + "MinMax LTTB Downsampling on Timeseries Data", + )) + .show_legend(true) + .height(900) + .x_axis( + plotly::layout::Axis::new() + .title(plotly::common::Title::with_text("Time")) + .range(vec![0.0, original_data.last().unwrap().x()]), + ) + .y_axis( + plotly::layout::Axis::new() + .title(plotly::common::Title::with_text("Value")) + .range(vec![ + original_data + .iter() + .map(|p| p.y()) + .fold(f64::INFINITY, f64::min) + * 0.95, + original_data + .iter() + .map(|p| p.y()) + .fold(f64::NEG_INFINITY, f64::max) + * 1.05, + ]), + ); + plot.set_layout(layout); + plot.set_configuration(Configuration::default().responsive(true)); + + let path = write_example_to_html(&plot, file_name); + if show { + plot.show_html(path); + } + + Ok(()) +} +// ANCHOR_END: minmaxlttb_downsampling + +fn load_timeseries_data() -> Result, Box> { + let file = File::open(DATA_PATH)?; + let mut rdr = csv::ReaderBuilder::new() + .has_headers(true) + .from_reader(file); + let mut data = Vec::new(); + for result in rdr.records() { + let record = result?; + let x: f64 = record.get(0).ok_or("Missing X column")?.parse()?; + let y: f64 = record.get(1).ok_or("Missing Y column")?.parse()?; + data.push(Point::new(x, y)); + } + Ok(data) +} + +fn main() { + minmaxlttb_downsampling(false, "minmaxlttb_downsampling").unwrap(); +}