From ce32232a2dac8924d2177c377130fadb227aff81 Mon Sep 17 00:00:00 2001 From: Richard Thier Date: Sat, 4 Oct 2025 06:30:11 +0200 Subject: [PATCH] results and result generating AWKs --- results/2025/100000.txt | 14 +++ results/2025/1000000.txt | 14 +++ results/2025/10000000.txt | 14 +++ results/2025/100000000.txt | 14 +++ results/2025/1024.txt | 14 +++ results/2025/140000000.txt | 14 +++ results/2025/16384.txt | 14 +++ results/2025/20000000.txt | 14 +++ results/2025/30000000.txt | 14 +++ results/2025/4096.txt | 14 +++ results/2025/500000.txt | 14 +++ results/2025/5000000.txt | 14 +++ results/2025/50000000.txt | 14 +++ results/2025/64.txt | 14 +++ results/2025/75000000.txt | 14 +++ results/2025/big_dataset.csv | 49 +++++++++++ results/2025/combinator.inc | 68 +++++++++++++++ results/2025/data.csv | 13 +++ results/2025/rand.csv | 13 +++ results/2025/rand_clean.csv | 13 +++ results/2025/regulars.csv | 5 ++ results/2025/regulars_clean.csv | 5 ++ results/2025/steps.sh | 144 +++++++++++++++++++++++++++++++ results/2025_clang/100000.txt | 14 +++ results/2025_clang/1000000.txt | 14 +++ results/2025_clang/10000000.txt | 14 +++ results/2025_clang/100000000.txt | 14 +++ results/2025_clang/1024.txt | 14 +++ results/2025_clang/140000000.txt | 14 +++ results/2025_clang/16384.txt | 14 +++ results/2025_clang/20000000.txt | 14 +++ results/2025_clang/30000000.txt | 14 +++ results/2025_clang/4096.txt | 14 +++ results/2025_clang/500000.txt | 14 +++ results/2025_clang/5000000.txt | 14 +++ results/2025_clang/50000000.txt | 14 +++ results/2025_clang/64.txt | 14 +++ results/2025_clang/75000000.txt | 14 +++ results/30000000r | 14 +++ results/measurement_time | 5 ++ results/regi_frewr.jpeg | Bin 0 -> 56041 bytes 41 files changed, 749 insertions(+) create mode 100644 results/2025/100000.txt create mode 100644 results/2025/1000000.txt create mode 100644 results/2025/10000000.txt create mode 100644 results/2025/100000000.txt create mode 100644 results/2025/1024.txt create mode 100644 results/2025/140000000.txt create mode 100644 results/2025/16384.txt create mode 100644 results/2025/20000000.txt create mode 100644 results/2025/30000000.txt create mode 100644 results/2025/4096.txt create mode 100644 results/2025/500000.txt create mode 100644 results/2025/5000000.txt create mode 100644 results/2025/50000000.txt create mode 100644 results/2025/64.txt create mode 100644 results/2025/75000000.txt create mode 100644 results/2025/big_dataset.csv create mode 100644 results/2025/combinator.inc create mode 100644 results/2025/data.csv create mode 100644 results/2025/rand.csv create mode 100644 results/2025/rand_clean.csv create mode 100644 results/2025/regulars.csv create mode 100644 results/2025/regulars_clean.csv create mode 100644 results/2025/steps.sh create mode 100644 results/2025_clang/100000.txt create mode 100644 results/2025_clang/1000000.txt create mode 100644 results/2025_clang/10000000.txt create mode 100644 results/2025_clang/100000000.txt create mode 100644 results/2025_clang/1024.txt create mode 100644 results/2025_clang/140000000.txt create mode 100644 results/2025_clang/16384.txt create mode 100644 results/2025_clang/20000000.txt create mode 100644 results/2025_clang/30000000.txt create mode 100644 results/2025_clang/4096.txt create mode 100644 results/2025_clang/500000.txt create mode 100644 results/2025_clang/5000000.txt create mode 100644 results/2025_clang/50000000.txt create mode 100644 results/2025_clang/64.txt create mode 100644 results/2025_clang/75000000.txt create mode 100644 results/30000000r create mode 100644 results/measurement_time create mode 100644 results/regi_frewr.jpeg diff --git a/results/2025/100000.txt b/results/2025/100000.txt new file mode 100644 index 0000000..bf2ae08 --- /dev/null +++ b/results/2025/100000.txt @@ -0,0 +1,14 @@ +Sorting 100000 elements: + + constant 0.001s 0.000s 0.001s 0.004s 0.001s 0.001s 0.000s 0.003s 0.001s 0.001s 0.002s 0.000s + asc 0.000s 0.000s 0.000s 0.001s 0.000s 0.001s 0.000s 0.000s 0.000s 0.009s 0.001s 0.000s + desc 0.000s 0.000s 0.000s 0.001s 0.000s 0.001s 0.002s 0.000s 0.000s 0.009s 0.001s 0.000s + ascasc 0.001s 0.000s 0.000s 0.001s 0.000s 0.001s 0.001s 0.000s 0.003s 0.008s 0.001s 0.000s + ascdesc 0.000s 0.000s 0.000s 0.001s 0.000s 0.001s 0.001s 0.000s 0.002s 0.009s 0.001s 0.000s + descasc 0.000s 0.000s 0.000s 0.001s 0.000s 0.001s 0.001s 0.000s 0.000s 0.009s 0.001s 0.000s + descdesc 0.001s 0.000s 0.000s 0.002s 0.000s 0.001s 0.002s 0.000s 0.004s 0.001s 0.001s 0.000s +smallrange 0.001s 0.000s 0.001s 0.001s 0.001s 0.001s 0.002s 0.001s 0.002s 0.001s 0.001s 0.000s + rand 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s 0.004s 0.000s 0.005s 0.008s 0.000s 0.000s + + worst 0.001s 0.000s 0.001s 0.004s 0.001s 0.001s 0.004s 0.003s 0.005s 0.009s 0.002s 0.000s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/1000000.txt b/results/2025/1000000.txt new file mode 100644 index 0000000..cd86d94 --- /dev/null +++ b/results/2025/1000000.txt @@ -0,0 +1,14 @@ +Sorting 1000000 elements: + + constant 0.016s 0.000s 0.011s 0.017s 0.010s 0.012s 0.001s 0.011s 0.007s 0.005s 0.012s 0.008s + asc 0.015s 0.000s 0.012s 0.016s 0.013s 0.011s 0.012s 0.014s 0.009s 0.021s 0.011s 0.011s + desc 0.015s 0.000s 0.012s 0.014s 0.014s 0.011s 0.023s 0.014s 0.006s 0.021s 0.011s 0.012s + ascasc 0.012s 0.000s 0.010s 0.027s 0.011s 0.013s 0.021s 0.015s 0.054s 0.020s 0.013s 0.011s + ascdesc 0.015s 0.000s 0.011s 0.015s 0.013s 0.011s 0.017s 0.014s 0.039s 0.021s 0.011s 0.011s + descasc 0.015s 0.000s 0.012s 0.015s 0.013s 0.011s 0.017s 0.016s 0.008s 0.021s 0.011s 0.010s + descdesc 0.012s 0.000s 0.009s 0.032s 0.011s 0.014s 0.023s 0.014s 0.061s 0.011s 0.014s 0.013s +smallrange 0.016s 0.000s 0.010s 0.016s 0.011s 0.013s 0.022s 0.012s 0.029s 0.014s 0.013s 0.008s + rand 0.008s 0.000s 0.005s 0.044s 0.006s 0.007s 0.058s 0.017s 0.062s 0.018s 0.007s 0.008s + + worst 0.016s 0.000s 0.012s 0.044s 0.014s 0.014s 0.058s 0.017s 0.062s 0.021s 0.014s 0.013s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/10000000.txt b/results/2025/10000000.txt new file mode 100644 index 0000000..c6bdeaa --- /dev/null +++ b/results/2025/10000000.txt @@ -0,0 +1,14 @@ +Sorting 10000000 elements: + + constant 0.169s 0.004s 0.113s 0.206s 0.104s 0.122s 0.010s 0.148s 0.098s 0.058s 0.123s 0.086s + asc 0.970s 0.003s 0.941s 0.206s 0.859s 0.174s 0.149s 0.971s 0.114s 0.133s 0.174s 0.138s + desc 1.063s 0.004s 1.017s 0.192s 1.019s 0.169s 0.335s 0.831s 0.097s 0.160s 0.163s 0.197s + ascasc 1.003s 0.003s 0.975s 0.359s 0.975s 0.173s 0.298s 1.094s 0.698s 0.182s 0.191s 0.164s + ascdesc 1.098s 0.004s 1.022s 0.199s 1.021s 0.172s 0.227s 1.087s 0.527s 0.160s 0.173s 0.187s + descasc 1.000s 0.003s 0.942s 0.195s 0.944s 0.174s 0.227s 1.011s 0.100s 0.160s 0.174s 0.152s + descdesc 1.082s 0.003s 1.055s 0.414s 1.050s 0.203s 0.324s 1.167s 0.762s 0.178s 0.235s 0.122s +smallrange 0.173s 0.003s 0.105s 0.228s 0.100s 0.119s 0.226s 0.202s 0.303s 0.151s 0.118s 0.085s + rand 0.089s 0.003s 0.056s 0.549s 0.058s 0.072s 0.700s 0.195s 0.744s 0.109s 0.072s 0.101s + + worst 1.098s 0.004s 1.055s 0.549s 1.050s 0.203s 0.700s 1.167s 0.762s 0.182s 0.235s 0.197s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/100000000.txt b/results/2025/100000000.txt new file mode 100644 index 0000000..34a0e00 --- /dev/null +++ b/results/2025/100000000.txt @@ -0,0 +1,14 @@ +Sorting 100000000 elements: + + constant 1.844s 0.031s 1.172s 2.187s 1.075s 0.592s 0.105s 1.732s 1.114s 0.600s 1.266s 0.923s + asc 10.293s 0.033s 10.085s 2.093s 10.043s 1.444s 1.767s 10.986s 1.317s 1.444s 11.816s 13.200s + desc 10.318s 0.031s 10.062s 1.921s 9.987s 1.473s 2.932s 10.939s 0.954s 1.446s 11.828s 13.167s + ascasc 10.666s 0.031s 10.443s 4.069s 10.379s 1.640s 2.764s 11.243s 9.374s 1.646s 8.610s 16.492s + ascdesc 10.176s 0.031s 9.960s 2.007s 9.948s 1.460s 2.330s 10.856s 6.438s 1.459s 11.873s 13.237s + descasc 10.179s 0.031s 9.998s 2.010s 9.909s 1.460s 2.370s 10.801s 1.154s 1.443s 11.810s 13.245s + descdesc 10.279s 0.033s 10.050s 4.978s 9.965s 1.943s 2.962s 10.852s 10.267s 1.955s 21.551s 16.544s +smallrange 1.726s 0.036s 1.054s 2.055s 0.982s 1.609s 2.527s 1.732s 3.167s 1.594s 1.167s 0.900s + rand 0.866s 0.036s 0.610s 6.582s 0.584s 0.975s 8.124s 1.959s 8.347s 0.987s 0.731s 1.026s + + worst 10.666s 0.036s 10.443s 6.582s 10.379s 1.943s 8.124s 11.243s 10.267s 1.955s 21.551s 16.544s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/1024.txt b/results/2025/1024.txt new file mode 100644 index 0000000..7284161 --- /dev/null +++ b/results/2025/1024.txt @@ -0,0 +1,14 @@ +Sorting 1024 elements: + + constant 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + asc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.006s 0.000s 0.000s + desc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + ascasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.002s 0.000s 0.000s + ascdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + descasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + descdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s +smallrange 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + + worst 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.006s 0.000s 0.000s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/140000000.txt b/results/2025/140000000.txt new file mode 100644 index 0000000..7375dce --- /dev/null +++ b/results/2025/140000000.txt @@ -0,0 +1,14 @@ +Sorting 140000000 elements: + + constant 2.527s 0.047s 1.600s 3.065s 1.471s 0.799s 0.144s 2.344s 1.563s 0.812s 1.741s 1.252s + asc 13.672s 0.047s 13.505s 2.877s 13.312s 2.068s 2.457s 14.215s 1.770s 2.069s 21.915s 14.321s + desc 13.897s 0.044s 13.569s 2.690s 13.585s 2.139s 4.128s 14.454s 1.436s 2.134s 22.103s 14.751s + ascasc 13.633s 0.044s 13.299s 6.246s 13.301s 2.393s 3.885s 14.253s 13.032s 2.404s 16.726s 15.951s + ascdesc 13.789s 0.044s 13.520s 2.822s 13.393s 2.143s 3.328s 14.307s 9.171s 2.142s 22.281s 14.870s + descasc 13.961s 0.044s 13.488s 2.826s 13.411s 2.124s 3.389s 14.355s 1.606s 2.125s 22.296s 14.908s + descdesc 13.198s 0.045s 12.779s 7.066s 12.747s 2.782s 4.155s 13.703s 14.572s 2.810s 32.579s 15.166s +smallrange 2.415s 0.048s 1.479s 2.962s 1.371s 2.266s 3.664s 2.427s 4.402s 2.266s 1.624s 1.311s + rand 1.257s 0.048s 0.968s 9.427s 0.810s 1.453s 11.323s 2.746s 11.822s 1.425s 1.022s 1.581s + + worst 13.961s 0.048s 13.569s 9.427s 13.585s 2.782s 11.323s 14.454s 14.572s 2.810s 32.579s 15.951s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/16384.txt b/results/2025/16384.txt new file mode 100644 index 0000000..53911d9 --- /dev/null +++ b/results/2025/16384.txt @@ -0,0 +1,14 @@ +Sorting 16384 elements: + + constant 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + asc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.006s 0.000s 0.000s + desc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.006s 0.000s 0.000s + ascasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.005s 0.000s 0.000s + ascdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.006s 0.000s 0.000s + descasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.006s 0.000s 0.000s + descdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.001s 0.000s 0.000s +smallrange 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.005s 0.000s 0.000s + + worst 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.006s 0.000s 0.000s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/20000000.txt b/results/2025/20000000.txt new file mode 100644 index 0000000..b622013 --- /dev/null +++ b/results/2025/20000000.txt @@ -0,0 +1,14 @@ +Sorting 20000000 elements: + + constant 0.342s 0.006s 0.233s 0.401s 0.214s 0.253s 0.021s 0.330s 0.177s 0.122s 0.252s 0.178s + asc 1.941s 0.006s 1.869s 0.417s 1.771s 0.352s 0.309s 1.994s 0.251s 0.255s 0.354s 1.157s + desc 1.925s 0.006s 1.851s 0.387s 1.893s 0.352s 0.546s 2.064s 0.181s 0.254s 0.354s 1.129s + ascasc 2.155s 0.006s 2.095s 0.712s 2.000s 0.366s 0.492s 2.109s 1.524s 0.296s 0.367s 0.384s + ascdesc 1.716s 0.006s 1.660s 0.403s 1.688s 0.352s 0.417s 1.858s 1.112s 0.254s 0.353s 1.093s + descasc 1.753s 0.006s 1.678s 0.402s 1.660s 0.356s 0.435s 1.802s 0.218s 0.255s 0.354s 1.164s + descdesc 1.791s 0.006s 1.696s 0.888s 1.753s 0.794s 0.542s 1.886s 1.653s 0.304s 0.802s 0.346s +smallrange 0.345s 0.007s 0.209s 0.395s 0.198s 0.233s 0.485s 0.341s 0.587s 0.295s 0.235s 0.162s + rand 0.173s 0.007s 0.113s 1.185s 0.117s 0.141s 1.445s 0.391s 1.507s 0.193s 0.143s 0.199s + + worst 2.155s 0.007s 2.095s 1.185s 2.000s 0.794s 1.445s 2.109s 1.653s 0.304s 0.802s 1.164s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/30000000.txt b/results/2025/30000000.txt new file mode 100644 index 0000000..013b712 --- /dev/null +++ b/results/2025/30000000.txt @@ -0,0 +1,14 @@ +Sorting 30000000 elements: + + constant 0.550s 0.009s 0.351s 0.624s 0.321s 0.183s 0.031s 0.486s 0.300s 0.180s 0.378s 0.271s + asc 2.959s 0.009s 2.852s 0.626s 2.794s 0.377s 0.501s 3.083s 0.364s 0.384s 0.710s 3.202s + desc 2.910s 0.009s 2.817s 0.587s 2.855s 0.380s 0.844s 3.155s 0.271s 0.385s 0.703s 3.068s + ascasc 3.194s 0.010s 3.070s 1.174s 2.990s 0.444s 0.764s 3.234s 2.572s 0.446s 0.730s 1.157s + ascdesc 2.758s 0.009s 2.666s 0.611s 2.686s 0.378s 0.649s 2.996s 1.752s 0.380s 0.706s 3.019s + descasc 2.814s 0.009s 2.700s 0.611s 2.665s 0.379s 0.666s 2.931s 0.319s 0.388s 0.705s 3.240s + descdesc 2.815s 0.009s 2.666s 1.419s 2.745s 0.490s 0.841s 2.989s 2.709s 0.481s 1.987s 1.155s +smallrange 0.516s 0.011s 0.315s 0.652s 0.296s 0.464s 0.729s 0.508s 0.932s 0.471s 0.348s 0.248s + rand 0.259s 0.011s 0.169s 1.819s 0.174s 0.292s 2.242s 0.587s 2.410s 0.294s 0.214s 0.303s + + worst 3.194s 0.011s 3.070s 1.819s 2.990s 0.490s 2.242s 3.234s 2.709s 0.481s 1.987s 3.240s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/4096.txt b/results/2025/4096.txt new file mode 100644 index 0000000..8ff77c0 --- /dev/null +++ b/results/2025/4096.txt @@ -0,0 +1,14 @@ +Sorting 4096 elements: + + constant 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + asc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.014s 0.000s 0.000s + desc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.000s 0.000s + ascasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + ascdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.000s 0.000s + descasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.000s 0.000s + descdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s +smallrange 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.000s 0.000s + + worst 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.014s 0.000s 0.000s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/500000.txt b/results/2025/500000.txt new file mode 100644 index 0000000..a5d6854 --- /dev/null +++ b/results/2025/500000.txt @@ -0,0 +1,14 @@ +Sorting 500000 elements: + + constant 0.008s 0.000s 0.005s 0.008s 0.005s 0.006s 0.000s 0.005s 0.005s 0.002s 0.006s 0.004s + asc 0.005s 0.000s 0.004s 0.008s 0.005s 0.006s 0.005s 0.006s 0.004s 0.015s 0.006s 0.003s + desc 0.006s 0.000s 0.004s 0.008s 0.005s 0.006s 0.011s 0.006s 0.003s 0.015s 0.006s 0.003s + ascasc 0.005s 0.000s 0.005s 0.011s 0.005s 0.006s 0.010s 0.005s 0.025s 0.014s 0.006s 0.004s + ascdesc 0.004s 0.000s 0.004s 0.008s 0.005s 0.006s 0.008s 0.006s 0.016s 0.015s 0.006s 0.003s + descasc 0.005s 0.000s 0.004s 0.008s 0.005s 0.006s 0.009s 0.007s 0.004s 0.015s 0.006s 0.003s + descdesc 0.005s 0.000s 0.005s 0.014s 0.005s 0.007s 0.011s 0.006s 0.028s 0.005s 0.007s 0.004s +smallrange 0.008s 0.000s 0.005s 0.007s 0.005s 0.006s 0.012s 0.005s 0.014s 0.006s 0.006s 0.004s + rand 0.004s 0.000s 0.003s 0.021s 0.003s 0.004s 0.029s 0.008s 0.029s 0.015s 0.004s 0.003s + + worst 0.008s 0.000s 0.005s 0.021s 0.005s 0.007s 0.029s 0.008s 0.029s 0.015s 0.007s 0.004s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/5000000.txt b/results/2025/5000000.txt new file mode 100644 index 0000000..da24c3e --- /dev/null +++ b/results/2025/5000000.txt @@ -0,0 +1,14 @@ +Sorting 5000000 elements: + + constant 0.081s 0.002s 0.054s 0.098s 0.050s 0.059s 0.005s 0.066s 0.045s 0.028s 0.059s 0.041s + asc 0.419s 0.002s 0.403s 0.091s 0.399s 0.061s 0.072s 0.429s 0.055s 0.067s 0.061s 0.037s + desc 0.423s 0.002s 0.392s 0.087s 0.390s 0.061s 0.125s 0.431s 0.040s 0.068s 0.061s 0.038s + ascasc 0.480s 0.002s 0.479s 0.141s 0.480s 0.070s 0.117s 0.497s 0.323s 0.072s 0.070s 0.062s + ascdesc 0.412s 0.002s 0.403s 0.089s 0.404s 0.060s 0.100s 0.426s 0.249s 0.068s 0.062s 0.037s + descasc 0.506s 0.002s 0.482s 0.090s 0.488s 0.061s 0.098s 0.512s 0.048s 0.068s 0.061s 0.038s + descdesc 0.436s 0.002s 0.402s 0.183s 0.404s 0.079s 0.127s 0.442s 0.366s 0.070s 0.079s 0.054s +smallrange 0.093s 0.002s 0.049s 0.090s 0.048s 0.069s 0.146s 0.072s 0.151s 0.086s 0.069s 0.048s + rand 0.040s 0.002s 0.025s 0.253s 0.028s 0.033s 0.340s 0.094s 0.354s 0.054s 0.033s 0.046s + + worst 0.506s 0.002s 0.482s 0.253s 0.488s 0.079s 0.340s 0.512s 0.366s 0.086s 0.079s 0.062s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/50000000.txt b/results/2025/50000000.txt new file mode 100644 index 0000000..7899323 --- /dev/null +++ b/results/2025/50000000.txt @@ -0,0 +1,14 @@ +Sorting 50000000 elements: + + constant 0.896s 0.016s 0.571s 1.055s 0.534s 0.302s 0.052s 0.823s 0.527s 0.304s 0.618s 0.445s + asc 5.289s 0.016s 5.149s 1.035s 5.116s 0.637s 0.819s 5.581s 0.627s 0.639s 2.317s 6.388s + desc 5.222s 0.015s 5.089s 0.930s 5.156s 0.645s 1.399s 5.610s 0.451s 0.645s 2.304s 6.257s + ascasc 4.970s 0.015s 4.775s 2.132s 4.713s 0.739s 1.283s 5.138s 4.278s 0.742s 1.869s 4.900s + ascdesc 5.210s 0.015s 5.099s 0.983s 5.114s 0.660s 1.128s 5.596s 2.952s 0.659s 2.343s 6.246s + descasc 5.339s 0.015s 5.215s 1.006s 5.113s 0.660s 1.164s 5.618s 0.560s 0.653s 2.360s 6.386s + descdesc 4.871s 0.016s 4.685s 2.341s 4.759s 0.899s 1.425s 5.171s 4.856s 0.903s 6.518s 4.998s +smallrange 0.862s 0.018s 0.529s 1.031s 0.493s 0.765s 1.326s 0.863s 1.573s 0.768s 0.584s 0.412s + rand 0.432s 0.018s 0.285s 3.104s 0.290s 0.474s 3.875s 0.978s 4.044s 0.474s 0.369s 0.510s + + worst 5.339s 0.018s 5.215s 3.104s 5.156s 0.899s 3.875s 5.618s 4.856s 0.903s 6.518s 6.388s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/64.txt b/results/2025/64.txt new file mode 100644 index 0000000..522d173 --- /dev/null +++ b/results/2025/64.txt @@ -0,0 +1,14 @@ +Sorting 64 elements: + + constant 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + asc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.001s 0.000s 0.000s + desc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.001s 0.000s 0.000s + ascasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + ascdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.001s 0.000s 0.000s + descasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.001s 0.000s 0.000s + descdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s +smallrange 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.001s 0.000s 0.000s + + worst 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.001s 0.000s 0.000s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/75000000.txt b/results/2025/75000000.txt new file mode 100644 index 0000000..88c3779 --- /dev/null +++ b/results/2025/75000000.txt @@ -0,0 +1,14 @@ +Sorting 75000000 elements: + + constant 1.348s 0.023s 0.860s 1.594s 0.788s 0.437s 0.077s 1.377s 0.798s 0.440s 0.926s 0.668s + asc 7.373s 0.025s 7.187s 1.499s 7.122s 1.000s 1.314s 7.728s 0.911s 1.006s 5.153s 8.430s + desc 7.406s 0.023s 7.205s 1.525s 7.190s 1.034s 2.170s 7.587s 0.679s 1.033s 5.134s 8.332s + ascasc 7.396s 0.023s 7.216s 2.972s 7.263s 1.174s 2.002s 7.812s 6.556s 1.178s 3.691s 8.592s + ascdesc 7.283s 0.024s 7.072s 1.485s 7.108s 1.031s 1.728s 7.725s 4.594s 1.024s 5.191s 8.181s + descasc 7.421s 0.024s 7.228s 1.480s 7.156s 1.021s 1.769s 7.694s 0.821s 1.032s 5.194s 8.388s + descdesc 7.018s 0.025s 6.848s 3.633s 6.911s 1.433s 2.195s 7.464s 7.331s 1.430s 13.123s 8.570s +smallrange 1.292s 0.028s 0.800s 1.588s 0.736s 1.178s 2.042s 1.294s 2.340s 1.176s 0.869s 0.657s + rand 0.650s 0.027s 0.457s 4.887s 0.434s 0.746s 5.983s 1.466s 6.273s 0.740s 0.543s 0.759s + + worst 7.421s 0.028s 7.228s 4.887s 7.263s 1.433s 5.983s 7.812s 7.331s 1.430s 13.123s 8.592s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025/big_dataset.csv b/results/2025/big_dataset.csv new file mode 100644 index 0000000..9b1c651 --- /dev/null +++ b/results/2025/big_dataset.csv @@ -0,0 +1,49 @@ +alg 64 1024 4096 16384 100000 500000 1000000 5000000 10000000 20000000 30000000 50000000 75000000 100000000 140000000 +4pasu-worst 0,000 0,000 0,000 0,000 0,001 0,008 0,016 0,506 1,098 2,155 3,194 5,339 7,421 10,666 13,961 +4pasu-smallrange 0,000 0,000 0,000 0,000 0,001 0,008 0,016 0,093 0,173 0,345 0,516 0,862 1,292 1,726 2,415 +4pasu-rand 0,000 0,000 0,000 0,000 0,000 0,004 0,008 0,040 0,089 0,173 0,259 0,432 0,650 0,866 1,257 +4pasu-constant 0,000 0,000 0,000 0,000 0,001 0,008 0,016 0,081 0,169 0,342 0,550 0,896 1,348 1,844 2,527 +copy-worst 0,000 0,000 0,000 0,000 0,000 0,000 0,000 0,002 0,004 0,007 0,011 0,018 0,028 0,036 0,048 +copy-smallrange 0,000 0,000 0,000 0,000 0,000 0,000 0,000 0,002 0,003 0,007 0,011 0,018 0,028 0,036 0,048 +copy-rand 0,000 0,000 0,000 0,000 0,000 0,000 0,000 0,002 0,003 0,007 0,011 0,018 0,027 0,036 0,048 +copy-constant 0,000 0,000 0,000 0,000 0,000 0,000 0,000 0,002 0,004 0,006 0,009 0,016 0,023 0,031 0,047 +frewr-worst 0,000 0,000 0,000 0,000 0,001 0,005 0,012 0,482 1,055 2,095 3,070 5,215 7,228 10,443 13,569 +frewr-smallrange 0,000 0,000 0,000 0,000 0,001 0,005 0,010 0,049 0,105 0,209 0,315 0,529 0,800 1,054 1,479 +frewr-rand 0,000 0,000 0,000 0,000 0,000 0,003 0,005 0,025 0,056 0,113 0,169 0,285 0,457 0,610 0,968 +frewr-constant 0,000 0,000 0,000 0,000 0,001 0,005 0,011 0,054 0,113 0,233 0,351 0,571 0,860 1,172 1,600 +gptbuck-worst 0,000 0,000 0,000 0,000 0,004 0,021 0,044 0,253 0,549 1,185 1,819 3,104 4,887 6,582 9,427 +gptbuck-smallrange 0,000 0,000 0,000 0,000 0,001 0,007 0,016 0,090 0,228 0,395 0,652 1,031 1,588 2,055 2,962 +gptbuck-rand 0,000 0,000 0,000 0,000 0,003 0,021 0,044 0,253 0,549 1,185 1,819 3,104 4,887 6,582 9,427 +gptbuck-constant 0,000 0,000 0,000 0,000 0,004 0,008 0,017 0,098 0,206 0,401 0,624 1,055 1,594 2,187 3,065 +magyar-worst 0,000 0,000 0,000 0,000 0,001 0,005 0,014 0,488 1,050 2,000 2,990 5,156 7,263 10,379 13,585 +magyar-smallrange 0,000 0,000 0,000 0,000 0,001 0,005 0,011 0,048 0,100 0,198 0,296 0,493 0,736 0,982 1,371 +magyar-rand 0,000 0,000 0,000 0,000 0,000 0,003 0,006 0,028 0,058 0,117 0,174 0,290 0,434 0,584 0,810 +magyar-constant 0,000 0,000 0,000 0,000 0,001 0,005 0,010 0,050 0,104 0,214 0,321 0,534 0,788 1,075 1,471 +rthier-worst 0,000 0,000 0,000 0,000 0,001 0,007 0,014 0,079 0,203 0,794 0,490 0,899 1,433 1,943 2,782 +rthier-smallrange 0,000 0,000 0,000 0,000 0,001 0,006 0,013 0,069 0,119 0,233 0,464 0,765 1,178 1,609 2,266 +rthier-rand 0,000 0,000 0,000 0,000 0,000 0,004 0,007 0,033 0,072 0,141 0,292 0,474 0,746 0,975 1,453 +rthier-constant 0,000 0,000 0,000 0,000 0,001 0,006 0,012 0,059 0,122 0,253 0,183 0,302 0,437 0,592 0,799 +schwab-worst 0,000 0,000 0,000 0,000 0,004 0,029 0,058 0,340 0,700 1,445 2,242 3,875 5,983 8,124 11,323 +schwab-smallrange 0,000 0,000 0,000 0,000 0,002 0,012 0,022 0,146 0,226 0,485 0,729 1,326 2,042 2,527 3,664 +schwab-rand 0,000 0,000 0,000 0,000 0,004 0,029 0,058 0,340 0,700 1,445 2,242 3,875 5,983 8,124 11,323 +schwab-constant 0,000 0,000 0,000 0,000 0,000 0,000 0,001 0,005 0,010 0,021 0,031 0,052 0,077 0,105 0,144 +ska_copy-worst 0,000 0,000 0,000 0,000 0,003 0,008 0,017 0,512 1,167 2,109 3,234 5,618 7,812 11,243 14,454 +ska_copy-smallrange 0,000 0,000 0,000 0,000 0,001 0,005 0,012 0,072 0,202 0,341 0,508 0,863 1,294 1,732 2,427 +ska_copy-rand 0,000 0,000 0,000 0,000 0,000 0,008 0,017 0,094 0,195 0,391 0,587 0,978 1,466 1,959 2,746 +ska_copy-constant 0,000 0,000 0,000 0,000 0,003 0,005 0,011 0,066 0,148 0,330 0,486 0,823 1,377 1,732 2,344 +std-worst 0,000 0,000 0,000 0,000 0,005 0,029 0,062 0,366 0,762 1,653 2,709 4,856 7,331 10,267 14,572 +std-smallrange 0,000 0,000 0,000 0,000 0,002 0,014 0,029 0,151 0,303 0,587 0,932 1,573 2,340 3,167 4,402 +std-rand 0,000 0,000 0,000 0,000 0,005 0,029 0,062 0,354 0,744 1,507 2,410 4,044 6,273 8,347 11,822 +std-constant 0,000 0,000 0,000 0,000 0,001 0,005 0,007 0,045 0,098 0,177 0,300 0,527 0,798 1,114 1,563 +thier2-worst 0,001 0,006 0,014 0,006 0,009 0,015 0,021 0,086 0,182 0,304 0,481 0,903 1,430 1,955 2,810 +thier2-smallrange 0,000 0,000 0,000 0,000 0,001 0,006 0,014 0,086 0,151 0,295 0,471 0,768 1,176 1,594 2,266 +thier2-rand 0,001 0,003 0,004 0,005 0,008 0,015 0,018 0,054 0,109 0,193 0,294 0,474 0,740 0,987 1,425 +thier2-constant 0,000 0,000 0,000 0,000 0,001 0,002 0,005 0,028 0,058 0,122 0,180 0,304 0,440 0,600 0,812 +thier3-worst 0,000 0,000 0,000 0,000 0,002 0,007 0,014 0,079 0,235 0,802 1,987 6,518 13,123 21,551 32,579 +thier3-smallrange 0,000 0,000 0,000 0,000 0,001 0,006 0,013 0,069 0,118 0,235 0,348 0,584 0,869 1,167 1,624 +thier3-rand 0,000 0,000 0,000 0,000 0,000 0,004 0,007 0,033 0,072 0,143 0,214 0,369 0,543 0,731 1,022 +thier3-constant 0,000 0,000 0,000 0,000 0,002 0,006 0,012 0,059 0,123 0,252 0,378 0,618 0,926 1,266 1,741 +threep-worst 0,000 0,000 0,000 0,000 0,000 0,004 0,013 0,062 0,197 1,164 3,240 6,388 8,592 16,544 15,951 +threep-smallrange 0,000 0,000 0,000 0,000 0,000 0,004 0,008 0,048 0,085 0,162 0,248 0,412 0,657 0,900 1,311 +threep-rand 0,000 0,000 0,000 0,000 0,000 0,003 0,008 0,046 0,101 0,199 0,303 0,510 0,759 1,026 1,581 +threep-constant 0,000 0,000 0,000 0,000 0,000 0,004 0,008 0,041 0,086 0,178 0,271 0,445 0,668 0,923 1,252 diff --git a/results/2025/combinator.inc b/results/2025/combinator.inc new file mode 100644 index 0000000..11f36e8 --- /dev/null +++ b/results/2025/combinator.inc @@ -0,0 +1,68 @@ +# Just . combinator.inc or source combinator.inc +# After that, +echo "You can (manually):" +echo "- header data.csv" +echo "- fill data.csv magyar rand" +echo "Or create comparison for a specific data kind:" +echo "- genfor rand data.csv" +echo "Or just a big default mess:" +echo "- generate data.csv" +echo "To cleanup data for libreoffice calc (hungarian one that is):" +echo "- cleanup data.csv" +echo "" +echo "The generate gives a 'default set' that you can add your missing stuff with further 'fill' commands if needed" + +basefile=5000000.txt + +declare -a definputs=("worst" "smallrange" "rand" "constant") +declare -a sortalgs=(`awk '/worst/{getline; last=1} last{for(x=1;x<=NF;++x) print $x}' ORS=' ' $basefile`) + +# header data.csv +header() { + outfile="$1" + + echo -n 'alg ' > "$outfile" + awk 'BEGINFILE{n=""} {if(n =="") n = $2} ENDFILE{print n}' ORS='\t' `ls -tr --time=birth *.txt` | sed 's/,$//' >> "$outfile" + echo "" >> "$outfile" +} + +# fill data.csv magyar rand +fill() { + outfile="$1" + alg="$2" + input="$3" + + col=$(cat $basefile | grep copy | sed 's/^\s*//' | awk "{out[NR] = \$1} END {for(i=1;i<=NR;i++) if(out[i] == \"$alg\") print i;}" RS=' +') + + echo -n "$alg-$input " >> "$outfile" + awk "/$input/{print \$($col+1)}" ORS='\t' `ls -tr --time=birth *.txt` >> "$outfile" + echo "" >> "$outfile" +} + +# genfor "rand" data.csv +genfor() { + inp="$1" + outfile="$2" + header "$outfile" + for alg in "${sortalgs[@]}"; do + echo -n "Adding $alg-"; echo "$inp" + fill "$outfile" "$alg" "$inp" + done +} + +# generate data.csv +generate() { + outfile="$1" + header "$outfile" + + for inp in "${definputs[@]}"; do + genfor "$inp" "$outfile" + done +} + +# cleanup data.csv prepared.csv +cleanup() { + in="$1" + out="$2" + sed "s/\([0-9][0-9]*\)\.\([0-9][0-9]*\)s/\1,\2/g" "$in" > "$out" +} diff --git a/results/2025/data.csv b/results/2025/data.csv new file mode 100644 index 0000000..cd089e2 --- /dev/null +++ b/results/2025/data.csv @@ -0,0 +1,13 @@ +alg 64 1024 4096 16384 100000 500000 1000000 5000000 10000000 20000000 30000000 50000000 75000000 100000000 140000000 +4pasu-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.008s 0.040s 0.089s 0.173s 0.259s 0.432s 0.650s 0.866s 1.257s +copy-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.002s 0.003s 0.007s 0.011s 0.018s 0.027s 0.036s 0.048s +frewr-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.005s 0.025s 0.056s 0.113s 0.169s 0.285s 0.457s 0.610s 0.968s +gptbuck-rand 0.000s 0.000s 0.000s 0.000s 0.003s 0.021s 0.044s 0.253s 0.549s 1.185s 1.819s 3.104s 4.887s 6.582s 9.427s +magyar-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.006s 0.028s 0.058s 0.117s 0.174s 0.290s 0.434s 0.584s 0.810s +rthier-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.007s 0.033s 0.072s 0.141s 0.292s 0.474s 0.746s 0.975s 1.453s +schwab-rand 0.000s 0.000s 0.000s 0.000s 0.004s 0.029s 0.058s 0.340s 0.700s 1.445s 2.242s 3.875s 5.983s 8.124s 11.323s +ska_copy-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.008s 0.017s 0.094s 0.195s 0.391s 0.587s 0.978s 1.466s 1.959s 2.746s +std-rand 0.000s 0.000s 0.000s 0.000s 0.005s 0.029s 0.062s 0.354s 0.744s 1.507s 2.410s 4.044s 6.273s 8.347s 11.822s +thier2-rand 0.001s 0.003s 0.004s 0.005s 0.008s 0.015s 0.018s 0.054s 0.109s 0.193s 0.294s 0.474s 0.740s 0.987s 1.425s +thier3-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.007s 0.033s 0.072s 0.143s 0.214s 0.369s 0.543s 0.731s 1.022s +threep-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.008s 0.046s 0.101s 0.199s 0.303s 0.510s 0.759s 1.026s 1.581s diff --git a/results/2025/rand.csv b/results/2025/rand.csv new file mode 100644 index 0000000..cd089e2 --- /dev/null +++ b/results/2025/rand.csv @@ -0,0 +1,13 @@ +alg 64 1024 4096 16384 100000 500000 1000000 5000000 10000000 20000000 30000000 50000000 75000000 100000000 140000000 +4pasu-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.008s 0.040s 0.089s 0.173s 0.259s 0.432s 0.650s 0.866s 1.257s +copy-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.002s 0.003s 0.007s 0.011s 0.018s 0.027s 0.036s 0.048s +frewr-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.005s 0.025s 0.056s 0.113s 0.169s 0.285s 0.457s 0.610s 0.968s +gptbuck-rand 0.000s 0.000s 0.000s 0.000s 0.003s 0.021s 0.044s 0.253s 0.549s 1.185s 1.819s 3.104s 4.887s 6.582s 9.427s +magyar-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.006s 0.028s 0.058s 0.117s 0.174s 0.290s 0.434s 0.584s 0.810s +rthier-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.007s 0.033s 0.072s 0.141s 0.292s 0.474s 0.746s 0.975s 1.453s +schwab-rand 0.000s 0.000s 0.000s 0.000s 0.004s 0.029s 0.058s 0.340s 0.700s 1.445s 2.242s 3.875s 5.983s 8.124s 11.323s +ska_copy-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.008s 0.017s 0.094s 0.195s 0.391s 0.587s 0.978s 1.466s 1.959s 2.746s +std-rand 0.000s 0.000s 0.000s 0.000s 0.005s 0.029s 0.062s 0.354s 0.744s 1.507s 2.410s 4.044s 6.273s 8.347s 11.822s +thier2-rand 0.001s 0.003s 0.004s 0.005s 0.008s 0.015s 0.018s 0.054s 0.109s 0.193s 0.294s 0.474s 0.740s 0.987s 1.425s +thier3-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.007s 0.033s 0.072s 0.143s 0.214s 0.369s 0.543s 0.731s 1.022s +threep-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.008s 0.046s 0.101s 0.199s 0.303s 0.510s 0.759s 1.026s 1.581s diff --git a/results/2025/rand_clean.csv b/results/2025/rand_clean.csv new file mode 100644 index 0000000..9d4a3b5 --- /dev/null +++ b/results/2025/rand_clean.csv @@ -0,0 +1,13 @@ +alg 64 1024 4096 16384 100000 500000 1000000 5000000 10000000 20000000 30000000 50000000 75000000 100000000 140000000 +4pasu-rand 0,000 0,000 0,000 0,000 0,000 0,004 0,008 0,040 0,089 0,173 0,259 0,432 0,650 0,866 1,257 +copy-rand 0,000 0,000 0,000 0,000 0,000 0,000 0,000 0,002 0,003 0,007 0,011 0,018 0,027 0,036 0,048 +frewr-rand 0,000 0,000 0,000 0,000 0,000 0,003 0,005 0,025 0,056 0,113 0,169 0,285 0,457 0,610 0,968 +gptbuck-rand 0,000 0,000 0,000 0,000 0,003 0,021 0,044 0,253 0,549 1,185 1,819 3,104 4,887 6,582 9,427 +magyar-rand 0,000 0,000 0,000 0,000 0,000 0,003 0,006 0,028 0,058 0,117 0,174 0,290 0,434 0,584 0,810 +rthier-rand 0,000 0,000 0,000 0,000 0,000 0,004 0,007 0,033 0,072 0,141 0,292 0,474 0,746 0,975 1,453 +schwab-rand 0,000 0,000 0,000 0,000 0,004 0,029 0,058 0,340 0,700 1,445 2,242 3,875 5,983 8,124 11,323 +ska_copy-rand 0,000 0,000 0,000 0,000 0,000 0,008 0,017 0,094 0,195 0,391 0,587 0,978 1,466 1,959 2,746 +std-rand 0,000 0,000 0,000 0,000 0,005 0,029 0,062 0,354 0,744 1,507 2,410 4,044 6,273 8,347 11,822 +thier2-rand 0,001 0,003 0,004 0,005 0,008 0,015 0,018 0,054 0,109 0,193 0,294 0,474 0,740 0,987 1,425 +thier3-rand 0,000 0,000 0,000 0,000 0,000 0,004 0,007 0,033 0,072 0,143 0,214 0,369 0,543 0,731 1,022 +threep-rand 0,000 0,000 0,000 0,000 0,000 0,003 0,008 0,046 0,101 0,199 0,303 0,510 0,759 1,026 1,581 diff --git a/results/2025/regulars.csv b/results/2025/regulars.csv new file mode 100644 index 0000000..1bda20d --- /dev/null +++ b/results/2025/regulars.csv @@ -0,0 +1,5 @@ +alg 64 1024 4096 16384 100000 500000 1000000 5000000 10000000 20000000 30000000 50000000 75000000 100000000 140000000 +schwab-rand 0.000s 0.000s 0.000s 0.000s 0.004s 0.029s 0.058s 0.340s 0.700s 1.445s 2.242s 3.875s 5.983s 8.124s 11.323s +std-rand 0.000s 0.000s 0.000s 0.000s 0.005s 0.029s 0.062s 0.354s 0.744s 1.507s 2.410s 4.044s 6.273s 8.347s 11.822s +rthier-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.007s 0.033s 0.072s 0.141s 0.292s 0.474s 0.746s 0.975s 1.453s +ska_copy-rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.008s 0.017s 0.094s 0.195s 0.391s 0.587s 0.978s 1.466s 1.959s 2.746s diff --git a/results/2025/regulars_clean.csv b/results/2025/regulars_clean.csv new file mode 100644 index 0000000..eb8fdd2 --- /dev/null +++ b/results/2025/regulars_clean.csv @@ -0,0 +1,5 @@ +alg 64 1024 4096 16384 100000 500000 1000000 5000000 10000000 20000000 30000000 50000000 75000000 100000000 140000000 +schwab-rand 0,000 0,000 0,000 0,000 0,004 0,029 0,058 0,340 0,700 1,445 2,242 3,875 5,983 8,124 11,323 +std-rand 0,000 0,000 0,000 0,000 0,005 0,029 0,062 0,354 0,744 1,507 2,410 4,044 6,273 8,347 11,822 +rthier-rand 0,000 0,000 0,000 0,000 0,000 0,004 0,007 0,033 0,072 0,141 0,292 0,474 0,746 0,975 1,453 +ska_copy-rand 0,000 0,000 0,000 0,000 0,000 0,008 0,017 0,094 0,195 0,391 0,587 0,978 1,466 1,959 2,746 diff --git a/results/2025/steps.sh b/results/2025/steps.sh new file mode 100644 index 0000000..65768cb --- /dev/null +++ b/results/2025/steps.sh @@ -0,0 +1,144 @@ +#!/bin/bash + +# We have a bunch of these files +cat 5000000.txt +ls *.txt + +# And we want graph-able output data like this: +# alg\n 10 100 1000.. +# magyar-rand 0,005 0,03 0,3... +# magyar-worst 0,007 0,06 0,4... +# 4pasu-rand 0,017 0,11 0,7... +# 4pasu-worst 0,0237 0,42 1,3... + +# One can get started thinking grep + sed as usual, but it can become tedious +# At least we can grab the number of elements from the file itself (ensures filename is not bad) +cat 5000000.txt | grep Sorting | sed "s/.* \([0-9]*\) .*/\1/" + +# But enter AWK! +awk '{print $1}' 5000000.txt +awk '{if(n =="") n = $2} END{print n}' 5000000.txt +awk 'BEGIN{getline; print $2}' 5000000.txt + +# And to be fancy (also showing ls can use creation time nowadays, check without to see bad stuff) +awk 'BEGINFILE{n=""} {if(n =="") n = $2} ENDFILE{print n}' `ls -t --time=birth *.txt` +awk 'BEGINFILE{n=""} {if(n =="") n = $2} ENDFILE{print n}' `ls -tr --time=birth *.txt` +awk 'BEGINFILE{n=""} {if(n =="") n = $2} ENDFILE{print n}' `ls -t *.txt` + +###################################### +# Column to row translation with AWK # +###################################### + +# To get every second field with awk its really simple. OFS is output sep, FS is input sep +awk '{print $2}' 5000000.txt + +# This is closer to what we want, because the last row starts elsewhere, but duplicates junk +awk '{print $2; last=$1} END {print last}' 5000000.txt + +# This way we never print while processing line until END, just manually afterwards with loop - what we want +awk '{out[NR]=$2; first=$1} END {out[NR]=first; for(i=1;i<=NR;i++) print out[i]}' 5000000.txt + +# This leaves out the first few lines but is the same +awk '{out[NR]=$2; first=$1} END {out[NR]=first; for(i=3;i<=NR;i++) print out[i]}' 5000000.txt + +# This way, we write output as tab-separated +awk '{out[NR]=$2; first=$1} END {out[NR]=first; for(i=3;i<=NR;i++) print out[i]}' ORS='\t' 5000000.tx +# Alternative: can change ORS (output record separator) on the fly. You can do with OFS and FS too and RS too! +awk '{out[NR]=$2; first=$1} END {ORS="\t"; out[NR]=first; for(i=3;i<=NR;i++) print out[i]}' 5000000.txt + +# I wanted to omit empty lines of the input +awk '{out[NR]=$2; first=$1} END {out[NR]=first; for(i=3;i<=NR;i++) if(out[i] != "") print out[i]}' ORS='\t' 5000000.txt + +# A way to store the first lines second column (n) into the last position near alg name +awk '{if(n == "") n = $2; out[NR]=$2; first=$1} END {out[NR]=first; for(i=3;i<=NR;i++) if(out[i] != "") print out[i]; print n}' ORS='\t' 5000000.txt + +# NOT what I want (but want to show) +awk '{if(n == "") n = $2; out[NR]=$2; first=$1} END {out[NR]=first; for(i=3;i<=NR;i++) if(out[i] != "") print out[i] n}' ORS='\t' 5000000.txt +awk '{if(n == "") n = $2; out[NR]=$2; first=$1} END {out[NR]=first; for(i=3;i $outfile + awk 'BEGINFILE{n=""} {if(n =="") n = $2} ENDFILE{print n}' ORS='\t' `ls -tr --time=birth *.txt` | sed 's/,$//' >> $outfile +} +header data.csv + +# Just look at this awsome... we do not even need to leave AWK to save which is the column index!!! +awk "/worst/{getline; last=1} last{for(i=1;i<=NF;++i) if (\$i == \"$alg\") col=i} END{print col}" 5000000.txt + +# Lets put together really this too for how to fill files + +basefile=5000000.txt +# fill data.csv magyar rand +fill() { + outfile=$1 + alg=$2 + input=$3 + + col=$(cat $basefile | grep copy | sed 's/^\s*//' | awk "{out[NR] = \$1} END {for(i=1;i<=NR;i++) if(out[i] == \"$alg\") print i;}" RS=' +') + + echo -n "$alg-$input " >> $outfile + awk "/$input/{print \$($col+1)}" ORS='\t' `ls -tr --time=birth *.txt` >> $outfile + echo "" >> $outfile +} + +# See: combinator.inc diff --git a/results/2025_clang/100000.txt b/results/2025_clang/100000.txt new file mode 100644 index 0000000..ece7754 --- /dev/null +++ b/results/2025_clang/100000.txt @@ -0,0 +1,14 @@ +Sorting 100000 elements: + + constant 0.001s 0.000s 0.001s 0.001s 0.001s 0.001s 0.000s 0.001s 0.001s 0.000s 0.001s 0.000s + asc 0.000s 0.000s 0.000s 0.001s 0.000s 0.001s 0.001s 0.000s 0.000s 0.007s 0.001s 0.000s + desc 0.001s 0.000s 0.000s 0.001s 0.000s 0.001s 0.001s 0.000s 0.000s 0.007s 0.001s 0.000s + ascasc 0.001s 0.000s 0.000s 0.001s 0.000s 0.001s 0.002s 0.000s 0.004s 0.006s 0.001s 0.000s + ascdesc 0.000s 0.000s 0.000s 0.001s 0.000s 0.001s 0.001s 0.000s 0.003s 0.007s 0.001s 0.000s + descasc 0.000s 0.000s 0.000s 0.001s 0.000s 0.001s 0.001s 0.000s 0.000s 0.007s 0.001s 0.000s + descdesc 0.001s 0.000s 0.000s 0.001s 0.000s 0.001s 0.002s 0.000s 0.005s 0.001s 0.001s 0.000s +smallrange 0.001s 0.000s 0.001s 0.001s 0.001s 0.001s 0.002s 0.000s 0.002s 0.001s 0.001s 0.000s + rand 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s 0.003s 0.000s 0.005s 0.006s 0.000s 0.000s + + worst 0.001s 0.000s 0.001s 0.003s 0.001s 0.001s 0.003s 0.001s 0.005s 0.007s 0.001s 0.000s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/1000000.txt b/results/2025_clang/1000000.txt new file mode 100644 index 0000000..49ed4d6 --- /dev/null +++ b/results/2025_clang/1000000.txt @@ -0,0 +1,14 @@ +Sorting 1000000 elements: + + constant 0.016s 0.000s 0.011s 0.016s 0.010s 0.013s 0.000s 0.011s 0.008s 0.005s 0.012s 0.008s + asc 0.015s 0.000s 0.012s 0.013s 0.013s 0.011s 0.013s 0.014s 0.009s 0.018s 0.011s 0.011s + desc 0.014s 0.000s 0.011s 0.012s 0.012s 0.011s 0.024s 0.015s 0.007s 0.018s 0.011s 0.010s + ascasc 0.012s 0.000s 0.010s 0.024s 0.011s 0.013s 0.022s 0.014s 0.054s 0.018s 0.013s 0.011s + ascdesc 0.013s 0.000s 0.011s 0.014s 0.012s 0.011s 0.019s 0.013s 0.033s 0.018s 0.011s 0.010s + descasc 0.014s 0.000s 0.011s 0.012s 0.013s 0.011s 0.020s 0.014s 0.008s 0.018s 0.011s 0.010s + descdesc 0.012s 0.000s 0.009s 0.027s 0.011s 0.014s 0.025s 0.015s 0.059s 0.011s 0.014s 0.011s +smallrange 0.016s 0.000s 0.010s 0.015s 0.011s 0.014s 0.023s 0.012s 0.029s 0.014s 0.014s 0.008s + rand 0.008s 0.000s 0.004s 0.042s 0.006s 0.007s 0.042s 0.017s 0.063s 0.015s 0.007s 0.008s + + worst 0.016s 0.000s 0.012s 0.042s 0.013s 0.014s 0.042s 0.017s 0.063s 0.018s 0.014s 0.011s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/10000000.txt b/results/2025_clang/10000000.txt new file mode 100644 index 0000000..ef392b0 --- /dev/null +++ b/results/2025_clang/10000000.txt @@ -0,0 +1,14 @@ +Sorting 10000000 elements: + + constant 0.174s 0.003s 0.115s 0.197s 0.105s 0.127s 0.008s 0.138s 0.105s 0.062s 0.128s 0.088s + asc 0.990s 0.004s 0.945s 0.185s 0.948s 0.148s 0.184s 0.966s 0.120s 0.133s 0.149s 0.135s + desc 1.067s 0.003s 1.016s 0.168s 1.022s 0.147s 0.282s 1.034s 0.087s 0.131s 0.147s 0.164s + ascasc 0.990s 0.003s 0.961s 0.354s 0.945s 0.196s 0.265s 1.016s 0.651s 0.151s 0.171s 0.170s + ascdesc 1.064s 0.003s 1.024s 0.179s 1.024s 0.148s 0.225s 1.080s 0.407s 0.133s 0.147s 0.157s + descasc 1.001s 0.003s 0.952s 0.175s 0.948s 0.148s 0.230s 1.007s 0.104s 0.132s 0.148s 0.132s + descdesc 1.076s 0.003s 1.039s 0.404s 1.048s 0.207s 0.289s 1.087s 0.684s 0.151s 0.209s 0.121s +smallrange 0.172s 0.003s 0.103s 0.181s 0.097s 0.121s 0.211s 0.145s 0.303s 0.155s 0.120s 0.083s + rand 0.086s 0.003s 0.050s 0.534s 0.053s 0.069s 0.520s 0.190s 0.753s 0.094s 0.069s 0.097s + + worst 1.076s 0.004s 1.039s 0.534s 1.048s 0.207s 0.520s 1.087s 0.753s 0.155s 0.209s 0.170s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/100000000.txt b/results/2025_clang/100000000.txt new file mode 100644 index 0000000..827be7b --- /dev/null +++ b/results/2025_clang/100000000.txt @@ -0,0 +1,14 @@ +Sorting 100000000 elements: + + constant 1.757s 0.033s 1.151s 2.067s 1.057s 0.619s 0.079s 1.503s 1.249s 0.618s 1.280s 0.895s + asc 10.262s 0.031s 9.851s 1.963s 9.854s 1.477s 2.185s 10.821s 1.310s 1.474s 11.760s 13.027s + desc 10.298s 0.031s 10.093s 1.717s 10.026s 1.472s 3.174s 10.789s 0.963s 1.480s 11.814s 13.174s + ascasc 10.713s 0.031s 10.375s 4.254s 10.361s 1.681s 2.947s 11.307s 7.512s 1.682s 8.624s 16.579s + ascdesc 10.115s 0.032s 9.833s 1.828s 9.830s 1.478s 2.771s 10.783s 4.280s 1.482s 11.757s 13.103s + descasc 10.132s 0.033s 9.822s 1.829s 9.839s 1.476s 2.715s 10.648s 1.150s 1.478s 11.696s 13.239s + descdesc 10.264s 0.031s 10.009s 5.308s 9.998s 1.936s 3.386s 10.883s 7.901s 1.943s 21.489s 16.465s +smallrange 1.721s 0.036s 1.065s 1.886s 0.990s 1.596s 2.252s 1.585s 3.357s 1.612s 1.184s 0.903s + rand 0.871s 0.036s 0.517s 6.431s 0.527s 0.959s 5.802s 1.951s 8.432s 0.937s 0.709s 1.017s + + worst 10.713s 0.036s 10.375s 6.431s 10.361s 1.936s 5.802s 11.307s 8.432s 1.943s 21.489s 16.579s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/1024.txt b/results/2025_clang/1024.txt new file mode 100644 index 0000000..7434d09 --- /dev/null +++ b/results/2025_clang/1024.txt @@ -0,0 +1,14 @@ +Sorting 1024 elements: + + constant 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + asc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + desc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.002s 0.000s 0.000s + ascasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.001s 0.000s 0.000s + ascdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.002s 0.000s 0.000s + descasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.002s 0.000s 0.000s + descdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s +smallrange 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.002s 0.000s 0.000s + + worst 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/140000000.txt b/results/2025_clang/140000000.txt new file mode 100644 index 0000000..6c8c748 --- /dev/null +++ b/results/2025_clang/140000000.txt @@ -0,0 +1,14 @@ +Sorting 140000000 elements: + + constant 2.464s 0.044s 1.613s 2.964s 1.482s 0.874s 0.111s 2.351s 1.777s 0.867s 1.800s 1.257s + asc 13.853s 0.044s 13.469s 2.635s 13.493s 2.166s 3.172s 14.318s 1.786s 2.176s 22.303s 14.668s + desc 13.964s 0.044s 13.576s 2.389s 13.615s 2.156s 4.731s 14.406s 1.410s 2.163s 22.294s 14.715s + ascasc 13.657s 0.044s 13.257s 6.575s 13.244s 2.445s 4.220s 14.231s 10.555s 2.447s 16.736s 15.858s + ascdesc 13.780s 0.044s 13.412s 2.521s 13.430s 2.168s 3.969s 14.265s 6.016s 2.166s 22.336s 14.962s + descasc 13.818s 0.044s 13.441s 2.512s 13.494s 2.170s 4.086s 14.369s 1.616s 2.173s 22.276s 14.906s + descdesc 13.050s 0.044s 12.675s 7.542s 12.649s 2.825s 4.729s 13.674s 11.134s 2.833s 32.734s 15.176s +smallrange 2.410s 0.048s 1.474s 2.736s 1.336s 2.290s 3.381s 2.360s 4.660s 2.298s 1.660s 1.301s + rand 1.289s 0.049s 0.733s 9.196s 0.736s 1.339s 8.734s 2.699s 11.929s 1.430s 0.998s 1.412s + + worst 13.964s 0.049s 13.576s 9.196s 13.615s 2.825s 8.734s 14.406s 11.929s 2.833s 32.734s 15.858s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/16384.txt b/results/2025_clang/16384.txt new file mode 100644 index 0000000..02d0762 --- /dev/null +++ b/results/2025_clang/16384.txt @@ -0,0 +1,14 @@ +Sorting 16384 elements: + + constant 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + asc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.011s 0.000s 0.000s + desc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.000s 0.000s + ascasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.000s 0.000s + ascdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.000s 0.000s + descasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.000s 0.000s + descdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s +smallrange 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.004s 0.000s 0.000s + + worst 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.011s 0.000s 0.000s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/20000000.txt b/results/2025_clang/20000000.txt new file mode 100644 index 0000000..cd84ce5 --- /dev/null +++ b/results/2025_clang/20000000.txt @@ -0,0 +1,14 @@ +Sorting 20000000 elements: + + constant 0.341s 0.006s 0.225s 0.396s 0.205s 0.251s 0.015s 0.240s 0.217s 0.123s 0.250s 0.174s + asc 1.856s 0.006s 1.759s 0.348s 1.782s 0.353s 0.379s 1.977s 0.238s 0.252s 0.352s 1.100s + desc 1.966s 0.006s 1.846s 0.328s 1.843s 0.351s 0.570s 2.037s 0.176s 0.254s 0.347s 1.137s + ascasc 2.087s 0.006s 1.951s 0.722s 2.004s 0.375s 0.662s 2.143s 1.371s 0.301s 0.375s 0.353s + ascdesc 1.732s 0.006s 1.672s 0.345s 1.676s 0.359s 0.482s 1.825s 0.826s 0.257s 0.359s 1.130s + descasc 1.669s 0.006s 1.639s 0.344s 1.634s 0.358s 0.473s 1.748s 0.219s 0.259s 0.358s 1.130s + descdesc 1.857s 0.006s 1.764s 0.889s 1.778s 0.805s 0.585s 1.845s 1.413s 0.311s 0.807s 0.374s +smallrange 0.345s 0.007s 0.206s 0.376s 0.194s 0.238s 0.465s 0.291s 0.627s 0.288s 0.238s 0.163s + rand 0.172s 0.007s 0.101s 1.155s 0.103s 0.140s 1.073s 0.382s 1.536s 0.184s 0.141s 0.196s + + worst 2.087s 0.007s 1.951s 1.155s 2.004s 0.805s 1.073s 2.143s 1.536s 0.311s 0.807s 1.137s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/30000000.txt b/results/2025_clang/30000000.txt new file mode 100644 index 0000000..d9ac21c --- /dev/null +++ b/results/2025_clang/30000000.txt @@ -0,0 +1,14 @@ +Sorting 30000000 elements: + + constant 0.513s 0.009s 0.338s 0.579s 0.373s 0.185s 0.023s 0.406s 0.329s 0.187s 0.379s 0.261s + asc 2.916s 0.009s 2.788s 0.561s 2.802s 0.384s 0.606s 3.093s 0.383s 0.386s 0.717s 3.093s + desc 2.983s 0.009s 2.853s 0.526s 2.865s 0.381s 0.865s 3.164s 0.268s 0.384s 0.718s 3.200s + ascasc 3.109s 0.009s 2.991s 1.184s 3.006s 0.453s 0.855s 3.143s 2.117s 0.453s 0.728s 1.155s + ascdesc 2.820s 0.009s 2.686s 0.543s 2.710s 0.384s 0.726s 2.981s 1.252s 0.388s 0.722s 3.171s + descasc 2.745s 0.009s 2.645s 0.541s 2.661s 0.386s 0.721s 2.922s 0.317s 0.386s 0.720s 3.138s + descdesc 2.875s 0.009s 2.737s 1.464s 2.745s 0.483s 0.935s 2.922s 2.215s 0.485s 1.986s 1.154s +smallrange 0.519s 0.011s 0.311s 0.599s 0.288s 0.469s 0.734s 0.487s 0.981s 0.467s 0.354s 0.242s + rand 0.259s 0.011s 0.152s 1.767s 0.155s 0.270s 1.632s 0.573s 2.406s 0.273s 0.211s 0.297s + + worst 3.109s 0.011s 2.991s 1.767s 3.006s 0.483s 1.632s 3.164s 2.406s 0.485s 1.986s 3.200s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/4096.txt b/results/2025_clang/4096.txt new file mode 100644 index 0000000..c1c9840 --- /dev/null +++ b/results/2025_clang/4096.txt @@ -0,0 +1,14 @@ +Sorting 4096 elements: + + constant 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + asc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + desc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + ascasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.002s 0.000s 0.000s + ascdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + descasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + descdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s +smallrange 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + + worst 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.003s 0.000s 0.000s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/500000.txt b/results/2025_clang/500000.txt new file mode 100644 index 0000000..d70c1a2 --- /dev/null +++ b/results/2025_clang/500000.txt @@ -0,0 +1,14 @@ +Sorting 500000 elements: + + constant 0.008s 0.000s 0.005s 0.008s 0.005s 0.006s 0.000s 0.005s 0.008s 0.002s 0.006s 0.004s + asc 0.005s 0.000s 0.004s 0.007s 0.005s 0.006s 0.007s 0.005s 0.004s 0.013s 0.006s 0.003s + desc 0.005s 0.000s 0.004s 0.006s 0.005s 0.006s 0.011s 0.006s 0.003s 0.013s 0.006s 0.003s + ascasc 0.005s 0.000s 0.005s 0.010s 0.005s 0.006s 0.011s 0.006s 0.025s 0.012s 0.006s 0.004s + ascdesc 0.005s 0.000s 0.004s 0.007s 0.005s 0.006s 0.009s 0.006s 0.016s 0.013s 0.006s 0.003s + descasc 0.005s 0.000s 0.004s 0.007s 0.005s 0.006s 0.009s 0.005s 0.003s 0.013s 0.006s 0.003s + descdesc 0.005s 0.000s 0.005s 0.012s 0.005s 0.007s 0.011s 0.006s 0.029s 0.005s 0.007s 0.004s +smallrange 0.008s 0.000s 0.005s 0.007s 0.005s 0.006s 0.012s 0.006s 0.015s 0.006s 0.006s 0.004s + rand 0.004s 0.000s 0.003s 0.019s 0.004s 0.004s 0.019s 0.007s 0.029s 0.011s 0.004s 0.006s + + worst 0.008s 0.000s 0.005s 0.019s 0.005s 0.007s 0.019s 0.007s 0.029s 0.013s 0.007s 0.006s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/5000000.txt b/results/2025_clang/5000000.txt new file mode 100644 index 0000000..08493c7 --- /dev/null +++ b/results/2025_clang/5000000.txt @@ -0,0 +1,14 @@ +Sorting 5000000 elements: + + constant 0.083s 0.002s 0.055s 0.107s 0.051s 0.062s 0.004s 0.071s 0.049s 0.033s 0.065s 0.042s + asc 0.339s 0.002s 0.404s 0.080s 0.406s 0.064s 0.086s 0.420s 0.056s 0.068s 0.064s 0.038s + desc 0.424s 0.002s 0.414s 0.076s 0.376s 0.064s 0.133s 0.430s 0.042s 0.068s 0.064s 0.039s + ascasc 0.498s 0.002s 0.480s 0.136s 0.483s 0.073s 0.125s 0.499s 0.313s 0.072s 0.074s 0.061s + ascdesc 0.424s 0.002s 0.389s 0.078s 0.412s 0.063s 0.116s 0.427s 0.196s 0.067s 0.064s 0.039s + descasc 0.496s 0.002s 0.484s 0.078s 0.485s 0.063s 0.109s 0.505s 0.049s 0.067s 0.063s 0.038s + descdesc 0.424s 0.002s 0.368s 0.177s 0.413s 0.083s 0.144s 0.426s 0.330s 0.074s 0.083s 0.055s +smallrange 0.083s 0.002s 0.049s 0.077s 0.048s 0.059s 0.115s 0.063s 0.161s 0.077s 0.059s 0.039s + rand 0.041s 0.002s 0.023s 0.246s 0.026s 0.033s 0.241s 0.092s 0.358s 0.049s 0.033s 0.046s + + worst 0.498s 0.002s 0.484s 0.246s 0.485s 0.083s 0.241s 0.505s 0.358s 0.077s 0.083s 0.061s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/50000000.txt b/results/2025_clang/50000000.txt new file mode 100644 index 0000000..b100956 --- /dev/null +++ b/results/2025_clang/50000000.txt @@ -0,0 +1,14 @@ +Sorting 50000000 elements: + + constant 0.859s 0.016s 0.561s 0.997s 0.518s 0.311s 0.038s 0.647s 0.581s 0.310s 0.625s 0.435s + asc 5.233s 0.015s 5.060s 0.902s 5.059s 0.651s 1.036s 5.532s 0.612s 0.649s 2.326s 6.184s + desc 5.273s 0.015s 5.127s 0.811s 5.116s 0.649s 1.465s 5.582s 0.455s 0.645s 2.337s 6.388s + ascasc 4.896s 0.017s 4.659s 2.176s 4.726s 0.754s 1.400s 5.041s 3.531s 0.847s 1.872s 4.860s + ascdesc 5.252s 0.015s 5.127s 0.878s 5.121s 0.667s 1.367s 5.474s 2.269s 0.667s 2.370s 6.339s + descasc 5.244s 0.016s 5.099s 0.875s 5.075s 0.667s 1.270s 5.570s 0.552s 0.667s 2.345s 6.274s + descdesc 4.903s 0.015s 4.676s 2.487s 4.697s 0.904s 1.618s 5.057s 3.811s 0.903s 6.494s 5.039s +smallrange 0.865s 0.018s 0.516s 0.937s 0.481s 0.776s 1.132s 0.744s 1.651s 0.780s 0.590s 0.407s + rand 0.438s 0.018s 0.256s 3.011s 0.261s 0.464s 2.761s 0.958s 4.072s 0.506s 0.358s 0.501s + + worst 5.273s 0.018s 5.127s 3.011s 5.121s 0.904s 2.761s 5.582s 4.072s 0.903s 6.494s 6.388s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/64.txt b/results/2025_clang/64.txt new file mode 100644 index 0000000..8676e81 --- /dev/null +++ b/results/2025_clang/64.txt @@ -0,0 +1,14 @@ +Sorting 64 elements: + + constant 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + asc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + desc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + ascasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + ascdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + descasc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + descdesc 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s +smallrange 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + rand 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + + worst 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s 0.000s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/2025_clang/75000000.txt b/results/2025_clang/75000000.txt new file mode 100644 index 0000000..0e72238 --- /dev/null +++ b/results/2025_clang/75000000.txt @@ -0,0 +1,14 @@ +Sorting 75000000 elements: + + constant 1.283s 0.023s 0.843s 1.529s 0.774s 0.457s 0.058s 1.090s 0.898s 0.499s 0.951s 0.652s + asc 7.318s 0.023s 7.066s 1.339s 7.096s 1.025s 1.560s 7.651s 0.888s 1.026s 5.243s 8.446s + desc 7.452s 0.023s 7.237s 1.244s 7.260s 1.041s 2.491s 7.708s 0.684s 1.045s 5.245s 8.496s + ascasc 7.444s 0.023s 7.224s 3.091s 7.229s 1.204s 2.213s 7.766s 5.466s 1.204s 3.698s 8.572s + ascdesc 7.335s 0.023s 7.129s 1.320s 7.204s 1.048s 2.033s 7.762s 3.180s 1.048s 5.239s 8.380s + descasc 7.325s 0.023s 7.170s 1.319s 7.191s 1.048s 2.033s 7.704s 0.821s 1.045s 5.233s 8.343s + descdesc 7.115s 0.025s 6.887s 3.881s 6.877s 1.438s 2.371s 7.448s 5.687s 1.442s 13.208s 8.654s +smallrange 1.292s 0.027s 0.775s 1.476s 0.718s 1.203s 1.956s 1.136s 2.472s 1.187s 0.888s 0.648s + rand 0.651s 0.027s 0.386s 4.761s 0.395s 0.695s 4.261s 1.440s 6.342s 0.697s 0.530s 0.756s + + worst 7.452s 0.027s 7.237s 4.761s 7.260s 1.438s 4.261s 7.766s 6.342s 1.442s 13.208s 8.654s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/30000000r b/results/30000000r new file mode 100644 index 0000000..337f9c7 --- /dev/null +++ b/results/30000000r @@ -0,0 +1,14 @@ +Sorting 30000000 elements: + + constant 0.536s 0.009s 0.340s 0.584s 0.314s 0.528s 0.031s 0.497s 0.271s 0.180s 0.368s 0.263s + asc 2.940s 0.009s 2.841s 0.610s 2.774s 0.738s 0.467s 3.245s 0.354s 0.370s 0.698s 3.221s + desc 2.883s 0.009s 2.784s 0.571s 2.854s 0.748s 0.817s 3.340s 0.263s 0.454s 0.757s 3.089s + ascasc 3.175s 0.009s 3.082s 1.210s 2.964s 0.754s 0.797s 3.416s 2.532s 0.446s 0.728s 1.153s + ascdesc 2.755s 0.009s 2.663s 0.607s 2.703s 0.731s 0.635s 3.220s 1.709s 0.377s 0.702s 3.086s + descasc 2.819s 0.009s 2.710s 0.607s 2.672s 0.738s 0.660s 3.152s 0.318s 0.376s 0.705s 3.199s + descdesc 2.809s 0.009s 2.669s 1.425s 2.758s 1.542s 0.831s 3.243s 2.666s 0.476s 1.981s 1.148s +smallrange 0.516s 0.011s 0.314s 0.630s 0.295s 0.509s 0.751s 0.641s 0.920s 0.463s 0.347s 0.247s + rand 0.259s 0.011s 0.169s 1.803s 0.174s 0.376s 2.206s 0.798s 2.371s 0.294s 0.216s 0.302s + + worst 3.175s 0.011s 3.082s 1.803s 2.964s 1.542s 2.206s 3.416s 2.666s 0.476s 1.981s 3.221s + 4pasu copy frewr gptbuck magyar rthier schwab ska_copy std thier2 thier3 threep diff --git a/results/measurement_time b/results/measurement_time new file mode 100644 index 0000000..068b359 --- /dev/null +++ b/results/measurement_time @@ -0,0 +1,5 @@ +[prenex@magosit-laptop magyarsort]$ time ./measure_matrix.sh + +real 36m31,057s +user 35m58,318s +sys 0m24,470s diff --git a/results/regi_frewr.jpeg b/results/regi_frewr.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..8278ddf79800b3585505fe5b615bd778a10e0c31 GIT binary patch literal 56041 zcmcG#Wk6lKwl=(gg}WDuyGwCcxE6P(xKrHS-JRma-Mtitq6;syxVyW)>~rqjr~AF% zzx#ff`H_{3HJ&6RBQwc-^1AT420)XR_$UE@fB*m>-X6f~Z$K~r`riQt1{w|y77h*( z0UjO!5giHn?Lo&!!$fS0ZG2!HWO)>PM;)D=#3c^70oQX$q+zX$`5= zlM^(xJoaePvgR2}@AN(P=u;7(ujLUZ_yF`b(gn1pz@fbVRt^9_%NW1Uu8TpryI=U8 zWwM$Dkz%wrW*J@G*i9^0;B9 zcPEoZci}k?RK9$v)iewhO*93ObyW7l_iU4ScK>PDTMCxR9}sHGN2Gp~`=wdFXSaMH zEM<76xa5+p1wD`G@ZN8sD%6#Ht*Bo+`T_`c4Jec0b{Di97M!igk&c1+aef;L2{k#Fa@# zJ1ZXB0cy_bZ5{%mZ^m2;zku&cI22b08y5NWTEE?eGeVNfRLp!Uc;^*R=oA=oH2W?<}aG!)+h8rF=&2xoL@yMq7P=Iec&8uwq%H zO}FzUjw%yZs`d{^h)>-C+*QW`NZpZ2Sl?WQ308;{w0{5vt`~7*<;^dI5bEWIhxmV} z9j<;1KvlLEw(MCFaMXhA44>dl#ay{NJCOIpW{l-_mALHzIim2PpN}V^WJMe<`~d;@ z@O3V_VD1%w#OEnWuCp@HBU-)7YC3ZU-jtF@kl}xqT8*Hhus+*eI@< zh=6;L+HfkQvMFYE)Wcn4ggLe>FYT~5V!oJGi@^5SlR4N`Byam5jg-kIt2FWJ47@8j zZT|-kG>F4YX8W)^{)h>--tPK`5NCdp>Ih_7Q6?$&7fw@^c{Y82=a!n|@} zyx28-vmN?{56m!}$?6kR&wUc%34az7$HsuqKxouWnwZr;rBwO(WAU4X2dhWnN_UE}0WewYvG2j`tu3+)Bj)o>@it4tt;&>Y61 zh2~%(%uSXoKDLtJ!4l}l4+tCXCmO}ut@nh`wjJ;@hok;OHDqV3tZ$90VyYif8`GFl zDws0Q;nTQdwp{F3oO35n3qcs34z@ha!I=Yg`bhiSXQXAifvgzmA}#YP@M4V#WU|VG z#?BF?j0@Lq!lq$pD(ncUXK91!W*1aUiXDzoW(d30X?l~C~L~pDzMEEn_MRHI!40u z>#%O^SaRErcgT&iSt-&n`VIl?G>bV$wQUBX~n$&71n(tH$HS8_G*oATWe8KpHjTC?2jOHs{2+3 z1djaa7WPziuzl)L`AIJF%>@k#aH^ROA)y8Nk*1~D~#JBxqS8x zb6RPtXR_;jhx;9RMhZtgUpbhCo@ zZEu$H75!5DkEu|{Zq_C%Z8n2WQfW)^HN`sYB>d)@LPhv-GroGRt^B(2D6q56JqfAu+uO*S6JEPd=!$*QU_19Oitf4N5jSt(;D z4<0bSsrFe%%>PgQ5b^?LhiKAY8-RMKAECi}-UlN8=Ss5mmY57t;Zc%iv5l0;BTd`j!MBoCawURVL3-U>-ChY1`ZK!(TwM;Vs9a4gX{_DeA6f5sUF ztn)bTOJq>PILl=;%ViAvJl;9lv7C~(PP{@8c z0KDuc*p$b*l%~NPVSyS2ZGs5`Q2zmX4(6T$bNi!m7r=rbV?d&Dpi2di(bzv^ERJb>YRnEhM~&asa{@447SXg5BXCa0Cuu zEC(>ViUNT#nA;JRp-urbGr&;$4;eT^d62&lC@+FwLk?6R_0~(kbwt30#9Jr)r&gO| zZ#6+X4}Lc@igpnPcM-|b*Uv3F^p7f?^$|1-F|ds?IE})Qj}owsQe4Ua6~P27f9Saw z2gReZd>yCR9N_Ljra6-UDGGzoW3cj2{B6^!KYhs@;rH)nxtrgq*0p9 zZoofe{*?dUrRxSjDk$um;-If1SoO#R=Me;#up}1}NPqU^TY6LP=`ff6v4(pl?&%fq z=?wgaO8oSH30?N-Uu>>EB7xX8{Vs0pTEKd5IscU5Z`4WT%aDI^%QTT}`e)I9EcgE` ze}Wqm09cD-7apJp7-qnTBk2ht2tr|ij04p519~Hn3I_fQv;oZU7wG7}eh&SQn*6n6 zLVMdV0U&^o5RlMNz_%m-5()?bfX2YYLPN(URU{!Jr(pfSAwuPmeGk*MW{RTl-_)df+qO+4JQ)%dc7qPHY*Nii<&WNjEmp#mZ zq(mT@syu*7UJ3?J5pR95T+aFen!KtMCKwI#L&j}aWV1Q>+k(yv|5u6m;$(>3JU@jm z$de=ILq0&8%s_AHS1|!HH3iSEWYSQLP!7Xhwx9PzLG(3}XQph!`c>q+1S&>9T?Dk= zqoKSwjU5eh-_xH5?D9t9Rf;zkR!Q1Vx$XKd20P6L6OHIKJ}nmxX4UMqu;eEP?h(gRs(`G`SQvSY(q)hcrf4Lx1`gi$xFeimMCS!)>SddHy> z&u6i^nNDX5<=wr>G^MGb!uTT@)Mc7nnt^i~ERU8u&7xK>N7}Rg7k%QaC?RMAh$mFV zP6l=Jc{7I}xOZJ4lTeNKhbU9KFF50|R$2@E&rhr;7-%U5LDGF#O*OZjt2MI(sXOsX zd@PL?qKFL(xvc?Q(%04w`;!-+oebEgx8HVO_+X45n*~-vO~<8N0UlqdnK`tp_YbY# zo#`Z>cHT|ocl;V5Vk^x!N%wGcQ(ftm`*NU}%L~d8jIz1v>j<00|9&GdRH0X-(jpmI z2g_TE(L1)n@?;=M$frD3-C(Sqxw;0iGrJ~(%z?)}-BPsbM?K5#T_QT@%-W~J+MCzb zIdfKH;U~}u>E0D(y@*}Rx5QI2E9Jf8N}SMhnsKxkd!*r>p1y7$RV!6cVKw9!R`-c@ zBLA6fO{;4jkM@^vJF2Lg(~Fx51}$oe%`90pXnOY+4vsnB(OC0?T9D{m3iaaJK}Drt zyG3ueNzy6)90}ipo|C8PDELP((>47<_!_I~O+$ZI{{_tLwWGs|urNEVv3IbVrmuBbD&@j1j z)t^T$%jX0)Ge_aEqHWb^qV4RDY~?Z$y~>a8s1P=q>A;V?NrIK-(@q*3aVq7WrN?y0 zR;GgdTKl@Hkk;vmRW#bVvUaUj2h!R}9fy&M zbDfgL2dNp_-wRvQ1$v=g0qgKh%w8DtR$(2ykuR%JwQ{XROU>!KqZPp17&%x5yli1! zk4(2~eAFhkFB%tvkp8h&B1Im=niKt91$ln{P1Z1_hjjA8AY%^tA=tzHk%W<21}SHF9x{LSGc*M-92)9GpEzP zCy}D9OKT$CaLtXjqD8$kL;6ab^Twl3^8O((?^q96p$E-ZP4^UaXZVXK|0B~uwb106 z>yV5+)?n90xr-TmhE)o^zI&X^0bSSlMvd$bx}h?P;jLYH7M_OnacxzbT=?pn(n^hu zzFf4nm=$$%MJK_O#;;7Xa~pRaFfQ-7e__R2zGQl~eOX3H4~_Sgmscl2Dvw)OC~6UC zcD8eapw--ClvelgHeofpb^n?D)PqidolpC?LrLa2mgB&0-iMav<5bHf=?!<`@ez)# z&!oP!qxqwh5E~oYVQ8(z9x#!)BaEW*c(;lxZeU%*JX+BoS$jHp_vcUn&Zz?><<`b_ z3gz-I{^fgK;8V`G7X{`%%8cJjY5Zk~)jz+W2ay&^xN zLVeJx^UT)-+(2S{Bh^OB?MjSfV`R|2lu-{ZIrR@__;K?t%DLI&$5U=y+eY-Kx6?2z zCez!Zuh+CyomQMsbW;y&*VtdCE%InER%4dNmemd{D?goOIk{dN>CP!to@~w2b=sZr z&gPdZ;LaxYYQVf)fIg2X)jByjajj1PVZBfBm0Ogo%#BhXpb67U5H+?^n>2xb^amde z>0|BXJ2@5_E-tixYSyMX{xZ&Gs>K3h=wi{l&;H0)Fz7;2qcymc+(dV8EleW&#lMW~ zrz$N-lV4ULi#HI(&JZi=YUqaS@nHppe0E>Xps8aPA@9YL@VN@LGVQtoc^jWQ^#TTP zb$7kpz*cH|k3GGSQ#)2tQYhMnq98x@vhCd{wOJ__W$zqa7I5Ue(*-eh;H{#~=}yIR z%bQDyo?Y*KO-OKczd~FLVS22>9x29?H&^KS-JNT&DtRD@;_ZMg3VrR4*Gc9)21Ud;jQq_)u5xVcY$Nc z#VtVtSl2K?yCtdVH^QT7v7R?jFj9#-&*r>Zq2fI(D8Ke^Y9m7-VyCK6Fguen}-P3*v(MZ8mSxP${ z-n?~+=y2w3M&-eW3WYG;Ly9Omk@P0-x(X@F;^3*w>N3omO~wqPuOkWN)U*|zJ-Ot{ z$b+G*mXJo)Ik6{n!#O?y-Zo~;+t*~atI=h^=j?0|HOqB=p3MKs3)9JWXw4lp9p zISVOfTNE=cxtoK86mAgS(Tb+W6mdwg9VRYbFi@3yKGnR;rzIu-WVhd=e}6vP?TR1a zclUGT6;OS@{S6jDv=tT)UMJZj%midI%%uNP$}Mi1LN@aC4NzFRHBPVJI&!DFyM z-lxnxaysAI<`};#8POBwnSKR`vHNwzGrDAl#5Zls92jxC@W^a243ghKqO+3zpd^}L z!c!K}!uq<(yjk$Dv_LU4ZKB-x_(DuZH`WsaAS0r@_XdYrp?+((3H#j}YJ9W?U;uK@ zF|Jp~skX&c1&TsNYc{fD1Itd<``DmGlqRHs zY{^GI5P4N=rzd?I*r04=a-8aZ|9( zII}704G`=A-XpamK+{^FfEVT`?flM>rMU3lbxT=Rw=J&r>u^y1s?MjsV%wf0^Id|% zfy?b+PV09YYsUYryLbKyfH^_2{Te(?cv^<(dM>Z?GkUa`;y%gblwTj*7$;cMk&$az zgav_LlQ0yJEuze{nl>BJ;a*&|9?fT}1G25R9BpbQ<>d}5k3YR5LnEa4%>n)EK!p?K zvHrk&=I-*A zBx}#bh5Ib48K~l`o{4xPk^XBW>8TvfJy?DEss7bCLtkM7p;QIVl815T4)s==XGZWk zD)$MO-CC5{r4S_oOPAdm`^TSyiPmabNVYfC1w8#FTTipn+W2dF-2P5Y5ClpIGo09v zgy6d{rA@E;>Kp?#VJ@%X5$nuz8TCZS7-(MKuC()K<9NUAj&O&H0=W^iIVLrcF(ZNZ zk#o72VQTc{sk8!YR+=dV!6kSu*zb=pP0kabA-m#Ewh;AZWx9$LRiC}|*tjOj3^Pmp z*kgaW^bT>mowE7u5+v2-=ns9odZ#2SqdfvIrOt!(wNs;rD|()F46;YIG`GW7@I7_X zaD86g0{X=F7c$zC<+&cRIMm6cuCDdzuQ7zfGdU=pAMU*?L)CLK*T2M7+hE!<C@4V0U$p)`n_`m0oF3{wkt?)b1QiODthW zR6&*r;g2@*&OLos*v*>&18@IMZN)5oC#xe37-=5g?j7uDj#T+UZ~<%bZIZizDSRJ; zWHb#N&|(V-uAp{sWh&&T)EF%ndv1kcKo@k?XAVEju;FNKo7#LqULsf)hcDz?Ri--L z`OQS3mpWQTO;)I~{6sVjdij20=2M)k2(~{vb;y0|$*QJ#0~o_2=V;)eI-Hnnf?q;QC`R+w?~nayDHsi)S4SP-E< zeDyuPd$P$rqvq=m;wQfi&oe;dcAPtEyDc#_QArme6NTi65Dn@n%!H z9uNFHurUvhgu-exIjM?K(h)YZEr`pB=i=Tat&dJ)7%%Lfp%^oL$COFhFx*i3ZAlfQ zz)cNU2IAkZw+4m$H4d?)BD;hWAW0~Jp{w*;IWdnWDqKV3p?c7e$&Ik)1Sy?nMPk7@ zc*3lOnDL{L=O!u!ERcAjsF(zMOsApF``TdY%G`!I;SYFQx)`)M3K&oAo1yA>#7{5l zCr9_>XyC5(<(}~=Qr2GM>8deKMy(}z#jtoOS^MweBWxsZMN6I>o^x|-EiLbWVuBRi zD67$)>`$g9M%pk}^!9%KNbk5My7hk|^%yU2YnUf|)^Y0Cort53^Y1oua|`n`;|F?n zrSi}|?AY4++)r(tXD2c=BJXMZJhR;~JNWA)q0VYz!>XUJC(7U!A_%tQ#pQ%up>WeC zl{IPM*k+M~`I3f$j|Mp1mwzrNYUi4r<)dooc28S04smi!9Es7w>{Rp$XptNYXR2`h zoWBj&y)>~=ArA5*bxV7H{?S5C*lND)LHHVV=PIy2L12sVF|J>vsCXg|t~l;P-)32n zpJT_D;3V^0jww^wI;{$i!(WJL;Y?Sht+Q1*2!q#YR2d!tc{4us)D0YzaKUbIB$Y2Nb|=bZJS(20*h%s+B_noE{^jce+fT z3ENbqVwBlNLUMT{Ba(b%yP1l0NpW0+u%cVb5wyH|tKvooY1%NaV_04RU#_6(C{YzY zv81=LaB-vgC$_RszQszRCVTbC$0M;wbtsC@Fi z!j9B_#@_I@NLQ8>@XMhuDHH4Dfrw)HfxU2~YXrNcN<@t*0wB~MXZ6zN3tu{S;OFZJ z3Ykgvx%+`*V|YaR^i4Sc5&FDh9@Wa=jAl;u6WA8Z$fz1uPQ6fV|2ZJi3>%MaU5~Ht z!HUaa=?g(-M^5>-6%*%IfIbvI;1QfA9^(sAD%jZFM1R49T&!Fd;yt$fc)K}ELH!Aq zpwe^LI$C3UUV`Cl-+9i0;)8KFsfIi@&1{*2?8QsBtmf&wEsohM;9V`=^57J&K-hWFTp`V@6SiiHRnWP+#}`+sl<5Ky~Z^(*8oc8MtuRt|a2>{}TgA?u`E zg21+>rR8@pu99DB*yK4%-X@#`EbIRAI?B8Ft4ZkN^^aAw#wNL#f+P?I^(khJhvmHQ zY}vqraf5Ov1A#ff6i|5mgXziu|0WzN@+H`5PbgVVWg2N^h+(* zY&gBpIo^;dd`n&Al!bUmi44w~iqXRSjgkPO3fX-YQp4PWb_}oz= zE~J_f*jRij{a}pu40mn1!+#LtB0t`Td;(ZeXR|OSQ8HA$X0&T4yDWYM=p{KI=opn5 zsKS1XGW^SJx;A4KDJPAUTVPEPRd}`MA>Nj-574y9qv3x!&5Q9=T+eP^%}gfUt<|cq zM_a*+@;mM}oC3@zZEvHlkDu^UWKVF>$xw#3v6-<5zrCGi;jLdUNGKyx4KKVKNM~S` zfv#37x6@M!e@EQs>G{QGS!f>@8*)}ibY_;9z=TNBI0LRhYwRs-!`(pDIo!=fdK0MRmDf4WC0%$ zi#z!C9uC4;Ix$wQd^ClVM~Rv=tkh9Gdc41+AKv6-6kTdBa&QfrT%Njs$q5_9Z!%xK ze|8zh9LP?jX+#;u?GiGW>bqNhcvj!)IL+P6F}ZvCI+yNNRblJ%bT~;Jwblt6R$ybM zDd6k@@?)?{$?g^L2&qJ3g>p>!J;?D9{O!#Xo@3b6?#?{4j8bNSt7299hzqOzY@6jp zo=q*8&+r%><>Ig%5adG&2^>H2j9kzZL1ijd!Wll z!g{yRYbph%1GZk%j<6&u1Rx=^)5S#iF!{6(HZ?N057!1sFFU-G;?qz4vZYg`<-#x)|}2#*ocJ;?QKy&%uBb&N4oJJwcj8P1CIy+8hlcmldCoI4zXz_Svh;?x=Qt*Io}cX~W6L_k zif|24oHK^3*7{9)IJ%8X!Q#cz_s(&qn&$|D1>m8E77Rt=TYv)*URrTCcJL3p_{Q@! zn@^EN79Qh?Et*UMS)XXrHXDXo!^>nJlBI<%{Z2Zi=ZDsJcMkrJuYmn4K58X=OYian z*rMu zQR{OoG}^ecQs-1JC5Me6sp;A8qUt(&52$EG*~;94O>?`s@R|ZM;p9WqW}iht;GfrD zJ5^FswaTj`e&eUmY?WFoB&KbRoYHF+HAe2xkMKD8<@ady^_J!mfbw31?HIv z9MJ`(zRO~xB@LO=;QDjN_q%#TA%uZ`?D?Vn+$E(=DAjJ^)?V!I4%(H&(O1vswCN~p zr(OXiLt0xfW(%FO_WPJ4FD}r{Rhx*8TC?_QrA1hLrt~3EgRpWbNgZ^!V8mJFR{-L= z7dT@k9qBVtXyW_SN|2_hg>?%XuYy|;zcnbS-FE?$cP!qsFkD__GZKG+P^xSJ3SNUS zW$)VceQAk|SQ*hpo6pNkBporec|K`PF*g^4XZ|}r=~wQ~`>xNvoklbgwzVDG+s-SM zqvVN4TDssEOb%*-$@?D?`)bR|zBcVVLP`;IhU|x5lTYEO%wDK~_)ziJ5XTnlxYR)1J#_2RzQboUXe)t#>UvRjIO!(0f$_nkmJU6$(SCsR~jKKL4b z&E#58gy14#-&oMeyq~V%r32GZ=R9!(u-(ksN-J9w3)yR#oBMzur(Sfj_+FnfHH1!L zO98k>1w(JV!Rvkp%@j~|Mz`NC#C8gv%MOEbU76b4?e3k@&;`e*=F-p5|bc`h8BITHYY! z{n5Ta&rJwPfWDH9l!F}(>!HBcS~}=d16Ln`t>U;!so7h7#0^vti4e1L)EGWOb_7Ig;;KmPZO|ly$g!aCo^|Z&S2P)R})L++ghL?}6o}R%%&AJvj69#|h(~v)UH)g6|feohGvN z6*i9B-4bmTy?~#i`E6%k;Bktv-zwiTrjIe{8PJuWuuACXf2Qf4M=obHZ}n~S$esUe z@?_;}mLd!Ni&YcnvnfdL(2yS6o~t2#+NI!!-bc~hZMA3HsuqM)M!qL2oNWO!S%F0l zav;bO<;>iJ4Y{}iL$Lo9U?Ap(F(i$cF5gpF!g@O{_BBUgh`{>!^tb4 z!imDo-qGG!92MAATlJfD%ZgaNi^!PLD74qCxqN?Uuuu2>KHJc(jctD8S#LXy3RV<6 zKM!#%s8?S8^q~c<6ECr?pb{pQi4)4uG9j3p9(Q&2o2{JD_u>r2x#`V`)Spby;F>v9 zeteMSj+gIx`~65+gl|UtOnd0y!%_48)amI-$-y6?f;seg~$7%W-|9E9B5QQ=h*4b>ePUBRFY3icwa_EC~!B(b1S}4bikmQXzrN__P#%a>qbG2Lr6|T1Wuz2b#Gi9@EZjM zWIxLAPqGJh-vqG{3C=#UOoG{Gy0K;3Swvd5lD50;Cd%HPgco1V)4UQ|A9&x?UcX@DU3Qjy*2~coEG~hr)0H0cRf# z{7=*Vg>}mK^jqPPC7X43$@{X3qi@-J^VIwQlDW7*$ z)8At2_Zi#wC<=orx5oV+MgQ+w^tajzIV|G=mRjL=J;4MGC~zu)4E`~2PC+dGhyax# z?u#%M5$M0I^DmN4-`^ZIg1?o#InL#qqq3m`AfW!buK)x4Uso93?ku1~kz!!7DnX+O z1Ia!Z=3|iyCDff$h}b*C*Y`~Qi>3n!0U-!@`2?Ww=b)Lk=M3b^rIk0%!2B6sya55F z&yl2Jrx;E~Y2PDu^Gj>Cf!6;*>l=GAA2E>iPTfi};8zf_+EEq^_2PbJfLZI^SAlOK z)bVgQ0*0olO-&d~I4V12uYlG!g&XL@RZQu7^`CU{fk|JjWugJ~xyzTDgi%1ZVp3Dk z9=`~C4zK6su+I^LEd@1uZO;O6ZeO6b$vc`kj|jG#;N7-!P>3V|y2><53J_QC6}6=6 zS^Zu+1Z7dW$YTUzeX8o02*@}Pmv!ia_D5iYQv_F(Jtt1Q)h|HZ-jR2RB;0$+uh`MI znWXsr{m9QME1yg*j7O0|vYu^%qV!1d!Mr^`=ZwG8a3@){6>5^J#;@at?`FLMD0Xr2 z1YrgnXDsc}VD&hZL_4>D-qrs3{JgJ#h_BHNbKDIb;qXE2kO3|mR2;mv^$YLdExw5* zIpHdaL80HLwGSz8ppGg=SsL~OqON&|o;5Anb^w9$kI$rDwY!?`;>FWngR{xy#YQp7H&piyCaQYL)u2pRk}7@q+lVFP&TFD zVnw`av8M=+=5dSEPQ9 z2&Oe#blJmlR+?wHCV+R{ZGLNdJ7jpX#S(+Q@^;&Az@bTwH@h{R%*LYAU;u$yc1I^uyMZD?0H zA;Y|u7`5kjv|MQh!2dvs*fR}z=L%gPX_A1IN7SXONKDgS#_{c2V@AvNJk+%G#Qmv| z{h$_v6)9VbC+G1XAU!&uFws%nA_{-F+GMB9?Of;Td zv?@kY6e{@LRU8Eu`AYPH^<}&fC~-ve4ajxU`=BPB(mpxIrn=TH!^5|w{i1!tqKMT8VCms1^srx2^|21K?=kq zV^u=?AZ+M>MJ}QokU(No$EN6*KP41c-$TK|u40_{bsbt%%)ms|$=|;3?EK=t7=Cbq zkWcV7e7db@ABS>Ra-M5v(BpTfW9E>Hld2n;N&Qk?YAjlk`%S23ZfZl@YziJ&_q7CjdLpj?hC`7H^NZ~&jw>W!yryH3y>S+is%w-1m-80KRY`kP z;eoYx##5WM#0BiV<9yBogHvjSbd}YmF^>an#H_N7?EFMt=!UznL&nx7}{5)R)7fDwfj%;oQ zU72C=B}CV*I*sVhn~%HFGuVb%G?r3q zo)c14$N!#{`x$E;*LPjab+`La zuMb((E8yTb>Qmg$V=dd-`Y0Qq@=w^?fCA*u!Br7BY|H7RV~lx1{x!l!e&Di-t_K-Z>$!*L za`3TYnc+qOp;=}7C%IkwLcNw<@y@ef917^CW=Y|{y}ag#8NmBG%xLei=N!KkUSNN| z=;u^g@7Yx84-O?ndbu8tF9?G+PQU(wB!7O%Hcx)8E7V(OMy{0EF!Zz<^oyBFCJLID zxRWMC32OgN+rfp-c%t2v6@&{Fejtdb-x-u)?P34L+(^{=#mX%jZcvAZ~z8T zSc+U2UdpF*i8Mb>_DMHSSMsr##X;{_6vJp5vn{i#-#DAZUg{1##dvXbc5+jFf*SNx zT=dydRLT*^8_=t79w<#kjZa$tq1N$c_FnUrMQ}sI8k6ZRCLwL`kpDTgbZ5ibp~W&3 zEfP+ysh9*N*;a0&`g$_(2b=pLLB+qk;}-)5cnffS#P{A7`RX~k&a z{_MIc*Mti~=pNJm=hJ?cj>i3%at3U_t1#;t2m5@BsqF{sjFZXQpX}6m0kiWwY|S*C zasodV%K&6q^*Nz6n#kBe{>Zc3XuR9+Gja#5e7mPSjsiBy+owWe#1?r2sXztFKglZ8sx zVC>PZsJk5}kkYV#+S&AN!`r|o<}>6$Q2m+qS5`zI)u-@}enmhze610SDCRG!NBZV?Fe^Kw+S zizps>J2-0Aq54K@8oauhbWJfU@V;bfNI*!%5N;6WJQRbyx1XL6GgG+8V5XS(Bcql1cI zrYv*;ekApMm57e7SchYtH@XJpJV_!KNnP!)faM&Q@A_U=pI@vrCPqHphIpbAVOu|c zQE?R@0CQhdWNLP}9D9w=x0Z+#((qRtwm;W1QTVF-^0Ngy)44aF?fGSEZ+6&D4jXyQ zgMF&=>K~_v7y#S*`x>sv8MmC~$#=QDqV}IH?V)R3W{K0D4t^K)+KwLm#0<|J{dEi3 z@XK5Hyy#mY2IGDWu5?3VPy5hP^2Xb-H|?Ia)wg;7#weQ_6eGcdtE#G#1wZpajQ}6^ zEvuVpmG?inaBUd^yS~&4pQ4nK>R+M^StyN7uPB2Xag;!VWL3)w-ck~_d$A^SnZMWV zEOD7zf2K#|ZQ7?|bLC*N=^Qn*Irq9n4uz2a`W}G9Tgg#(-}MYHTO_uPPmD~X?UnNp z^J$}6tHatkqgiQmPmZG^b)i}&eFwIPu_L|3bq7R!W_zOR{v#L@GJd2sLGwHG87_Gc zlWHdAVPv%gt^h;F|F7KcNv*~dYA3K*Ewm`H&RHxr7Ik4N?KKrLT;QK-(__)NdpOvtbQ_N_$ zSw?Pg1yUd^FCp6Z@(?h}Bv|kcp`wPJXzIHUb#b4?q4E4|{95`8id0CbPPj3{t1 z@#s38&ibO(&=Qy`yiC}JdZYFVK(7o#^%}`pk@Inj24$u#Xf%1r2!QQr@7Z@tv|E~Z z-00#gvdK7RdTFBEf>uJl#|$y}l5YNX2;8+@)Y_x6Xf*qY2b*AI<#S?@ez!$b`3l&e zgL6Czk>uVo%M6Km1jc@u&g3FnyyZed-N1?zxuWtQ>I|(XZu#c-c1Dxg0u1zkzK=m} zfl+aaq~^4B@qH1tLzHnx#lfs8;+%&!X_mWOudyGn#rVDUewjU=C@K3V}D7&v@THw{xdSw)Hk^c@t~h+m62r2TdTKy;j>5)cbwZw>_X6o11l&EUZ-Xke5-Qt2Ls*G-#ZaJoTlcv)wMBVk7nZI^$&w41C z#+-mDIiOH{>ttFu_nVEzjuvfy8O20d?96Uk7HOgs)Yyu4cs-S6${1;Lki|}Q;eOVQ zyE7i4(W~EUNx~8BAIbTI9siuNI;&!PnrF)dvek)$ejaxG)wS5VS2H2H1* zWL9&@AMe%qbWG|sFDapcT86Ol4(dl=6+mLjTH?mzfj#WM2@~ZDld)`cm@kc}Z^@yC z926zhpA-aytUeZ{yC6|dv}h2!QmqS<`n=8hEvga2tZ_TyjG2YYqrd=a;!5Q}R-;N( z7D>x3dc>%2&zUU#E6LN2+~qMJ*_8(O{Pzj8XKa3c22kn0dl8$fT>?6xvsLH%Z)q(c z!_poucC=%x2e)d3#83_U1h&bBvgXG&g$ypgOeIU{YZJs-UtG*4O~<2EQ^;|OXD3_m zm>9_!O&l+a?-=Ek&O1(qS2%?mwcq<9FHfc+QTBdgu)KGi$)N7d&|Yl*V6ee{C{@Yg z?H=qg{ktv7&DOZr5AfF%lK@8rt@ELhLjC0AI2YZG2+~9SWM9UNXzderL4rAn1&`^^ zGoBEv@@~ATwmqX3JBJ@xit^bOTpbZfig&5~a2r%cbtW#+3H^kA4zVr*_cxhZxj1Z< zGdfM*bSiNUm-~Om9$CsW>JQ+uGe+smtXGwG>$r}8i^f)NAfE`J5DN5yC!BduvL_pF z`#F+$obHem#-b7`(8O{p-XV|#zE|elf!cH`^d@WBC$~OraXpU+(n+@ZvLbU6TT&otX7_rOBz@wX$&vCfqL(`R?*EbFc=gF1Fmk&7{{P_mm`4RTz z+S@-LHTV5$T}YluFUpdJ{II)V(TeuvaHLS7aq$&^&9Ni%*|6J`mC8d7y3Kd~c`nKk0S#P`rTzp^?~Bpc-u@b}lT#5;OUMOGy?Qw7n^j~im|Q)P&xIxY44!t@lhBKV+Ki9OIwAu-|BDU{+NC0Ug?a+)Hu_`vb$7+W(I%1a@uor%$0Yud0Z4Xc31aE2 zX03Ih^t{5372F+{Ul9kqK&QS}Y9rfqLeuu0%c0>(h4#~Ko{stP0^N!{fFUW}+N0|9 ze`tHFs5qi_TNHN!1a}Ao4Fq=$ZXvk4TjTDK;1Ys61WR!5hQ{5U#v6BcC#V0t_c`}G z-f_pc5B*eQR8?2inrp6a&iO5ds?~YlFf{RrsQp|V4XQ!LeUoBa!Yev`B8@!nsC6-gv!k(VEId=kn8 zR-N+#oR zHhEsv!HR)Zy~6gz7qA`{>R=coVH63s%_k1y>15rVi;<`0|3H=1cd9xC)DY;3un@x{ zTJ(B8V!u0?YQ8^@=J(`LYv{%$%-X9UlT!Yrf5m13-G$kw<)fh1 zPvOhuaCa7OLY*X^@$y-$x^i<$8ZQTPvK%Vh)^^QELgPLi?rLjLX4|v~28?xJ?ixrL zL+;Ym_Ezx=ST|RqMx3JG9!|6ny!<1Nbaj68=_$uUp}Zvx z15qo$ybc1&m5l9kTVJYyZ;}_h|KLWzPc!;Z|KC3(NwKY^=liIe+eWvkQvbohiz~`u z`rFPcT$p^c0sr8p<4BUB5Qa#iv(tG{bGDZW{(C0g-dJ4k+|8X}7mm~qXoZd=x$k6y z-~O`Q`?pDl9^kMLMQDg=Kv+G?E-6Jk4rSN5=`Bt3IY;v5fQdPt$19!+RLVN}CCIiq zV@h>%eh?9#Z85{6tvd06-t@v!9nMi`=k4!!7EpLLB9+ZRl9?QhFgv?q023qj#9gT> zBv-f<0Uh;Gt?9Qno%~G<+85=6KGItPwj7*LFOgPN7MZzg`ZRI(mDv3SADD$Xm&Xfh zRW73#`%eO+^{dLqKb(o&1y_gi)to#0iPTk?CPZqCq{kFsKn3-A?JE=F*)Z!TRdN0P ztK+udW8KT`xJUP*p(vhj&rSXE=A}aN6%H|p?*=kNv4T=!Ry9N%eV?)%{0wk&q;W+Z z5ZG#HDs^s(HNw%t`VMb@=N;pM9x-GDr4`Hv#M%oD6>`}@`?sYE&;j>tg0$NYydN76 zt3I~tfd2|Ssj?7(>PIu9k175vpOb$0O8?|`3TmzSfUYj~`v-_<<>PH>(_b!6jzAeh zZN`U1w;P@z`LBmVlk2&F0)sPi#iUz8C)1!EDSQ+_A(ES_^IlDdi*TVJU(dxufuMU z2`?9&-=z$%ZSpZAU$ONvo%X%zauvu*jHgF_A^QkyEf>jQh6)sS@ZU4`?nd@_du{=}49F+#T;lDt;meoiOp zIJN8-Ub_;@1ZlV1QwunI6@wNwd|cR_wqA;~DLiZ6m~q}761Hsu*EhMuat^s?%emf) zE-bG~u?*a6rqqPA!1d;ScDp=4P$^0TmIu!QC^WnmJ;MUlYP@2mnWW zG(L!#@M8ZyJ6ZN-aP?ww4X0!}1q`vRnvYEBhU3Z~DgyZYJ*WDGcbJ~ko!O4EtB$dn z_89e1Ucq@M79RUi)^RBdjo^{+@MdY>yYdjx3|L&MO=Z+fB+H}XEPExJ5s^IxPK?JZ z5W?zZnV8-q!aSbdsA#Z}xiC0U({!S8M*im-z$l^92$ObziN#qD-V3fbBORYQkD*#+ zwUUle+#;-_BVm$Wb;rn|G0Mw}8ovwzs3GBCcZ$GM9J<93G%=LUN1b4OqK1x{=B~Zq z)35r@VBUQh21a!xb$QIdNssE}efdpiC$hg{m=`gDPh$8#2F9p4{Iw*qb)s*Rl!G;IHel)iN4q&RVQnh?-sg757@-NU>iHEv^@ayg9s=|{bef88>?ys^Pe?- z8fE5gr!==}{DW&-W_&3>_hVDO=}Es!C{KGekksblo1&ODL3I`^Sa|nI66zh9bkd4) zCQz25Eub&`VM=7>Ga27Cc&!oDCwV5CYS!NYij%4@USjC)f452j{u?FocX`UY{uHov zhzGGhd!;CxUg!0>L~SDLExkR%t9()oExBwGS5(D!e=}rtU+uKT42g0IU>R;Y*~q<$ zC+S|$w+MDGWwZJRXH(YKh&A*Eg*>!*3Jn@JvLz*iQAXqnURA-~YF%-l3~a3AxPFw+ z=lrsOq9>QHzouB1_Dg{g0(8%a7)r};H;`w{{H1z*+JF6@;jaRanf)xr!*<`tC*7Ek zH4padvsbd4)mPF_(9fU>1O6ZEV5k@h)BFd=f=*t&z zXp1kYz)P*H#C#PWm2cEUFsm8#=i@)|N<^Hur?9+b_2o-Y6Dm~JP};3n7GiA_#eHPQCP~r6Aj+5u z@Em2gW~_88a%i)R7DzrEZQg2@kf2@ic+%uy-TSzB48xHA;v>^RwQU`?;ix^?JXaZ> z=I->N7#PxcglQ)Jsc=B7-$(&iq%yegyCxnvpxjG*k2J%-{r&wfci-6ZQ`VY%(4C?5 zs|uz@Mt}W(;Ohfv)UW=6K!1Hm@$g*tEnxzz$XsFoM4`*%5GnmN$5(7`stW7yHSwRL zViu{q?FQ|A63%Md&k;*0W;Flc{u+d=s?mE?#1YDI*|FQ^9&RSK(_KnOBgtQ70bRJu z{6xf&2g7{Pl3)Ik5Q;=qU5vQG7ziX*Olg9x!F{1iYcyj|LT$_D0v}E*eb}0Drux6Z zrs|?Q4sj0hU|NcPU_U!-Y>p;AdEtz5$4JI&zhQ-fepB53$=6o;$+Pf3bjhUKZ$sry`o(KP$=0vi)tyn;);_k^v6s+3E z?)V3Xo^-RXke92LeoGzh!(TP*|7mp;ABEZ3RT&$L@h1PlMAQ(n;^Y%=RuXC&@TqTp0<6)mY`f7i;Sw_6i0_DYT3vu%x&AzEIb zQqlJ`RQeu=QsVTzFdc=GZ;UpeppqZ|HyF8+Vp`+WSnu{zE`NAOb&qq4KtBfnmgQ>^9G{WjZ8R zHS+Nha^{Y^^nUif!Vc-0OW`dL)Dh^N_-a=*)N1u|=ydRUxRtM0tRfLgpFyQD64qhP z3l)!q{QrYN(_b|CzUcnKsS#R@BN@)Me1aUyO&9-Cotyc8iA3g)o>1}I{|ASzehFF1 z9e$gt$w;@Tfy7rc=ULPHx>Ypq^tsc0&C<|6Lo-y+rB+;%0Iv0=!k&?VE@e7Wkvqj- z?tJ06U=0~^uitRvk>XXRipocQucbhB>h^Rzag8r?dz_BZPC^dy5$5!Dw$#Q8I-{_; zb^GNAtKQTnkyd;D>L1)0=hY=oT458N27(_B#$a4E_YQN_(c0MuM88DpRZ^_q76aml z90(RB;(f~Sid}zqWDMJ)R6oUO4Qf&9_Vdo8U*nh1p=b;xb^$eO_X>`fG6+61oCIi; z=r6Oi>|=DzfIj+nQJI9Ue#&@nu4>x$9~D%kX&H+rZ0o<(+vx|jaONG^#xo*ibj~W_ zAI8P~&crw{&frZrsKx!jKb$|B)*iJP`OUh4v~OFepKXU-40rhrGhIzQsvoh$IaxfN z&F-#3u{VPqz9K!zCZ$nz16IocRSW&iYH`){v>;d@U>y6Jl0fPg{voON^EaF4z>Y^N z2|r8oyuEwu=tcQ(C?%`ky?1yVxeP)^E|&JR@2}0ADqfJr3l?h-hdTpA2>JF{)n6(7 zG>1-x^pF6Ut5V7eSZvhg6IJ$^6&)ptZ(`|znyZQ&L1u9ErRP5F8LB4!5V0Z~WIh4a zqtqRmT%^^UjJp`gto>|pqg-eCPVeZ8y;r1xuTuXECU*WfC;1cm8s31nRO{}?ETsgE zGR9rFJN_lZyN>qQF#~h4c_#^{-9qs`-lEmO5~;xG3iM}{Omwx<7Ok}uefHu)4Q`5~ z<(~M3Lj##Tr5}l4hXB+E10a>?Ybxp}`*_;I343IVd$9xlmWt70xWT$`+R#_-36_Cz z!11av*ViINC7_P=D!q|`Z|2MDF~?O=v@g|Ym`+JB@xz}Qk``OU**JA1vC~DH5f4an zwtTovhkL@Fl-`@C`2@vS&-&)%yjmE)=9C_9G5(g({F$(uIOj>@ z{`;7ZLPl}z?}1yRbHwEERK7k+?3wGIITl^t8rs`~7Kvta60ay77}rWb-pwtUPY>ER zhWSxwdHu?p)0tvcsA}3(T(nC~sXg+5lnq?4Agid7)&;+T*t|RZ=H1i$itfkfP@rKW zWnh4V%{KrFIO^@ObeS^Bcz4uC0A^pj+u!liSZ(plnr?PaIJ~L4g}{CJ>x9hvT+Nm# z<6cm3&!Ii+G>OLB0S4=gt9zhWr=9kVjeh6A#{PX}Nt^mL@?8GhA%wQ8@6WL!j~ZgF zv44;q^*#?+>%eN8^EzkeT6xXl+%!@2cK@8gU7r70(c7D!j?tpOj9t^&$h)t+f$Bh%b@{x` zcEoinv4niVNUdJlqCm9FuC)O7OQm#8!f)XHJNQV>e$hZ?zO^D;YXQ$Ut#&Zjoz0mY zU&-sVeLsLUWZwREMS@0Nsu)MF7`L3p3$w;~+&nm!eLna-jlF_y_-{F&QsB-@{pW<;-2u;pJOnX>c zTe>`{IG?pRV*L7@*#Y&Vo+9`Yzy&RU_Y_}5vMtzg>pd|^=n?C34XPR`0`Kh%Gt4V>O@H^k zCqT2Cumd!)g*_mmwrj8wbJvF%aw(U~wh|3Cze4*p*f;KPbuCVemAGp>>r?dgdptV# z2V~v_(8G4};OF9?O`C6~xvC)ru(;Oi7Xe!i(=jq|;Co-oE}bU*9*a+XD%jQ2m}7f9 z75*w^fS9f~l-9yTny+Pb>=k%ph@47I%bz?#wj4M!=RO@jkcJ>;@?eDz%?coc3-UbO zj_9w3`VE)aim!%4vYI>%-BP(9-XGObba4}$5Xwc*0PpUD#lDE$I@mVv=ddCwZfu!$ z?*ton z#R!UVJ&}Tt+kOo8kQ?{A=+=o z8zP3qy8I7rX^tyLTRA#h+i2gdden(vz({GuKQT37pF^TP(A%pyi6?rfx%E+F-Ev~$a?NS)YaJP)4ujUnguo7J998d7RI#pF zV+Qpa!7(jC76`>@(ETBvfa)LI&x3HV_LSnTeb*aRu)B_PhtH*ci!=43{3)oQ`RX7q zBc8?QH7oeALLQZhEC2+Vt_z`O4hW^GD=}syj-_rA-D_}GSpi(Do_n=UFpY_tcWyEs z>RvWIFplEG1Qzd_E_KQdvbcL&-*~r-#CH9h*zr3_wi+&E=lh@2=M#SyfCF zK6Y2zvP&(1wIxr40Kvgjwn``eX1J)i1Xs0^Vd;1Q)Y}SqID;a**KVEj`c=A^*_F`O z9%0vQVMX+-aH)(hGNRcZDgGdN_X_N(=2B+1mpJd{iRZVc0vtg~-#J>w$`hnYY~04f zofNrN#vHEa!fEUUy__gVZP{?A$uCx+e~C$Kz4?yUO)x zHP9{}J8k$;Z+laP0p6JZGfh-9{B}I{bZu?@r5bu$0mE*iGm5g_t%_#koJt`Y)hM6i z636C{rUvEJ<6?86N63GsIE%C8b@(@;x0N;z7E3NlTW}h*YNqc(7*bw;#kABO!KF;s#T3iKrviUaIc-Fw`0mvxBi- z_F=EJHh0xo{o%xH(*NzXADa!n;~6gnaO7A} zay{uZ8e_V5gdEtqQDz@UiMYhuKpd89a5=+2$cm9+2y5;3jr6MtxL<2~BDWzEzW4hhr zPe6bDD!1OMr2Ac{GU{zfr`MuYUwJOiZ3zro1BI~{l*wu1+@HoN>mNsWlRgMZ6ngE} zkH&6T(C*7m+O8OCmW{#|(?GUAd)oAqdRccB7oZJG#qAkn>xpwxZui;QTFBM$#|CDn z?C)gcD$~ikT=c%^7p3iWDY_SrJbJZ2%#BA1ve$j=L9Ap+tmMOUJ!2~4M|1_ zP;~(5anKL6hg~^~=|OUPhU1kTbogLgstbgY^dDB%UVNy1#`><@y4p~aI-?&({ct{I zpqI4$K;^?O`7e%@-`#HbrU$7OD!;Wrs5<3az0pRgg38imVDn~-p|c9Xh#DcPHs_c4 z`FFmbj{o<`^X(f;8Fdg~^)ittE@2ge)t@@X)q5rVIUG4|$9h|G( z8gu9u;&$wjbccG~EBOBZVtm2KqcPzXBqgSjmjs5EtKX08&dMj5IeFc-3XTStNKx-U zj+Z6uAj897UR?9^Ujr?Lh%wVTdrL&uHvIXiXwaCelXRT-+uACnrQesO+Zl7ZO`(>N zoCphJmwc}55c~MJyDw)e-{4D#Ps^Q-uhr(hO!9$0>GD~t?et{Sx!s9-VR8f*y6fMY zbRxR2%ocG|42QB*QuN0jRIq8rnLnmHUxBct*V6bWEfgQ2Io6=Pf6}M;kj|va@y-Q` zL^Q+8c_~9#m=hwv&hW1D?liQ0occ3G>@>j!VA+W=5^n1CV9`K(fwytETHj5SnTXLE z=`knXxDC>N!o>Hw^66#G-$)X(0ioeBTc2`nnZ5i;MKqQ@?3p+Z7BTbj)2WM%8Y6SV zk21k%EMi@(`b#Z-Qz2LdduuY|6#?w-TZq)VOWrM)4ix3{ZJ*A74#hT=lO>`z&6QlO zdUYFzw||u40j`FPqZ8FM%?o^0`M!?cuHukp1BYzKIM*Z1LzPBBfnlH<6iZYD?5Ll; zV8HL3e2xF~?ErNuqr#T>BdAnNH>=OA0shwOEet5N)LsV5fefzi6M9|i8NRNAvn_q| zR^-_Y(Oys`DXpU-*E{SsijNV(E(KeX-cF4qro$Yrwt4+#4S^@S^z1G+IllA79*un2 z1zRmbpMO@p-A6?a;@`rw)}2eouy_%P7=FO`T=!VKU0JA}Mc2N;@z|%#=Hdh4uhX8e z5Pnorlo1}ff1f4U)1JsV zA;%#XRdqYy9~%u)#ii2xY$&HS$SahzFMsarEl{89S#{cd&L21PF?+)94ty>uk4H&^ z!Ed~sI>>leV{U_m{$+!sUsz74{_A-RO8PuIoQITDb%`QoiCredK|I5dn^_S?-n=Qb7?zk&d|q zfUwYZHWiJ?@2uO=1Y%rc9%}hhmFB0t-8hS}SLUT$0F!$0;Z2d(?f_;?IyXW}zRzRk zv-Z{A@h6~0x5xqXKTHwe6I=rTq~j--i3ZvM45_Yt20Y#OjTZt4VNlF?XmI?e-!(wh z$9KlC#lefyXenOELHleK2+pt)I-an}Wu|Yi9P>^72e-?KKs0c*p1DhK)DXYdh8l64 z6KH?6((@RlmqIUpTjcb?6z*M)TGCa8zf3Z++395T?My}(l!LCe0Ujx1#$(syLgS{Y z^0I5yPp%tQ^ypr;vD5%lq3%7+8e9CRC}k`@2xOL+qxmFBi{#EJb1K%#+faC7?BEpj zgaH%;mm6}g4+q%ZvkTko$Bbzeo9At&qSPfp#O58WoU)D$#L-ZMVwT|VC4r|RH&fI? zY?k=Yraz$kpuiUXXPH`<(_(42refD`=Qwfiwqk{q!(afgkBrdhl8~}wxXgZNW%DhV zjdxUmC_Uk%7noEu!5i<7$w4J>D5mvj+hEtI2Ol83dh|8{8Ojyg)f9lYw{t9|?){o0Lh`r{#C~I5dR9^EPWv|nAt-=S-HNVw7(Bv@8J3CBKD}{q_PLo z8PmLpeY`?PU^S}!ks4RPh2}y^jH6||E0LTsU|+%!)cXp5>#am` zzd$r`P{W|t@*$LB`%yy-W;7k#%?tKxY1~T_j*W8|)zH3+(^HO26x>zyPqC z{asu^2Y5t&nmNs&i(-u%yvWB`ItNUg7|>Kpgu>*)WrW?l z%S^6O@g{%MVL?i0(p2>CN8W+q0&^i-VG`RO97y%4a9_hSXPmDCBw_koebXbr*H?zJ z1h^od9YY5mRSYZ#oQ=>Sg*0pvo-%`}5ay`c=1Gioc60LczImkc257 zbsSV~NP88=?&q^6KdkNFlqIIJhPvVg+o~A{j zf6n}PnXtCavjVhAGJH1yHI zdkb!_D$l9UysBEOse5YzH{FRtfLFP_$9YNA$ z;0D(Zm{}qt%J`!_sWxkS`o12|cdHNThf#T7eoU~g^$&=cr@dqczKRIS!_0S<|s-`jX| zam1U*F~I$!2?r8lxAp_pZ>Cr+ghdZ*i^J-B*n|DYiHi7Mhs%a6lOL%IN}Drk3_>{H z2v3yEa#Mi#rYvXL3rjiK!PzuoH+O_e?h^;!I!aS~QiUcz3k}lIYWXD>5C&VbXwxA6 zbZmqpYj4;(wyLh=i5Tq3whs02?+_=+5VBJOs9cjwde^L6R8MfY(wsAh$CmJx_yaR* zNquneOH-~mJxG!{dpDn3MqNlr>WqR?fC}q)310`x#D(g0c)$EGNJ7;g#{LIqx1ML_ zD;E*l8 z`q?g5{pz)!X{+JY8n^)Jc<(_CDg6EJenOTP70R`J&|c3;q$jfT)8S*vvUlXH$RFN6 z-Zqnlahc(=r%n7RoEqF|oZV%FDEC{7O5r8-Z5rA@n>90>i{mj3E&tSwBUd?B-q%cQF|NR3~OWhU`u~i*VDfB|cY*uXrb+<72 ztBTl!L&WR7V)wGz*k34uYnV5b_TzCt2rx`pu8Luj3CJN5pl=6D04!bA*~K(iRp$&5 z+IKlEM+`M$OV8HfxXw`+_F^f_*|OTMIP138__qk!A*KYuLMj+Vc6y9c^U2Pb=`o`| zit%##NudpZ#p7;+_?++JjS1ZU;QWT&+Fh4|+iZ2~+DTsmy3c+HSQ z=6>4b$f4wDIaBU8umR;}Cw`BgQiX~1a2w@pnQ^X*80*8Go?^}F~zpc)Yh9)&vl~}HcH{&JcPkmF-RC$ z2fUYmN!n8-j~MFpmL`c`>Pl2!so1hpwkOcc`sgDSl50KKwR^Q+v+Srre#)(tR?)FP@NIz(-rgtygxj**1lKWrgPAe@I=Ceb zZY0>69>q=WtoikL&>5SVdbb1DfG%utMR$zfD!kc$`bjrKb{d;M6WR_&=FEfHa+@)R zp!f^=-Kj~MwVaoJ>bot0snr%_2QuXRPU%Rc<_yB@!CSuvh+VZdcB!*~@r_NxebqvP z#TXb{fNXWSKBSrOvmvAh1qhJe!2S6P+^j-Lo!6dHI>JMs{c?M+k7c3npph+WT<*{J zVjm&3ULQ7^X}q%-kOAyFIW;hOScf_DkE(rHjgk=5ACCU(pU$w&V-bq zZSt@cdRGMdEzu%7chfbT5|;Ls2G1A}6-D{c>c~-|k2XQ0HV#;)Yb^oS!QB%m-bjPZ zlNC0CFDlq??_H3Z5TZQY-~|orImRahgCl%U5g=)rn<`tJ5Yts)q%`ukn?ZYANK4rx|Zu z*#DcvK5sw#K%vDgwfRY(X5)_o2y9`CO^AAbDl$-++56^(jviF9u>774|vq-G`m(}cLWFe zqnCW8`79023alYt6?dT8zb8_GLXwfZeW*MOxS$ErHVV$)t}XB5EB8p+RjNI6!AYy& zr+0%TivaA#=c~h}IB+zxE3MrmuFeS*Vzjo5lq*0*bh6<}k5*zFF_I!@soL0gmM&y1 z_UEk$bO9-wk1~LVbO)G5y0$Y-@vgZ}yqBlKGyHcHti&p5(uCA6ns>!dq??`UHoop% ztrAc_M2%Ldx!w3-kA$MI?L(vpECUy%wsh~>U?@Y1m@LX-=~$?(@EG~Su%X{;OQx-j zM}O!YY4WIwgLmSS=o%N&F(uQ|m;qv-y=)s#HdpCAibNfS7*!*mx;JD>Rw|_Ox`4xT zF>iH}kzU;qVNn66e8&xs=kCJE$J$|$Y@@~hqp3!UZ`P{0`4%Ad)A1H>jF*;KV^g1a zrg?tH4*03LDe@GY7l5bZCDX=FG>?cE!?FJ%YqhrVu69^bXyQv|3deHZX(yk?=97kF z&m~*#G>4m$m2FXb)yxd;`nhmysnIzEQANgQusdr?X;9!zRemIv|t+A!}_xec$L( zvoCW_TfFJa_d-Ts*GVgKCi};);f99B2hWm41VCcjyt|!l<{u4m3Bz8*^tN1)Lo}wv zwKkE{D_DPvREEjCmpbhs_`bR-uAXc@O~1-dsofZf0zMx0?Ws&ygFjT{W({ zoVNzSSUY{}fzLZd+G+`?x925Or{Aq>s;lYeO~laibk-oyDq&w2DB9{X6hrz}-}S5o zbgZ^E3s8pOfm;&A{8TJTra-bX+PM2 zRqKSyU6vx`5&N4&#`VrKE)ywb82Z=@_%hK*CIyoXxWV6uVS2=!IUR^SVvL^ape^Xuh8f1v4(7-oY(@s9zEcde_ zZJXGZ8=A};Nw@&gFm_|btZGAl7G43-$TosW1M`-{x()5u1d1f(%-k(qTX(X6AwpA2 z8PBD%%4yP>Hx+jql%>}lY#UoO3G|!T*Y6s;rwm*^8Z##qWyytKMCt^ z|4(kBohwX;y4Svk{<>cR*5A+TKQRyom!G-QQJXg}#7?XUaSTA_?$yn+C$A)$`3k1w zNy5Zi|5*RYd^~YKCHs=NMzrMpx8nIm3|M63wT&rx?DikrYCbIM%!Uiwfdl~owrL6M z_g~vR!sEfwa>C;AX0D-0g*0{FB)X?BI5sc;ul-8IY2V&=vCv{_ig3uDnVf;4j$5%G zT^2fZ(Q)X@j&oEBlAtK`*EzBj3q2dXG3wtgN&({vLt_dN@>u!6ch^MOgVr|Vy9F}Q#t z2s^%;YzdUm|Bu}B;sH|+LnZieIEXl?Z9BbOELP zqR`Ys<&1(Q33k^fm_9q^U-b_09JC=T?Cb5z<=Hq|WGhvhF$wWCqtA2LB`#s`@~$F- zi}veN>R^S6$6$|GbV<1Mo0x*Bk>gJ`m>#@dSBaM%B{KQoalA<8U%HXyBQ7I8Oe9n?gnJs8x)o_SCx$4++cDZofo+0M{fL2iEFn2`1<8iX z=UYm}6kKCOw~0n=mt@n~hZrlQS&=0lx5rC@AjCqlLa@%>%jj1kJ+=Y6IHhRY_# zgfoKgmg`H1)9!zz6zAlWR=d!Wq%siEyUFs<@{MCKH`@3kDEkN6aQ)3(KCj>6eSZ?2 z^4J_HTj@4xtL)+>A4757c&q#EaR**t4iZ%r)j2VVV;czwB!dru*~To_HeA!^r`=kL z)*y@{a(-`m|MPV(RGg`;b#J5CDHSO3CetR3tUf!V`k1j3rl`9Rm*FxZH6T2gQ4l%V zBbLMWYYd$uw^6hUdS!)X@eT0qJXwrj?M8W5WRbetGCCuiW9!RKBVj)ndgN98c)$!n zh>?{}g1q|4#19po{s-)dF1oN?>9$o$;?Ntvz4+F%YyBp4 zi|WS3?itR@)uQ_D0&2!f_ok4kw}~wZ+7Ye2b}B7*d_z%U+p;E~@N=a~Ioq-gctS>) zn}w<(=ZCqojJv{I38{G8lE-{Gh*5P{ZiY zb(tOT)X;l7d4V8^KA+ma$0#M3TGrawc3m;x@kAZs z5wP*AMTg`T^Mzq`eqSJMEbLhKvqnyM`5$GyyHA*X6bk7-mBIuf_HKMR1ccPYL&8!Y zLa3(Q%$zProO$o!jjYOSPrb-}p%UnYlzmR?`fmugf(-zRLRkuak2l)uocZZG8L zI2lPC`Mbu2PB}z0aqa#&e7s%xkuGTJ@l{lv-B~6LF&Ttn8&fNK6p-mkr5L0_1TEzn zYk7Z?{-A3~$5nG0?|sa;0UEDFj?ZGvp5iL#ED4a4Ye6|VUOIih0yTR%PZy|14m{t2EN zDi|_hQl;xX2rCf1AQFhbFun#nl}(8F2#=o^o1wHGxXORg$B~}aH%u#Sabn28Y20Uq z@H#2=&JmMSeRZz@N0+gs4-oZAserZ)R_BG9AV%*kvDcb}@g}r~?vANcalXNGDiY^A zcSG@*y$C(;9{P6Dy!aE_8Ti^%?HSH=HU}u!(mtf0os4EU@WDOjx=%=y>=M?VT-+p| z(~O^Q^s3Z!uE((k12^5bIQd5G&Awc0<5fC)LkLdT*^fgk$>-b5s?n+>8@JbvEA@;n z#!Nss-|iyhH=x8yn~CI5&DyI|2MR6^97kJh3Q3jt4T9iXn|o@^G3hkv(KO+qtq-ig`jy8Fg~ftphY?%lCO zS6VzCVEr`te#03Vi(NGwy6qL}o<^*x&p; z8}~acaa8YeFnqIcozLfr7=$)c`10GiZ1B-8(9ytgZ%>8b-B|j~Wn3zTnA|*zFdPO2 z+^(A;js5FrSnUoFA(xoQAj8>pmG;LV8dV`k?yUE7(#e|NAB@Wol!^s)z&R}bg$DmE zM5I~?a2z?PPzkRuI{!nJeAMV*#U}DNe{Upyo+NF@%%FXzw)!fsdk-bb`LqP#m$S zZAE|6J>LS&U0p_$8X~RpOLcg|5Lte!Huw37;1doz64(=!{lYwL;+~G&qe@7pw{lI+ zj_!B)K}!HixpdjE{C3F4nq@kzottm01MbnE7jU``&iOpGd5$kqde2<>DsiS`JPs2- z%L43lZ~nm%v;5f)<#J}?%Pc|f81m&qTo-V&*v`St0U3?RNM9-bjCetprVfL3^S>aI$i@BoM$9b^3 zBOMvZFkwC}a%Br<4h^HCKgF@ZQwp)o&FZhXtXa?5Cuhh!hhuuYD7R`Q2b@#Pq|-j#CUrUA|V~M#q5HO-=HU2pn=zF@@ebP z2bheS;vyN?D=_{`?rQHY<>%Y02iC`$U5o!#g-Q8e6Q>h|)XtFxnyrw!S4;i3jxhdS z`=wLHw3CZQ?TjkXm#tr<^S=&~`*bW?e!al*Sw#9S+T%cluvrYh>>a?ip#`zG(AkyA40{Y-fnO8#KR;Lhekh_ zj`ePWQ6v0Z)=Jby$#6+ zo;H87)1uV}wT}4S?Q5nNJ$Ef%;>{05w4W*9nA7H88Ep$TA{7N--`_gL);0XHc^!;< z6bky5Z-McR=@dDFSoY@%W6a(!-XPA?96>2L-n;9=H5gx^ZhPpwhri7ie;v#{XXn>L zmqPXRT!SOn&Vlbq|Lo$Y5x2AB$8G&AHzzt0$~Utmwh$3XcRs+JS0w^H-mWA(3cO;R z_0cJn#D)_Qc7u1T8+?$X>gXd~-MEQC_EF4w-GBWqwI7@@Z-Aw(JcwHpT*6lpKGtRSIf9$Mr>sRqkq-IuPusR!3I3ugo zu&$BCpJmU}fuO_lKt>WKt@ji@G{}RH>(K2%w-4gUOahfwX!tY2?~U^0+lU0|JWis09N!Mb`B_G zJY59j*Jv#{wSUGC@c7-69N6J|jy#HwdW98q@wg-Jx)DN*v%wJQyPpuiPwyKee2#*0 zEKZE66+6*ui2X`bQAOFFXJZ0p+ z+614wa$XUqb;@2}lozGtUhk7>Q%+J<+vI=of(YdSgmewFnjUzIsMn*UhVm$!-;Jtz zYvPnuWg#%QRyvw)}NZ zo7<;t+qC;DfCCX}q(f)EdOSz)K?+#EJ+?JvLi~=E7_f<~73yqp;Tj!wx)4N@F8mqC z_QSj9UIupe8vLOb>lI`;3Kl1hO|Hu15(mzBQaqZCzYD;cSBh-W3>`G2-{{_hlxEf| zmVvW+r$5hte@|dfF10k~E>5f#b?CKfcjb8go(~yu-h%t<-N=`ONTJE62T`#9?u}=( z7?ao{*b)xmZzzkoc65bX`5s=Rho|gG2G99LJqhvWw%d;7iI-E%E<>y+Lj{>8OHucNsI2S;?*`;+@WmG4 zq+U=d^%Yb*U%2-E6G?I=Ucrin!iS*n*^A8O`fqy986QcP4M@q4yWMa9e*gyo@HB2s z2==<8=t)dsDCN3i{LKGi>mA!83)*(!PC7=%wr$&(7!yrw+nU(c#F=Db+v?c%#Lfg0 z8?$ro=YGDt@BRT@y^gi2&bq3u6O33l5Fe0Z6+=eeUTo+9EQ9)a5;qp+fG%pVF4QyS zi&=HNCQQrqHpzhFsiW-`fj=5R0D>1F_B_IS0w2F>d>KX7$9@Ch9x8d_d}=yfC`z>d z@s#|Gsty2Nd|H+t^C5Hdf48xuoT5n*m(~uXRdV#rB>>}2Zl_R-z zl|PetG8E}4dLJV%yMM;;=g0oY$UgwhWT(h&z?e%xrwyPet*T^saly=l?6&}CS_Lt) zd|iW)(Q7Gj&Qk{MO8~4eyu$I%Lj_KuHn6h^hKpU^HfH2Uw=DSGwkYb5u8aGo9y zpDS&+G!3VrEb76>!Jitr4E_zLR@rjxYF?R`2v=!buVZBAk{loMy_yv$$e}tI@?2M^r_zh^xK201$R@t+Zb8D<_rn(|N)*Br z>n*lV*tq5mB;U|I+TTZWMP_{_CtT44%6#IZ0dw`;b3Vl}XPFwB575<#G(IN_^g2_U z=J?mIu^6uJ{^sH_<_gYTFd~n{j#r_Q^3S(PQ)x+AUV8V7vwr{?>KO}}e#mP4o(=av z!|+o1sLdTUKqb@o{2lkf!F>gd-K zUr#dxyN+WQ2+-gh(B5dn*!}8>lJo!H$N3Z_v99ia9glCqLevLsi57cfbzTPl%ESX9 zFn5eM(s8?go6*$x8=RBL$#$?BPPQj|b_R95bRmW7>e1THGDNfRzh%RJ;UEtP4=Xb| z5v(aRD74tCXF{;%7Z2Ux3lt%3{}}B6B}{`Lr)>BCLWJckCduSmpu&loey;wXZNY;B{jausaQtBQ zcyLat)`=kJm1oyQKaf_Mz0Q~B@TD?>| z?Ms9zVhFZ+^SwV_u+%5V{5&pb;q5dIyVmE^oIL>|-6#TbprA1o;{(($S8{eAB-(4gE;;R7p9*#7LJX5VL@xIny4;WI$A_CQ=)yoG~2>iV({K0iD$^qi#oy{m16 z7=}c7cIAMkafFs`+aeEi!N{jGa(jp9!6;A6`AP%KfalZ*wT%P+3JW}IUDPb}j+)V{ zC)#hm?|c`1uTegC=hihiVYep|yr6+BQRUNv2eh>3UjND5 z*)MH`xc;^ak75PVGLxadgJHs+G;Vz-cC|~Vw+Nr-P zz>0a^ycA&Sxwjgy6zqUBn#Z4Y2An>+VO9*DMNU`36a71u8LYV|?^mf^rgMn@oJ4Qp z6!MVREhdO;roy$H%=;Zx%l?+*Rtgzh&>dTDz>juY_X|ns$Y=Ih@QI2U3`_M( z;#t07XMEzGM&b^(yR+dX!5!aa3`bds-v)joptP+-euyM0LX?9Qe(tAsLVu@9|n0*Ay-%UraX1+S8um$L4mWlXJV%>LkT=ohMCzX z)K~D7DrbP+j@vc!)4g1cTz|pT?n$?vBO-GP#suFn-NJXg5;Cc;^tEYs{B|x7^@KF) z*P=Ut@P3w6(WuAzkG$78uBk_X^ z>WOFG2%%s&8Mf2F%t^1hKrxMOqx=s!Q>NJL^J zaiILA@DH$4-{viEnQLnPMEZ)f`+=Gp2<;{KLV<#=e*beG<^Gr#UcWZ%0}AG*&c97! zNcOve75A>luN@BTdQpv_K$0Oq-(SlSR?F)gYU_{# zkrgKwDzL{!tFUC%y{zMPFf4b~eJ1=ePN$~4NnqZpN^s-QAc+Z{F7?~4$&l7RK-ylnRm&WismwrWP z+~!FjX`w3fT7AVMrA))!7;0LWf%W%uQ*Y!U=_u z2x(tHIOcM<)w?vrlR4g?0dN0$r4;5$P`;zG52(zJ&CWDFsIsTM_50>*A)K^pIDu$WZL)+2-S)IUMq( zoOZ8lR#JA9%`Sa`>3kZbZgl31P!6|;#9U1{Z|^ho54pm->OZohF?Jqo)83Uj9NUD- z4(f|o?k2Cr@HbBpu`phRU+;{pp7Y^wegMxdBZ6L*tWLJk4vw;Z^F#ek&e(4Y@9~?j4gxK8^X&Sn6gT3=DmtK0(&-e?2 z=!2%ONfl;SprZNVmI2gMKUA$xC-r06cQL^Ygx8)9n2b_o`9_7oq0Jg$%iPIk6n0Po zu-XwyO^zvO$x>rtIh#)~xT`EU@OmUUy=|B3vl#j_L#q@bJ4`lyiu!;owBxw`ca&jt zBJ|6X`4IR9w32OK%Qq{WFX$=xJUVN;1W70%Qy{5Bl%QQ%gN|4eVc;@M>7!v_rZ^V= za|tea+cb9X`xJkAl&f#Ima?6JpgFAu7ruPHzW4p+JOYARmyJa;cZ;ZzW}MoVM6SL8 zhpuZAk0Xw<7H2;pFU_A%s$0l8Mj_WeRfck3!3hI{W#3Rd-q07^O%IUo6dxn2bKQqR zVW%C52O2Anu}pH|_>K;51SY45Cm(7f?Vc6D2MCQ$O={K(xo2}$v9CQ(XNWe~PjM)z z*cM3EeCUq+dSEokD}uyqRWl$pqLHihMzNpTbRN-LCTk>K3^sU&MkP#nxs8AT$fd)) zPMaVZd-m_zBeZ?TSV9G8cyaiHL`AgW*@8LWk2(25uG)tUlQ_mLzdT^Pd_evx`Xo9S zIA>~6BK|$9t1iwn`cFOKHwm?fO6se;Lll&V_!tZUB}eUw9~iUqKV$FEkit+5wDO*~ zQZA<~{-=q~EHG$!9SyBb*k0a5C-mKG##XJ#HzOk`8uC2=x|G)_z#s>l3V)kpdZ`^} zXyp3x^Ly7n04V$%_?QEgNxNf|+%`8UFdX85@xl!6Z$|SNj*F=n^?|0#(xb>p^#%i1 z*Bq^wjz6__esGL1{FrhDW1OgLDBSda_vIHy`@4}HrCXpzsw{rqaBK%T94oz{v4R## zkhVL5pipBx;k0jKtvE)pBeM2e30xX#2XnD<<=x5q?Z$6cih&z{2)SCa7`B*&(^KW?z7tX;Yd~eB9ub{ zi*V7iq<(&{&R(n^G0iXm#7(7aP0?IpIytRH_VvclCO51g&Tdz3J&0~NdwMBz=8$mF z_ayfPO&~ppd%J}ssr1iJPy=izNQtNSEO7466Gd6KFjrU#q?ecEvHs2(bRwqXF|ad< z{uUryUgh)HX|;Pbj{dc0?0XJOtP>{gcS1}^QyCP)hf5-BSQ-6)0Osm_;4gBS)>oW^ zd*9B-maT92S`s-jB_)Moj()csp%g*tH3c6a za*DD7nW)si2l+PwoOx^dQThPnH<0(2#ApCRIozoy3RRxO`=kiF@8HSw5qMSXX@ zrAng^iT8{W=^$P{vl@ay;@!7;R|tfa%LPkFs7O`8jOSu|8hn7ft6ucn?rJ5v+&I?;-nUY)bR8O27lRQ zo$a|(>VtH|4#r+RlHIspiQsxofL+l$fxpu2^7sy|MF#xIyN>u;MEbBS7wz?-Y@S}p z`WXK=?9WT#x%W+2rYbSu)K-qyxijm zTByxy0Lf>L7spR*D|$m$PMctU+llQT;_0KL#abm#LkwCqX>kjEi9TCdaM^;S7TiJp zVU`6kq(bED>mrwLu4n7+{<40o>ZJxsxfwc`U$pO;H-QIjy*>y?9F;d$ z7N^NHp^<8{<-_B;VC13s+Xkv&t|`3^0~4J~hl{ylo6(BwSUR`#I0H6O`0pDU3?I4j z^t?RT`-HmFCBpsbuG;gp0brf)rpqdu#&})u3#C>Hu0eVV-FvfFBhJB?#H<3$STHf-V^t( z20Ay(>W&PqjqQyJFt6@9 zdk?lR5_LF~v95u)CMsjx>9=VBcKgp8z*N-v8>>UgwW!#z%@E$BVQ;lgw0ML+{4-)L zjTc1MzW8U1RePn6>%D$l{ZBe6xn1`{T6qzM{<-E~*oqKGxRr5vUB~ooeD%x+Q>zU^ z^?0wKi75ETrc~Sch-Z+8zOcH836c4EH4e7<{Rm@z`&CD)k;_7mYohQ4?7X5S(Dyul zR4*oCOtdqLgZkH|bDQA=Rh;vd)#*67WAUNwn+6tC%JwmVm~$vFy+d!VFo=JsQ75kP ztE>!FU+i~}Ae#_BKjJRe5`qIyUPqKGL&c8oSFY}d`1CD$ULTc?y*6)VKG-eFq>^k* zzsqPQ?4(dDx4)+iOMav95X^I7AU483=wdpC8l=r|tS3kjJmzXaV`(8+S5^9Cr7pb@N6Y{{xKe^o2k!N}}W%Jv(PJU*mMuG1obSJhaSKrmQ??=d8%`#0qNwaQpiMZS0PFNTHeFBH4MYMv7uqHXC zCv!4)3LILp(ghlguGmB+N;z+~UP!$^)a_ko$~jTAt9VMMnbt1;l3<@{?j|BSOFSrK zgdQ^#O%3EwN*9)k7|#HXev8e?(DiUQNCVCe+ly@I7DptAnQ+aSk-$*CCl1XlF#b^lO$0V)INx`Wbaz7= z%q8z1z}U1q++kx&ce>%Y{~k3-P=57F!W9iKVy#`f5N=VvM0)eEIxp$(%DKm&qc0Tt zPlBJugt+MredrrRbA_u!t);vZ;AmzSM#(|ws%jSG^};9QJ7|kR^>}t(^Ku#*UKnoz zO1&ii>zoAZBTSG%y*wS<=;OQN<>F7#lrb1M>hMcMpZ&xheglz{K@ZX0_Vzntz3K;w z(z6wJMUoc|?WA~{sTM?1X1uyt1jVMP|n-Vo7KF4*=gBhoIF4%`@8 z;ge>=NF7>zgd*i)!E(&(o6akq^4L#<^Zms0iC+82$&jsc@T8teap_#fLa86nP!tOF zGcNW zF+c_W+hHQLXsvp#nZm=ZUr6EM&#*?Sf-X!_-84>9o$J&`)r$v_(wtx!L&dr7f+X9E z9lJ3S7{$0SO{+i4*EyrLR%0EP5J3|Nx0A>0xfqIgO#_yL*@Yn*4`XrI5fVtf2F{_N zyLDcC1=4{DId7{BDJxch{)vFA(LLbx)U|5eTd{UFA|`G~wv4}5CU|FWa5D~Wbr+9f z)vZtf7iwW~@5?~9$yAk1Vg6FqmMj!Jno42SBl5-wMbIVeq-V?RKs}qwUSVywn(~g-5O&i-Vt0p;AE74;^0^WL&&3aylCoU*g=0$PY2!}C=F1%Bc1EY0>#pKpuOQ4a z?ix2q&}r*MmzE@Z=X&Kfbl1zm)ke>4UBY%tKh+TKNGoSTvcxgyx#NZ7OOI<-eeyg3 zY;5>m-CEIgjjM5@S{g87t?e;lgbHg^z@GD)P8?vuLx0{()Jx=}pQKx{*TKJ069aJ1 zFPwv)(g$m*lf+R9>S^^{V4a)`Ek}rnSX_YVYZ~@PiB)!eVa8V_4Y{qJ&(WKgZgPt# z=*(1+hF3Cekm2n(CGMEZoorFkEhIdQ)g_RW>DC3*<6L&zV(XU)yx7S<$HlWiXrWY%95!p0|ci z-*;(|$9kX*ZFr6TBJDdQ|9D3{n#iO6<2w-6S}vFulvT1AxY9Z9^oYwTEYQ#O0mtW& z{yNyy)Won!5-SfCZ+)mrEk1XER{{)eSm|lQBDtmL1+s?w=GUitAv~PRVO#e>5Vy;Q~-vGC*USnzU2|npP@@J4J_H1 z;egPIg4(WIVcfS<}|Pn56M+;i^944x~!e;t{pOFDUW zbNu)x&9B}p=wiew4bpF64`ssjbKekTF8PGF+ue>PDyg+kBz-aR;G^eKc34**6#ISa_;t^wrZ)=b{zk508d%vHx2ajtNWPla>v0~901(MRfcpKWA)H9r@BC>H8^0m@lHsxHPbv0mgU*U1+%@y(CG7XZ^=vL0=EwV3cg1pKt^ngOi}Y#4H?zku35S_Wp1?yD*AAYT>`K0j zn+tFaG@#GsV*oEhP$d5MbNf;o&a~3+Zk3J%{7aIB&M>I8B@Dt`GEB5uoG#b&(W$PV z_yh0~_f{42LKandR8=0sLMBwY*ZjUdenviABZq>Hl{r`|52Pz2e3dYFN1Ep%e2qdX ziAD=!UFy30k^Fh}n{fg6nWN|GTkXqW4AwLR&f17+L!LPq*AP;j=XR5qHM3> zxjeit;k~Z-cLe_u`ri4YbC`UvACKj|Sl3@L6DwxC-t_1h75kGz6@^Xd6E|pJuEh+A zlpzUf!O6c(X{uy|*vD-#UM&>|sFt;vtr^ z9noG+BPw_0M)|S3dUz5C*zVZPkj-m0{Om@i+{Mtf>PQ^Wo`m-}UGBzTZTK-OX8np4 zB;sq-zP-rOH}sB!f7&wckqtgX5T_fu%|17*BZL;64oWZOdB2reIHe9)xkQ<;!w+c{ zUdUM~t&v*4Pa$5E(%{L{+RK^~(U~IPF~=l{MXVuFS9Lu%L20@eGVG#g56%(Un$j@y zyB6H0nkLkfr6cXw_BJrS5&F+C)wFgJ8zQTNA^9$7jTN>ee+jVg9iFn<2*zhCa-J4~ zY=z~EBon-UBS!H^{2btVQ2ohtufUdIg=S}b8K;+p|5r)j?Q$5K)Cs*~C4F`H@4Xsq zgY%46u}Ucuz#jG3fS2~uFJkU z_Vg_?@DmAg@d)9$I+=nDrWd$fp1$?ShNjld*J;u#R5vY#h4c|yn(a42% zH8yaC6YlpR_z2<|KKqV;L_S3+jQ=A_`3&I$LO}xm6Vv%Wq7+nBV^ZfJm81ez(fYpK zE2F?Ur~fAGL5QHf0GBxygLiWU{3rpx!f=J#^iQU^Ct_N=?Of$?*J{L|YzpQr*IiqG zvpF+DDmvD|u#Glm{~3beD)W4mv`k&!Z0*BAM`0)xnbpFQ3I4I(iF^fAtSlgleu}b8V1jfr$Sl>rq0GSWW$G`K!Dyr zrM3xIGTV;QK=_H~e*g<+Kjv;L1}ES?9z3Ir8CY}v9y`WD1M#cmgB}x8h)V`4(N0+s zc_79BTHhzB^5KWcHwfYJ&(q)@B6ICq4b7PUR|*Huw7aFYP8^o8witV*-xk?10%OFR z_PfV=Y88gmBw3V-ZHx$eyDsCz)Y+>!Ggf(`wIh6n{!F7v^Ci_ zRHwAS40Wr{;VcZ#pDN@q_+=_(nl!FM-Yi`gv^)NIsH#ZX-RU1Xg%W*YOn%?onbU>^ zPkjICY9AW_^nb819U11sjRa(@Ja0@YPD-*Bd(R&oF=>Q7^NU@i(8ywmWdP*NRTH$tT#D^_-dAH7%-p z7wu-{9#g@`8jJu4j!v-mD?FrQy)h%Jhz zS}xJt{Gi_NBAY~_pnl*&ggb9ao|^w5VB$Tpixl1+#dsR9#10HVC)_;roIziP8!|7-%TB=i{_{ zHk3nBMfPUdmldJ*euYDDnmJ@MszAG#)Dn`GD8$r5Qe|lYKVhVfOq;h%%_9X$z{W~9 zYlFVXMVT;3_O;XEszC_$*l~t1WcDrqr-4z0@H^#!{m73>!cWOjGRD`a@a&_aiYDUW z0D_)PE|FgJu_jAk&V~9kfH-M0)YaQp0}!e%AUs4Cz-9Em6RCO;*--p?6_ruHBGQA> zIDjU$FyBO@-3vijD*`!@P z%|F1N77a?I_h#rFfR&N@%8rMTPO5n3Bj35&_ce`+M zP{Zpg?m#3U5p!3qBS+TB$OZTs!qPSM|tJkWAr=vRn_3JaxM6Nzn>;tS6O zKWkkO9cN=j2rB9nTjVMAG=ffs&G+IFq>|YgvsLX?UMN_jMYN1Cs|4zX_@EIEuYgF^ zF4jf{fLaqG7dG_Dwg7(iS61a?56tTk*-Yu&h%gr^1~|UdfivS+27l3Cc9aycTQR2MMM_erb6cq51|dz@POpKl`XGP-16%$r zaGMOSl&6uYRF-L+3&gGS=aE&6_I1NGvR*+2(XV8V1oYD@OH*Aj*310e6WaVjNq^ z)^b%|XN`9L{ct-s`kUaTJ~2os}p7}iA=0Nz?fY6TqQ9 zjEYSyDiw2TVZxlTs%Jh6LxNDJ+@cjgi*H6q1wtQlVQ{(v*T^HDFIWcZBijOdNArXYcvF@^H8+D!f^aO59w`N3Oc~j>32WGt zttMeH#Ns<*lR-vB^aS!yLMi4Gyz!LMB;EB3j#Oz5!$&cHeM`9RI0Mjjvk=s$mOk%@ zq+BAznxpRU)k=kaQ#2`C8l zf>YUrOc$_U^R?R+JuCx#aLyuWV#=jkDN`8lN?BpRTpd6JA}2ySNe4QWLF6ODI7Y-> z4lzTBi5}jijTA;FdaG%T0l&qpv^63)L5T_o&XrgqMk1d&un|oB`XE>5Wb5eIDIXVO zdSj67i&p`|0*I+7ct)Y2OiUp%xfZDOGv;;Dzy1}QOQg^V>s-OdjfEkave1UO6j2a$ zjzcyOArtJ4DCS;b#%X7DgQOdTaK<9&tdY&pQKsL8@>WAIM+zhJE@~?_7;aU%yJ3-m zm&=z6w~6xLBL_NCD<9hKFHm3-hjcGNS_+Y0em*1t<+5co0v>IhC@64lkNns!Uo=+1 zBxh@dmh%{_{9`;Rk+Q^nRL(tY9@WeRfK*+xwZaaBif{^h{Bp=jb=xkk1--`z6^9&T zboBJJ^`>@cEZm96~AX??lL%%n-4Vkc-8p$5t%JlmnH6M#9kZf&W45jMo7 zI1Ix%8-?flq6SQKmVWZgXjtH;^@kGwF`G(?78&@-mBkZ=*oTaekPgbpfL-Tm|Xd?$et+!BYgsgUIb^x2lj4A)Duo3OVkISYtd&wtIe{Yv1a#& z?^rPBKa&FxY5`_Xu(1e4$oMeY595-yHUL%=VV!HaFP)}Akl|!x^rSZ+YuxYnRcWxn z5HHYaz^PHS3r-Ua2zVb!FBwu%890?YKq1^pP+Jn@woy0^;I2W76zz@+RYg$+P$r68 zBbK~q77TOMvMXq54rrs6gt~M;PYmI#6(7UN-O=v_aCs&p$=q@3N{~2L`SA9y)AWd< z{-k*K&Z1V_VB!4IHR$IS6@ICOSV&s~FKW9xA9v0pT?3_ij*V;T{mhFj#*O>ifj4OF zMmzmF=Z47o&N*SRD~jQbIs<3BPE;mgd(XK#i%!&d)I%=fM5R6yh7si>!2|Oe^UY z3zsF>5eZkvi4>@>xpP?hu(@jbQ^|#Ry0ROj&P#*4aGkb3`CC`tL+K04aFsi z6rs3%5~lU>Jp4lg`dwHt^iX9yKP|!L)2R?|hrM1#1`BD2?k#oV@bc8j zm8q@&05LgDNx=^ndt$)wCsfk^ke(ftbhIyfjt2j@SVbQqr^)c7NPzLqQ!JR?nxlHPWeVOWIaA$29U8bKG7I!}XI~bPFIPjTc80RyIv*G9yFBEhY0UW(Q0E7v=D z$)^~`$qNbdOW7QP9y=D_R3Lyuf}pYnA?It2w{J5paz3g=J|}KylT4Nv26x-gm(Gz5 zvfZ~f1d1XB#e23FGI1k0G96y1HGmeAgb#p?B1m`^2@Qf58XA~BuSFbBFLwCFkV!K* zJ_n2Mmq+QF_VW>|w+3nL-~jw?hMu%KUR`JwAr@an?fX&Wf1wTC8-ebtssg-^nCqT; z{U}X04{8#Uz#brw5F#+}AsovXi)&&#FXDfpO+=1@DO>FhnvJbQ*)*?x(~Ciq0HA}B z3{Aqza>UwufaKRJnYr1q4tS^u1m7d-VZw_Iu`_y7h!GO)G0Bcg##XBg*@yWTMZouA zoP?GdlAIK+n^>IQU@?I1Q5TkwI%-Ng4%DQp$hQGp>LFY2yO8v zxKmpc7dA%Ib^UwX{FR~}ogy|MSPoie)K#>WEWdQDYMY)JT=j>ek}3@5doVrgEZjn2 zXsZh*1T~4%keh zQQ-Fz*^B1{NH%fXl0^ZcsnFFX13<=I;sAPyqDX&zIN|#73MWlcJP^oE zIGO{Pj=*cIh63dt5R2h`L{R2j)vy=IQdfL|`ok^}sz7gFiloc%5TD78DZ>SNs`~F+ z8A+l`ibWVwuwu1tYSJIsy<#hkb-)mVbe16@u!6PfVHGOkjTU7AdV!4&hC!odP|ERo zIq9{tust$`LwLVv>5BAKirbt+>Bd=hRKO|qo;!TFtKet;o4YOdd*ak=QEbp=ySiAL=Hti&X;vJEM=+JQ64_;lvlS)Uvr{{eD= zg?&0H7x?6oGA0)LCoxu-i*sF764jrF;V^DyTVvyAG%s9qZfQgl1%x>RyHZFNpqAdYV`3Fb~WY%UR^YW%3p>SlJK+YO6T zyct&mpW7WY-IAuD@ijrwY}2RVscJVrP?rzrYRw-SPQ|uHsswg3?%!Q)t(i1Hw*4Vi=;( zz9RHBp~XQe%1EK3=#X2{=Pf?dj^YgB*wB*%B_G8%-+blSF_}d7^38dRm^iXwhJ)h8 z))gVGTiygavQ7J#o+ZV5y|e>?xS5a!`GlL7fVYdcHORgYdxXj|EMl!Y<$K3^G4q3$ zg0G-+d?@HmJw#MNwYt{|aNlN0*IrbYGsZ7`=a08*l_ufCLYg^jfu#I+(3PKoGcy{; z_3#JA`^E5<*+rxPHi&^06A&t<@^xi4{Dc>|q6-EOlN?0)B?W7srGgWQw&eaHax*fU zkh5pAV^-D=K4#o=G+#JA=Ny^5j;>MO8LAx)Xj21yD~nDPCF*4hs}>l3>V)gzw@ER& z|AO&9gH+a@HKP$l{vniQx48~wnw938Q~O|29zZ$?z4XYm8p|NPgOeHeE(b5kgUt%( z_s0Xgalg8s1sBwzdS!a5$2_b+>rk4BqGO+F{{v(-D{(U1v3K!WkQxb^GxE9Q63l%#zr7^5nH7uRMrWglf5L{}v z#aisqYHVN}jl&8XUnO6%JFM{iQrd@td$p%T3A)zWZWfnLhrhRGH z970Xfr5PZSs3^>!696XGyiOfi!cg0V&5Ny4k;u!uWco%a(D4T>I}L!NVA$?V3|Q(7 zn+TT~T^Yr`TF)$c!z=wml+?NhciT~?WgMv>k*6J0_tm~fZST`XTr7d@Ko^>Ik?TH! zrc~Bsj^6^$ZcpUXsBZ+CgW_$!+awF-<7Wge7^6%MfLTJdQA$eg=W=k+?WI?Oz^<_u zF3b0oj--pvYSI*Fy_5Qc#I_IRclgq$?VY{N$~%!RFZ;CpNEh^61a3MdA*bw`%m&I3vHdpxN)5qY1LA4frzDySj7TCHmU&YD4I|f|2Tl zh~1fh)+sk6gex{xi$;{u*2!sG|6!KAiiPu$*ZO?+u#PMj7?f;O>K+ra&x9Qh@~zFsO{8{Lu z=$^?;8#h@AmTz&_k$=|}jMFN)4|B(S{)(|5bfR(o`|>G)tZRhtPeP3}qw4p9dam=4 znB!CY4?3f(6~V{)pGN&JWO&?SHz~Z!i4dPwPEmmXK%f&zzBsQPMw{eEEPc>sh-hGE zWxB^vP)>!oiCC;y6+`mM;mk2MqE!KT8UBK#*bDiH3nyCN7D~)CRX_E2-tGQ??zZ*G z+k&>fWmHCP~$6XX-<-VZFfhdOF2u&#_d z57BrSwM3Z_8e~TUDVdh*{{gsca;&sY!g2>BQ!&)FRpX`$TKQ3!DukW13&(tQ+@lL5nYgvs8Gd$`ZG z%OA%RH$pEINlX4;5SfVB^MatYCP zhQQcQr=dFQKV(%+uEk^*8!wQ3-yJh5G5N)eigq_FPF{=_k=cC0sf%%ric)oI zdLhCCq15-W;usiShkOQRoWb@v_5*4T6i8XE-^3+xXLPr(S@Y_!N0B$hoQQK!s~7CM zdOR+Z(3Ip#iaOcgP(?k>A=ACkAqPISa~skq3!w&NucW-lDK?$ijNy$=)cF$g1NDwy zD|+dh{cz?Zh+CCNB7{D+xn@}zz(Z15lMLU<-O>Vr#;R^Hcb77Y_S0mK6`~F!afR(f zv!1-YhndbG$$eN86y4%}nf+z$kq*n)0Kw$Pmu}_@A^A!F;ba1cQU5P^==YfPKzg10 zje`A(VhO{d|G}3(tqx76dHt>N*l2g)L1x^~Dd{s7gsY6HH5|E#z9#>xw;}v6;Ra(_ zhD(2zpF(JZ*5@}!*5jXXbwpE^V^4o+@y4%JJVQ98yD6g?0nS#gHE&-NYoEV_jyBRu zBuGI*&@$-6+@x4LcSAtTg| z7nZ&Ym)TiAX^PR*hgVKTWs$AqN}LnE{Pdl~HWgx-{zOo7VK(Z#m0w4yyjbEVSWI`+ zFdr2{V-|*FS;fRuoR_2}sG>+??&mbQRU#Y1KLDK6mcpuicI}e&9h1?G*0UdC&AG{7 zIqlAn3X`1i?Yb6=Dp%4JlW@e}&lUpXz(#SPAi3rHt)U<%5PFCioN4(FAh5;^2@Od- z=+}$J3^>#ZAs0%{i{4mXvDaNP&Jv14+*zlH&Rz`?A~)?#oTHMIrVQxS@id9G^rDwO zGofaU(%{?VK{o082VnESz;H~awjxw72mEj{;Q7r8XMveRX_`)c>IV_{#@s1dfAejx zwZI+##Wvaf+IQ2k-zVwTNM{Nr8X3fm&1H5%b5t=G3YZb1av}i$bdpdDZ-dt-eR$7% zSg_KIPt_B~VMF7Hm2v}pO~~E_e4##lMR1&J( zYof%k5vb@vj4S5wiUJ^EhmHC+m=?W=ry-`jk+9kWafugo;DATe*QLRt$hJ~L&hJQA z=1G6Zj&uTM}AnK_tXSucLqCM@rQDV?$nDVV>xka>fV14l3?*4nV+ zdp#q($G2Gq1~aK9@x$QqI(h}}Z@^$fwy+F#nBaK?j9@7fQr_qE)o0lGWSXgbj)6~r)P+jCvHEW1Z|193cPq@}uIgX{))9@%!4 z{iW)h1(@oINSt3bN+nScK^zj;XEAUn66ws$We+SYVOG@jrFyPOJ4%}bXb!|nE|1v0 z`)O{1vY6Ug@j%_%sUI#rfBkS@zmKyme91H;U*Z?+Uhp69+|;429yPHM40SHf*%Cf0 z#VZ4yD(n~#&f8$|X{UPjJ#S8JJFH>|j@b&B8x`msW|w35pe-1&&DAWtl8j%O=jd<+ z2aC#OSnk0O5J+o{>S@In{Q(C5mOWQ)7w>`886X6-Nsi3652&_Krl3hL+(J-lf3vvY zSUiQ*`0VIkGis3wsP;8o#m9!_Jz+NV{g{Ie5X0Vqp*=I0>cWMz8HJ2=5t)6R&4+If zK6g&sl`H)*zf&wq+?;rC9VIT6jY!Ij15gco%pRhoo(g4h6D3_a=T`j)5C8CMwVqzm|)=V0<5>n3J=Z zJ#pL=Wp|F0TuQ9s*bgm+MwUQt(Wh!!cpxe4n2KyGs}1Sv9f$J!ks*LGv482uK=jk7 z0_S7{bLzDWh95KkC@+mYt%}J9t_|%3Jzab8{PfE*tE3<2d4`!i@e zgPd{_S8u^4HF@AKF;)l&4+&l#8-j=-K3Xu!HRkL_J9NaTG5s*Zh*(;P*$_R)%`+qz zdDYP}7>uht4B;ZkNHdx!&Q%v`Rgff_TniCKZE94bRWLf>;F6V#4ytSR0HO1v`Uld4 z(HA{yHDdH?TD6r@;p(}0Obd0&;2g>PDvrq`XuW-`TE*YMStX*&=DjmmX{ZS2am{-;owvnA&Fhp-AjsE3FZ4whJOvd6Yqp zEo{{*nUy#Rw>vd-6RXTq*I4PG#v}R~9VbR(^y!1@be5y(53Bm;yw$+%```K&vdeCESgVp<6`s;!a zvJL`jz5pB&y! zIt=xBdzt;l{tz|$d2984EaPNZP)R0^32Wq{Kk6LwX;cIp-f|%2tqmRa`l%Ensh!45 zq?1Y}BT5>YLFZLqED8w#Ac5*2N5gt)VvifN=-9sW$BM{7?`i!Kb4+B5a!s*KLsr}o z12rUOc)-25k)xwY_LYkg=fW%)CGt+NEAwDS>ti7pb5pI2BKk3~eu)!=Ljij^gVWR{ zk#-e?E`RBrY0K-t)dAfwNsm4)eM{mnvTg5P&lxw4#ZDAl-`ELS5J9Rw-@7P|a0tg|R8o*MxKys#Kp$~06yQl{ z(wLhd;{y?UpoVN^;is{oPPVm^1p_#Pp8jOaYRZE=id~Nq?KNMSnNJ?@NsrjnskhW9 zk#uVNY>$ldY_d9f=o!LAIg-hmqQe9lYV=C7tI+aQ?~b&wMq^1}614d66-|CXg0|$0 zwGwHF#$Zq2?%?GMEJ)JHBt0mCK_i#T&HwW^|0f?2;O;TGP-(mX)0LB(Wh#VXc~34v z0CKB?mZ;8Nn{dMcQGgw|gCI6~?7Th&6$mzVCb22dDjh3+iKKnhdTsD2@kYaKrvV8s zoxp;*`1Ah&+WiA)3{w4871cMkD+D-8ZIHR6OsK9 zp04K`Cb#==TdMvV5ct=#ypEs`Ep{((pJII1oDt&2vs3>=rZ?c z1+D{y2P_YO$gAbHxTDg3m`0B9Pa%W3hzlOjnL5}ThSTD}9%oj>;J{@4Xa4{zxoEvC zC%0NdCVE8}4$J-Zr>jC)-#wx#18rDV*XR>SBK=w3#h8uW5ur9}WyRhdPrlmU2#BPVkLS=QAF*|ac zWrNzMl$u!TuW61kvB;ldFNPRA7+Z=09W)?ez=e{96&)_vIPQp1Q93x75o?n=q)?YY z9GGXQ)vBIVYv6?tRl$xJqlhgm7$J8wHO>IfE^RwGyp5~9JL}uq7_N^LhObB(!8z@t zjj@WPV|oH$yLIF?*Re?O0Y-y~q2L(#6G*=-Vg}YW_6?hpR$ckjp?C^$LGt*P7#C*+ zJ)E@?y1ViDLhOmLM$lqfrNbL2winJKoJ~{|PRJlZ&Jx5_hN2n~S&_JQ!h{5Mp@LS8 zy6Qb^)-+SMw0ETOI=5JZg2qHlnqGzB7pF!S3~+#&1zfHr-I9PE0;3Ty!)QLDA@i0_ z_!=UHq*ogk(=QMzAyi*Ax@P0@ItGk5WYJV02V}8aA+_VluvJ`o9q4Ab1Ob>BO(RFA z^7$A$b?#`}>;QQX5^^OHLU5P{&=`7#o8v%aWB$EnS(2x_x`ZVH$T?(wn*bCMtVv0J zxk{tk7$IlbkXQqN00;ilYSxpI@7~jaVb>$l4vYg1kUd32!svqls%%1sB#ChDY4;0V z91IALcZ!kluZM8Ac@Z~m(D5+k8Ba;s<==`|%l7K3ClR=KQXidgbyEOk2R55llMDGt z0S%~)(@&4t*Y=DQgm-!%vH;|yv`bBP0ZfHAr{-FbqYmdP)`>Q}7^UtO20m!aubK)` z?r{UkT{~C{3Fjc7B%GX?L$($j6ryHv!5QcFn8`mP9J;ByJBo1lO=Vj+ntj5erik?T zOn*`@C~V+n5CgCG;Q*1~lVy``cLiKxeH|J@1xTc@I~5ozD)hVs0VL$) z${nz<=%o`i9y>EaU+vMGyiV7NqcuzoF;!6DS|X~MPKy26Ha(cdMeBNiTA`m?Jrd)4P5lV2qizM(r@ExLd{@D>$3T(* zgM{^k@pO`=8>2E;y_>IHwk;#+xVwFrFZPDT;vzRE-P6kA_ zfP6NBQ0<5G4d2S?i9~UB`|k6`Ed~{JL*fKmcTURXy29Lj36;&V0#Bw=tp{B^pYDNA#uTr@CCV&3*-i%sJN@N3G8q)P1bd# zbL(<7|N9ex+aB^2lK3<7}dk2w`)Nh7<3!^*=xwW;_tmoy@GhmmP6a&KNa*JP zIfV-cF7o)Qwp3SC_2?Q=mbpaTiiTMd5>K)6DyjWVbl zb~}x=tprUN(>p%qs#4*z%;Ta1O1BdZk9d^v6yDguWitX}$svfI?+_;vCjkV+v|7R_ ziI!0J_FuR0DYyW(P5@LaMKzY$Uq<4_kYICj)Np-A8d8-aAYe>dZpyaA`&JT6r@+bf zO&ipsL*|nmG()#EqWz59Tx(at^-SkZv;CM48V301DNon(8YKzM_z|2k&}<^GGA@PD zv5*rxQSqzVli0|cAMvp~BPk5?OS6ZDMvgog4x!Xs7laq9EFrU!F-aE(7-g5^hl+yE zoa!KLitrfzTp10Y)VtzA17nJ@{{T1Lg2AmLgdgt>yG24`SzC*D1?dM9>8H`Ys<`7R z*=pF9Y&5^#iKr<|Uht<_EpHpH3Gw|W2@stQ7Rk-4f^OV81_s~GYJ3pcl!JW#00g)J z^6QMGM4Dwa7SI!&+j)dIan7pivSlSv;7nsyv|JZ+Z2>3gC&00!8`BX4g6$OEJ)0FI zSc_YjQDVZWh!xtb!U3zMN8-C^FnHXRIf4gz%EuB?MA3zN)vzhl;Et#Ot#$tZxJLQ8 z24kLc?j*Ucv9`w%?K`#m(7G`}Hg8e{A|fChorH{A8?H=an~Y4|+ITmIW&M$~pn%eH zVd&wO2qi#Rmk!iaZxX3`Aekyv8bKP67%bA?QXG3t0Rb|ail|INuv0wkP>%rM;E)*j)Rp)viNq$M8EC92aq7k!LR=?< zj9b)v*bEs3=*J#a@5c#!IPOb@5;t)T+&CySv^9dWXHPELos}`YUJ|C@AQ4U_S~2XA z+EImVO5Nt8r(of2he+>)MMh{?>oX zex)o1!QKFSB-1w{A}0f>v-(;dk<%6liX>J6$}liIToC22JtB#Rv7kefDwC=y%p%IP+N(g%ce8}6e8QeR)*w@wM*MZBjaS0!|#)8m211WwnriiR&QkN z2=60c9I!)mpIdq&`NOqaqw`e1V7XV7uV8A7;1&uxC8AxFIAGo-?%^mfpDi_fHBo>t z<7K!g<&Bxn6T#A*UqXW7D=b4;s90H)$o2}708zZ~pIs}$CkF%GE*|}1(W4@1gf1gh z;3h6|#7mgPG!c+;m1I(K)rLc_B)Ru$VV#*B+5#sqb}ktmZ@>c}`+jazj=80|~J{gLjfSnJ}^34!mv5KE-J;9@qybL*cA4q?H;` zqH27D1dax6BkEW&8An9~7S=%d%vy;+_o>FCPwwr;7V9u)u_s1G?>zD_z`dSk^q9mZ zboZe4{{Sn+V1|rGfU+$qnw~`L&Wxxe=7SODXXuzw$_@sLZX z#4_M|EI!XugBSQ(MN%C+IVN87%ma-6){;+$4~@wL-q7RAd~?XwCi;$wgfVFhs`+4%bB76Ekyxbwz$ zgoFo+DiH56J|5+{pil-4v{mDziqlDqYAuG^BGY^`Q8gW2t1j4m=Jvkg3NKYC|{Q<>bOR9-asG;Va1;)a9HdX(CfERfekpv47N9omul$q$*}^-E AssI20 literal 0 HcmV?d00001