summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Bailly <arnaud.bailly@iohk.io>2025-01-25 10:45:41 +0100
committerArnaud Bailly <arnaud.bailly@iohk.io>2025-01-25 10:45:41 +0100
commit7752d73216578d5961751b5d0535088d384b4aa6 (patch)
tree786e46fe1276e93ade0a48398cd4c9ac13081707
parentd6f68e919db51d366c8ca3c1509bea12aa81d692 (diff)
downloadlambda-nantes-7752d73216578d5961751b5d0535088d384b4aa6.tar.gz
Move λ-calcul workshop code to subdirectory
-rw-r--r--README.md12
-rw-r--r--lambda-calcul/clojure/.gitignore (renamed from clojure/.gitignore)0
-rw-r--r--lambda-calcul/clojure/deps.edn (renamed from clojure/deps.edn)0
-rw-r--r--lambda-calcul/clojure/src/lccl/app.clj (renamed from clojure/src/lccl/app.clj)0
-rw-r--r--lambda-calcul/clojure/src/lccl/fwk/middlewares.clj (renamed from clojure/src/lccl/fwk/middlewares.clj)0
-rw-r--r--lambda-calcul/clojure/src/lccl/lc/ast.clj (renamed from clojure/src/lccl/lc/ast.clj)0
-rw-r--r--lambda-calcul/clojure/src/lccl/lc/evaluator.clj (renamed from clojure/src/lccl/lc/evaluator.clj)0
-rw-r--r--lambda-calcul/clojure/src/lccl/main.clj (renamed from clojure/src/lccl/main.clj)0
-rw-r--r--lambda-calcul/clojure/test/lccl/lc/evaluator_test.clj (renamed from clojure/test/lccl/lc/evaluator_test.clj)0
-rw-r--r--lambda-calcul/elixir/.formatter.exs (renamed from elixir/.formatter.exs)0
-rw-r--r--lambda-calcul/elixir/.gitignore (renamed from elixir/.gitignore)0
-rw-r--r--lambda-calcul/elixir/README.md (renamed from elixir/README.md)0
-rw-r--r--lambda-calcul/elixir/ast.ex (renamed from elixir/ast.ex)0
-rw-r--r--lambda-calcul/elixir/ast_test.exs (renamed from elixir/ast_test.exs)0
-rw-r--r--lambda-calcul/elixir/mix.exs (renamed from elixir/mix.exs)0
-rw-r--r--lambda-calcul/elixir/test_helper.exs (renamed from elixir/test_helper.exs)0
-rw-r--r--lambda-calcul/elixir/workshop1.ex (renamed from elixir/workshop1.ex)0
-rw-r--r--lambda-calcul/elixir/workshop1_test.exs (renamed from elixir/workshop1_test.exs)0
-rw-r--r--lambda-calcul/java/lcgoji/.gitignore (renamed from java/lcgoji/.gitignore)0
-rw-r--r--lambda-calcul/java/lcgoji/pom.xml (renamed from java/lcgoji/pom.xml)0
-rw-r--r--lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/LCEvaluator.java (renamed from java/lcgoji/src/main/java/org/lambdanantes/lcgoji/LCEvaluator.java)0
-rw-r--r--lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/Main.java (renamed from java/lcgoji/src/main/java/org/lambdanantes/lcgoji/Main.java)0
-rw-r--r--lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Abs.java (renamed from java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Abs.java)0
-rw-r--r--lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/App.java (renamed from java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/App.java)0
-rw-r--r--lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Term.java (renamed from java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Term.java)0
-rw-r--r--lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Var.java (renamed from java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Var.java)0
-rw-r--r--lambda-calcul/java/lcgoji/src/main/resources/log4j2.xml (renamed from java/lcgoji/src/main/resources/log4j2.xml)0
-rw-r--r--lambda-calcul/java/lcgoji/src/test/java/org/lambdanantes/lcgoji/LCEvaluatorTest.java (renamed from java/lcgoji/src/test/java/org/lambdanantes/lcgoji/LCEvaluatorTest.java)0
-rw-r--r--lambda-calcul/java/lcgoji/src/test/java/org/lambdanantes/lcgoji/ast/TermTest.java (renamed from java/lcgoji/src/test/java/org/lambdanantes/lcgoji/ast/TermTest.java)0
-rw-r--r--lambda-calcul/papers/sestoft-lamreduce.pdfbin0 -> 142164 bytes
-rw-r--r--lambda-calcul/rust/.gitignore (renamed from rust/.gitignore)0
-rw-r--r--lambda-calcul/rust/Cargo.lock (renamed from rust/Cargo.lock)0
-rw-r--r--lambda-calcul/rust/Cargo.lock.rej9
-rw-r--r--lambda-calcul/rust/Cargo.toml (renamed from rust/Cargo.toml)2
-rw-r--r--lambda-calcul/rust/README.md (renamed from rust/README.md)0
-rwxr-xr-xlambda-calcul/rust/cover.sh (renamed from rust/cover.sh)0
-rw-r--r--lambda-calcul/rust/distrib3022
-rw-r--r--lambda-calcul/rust/proptest-regressions/ast.txt7
-rw-r--r--lambda-calcul/rust/proptest-regressions/lambda.txt7
-rw-r--r--lambda-calcul/rust/proptest-regressions/parser.txt7
-rw-r--r--lambda-calcul/rust/sample/test.txt (renamed from rust/sample/test.txt)0
-rw-r--r--lambda-calcul/rust/sample/test01/input (renamed from rust/sample/test01/input)0
-rw-r--r--lambda-calcul/rust/sample/test01/output (renamed from rust/sample/test01/output)0
-rw-r--r--lambda-calcul/rust/sample/test02/input (renamed from rust/sample/test02/input)0
-rw-r--r--lambda-calcul/rust/sample/test02/output (renamed from rust/sample/test02/output)0
-rw-r--r--lambda-calcul/rust/sample/test03/input (renamed from rust/sample/test03/input)0
-rw-r--r--lambda-calcul/rust/sample/test03/output (renamed from rust/sample/test03/output)0
-rw-r--r--lambda-calcul/rust/sample/test_bool.txt (renamed from rust/sample/test_bool.txt)0
-rw-r--r--lambda-calcul/rust/sample/test_full.txt (renamed from rust/sample/test_full.txt)0
-rw-r--r--lambda-calcul/rust/sample/test_let.txt (renamed from rust/sample/test_let.txt)0
-rw-r--r--lambda-calcul/rust/sample/test_nat.txt (renamed from rust/sample/test_nat.txt)0
-rw-r--r--lambda-calcul/rust/sample/test_normal.txt (renamed from rust/sample/test_normal.txt)0
-rw-r--r--lambda-calcul/rust/src/ast.rs (renamed from rust/src/ast.rs)0
-rw-r--r--lambda-calcul/rust/src/io.rs (renamed from rust/src/io.rs)0
-rw-r--r--lambda-calcul/rust/src/lambda.rs (renamed from rust/src/lambda.rs)0
-rw-r--r--lambda-calcul/rust/src/lib.rs (renamed from rust/src/lib.rs)0
-rw-r--r--lambda-calcul/rust/src/main.rs (renamed from rust/src/main.rs)0
-rw-r--r--lambda-calcul/rust/src/parser.rs (renamed from rust/src/parser.rs)0
-rw-r--r--lambda-calcul/rust/src/tester.rs (renamed from rust/src/tester.rs)0
-rw-r--r--lambda-calcul/rust/src/web.rs (renamed from rust/src/web.rs)0
-rw-r--r--lambda-calcul/rust/templates/leaderboard.html (renamed from rust/templates/leaderboard.html)0
-rw-r--r--lambda-calcul/rust/tests/interpret_test.rs (renamed from rust/tests/interpret_test.rs)0
-rw-r--r--lambda-calcul/support/2024-10-10.md (renamed from support/2024-10-10.md)0
-rw-r--r--lambda-calcul/support/2024-10-10.pdf (renamed from support/2024-10-10.pdf)bin60690 -> 60690 bytes
-rw-r--r--lambda-calcul/support/Makefile (renamed from support/Makefile)0
65 files changed, 3064 insertions, 2 deletions
diff --git a/README.md b/README.md
index 918ebe1..5cd38cc 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,13 @@
# λ-Nantes
-λ-Nantes est un groupe de développeuses et développeurs de Nantes et sa région, intéressées par les langages dits fonctionnels (ou applicatifs), qui se réunit de manière apériodique et irrégulière pour des conférences et des ateliers.
+λ-Nantes est un groupe de développeuses et développeurs de Nantes et
+sa région, intéressées par les langages dits fonctionnels (ou
+applicatifs), qui se réunit de manière apériodique et irrégulière pour
+des conférences et des ateliers.
+
+Ce répertoire de code contient du matériel lié aux ateliers animés dans le cadre de λ-Nantes.
+
+## Ateliers
+
+* [10 octobre 2024](lambda-calcul/) : Atelier "Coder un évaluateur de λ-calcul"
+* [30 janvier 2025](pbt/) : Atelier "Test de propriétés"
diff --git a/clojure/.gitignore b/lambda-calcul/clojure/.gitignore
index 883fee3..883fee3 100644
--- a/clojure/.gitignore
+++ b/lambda-calcul/clojure/.gitignore
diff --git a/clojure/deps.edn b/lambda-calcul/clojure/deps.edn
index b43182c..b43182c 100644
--- a/clojure/deps.edn
+++ b/lambda-calcul/clojure/deps.edn
diff --git a/clojure/src/lccl/app.clj b/lambda-calcul/clojure/src/lccl/app.clj
index 522d8bf..522d8bf 100644
--- a/clojure/src/lccl/app.clj
+++ b/lambda-calcul/clojure/src/lccl/app.clj
diff --git a/clojure/src/lccl/fwk/middlewares.clj b/lambda-calcul/clojure/src/lccl/fwk/middlewares.clj
index 973cffc..973cffc 100644
--- a/clojure/src/lccl/fwk/middlewares.clj
+++ b/lambda-calcul/clojure/src/lccl/fwk/middlewares.clj
diff --git a/clojure/src/lccl/lc/ast.clj b/lambda-calcul/clojure/src/lccl/lc/ast.clj
index 58bad11..58bad11 100644
--- a/clojure/src/lccl/lc/ast.clj
+++ b/lambda-calcul/clojure/src/lccl/lc/ast.clj
diff --git a/clojure/src/lccl/lc/evaluator.clj b/lambda-calcul/clojure/src/lccl/lc/evaluator.clj
index 70e972e..70e972e 100644
--- a/clojure/src/lccl/lc/evaluator.clj
+++ b/lambda-calcul/clojure/src/lccl/lc/evaluator.clj
diff --git a/clojure/src/lccl/main.clj b/lambda-calcul/clojure/src/lccl/main.clj
index 071d7c6..071d7c6 100644
--- a/clojure/src/lccl/main.clj
+++ b/lambda-calcul/clojure/src/lccl/main.clj
diff --git a/clojure/test/lccl/lc/evaluator_test.clj b/lambda-calcul/clojure/test/lccl/lc/evaluator_test.clj
index d1e9c41..d1e9c41 100644
--- a/clojure/test/lccl/lc/evaluator_test.clj
+++ b/lambda-calcul/clojure/test/lccl/lc/evaluator_test.clj
diff --git a/elixir/.formatter.exs b/lambda-calcul/elixir/.formatter.exs
index d2cda26..d2cda26 100644
--- a/elixir/.formatter.exs
+++ b/lambda-calcul/elixir/.formatter.exs
diff --git a/elixir/.gitignore b/lambda-calcul/elixir/.gitignore
index 12fd196..12fd196 100644
--- a/elixir/.gitignore
+++ b/lambda-calcul/elixir/.gitignore
diff --git a/elixir/README.md b/lambda-calcul/elixir/README.md
index fe5b773..fe5b773 100644
--- a/elixir/README.md
+++ b/lambda-calcul/elixir/README.md
diff --git a/elixir/ast.ex b/lambda-calcul/elixir/ast.ex
index 4305b7b..4305b7b 100644
--- a/elixir/ast.ex
+++ b/lambda-calcul/elixir/ast.ex
diff --git a/elixir/ast_test.exs b/lambda-calcul/elixir/ast_test.exs
index b10c959..b10c959 100644
--- a/elixir/ast_test.exs
+++ b/lambda-calcul/elixir/ast_test.exs
diff --git a/elixir/mix.exs b/lambda-calcul/elixir/mix.exs
index df46a80..df46a80 100644
--- a/elixir/mix.exs
+++ b/lambda-calcul/elixir/mix.exs
diff --git a/elixir/test_helper.exs b/lambda-calcul/elixir/test_helper.exs
index 869559e..869559e 100644
--- a/elixir/test_helper.exs
+++ b/lambda-calcul/elixir/test_helper.exs
diff --git a/elixir/workshop1.ex b/lambda-calcul/elixir/workshop1.ex
index caf85d7..caf85d7 100644
--- a/elixir/workshop1.ex
+++ b/lambda-calcul/elixir/workshop1.ex
diff --git a/elixir/workshop1_test.exs b/lambda-calcul/elixir/workshop1_test.exs
index f0b4603..f0b4603 100644
--- a/elixir/workshop1_test.exs
+++ b/lambda-calcul/elixir/workshop1_test.exs
diff --git a/java/lcgoji/.gitignore b/lambda-calcul/java/lcgoji/.gitignore
index af515ad..af515ad 100644
--- a/java/lcgoji/.gitignore
+++ b/lambda-calcul/java/lcgoji/.gitignore
diff --git a/java/lcgoji/pom.xml b/lambda-calcul/java/lcgoji/pom.xml
index f4a4f30..f4a4f30 100644
--- a/java/lcgoji/pom.xml
+++ b/lambda-calcul/java/lcgoji/pom.xml
diff --git a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/LCEvaluator.java b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/LCEvaluator.java
index b0fe69b..b0fe69b 100644
--- a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/LCEvaluator.java
+++ b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/LCEvaluator.java
diff --git a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/Main.java b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/Main.java
index 76cb839..76cb839 100644
--- a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/Main.java
+++ b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/Main.java
diff --git a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Abs.java b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Abs.java
index 9d1c146..9d1c146 100644
--- a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Abs.java
+++ b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Abs.java
diff --git a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/App.java b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/App.java
index 2f3e04d..2f3e04d 100644
--- a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/App.java
+++ b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/App.java
diff --git a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Term.java b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Term.java
index 2dcc9fe..2dcc9fe 100644
--- a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Term.java
+++ b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Term.java
diff --git a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Var.java b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Var.java
index ed710b6..ed710b6 100644
--- a/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Var.java
+++ b/lambda-calcul/java/lcgoji/src/main/java/org/lambdanantes/lcgoji/ast/Var.java
diff --git a/java/lcgoji/src/main/resources/log4j2.xml b/lambda-calcul/java/lcgoji/src/main/resources/log4j2.xml
index f938085..f938085 100644
--- a/java/lcgoji/src/main/resources/log4j2.xml
+++ b/lambda-calcul/java/lcgoji/src/main/resources/log4j2.xml
diff --git a/java/lcgoji/src/test/java/org/lambdanantes/lcgoji/LCEvaluatorTest.java b/lambda-calcul/java/lcgoji/src/test/java/org/lambdanantes/lcgoji/LCEvaluatorTest.java
index ec2f027..ec2f027 100644
--- a/java/lcgoji/src/test/java/org/lambdanantes/lcgoji/LCEvaluatorTest.java
+++ b/lambda-calcul/java/lcgoji/src/test/java/org/lambdanantes/lcgoji/LCEvaluatorTest.java
diff --git a/java/lcgoji/src/test/java/org/lambdanantes/lcgoji/ast/TermTest.java b/lambda-calcul/java/lcgoji/src/test/java/org/lambdanantes/lcgoji/ast/TermTest.java
index f11ca77..f11ca77 100644
--- a/java/lcgoji/src/test/java/org/lambdanantes/lcgoji/ast/TermTest.java
+++ b/lambda-calcul/java/lcgoji/src/test/java/org/lambdanantes/lcgoji/ast/TermTest.java
diff --git a/lambda-calcul/papers/sestoft-lamreduce.pdf b/lambda-calcul/papers/sestoft-lamreduce.pdf
new file mode 100644
index 0000000..2013f1d
--- /dev/null
+++ b/lambda-calcul/papers/sestoft-lamreduce.pdf
Binary files differ
diff --git a/rust/.gitignore b/lambda-calcul/rust/.gitignore
index 2f7896d..2f7896d 100644
--- a/rust/.gitignore
+++ b/lambda-calcul/rust/.gitignore
diff --git a/rust/Cargo.lock b/lambda-calcul/rust/Cargo.lock
index bdb2dd9..bdb2dd9 100644
--- a/rust/Cargo.lock
+++ b/lambda-calcul/rust/Cargo.lock
diff --git a/lambda-calcul/rust/Cargo.lock.rej b/lambda-calcul/rust/Cargo.lock.rej
new file mode 100644
index 0000000..3e5e0dc
--- /dev/null
+++ b/lambda-calcul/rust/Cargo.lock.rej
@@ -0,0 +1,9 @@
+diff a/rust/Cargo.lock b/rust/Cargo.lock (rejected hunks)
+@@ -1777,6 +1777,7 @@ dependencies = [
+ "log",
+ "proptest",
+ "rand",
++ "regex",
+ "reqwest",
+ "serde",
+ "serde_json",
diff --git a/rust/Cargo.toml b/lambda-calcul/rust/Cargo.toml
index b2eab9c..c742302 100644
--- a/rust/Cargo.toml
+++ b/lambda-calcul/rust/Cargo.toml
@@ -6,8 +6,8 @@ edition = "2021"
[dependencies]
rand = { version = "0.8.5", features = ["small_rng"] }
serde = { version = "1.0", features = ["derive"] }
-chrono = { version= "0.4.38", features = ["serde"]}
serde_json = "1.0.128"
+chrono = { version= "0.4.38", features = ["serde"]}
actix-web = "4.9.0"
env_logger = "0.8"
log = "0.4"
diff --git a/rust/README.md b/lambda-calcul/rust/README.md
index 7dfc03b..7dfc03b 100644
--- a/rust/README.md
+++ b/lambda-calcul/rust/README.md
diff --git a/rust/cover.sh b/lambda-calcul/rust/cover.sh
index c7befa6..c7befa6 100755
--- a/rust/cover.sh
+++ b/lambda-calcul/rust/cover.sh
diff --git a/lambda-calcul/rust/distrib b/lambda-calcul/rust/distrib
new file mode 100644
index 0000000..ba11467
--- /dev/null
+++ b/lambda-calcul/rust/distrib
@@ -0,0 +1,3022 @@
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+11118
+13127
+47069
+65868
+1000000
+1000000
+1000000
+1000000
+1000000
+1000000
+1000000
+1000009
+1000100
+1000100
+1044631
+1200000
+1221941
+1231208
+1258444
+1289969
+1322858
+1430897
+1434673
+1434673
+1481480
+1481480
+1586597
+1665757
+1688197
+1763938
+1773860
+1800569
+1801494
+1822883
+1854270
+1865490
+1957114
+2001200
+2007228
+2029803
+2050621
+2062184
+2228964
+2267244
+2386319
+2443789
+2450653
+2486679
+2500000
+2562761
+2609445
+2618354
+2621434
+2623282
+2639298
+2646822
+2729004
+2735858
+2742048
+2823411
+2915210
+2925923
+2925923
+2953199
+2990070
+3070591
+3080875
+3092547
+3455860
+3570478
+3625350
+3629838
+3678935
+3981480
+3991496
+4000000
+4048591
+4191429
+4233056
+4310452
+4427641
+4581261
+4585779
+4593662
+4613646
+4613866
+5000000
+5154646
+5223772
+5398685
+5577986
+5624250
+5800118
+5879394
+5885306
+6000000
+6000000
+6000000
+6001245
+6135954
+6399036
+6444552
+6453117
+6470103
+6638814
+6863246
+7054091
+7401751
+7414749
+7475689
+7620000
+7621654
+7622358
+7624514
+7629486
+7629486
+7634370
+7900602
+7952568
+8247561
+8249917
+8602239
+8618750
+8705929
+8755036
+9248208
+9471895
+9486132
+9490391
+9618398
+9618530
+9619058
+9630058
+9802291
+9823059
+9825875
+9892022
+10000000
+10181917
+10276880
+10276968
+10276968
+10277188
+10277188
+10277276
+10843473
+10984954
+11000000
+11095972
+11286634
+11633160
+11700000
+12000000
+12017087
+12145784
+12440621
+12611753
+12621038
+12691233
+12851369
+13276968
+14776577
+17236444
+17425265
+17427226
+17509389
+17619014
+17620334
+17719612
+17988077
+18269664
+18599471
+18621214
+18737033
+18816176
+19232201
+19424099
+19453176
+19736460
+20000000
+20015900
+20061667
+22420601
+22424605
+22971625
+23420165
+23433361
+23613933
+24517029
+24923870
+25098487
+25300000
+25825259
+27595522
+27597982
+27617078
+27624822
+29445355
+29620216
+30477971
+31323894
+32036957
+32150290
+32637619
+32724696
+35245376
+36118889
+36313357
+37987754
+39624703
+39983004
+40326929
+41986459
+42018412
+44304481
+44454085
+47821475
+49055495
+49678250
+49782708
+50005115
+50425749
+51339332
+52037404
+52237703
+53694740
+53706194
+53738926
+55456744
+55651486
+57425793
+57602998
+59460400
+59603626
+61914723
+62602470
+65887919
+66488296
+67456466
+69720767
+70449031
+70473160
+70535921
+74670202
+76837286
+77512682
+77848386
+79065199
+80466289
+81498032
+86883798
+89153217
+90420676
+92090039
+92633094
+93505493
+94912118
+95424561
+96634341
+96794849
+97023027
+97052335
+97510309
+97620466
+97623898
+97624556
+97624734
+97924379
+98624030
+98903851
+99280884
+99442997
+100000000
+100000000
+100025743
+100257520
+100609921
+100838685
+101080977
+101227512
+101250210
+101376006
+101924863
+102228700
+102232264
+102616550
+102624998
+103000000
+103000000
+103000000
+103070019
+103072351
+103164846
+103230899
+103607970
+104493534
+104596453
+105132223
+105235662
+105303081
+106115657
+106623722
+107145887
+107224476
+107413297
+107414793
+107431117
+107845589
+108761740
+109028510
+109063264
+109611710
+110622006
+111625658
+112693362
+112711109
+112744004
+113068208
+114280001
+114848902
+115453029
+116330953
+116709162
+116948336
+117618178
+118910750
+119036341
+119116223
+119504595
+120549939
+121436315
+121484627
+121740362
+122078687
+122084935
+122213685
+126003727
+126660459
+127046347
+127837672
+127878040
+128905489
+132502367
+133400000
+135106409
+136644068
+138742943
+139818659
+143353157
+145825699
+147624426
+147661322
+148091537
+148435878
+148796601
+150000000
+150610962
+154247620
+156277982
+160317709
+160730261
+163039113
+163755733
+164620642
+165628320
+167368737
+169936908
+174968922
+177440451
+177788132
+177935758
+178259850
+183265277
+183277705
+188239958
+189691746
+195445945
+195954037
+197125746
+197226148
+197226148
+197226280
+197237368
+197299065
+197430721
+197456153
+197616022
+197619190
+197619190
+197619190
+197624030
+199600000
+200000000
+200810035
+203182474
+203250629
+205618530
+208581547
+212498157
+217955135
+218055983
+218615274
+220848661
+223360860
+223866352
+229374109
+233375391
+233445021
+234628065
+240722383
+241299438
+244646977
+245204781
+246637145
+247210196
+247237293
+247700679
+251000039
+266665872
+277173167
+281976853
+291472771
+295935325
+297094817
+300093772
+300822669
+304278509
+306685167
+306763214
+308097517
+313285815
+314271584
+316147380
+316914476
+321624382
+326466865
+330742127
+340339941
+340417081
+340922310
+341624605
+342417653
+343734222
+343736822
+347620334
+350501298
+354952691
+356830510
+357849567
+360524775
+366625702
+367289456
+368178331
+373760410
+374410917
+375469867
+376518669
+381263120
+384919390
+385377493
+385500629
+386440554
+388321443
+391087660
+391105694
+396714456
+397178663
+397921363
+397940567
+399168123
+400944493
+407405934
+413801996
+416934572
+424685339
+429144410
+432075956
+432816574
+437621830
+443098286
+444287597
+455976917
+458257808
+464078945
+465409359
+466084377
+466984959
+472976532
+476652900
+478757616
+489240394
+494831058
+495282744
+496562740
+496719173
+497420337
+497432393
+497625262
+497625350
+499489389
+500000000
+500000000
+500000000
+500412330
+500624074
+500954444
+501033989
+501132556
+502251844
+502300231
+502365742
+502580210
+502624954
+503725382
+504101303
+504683670
+507102535
+507236356
+507423329
+507449333
+507449373
+507621786
+509235798
+509766415
+511697133
+512065971
+512621610
+515476511
+515619014
+516425793
+516461389
+517625000
+517703111
+519044358
+520082000
+525042337
+525372401
+527290227
+528015204
+531488042
+532618310
+533517462
+536842986
+538425594
+540700677
+544125690
+545772868
+545778456
+545954517
+545978937
+546890394
+546890394
+546890394
+546890394
+546890394
+546890394
+546890394
+547629794
+548340078
+548606340
+551719342
+552424253
+554651740
+564425881
+568150653
+568163192
+572915210
+586099654
+593799895
+594564135
+596889206
+597625746
+598614966
+607393771
+607724090
+626690294
+627115849
+631048656
+635210245
+638756010
+640942071
+642048577
+642121377
+645079510
+653014581
+658619725
+658852361
+666500221
+668741592
+676699901
+680266470
+695426541
+697439961
+698292896
+700169687
+701407805
+707520898
+709842356
+726170453
+738215807
+760828483
+766842596
+776657131
+784476660
+809142273
+812165326
+816886634
+820025746
+851328895
+862976284
+868469289
+870877150
+872085077
+894599514
+897047887
+903951793
+910342644
+915406660
+922009012
+923691183
+928651575
+939083298
+942823411
+946757501
+964601654
+967820719
+970921601
+983781249
+997620818
+998257168
+999825743
+1000000000
+1000713424
+1000819149
+1000833986
+1001063730
+1001425841
+1001670616
+1001676644
+1002437424
+1005175300
+1006277905
+1008551601
+1008611006
+1008640310
+1009939347
+1012075370
+1014271248
+1018842337
+1032212606
+1032235168
+1034088522
+1037490472
+1043463985
+1045574031
+1047231164
+1047621962
+1053239172
+1055552627
+1057631925
+1059010727
+1062558799
+1062873813
+1068026209
+1073037195
+1074408468
+1075435349
+1084589756
+1087461798
+1087822733
+1093094791
+1094719930
+1097230020
+1099411067
+1100522781
+1103489806
+1112619894
+1115774522
+1117431611
+1122038051
+1123182320
+1144071818
+1144474695
+1145957833
+1155789836
+1157134418
+1162065545
+1162108630
+1166785736
+1171558392
+1178371972
+1178645015
+1187238209
+1190761831
+1206074434
+1212621566
+1222471073
+1230538750
+1232444199
+1252760574
+1257550057
+1257789162
+1271948106
+1272255210
+1291305394
+1294750981
+1300746858
+1312854346
+1313172885
+1313835444
+1319343533
+1320400771
+1328590923
+1340486162
+1346753281
+1354324795
+1373294480
+1382006124
+1382921328
+1401271790
+1401641693
+1405326847
+1426822522
+1442483670
+1465471754
+1467747766
+1481390053
+1492842946
+1498795122
+1500600798
+1501139082
+1501200000
+1537820303
+1544341958
+1545808690
+1560678754
+1562213912
+1579036646
+1584279164
+1588049383
+1595203260
+1602699093
+1605577377
+1624415312
+1624578741
+1630616373
+1652303744
+1686687763
+1690364826
+1733824563
+1739103467
+1769822884
+1773424838
+1803750610
+1807002289
+1808521302
+1822684341
+1828161971
+1835142148
+1838324182
+1845225224
+1853696443
+1898923995
+1905182270
+1913108997
+1959295288
+1967312227
+1967323190
+1970064530
+2005908625
+2007224344
+2007823514
+2010436661
+2015433009
+2043866091
+2062083345
+2062719440
+2068638613
+2073354402
+2085425390
+2087287575
+2097621830
+2126516983
+2132836767
+2139335348
+2141065397
+2143559813
+2162167160
+2166443110
+2185473740
+2192059776
+2209544259
+2241707795
+2252575182
+2256562616
+2270958676
+2273931246
+2293233363
+2319060076
+2338718760
+2340633105
+2342124049
+2342381143
+2349016313
+2399203983
+2452995576
+2491888820
+2492146501
+2530037735
+2532541028
+2534400511
+2555076489
+2568212709
+2576835838
+2579588877
+2586439425
+2586554977
+2666797935
+2671108363
+2689502728
+2706664774
+2742203972
+2752688285
+2761946533
+2798567280
+2832231589
+2839123365
+2862511736
+2865449967
+2868893050
+2920621038
+2961853978
+2963394789
+2973279064
+2983360040
+2999286455
+3009507338
+3027701347
+3044099794
+3045807206
+3046727776
+3068811017
+3111297391
+3114836741
+3140661415
+3141246591
+3143999618
+3174074558
+3183547849
+3184517673
+3202189619
+3235145197
+3240830147
+3244477628
+3258401079
+3259062887
+3325425846
+3342063943
+3360713955
+3361294749
+3362440323
+3388748623
+3396396549
+3402847137
+3409011964
+3431328488
+3460734977
+3486358693
+3502420645
+3504492886
+3504731226
+3515654434
+3520782752
+3525442456
+3534459381
+3577538843
+3592830569
+3660083336
+3684745565
+3698660010
+3734720474
+3807649110
+3815239683
+3841060475
+3854097533
+3857047153
+3859620760
+3860705625
+3866076017
+3903228748
+3914912996
+3927934149
+4033899362
+4067721006
+4072302660
+4095742493
+4113653362
+4142342163
+4259437485
+4269285597
+4272549203
+4292361625
+4295972311
+4303456068
+4366629956
+4501383251
+4502792062
+4506603467
+4542267679
+4549109833
+4557490354
+4559949286
+4579530164
+4579597207
+4598618506
+4692675353
+4743211146
+4749808601
+4767922558
+4779601797
+4803539356
+4823463893
+4842868356
+4907458502
+4940301320
+4940580436
+4955035353
+4988631386
+4993254694
+5005385376
+5005501668
+5005690577
+5005690577
+5006400908
+5006401040
+5006401040
+5006401040
+5006401040
+5006401040
+5006589905
+5016829727
+5018662003
+5021439761
+5047663460
+5060719070
+5097623546
+5100830925
+5114922901
+5122521586
+5172169595
+5181203855
+5183914431
+5204234546
+5250307114
+5266515615
+5295411616
+5332739649
+5341736360
+5383518020
+5396794817
+5399069147
+5421133387
+5477524588
+5495576820
+5505087142
+5505260529
+5505449262
+5505634736
+5505826992
+5506634739
+5506823648
+5508627200
+5534346013
+5585614991
+5611705943
+5643104132
+5647630894
+5729819308
+5766811717
+5777870727
+5805804939
+5807729763
+5817089850
+5828192999
+5865827814
+5902168208
+5915429018
+5922701064
+5926679611
+5927242564
+5953961242
+6008222335
+6043495827
+6108812087
+6119945026
+6192921948
+6235559617
+6287073701
+6357800530
+6361179346
+6361824303
+6379905318
+6545108724
+6570051739
+6625925994
+6647683557
+6707636362
+6708854687
+6734321082
+6773072547
+6777251649
+6954077606
+6961520218
+6977766329
+6995401709
+7036603226
+7060811542
+7174319745
+7190833552
+7195455435
+7212598776
+7238825810
+7283963802
+7341936445
+7395261117
+7406315985
+7493027773
+7526077830
+7555735877
+7594177636
+7707423908
+7727136525
+7786285385
+7860850235
+7907549576
+8009081322
+8012919654
+8060329280
+8141162421
+8193054356
+8208256175
+8247425397
+8268167106
+8284335119
+8368432191
+8387367396
+8413284648
+8490580319
+8561276755
+8573062334
+8575953329
+8631314979
+8677497309
+8749648203
+8780532788
+8858762849
+8977645645
+8988304031
+9028150574
+9095700179
+9121677991
+9121743535
+9308804645
+9525183073
+9665378771
+10000033939
+10001826841
+10010883882
+10023790644
+10062447266
+10093542993
+10104234572
+10137954961
+10142080850
+10175696117
+10193697827
+10201810681
+10206841039
+10274361569
+10286953804
+10297450331
+10301698801
+10314134659
+10331029925
+10332251008
+10417664878
+10440076907
+10473829979
+10476196439
+10495223149
+10573027034
+10716764409
+10731313434
+10754655804
+10857952418
+11061408070
+11083547903
+11104025578
+11273564695
+11301534858
+11313808040
+11325084428
+11480492451
+11536676262
+11625848783
+11682509253
+11744806827
+11776778617
+11850295212
+11859791909
+11970400153
+12037639443
+12060992506
+12202381821
+12297455276
+12327417890
+12363226671
+12365615288
+12381954972
+12395137882
+12422119858
+12457455168
+12625637976
+12655342922
+12674172223
+12722930793
+12771028015
+12821769312
+12981370864
+13051110200
+13102218292
+13118010042
+13216000539
+13456933998
+13574730253
+13819890288
+13905752028
+14119689781
+14476153680
+14533528790
+14804902888
+14805657811
+14986194862
+15138493118
+15160177348
+15245732530
+15353472193
+15512924144
+15525042189
+15645243685
+15966985610
+16022950283
+16028088873
+16062989388
+16119110438
+16259313487
+16350597558
+16429803195
+16605982476
+17012014811
+17154042465
+17251914497
+17711546284
+17853779131
+18026761778
+18083506410
+18137202111
+18275420906
+18497395549
+19002597457
+19359460156
+19378143795
+19503536547
+19640603255
+20027820181
+20156195509
+20369775749
+20419669518
+20497620862
+20559133742
+20684441149
+20736188560
+20755159837
+20825937233
+21011982349
+21269084948
+21274559773
+21284271597
+21382320648
+21504128708
+21578046232
+21658425894
+21927758500
+22037975299
+22094139443
+22230526013
+22836315543
+22935323440
+23086771822
+23332897048
+23346286872
+23410106289
+23836128105
+25130034791
+25180782550
+25207035311
+25260930066
+25539160274
+26132088633
+26365745442
+26563959405
+26585723383
+26641381084
+26726358705
+27881594320
+28101403275
+28159365230
+28679053639
+28772028944
+28876279824
+28889034933
+28893162406
+29436678010
+29681999080
+29755512977
+29780998084
+29942873966
+30049710114
+30471557042
+30506174005
+30648988302
+30895048883
+30901318724
+30945183151
+31019794875
+31044398950
+31236944012
+31442900570
+31761336266
+32053366269
+32201955613
+32453689363
+32758869134
+32780750451
+33635486176
+33807992913
+34506120042
+34533711042
+34669757721
+34973360583
+35249722947
+35392451029
+35439518169
+35567330507
+36333543923
+36375194089
+36732618442
+36763175545
+36821812033
+37093780787
+37172350432
+37679092194
+37755849359
+37909806327
+37932825619
+38412037746
+38455975003
+38491365864
+38610581044
+38715417450
+38755787273
+40406361751
+40416256640
+40459562385
+40599249445
+41226879055
+41263458389
+42014878868
+42046187030
+42119698538
+42724198820
+43048912307
+43696716372
+43851653916
+43883145909
+44424150430
+44970433517
+45200111572
+45449551579
+45582479317
+46096646397
+46171889046
+46511690352
+46942688890
+47098749612
+47362516149
+47532941355
+48239052081
+48740181896
+50543029862
+51057597291
+51093675235
+51363919295
+51426670597
+51498021487
+51618797986
+51894695967
+51989720521
+52419779401
+52746402628
+54181642493
+55853918006
+56403104253
+56613334998
+56658474015
+56881972951
+56956829509
+57436266933
+57669488002
+58121060645
+58610815355
+58718251619
+58740242561
+59327791580
+59794233350
+60376629368
+60737966607
+61022927501
+61488192179
+62559153870
+63737270819
+64680248179
+64692695532
+64708952944
+64761704205
+65156104703
+65583351883
+65842383704
+66173843155
+67173559142
+67389473956
+67414232189
+67629366480
+67906613271
+69181849476
+70690441386
+70806200266
+71538558467
+73254481881
+73744493698
+73924633882
+74597368355
+75067476136
+75300883750
+75376430684
+75440360129
+76305536831
+76360000535
+76848546548
+76999055527
+77524591324
+77998664841
+78134828598
+78242900629
+78368540603
+79064114458
+79828373161
+79892456722
+79951438824
+81068435024
+81563015911
+81958617748
+82617644325
+82858038172
+83388550077
+83736484761
+83777758895
+83787742296
+84727971052
+85477520224
+86226544069
+86565466794
+86786669750
+87143158212
+87681694224
+88742128596
+88849236744
+90570918088
+91738653832
+91856338057
+92117088534
+92368115005
+93154145932
+95117508695
+95430360763
+97497796080
+97965445233
+98500201513
+100002251543
+100124896006
+100980617482
+101110103171
+101448568036
+101747256080
+101951287458
+102389085054
+103520598372
+103838707406
+105611356519
+107322115355
+107355973557
+107651232857
+107845306226
+107928631903
+108640433339
+108851896469
+108868940600
+109870574167
+110503354467
+115701836754
+115935409241
+116225897748
+116315500671
+116419626218
+116692475134
+116891017787
+117606385727
+118423871629
+118437973249
+118632640412
+118707045047
+119447489391
+120419552566
+120445856915
+121275518304
+121347510881
+122448430926
+122680092731
+122691741048
+122773196807
+123046192099
+123932352700
+124124412269
+124466900441
+124497618310
+125759890444
+127244136823
+128498053663
+129213055409
+130379542594
+131488285000
+131777077775
+132495587187
+136155897212
+136264384696
+136865597655
+138493509592
+138729159296
+139246820627
+140030737959
+140154026602
+140793121550
+141588606874
+143477686641
+144259481021
+144769697700
+145048081515
+145471448917
+146159307276
+148023434212
+150646234077
+150990903879
+151827719039
+152017274751
+155395940655
+155819572975
+156188730232
+156701987685
+156770681542
+156830050368
+157363022784
+157397795975
+158285748746
+159047643241
+159099349162
+160190415635
+161144135898
+162183694155
+163290152906
+164062329723
+164171388354
+164257660708
+165160631845
+165425486277
+166230845878
+168261067322
+169124857216
+169901452799
+170514030090
+173785560841
+174768816778
+175209148928
+177792898579
+177859998667
+182631650350
+183491319493
+184022723939
+185721071907
+187385838025
+188181775959
+188399585263
+188966518017
+189420472746
+189897551269
+190601514677
+190952015081
+191324711178
+192650066636
+194729861615
+195499865671
+198870387164
+199193959974
+200009081675
+200414405326
+200861864639
+201173339755
+201581393855
+202484918830
+204276853130
+209480669485
+211285430613
+215103827469
+215552282283
+220457266096
+221501835551
+222235025833
+224762055997
+225101040553
+226618495961
+227757047018
+230206986339
+230799774550
+231314162581
+233635612528
+233765375302
+235830381736
+236509252810
+237244414158
+239303468804
+243295285674
+244485397841
+245443412938
+246647767653
+247959713760
+248130386655
+252249811901
+254508056659
+256506358884
+256806893472
+257408257735
+258003544654
+259449614310
+260611040589
+262518180117
+263317376715
+263445027395
+264324253435
+265342954220
+265433241245
+266400018079
+267327138657
+268697291304
+270568924783
+271942513406
+272148243673
+274128587892
+276033019038
+276797894091
+277999467527
+278752939545
+279358143398
+279399369865
+280551725854
+281378895760
+283214877277
+283379867269
+283689643618
+284927303171
+286912977002
+287807735376
+292137416965
+293023987700
+293238876990
+293865163806
+294338468147
+294386452520
+295337482554
+296829237385
+296970592431
+303546080640
+306360486151
+307346397947
+307533350478
+308088866751
+308835047330
+311286195318
+313548566009
+314005881820
+314650772794
+317846375987
+318428120386
+319034806839
+327188466156
+327482558930
+328398820066
+328489526185
+329868760079
+330488707117
+332258617416
+337264175807
+342758712955
+344746395150
+346834795177
+349892470613
+350755812150
+352217104242
+354266180810
+355041364568
+358221703479
+358815870038
+359092532403
+360611052126
+369492586994
+370161623457
+371294192712
+375106443202
+379951534327
+381111795688
+383341646941
+385838343190
+386759362065
+386813244977
+389231871367
+391475562498
+392141854226
+393612145616
+394749552839
+396435834415
+397311536557
+398550120289
+399108161505
+401506917399
+405132997666
+407773623183
+407857010642
+408890316943
+410769242936
+413205991613
+413436405205
+413710862256
+417201219245
+418318751381
+419212462590
+420826767965
+421064776219
+423860985814
+426044227736
+428131521084
+431206278328
+435538751686
+437590601745
+448159504747
+449909279041
+456002233589
+460799806976
+461948969105
+462093112878
+465614953659
+465731483948
+470877968051
+475087547994
+475835246300
+476767312495
+478303267912
+485499675015
+486580658158
+492922713648
+495195134516
+495357114253
+500547381872
+500596183796
+504167539419
+505317479725
+506108599440
+509734839293
+510672042186
+510946167440
+513446525914
+514156590931
+514798273672
+514859454894
+520002711209
+520217253592
+520393317273
+520661052453
+520959313694
+523243202837
+525914737845
+526097070311
+527515664605
+527541239362
+528692169102
+530163163287
+530173229222
+530362850103
+532339837747
+533262360730
+535237262100
+537816805485
+542276074299
+542914557302
+545733300588
+547044467935
+548718392107
+551271747390
+573284904357
+576092477588
+579978033195
+580750797719
+582161955806
+586260656042
+591634337324
+594939021405
+595378103564
+596053482764
+600951285655
+602648007357
+604022648302
+604405292520
+605706474929
+613683439988
+615786335049
+618136497166
+618590451318
+620466339003
+622398325515
+628638469617
+634699462789
+635554403735
+637984726897
+640165680899
+640183852072
+642448592379
+643815318534
+644146412440
+647805776992
+648268688767
+651722061473
+677997464709
+696091472094
+697566995100
+698633952485
+701093077461
+702749267347
+706543961140
+707528931409
+709940472678
+711587645304
+712979301322
+713218865614
+716638461532
+720541263126
+724206506715
+726593833513
+727120076799
+729378049534
+731418885462
+733872025204
+735674806709
+739586153236
+742205005946
+744813796439
+747895643148
+758274322503
+763611243409
+768323099140
+769710838221
+773646119814
+781871810962
+787401476042
+801327963266
+809145452687
+810414047483
+811952735421
+813971948955
+814135569319
+814734789631
+815707002454
+826448203031
+828147045403
+832075518805
+832230831789
+838263643813
+842842897117
+852752082878
+859164041381
+861612406503
+866246026535
+877629899833
+895147199129
+896707526826
+899364380926
+924751448855
+924775807784
+925978946887
+933357944250
+935320506111
+935768166773
+936111364447
+939266141586
+944333314660
+946680971295
+948779349995
+951702355461
+956162534261
+961744285530
+970437060329
+975860780021
+990081619861
+1002096877670
+1002721079957
+1008902523996
+1012932161709
+1014837220166
+1019147419372
+1027799279335
+1035385601028
+1036679908402
+1038306862038
+1042977399630
+1043857640144
+1053599166145
+1058831066281
+1062455585779
+1069876313136
+1084553604545
+1088702129707
+1089448464031
+1090583092959
+1091341973674
+1100678509810
+1103598243324
+1105407774844
+1108139907570
+1108390872015
+1110245174594
+1111466830953
+1111876970145
+1111924428460
+1115220904935
+1117142495686
+1121324932459
+1123850881327
+1132351217231
+1154986442787
+1155973510209
+1157870029385
+1161184465044
+1167539167495
+1176171106238
+1178302678850
+1179701909886
+1180187184702
+1182537055173
+1184452480083
+1198995830704
+1201470968087
+1202342502716
+1203872994193
+1205927040405
+1215663779345
+1221910101003
+1222896391352
+1222929944158
+1223513210665
+1240746735820
+1242688799830
+1248974512783
+1264540834444
+1265300911448
+1266228342137
+1267832176477
+1268120112068
+1268420081016
+1283654728932
+1287022767413
+1297361846417
+1313371123155
+1331265277802
+1341849281813
+1355010935164
+1357229927512
+1358661990357
+1359008507383
+1365014832129
+1371571440660
+1373520626087
+1377865519182
+1382725996265
+1393530857958
+1410728024685
+1425957256291
+1426754039186
+1436334877866
+1443883972608
+1448923155903
+1455575747622
+1457017046664
+1462364025508
+1466290455083
+1471295325796
+1487221729674
+1498094368308
+1513511418970
+1519955370351
+1529020356200
+1530337425580
+1534378993812
+1536105721591
+1549024352184
+1549131913250
+1557013771808
+1566681704349
+1569827230828
+1573039813770
+1574297205268
+1575770577904
+1581269015957
+1591257594860
+1593206021622
+1610320331720
+1611569193469
+1618445651654
+1630551306049
+1657749877994
+1665466184445
+1668815241422
+1671684832337
+1672186241423
+1675296094686
+1690510807390
+1697253551352
+1703801489696
+1711298089082
+1761754506039
+1769132691906
+1771734493320
+1797773173306
+1802669955700
+1821851618882
+1828377461571
+1835091391390
+1843457989908
+1869471443836
+1887383962419
+1888612747330
+1891798507378
+1905663515264
+1909306650875
+1949324649919
+1958251550190
+1961011348197
+1984686368781
+2022381891369
+2039225715195
+2070917753613
+2080497735669
+2081234875837
+2088548981239
+2100710744297
+2104066198082
+2106335600600
+2108318475629
+2108515787747
+2110733189934
+2118696330405
+2124422082074
+2127149862331
+2129987566582
+2130045224469
+2130348779972
+2132880719930
+2138846240432
+2155781419051
+2163836386756
+2204327233148
+2209186114600
+2211273115878
+2213751347783
+2228013239238
+2230455947971
+2262704684807
+2263326560884
+2273335314661
+2284810128793
+2291231629358
+2308573849411
+2370921051787
+2388758849424
+2395459336060
+2414038379562
+2420554753212
+2432652958722
+2434430554874
+2454600213786
+2470540624340
+2474854884684
+2478440946692
+2483389985062
+2490953995995
+2492850753164
+2526248919724
+2528983157915
+2539178011650
+2540449429286
+2545967508081
+2563744451020
+2585158437170
+2589326850320
+2595457117612
+2622906870830
+2636626261941
+2644859030393
+2665570420990
+2681818823480
+2701165602316
+2720394114778
+2727132528019
+2733642227724
+2734714860798
+2754239329576
+2772986518524
+2802286013045
+2807784524271
+2847054476440
+2847905940158
+2851305496636
+2875790032159
+2885551796048
+2889912582034
+2907511079862
+2910929252888
+2930644427541
+2931178210195
+2939956839483
+2943798666003
+2971539488535
+2972877883467
+2992264998318
+2996635675787
+3006826252864
+3060254752072
+3068252623157
+3074537110444
+3084018572905
+3085589837412
+3109258203177
+3121869316899
+3130540965062
+3151455838728
+3156812236136
+3159218682860
+3181410587466
+3194918409134
+3197164400658
+3205096169109
+3212035146554
+3227648050616
+3233656903291
+3239937249577
+3251373905068
+3257436485027
+3259051365784
+3273222196127
+3288931839421
+3302278041729
+3312523712926
+3319302941208
+3346429071419
+3346769049295
+3389101395468
+3401444294704
+3433864680270
+3447933587633
+3449736675062
+3454326043767
+3473654362804
+3581744862376
+3602081620697
+3633430459227
+3653578834649
+3673118677505
+3678920535733
+3710448455762
+3719225384855
+3726355626576
+3744728191746
+3765864787072
+3768061285463
+3775915469648
+3789127372692
+3815463923919
+3827523755071
+3831057693409
+3840258282139
+3864986527307
+3868622815530
+3891885408728
+3893652933231
+3920563270509
+3928659740104
+3934569920014
+3945857662557
+3963442063151
+3985171394224
+3989293833292
+3989689549098
+3994377884903
+4002425205172
+4010235351886
+4018800527188
+4090929258798
+4112056644392
+4118544445195
+4146440165563
+4161768411916
+4231050879575
+4239927041231
+4290269178843
+4292506047793
+4306424078369
+4331376158295
+4343704937539
+4360681260808
+4391766680585
+4410938188313
+4424735098799
+4425398054308
+4442848766368
+4519272073227
+4523515747284
+4545459324134
+4565221336398
+4609681074555
+4620419763968
+4625838628241
+4642656745035
+4643939762419
+4647173109584
+4719860702072
+4797052678428
+4803401496110
+4830944117381
+4851730258812
+4860715205655
+4870872723908
+4880943806128
+4903496636302
+4906873688593
+4917689075988
+4922154993819
+4975601748411
+4997229164240
+5007845036594
+5007847962996
+5011900894961
+5014501903991
+5023405154253
+5038684394734
+5041645942572
+5052306838466
+5073045918573
+5126949818291
+5147848753944
+5168256331471
+5187386849017
+5208987141790
+5239187070708
+5243452039720
+5251774457879
+5272741953694
+5277696551287
+5306820006882
+5310586222397
+5322329904842
+5353211721226
+5354916904868
+5365270392915
+5375983232842
+5411653563759
+5433015425802
+5452421177310
+5501020844678
+5530137563626
+5584791789410
+5586808807311
+5671680717522
+5681796011247
+5735063435950
+5753215012797
+5803397537546
+5825747978564
+5838857509208
+5891382275491
+5940914635774
+5945221183115
+5982191448874
+5985547937980
+6001187486126
+6004170243657
+6006595313861
+6037513372055
+6061858213194
+6069842249361
+6091917990723
+6103969032335
+6354604718717
+6363867458095
+6458265901894
+6462806991812
+6486180807221
+6497818582394
+6513115921848
+6544867323745
+6567583604016
+6587320538189
+6649412990088
+6675436149309
+6762487404254
+6822862112299
+6886045598604
+6907172453979
+7002729789983
+7024251933006
+7100777506783
+7111182544839
+7127786978748
+7147367653235
+7183688230049
+7211492408617
+7237003993001
+7239558367362
+7322918356285
+7353805429278
+7369829218926
+7418711255310
+7459816909815
+7481144294403
+7512590604359
+7555197059454
+7630462255675
+7655449241557
+7680734432681
+7691788100976
+7730817674920
+7781087680357
+7849289629914
+7906750150420
+7920402999349
+7922993952830
+7969780394253
+7994306279679
+8002994231434
+8005198467513
+8046000988760
+8179013183878
+8186651526118
+8215009561350
+8221747675307
+8244890021204
+8254098468688
+8263983603499
+8268652533988
+8278258914306
+8291876993500
+8383997519204
+8395993834186
+8574568065517
+8685842093257
+8716074802133
+8766721903256
+8781564027163
+8823775038736
+8893429952214
+8923923123872
+8955524834810
+9095081583023
+9103797903084
+9107162823637
+9142972015174
+9184715518183
+9196775120753
+9214215969712
+9235387380786
+9388043047445
+9584784938495
+9768160905794
+9769327359837
+9843857474078
+9864253394643
+9923668059179
+9943691370362
+9959681312986
+9998527123598
+10024903056907
+10057208780963
+10081176486240
+10106114602262
+10133875950499
+10146273676448
+10169379380988
+10234158942534
+10294127533453
+10324951186348
+10344950015104
+10345088517256
+10364416080816
+10431916639629
+10441423719763
+10547042820290
+10648587982528
+10722247243007
+10732543701060
+10795104419870
+10965098486837
+10994789210770
+11039689757553
+11099179169413
+11118372242960
+11241884568199
+11345855149219
+11383459822195
+11398477513327
+11495307691233
+11586189091478
+11628475621507
+11748306138602
+11796855492777
+11813586308455
+11826152696548
+11940850778268
+12010423971954
+12171456441522
+12229115923557
+12383791009354
+12473831580008
+12590056964801
+12603473794177
+12768876707037
+12808729278487
+12858757395462
+12901010577203
+12914573045771
+13035474222521
+13140622043219
+13145118189548
+13248128527415
+13259503360129
+13366686605793
+13751768279359
+13776245864767
+13928678261260
+14034252970160
+14035438374996
+14078133277013
+14126598956174
+14169802258166
+14278617321444
+14591077301431
+14597243119372
+14633148218886
+14765114041019
+14975879453899
+15001876644068
+15046238316767
+15060973788698
+15396145547106
+15495161009753
+15641724037702
+15680694844877
+15909981951624
+15932614550346
+15999899974033
+16146565370552
+16212456828032
+16259533930611
+16292463002055
+16295762999484
+16334718444739
+16406610298479
+16433866256837
+16515331452488
+16580593323767
+17008738046634
+17090527756683
+17093694809208
+17349395330187
+17363896543728
+17426265570609
+17454808974989
+17521390277458
+17595087717173
+17699891837444
+17750236611402
+17835047847578
+18010556491355
+18169245932897
+18226845677602
+18387881776609
+18434082949772
+18483866033648
+18488161361436
+18524529426270
+18607749349764
+18633371428001
+18673701869253
+18805090568523
+18807777483377
+19081145754783
+19082106508322
+19086796420235
+19219699318509
+19293026221244
+19388867527055
+19483281954695
+19502067141825
+19561444861263
+19653445790449
+19784891084316
+20072305649281
+20118333462077
+20272137005170
+20347695927606
+20355007729311
+20387074111952
+20497775819813
+20763669576250
+20797408112833
+20801515130390
+20887098503426
+20949968319457
+20954215265712
+21046576310079
+21248866693564
+21283720594337
+21331454277029
+21337038326883
+21369010814940
+21429447057554
+21463867671278
+21539004203004
+21636659826711
+21764680991706
+21798614845705
+21806209677029
+21827961662344
+21964409079484
+22002886417707
+22138846987813
+22159217994844
+22201677157591
+22284992026012
+22351411692977
+22438129122682
+22460043845751
+22637520978820
+22638636983298
+22773742712479
+22845848695932
+22846357887730
+22926819396967
+22954929429909
+22990163251540
+22991322423540
+23039114447608
+23108690973052
+23207626880092
+23299286184895
+23446754149429
+23611599614995
+23833718680000
+23850432225194
+23990094055417
+24117948051449
+24147534375179
+24178696458856
+24267302347766
+24322861209215
+24483558968885
+24575502658708
+24688127873247
+24838994564812
+24911225949163
+24927670207580
+24969134375782
+25437012545190
+25729949054145
+25850368884858
+25902266906358
+25948530003537
+26263505351360
+26413621235305
+26419477407821
+26427815763119
+26530751303777
+26563854840530
+26965220420854
+27246866472070
+27354610145901
+27421400948156
+27444170474144
+27551476326836
+27576097985201
+27660181380349
+27756346208495
+27760593517068
+27769942780089
+27967464333113
+28135058153386
+28144580867047
+28164504216186
+28188062531292
+28236288124967
+28271427162612
+28289958871469
+28311339929384
+28317103634705
+28354916359953
+28372962536580
+28406305878224
+28412419351276
+28506007004489
+28535178859933
+28692721650377
+29178177520957
+29230621851622
+29311742898993
+29475026965666
+29548791252655
+29823176119932
+29973448643876
+30122802759415
+30181325601197
+30228757186018
+30308042485227
+30441490566271
+30625890139190
+30700246779200
+30850164623329
+30872523284682
+30904888260986
+31145363432749
+31282259103816
+31432004963044
+31660847229251
+31829364518210
+31877024929349
+31957180214446
+31964327357713
+32110994695471
+32113025974494
+32114658506800
+32118867243425
+32124135899176
+32124921914061
+32125739604889
+32130420871909
+32131593807669
+32134852593809
+32136014548641
+32142022342405
+32151772381681
+32159075789321
+32171950188469
+32177775222956
+32181031175618
+32215030806375
+32221471147728
+32239410500332
+32245377078446
+32252776824722
+32272517772915
+32344623180508
+32431561189012
+32492152956117
+32525143956857
+32578674509958
+32605267125021
+32694742838666
+32752564626995
+33032529635783
+33067769087757
+33561128419070
+33863610663360
+33893048444431
+34094998908587
+34411387078058
+34729173755157
+34974104633399
+35010047778434
+35013470690773
+35023554392404
+35024821321820
+35031695623233
+35064068947361
+35075508438201
+35094706123313
+35104497888983
+35119623237583
+35171833054264
+35579356341043
+35580540670111
+35719387593268
+35775988504284
+35888490677462
+35949605332719
+35965754842350
+35971025161578
+36081141695191
+36113440967660
+36284163647213
+36502364254840
+36620963746877
+36675610554935
+36748240019307
+36837382654086
+37099352345748
+37351498960510
+37511916672940
+38215680859493
+38228463521566
+38255553531993
+38413453958642
+38704383673896
+38798371953187
+38822048380308
+39039485131162
+39408798476202
+39934331449133
+40108071256930
+40175908906550
+40316016316313
+40373373320846
+40407391213013
+40911686260868
+41477406651574
+41764111352922
+41843303362307
+42000125596639
+42134707478398
+42327003215637
+42534577079033
+42855021542256
+43081924757946
+43189677084026
+43618383750128
+43741324343485
+44028688899118
+44053472985208
+44465587564376
+44493275860677
+44575288150090
+44581568489238
+44587176570272
+44819806651637
+44897700877507
+45497362558714
+45871519069003
+46289836111659
+46344868654263
+46421669292882
+46424547656014
+46496709778549
+46624507537717
+47146421230353
+47298972548174
+48088517484196
+48127469505482
+48346201993952
+49241515478591
+49361018334471
+49495711320428
+49550367386432
+49565582743815
+49687074939503
+49999906543209
+50000000000000
+50000000000000
+50000106630058
+50000337393995
+50006996286899
+50010593368183
+50039297497365
+50058311777181
+50099648350997
+50121787543637
+50428173388468
+50785923423179
+50924277399281
+51461186712937
+51613463696352
+51821307581578
+52163672815765
+52186008455721
+52192028614357
+52287381596278
+52521167119823
+52574523710158
+52672458276396
+52804150267636
+53069438869761
+53420006685525
+53487713930786
+53800543308113
+53826992703929
+54024493509490
+54337311314914
+54887012418993
+54901897553855
+55227614875369
+55228599920001
+55524304104656
+55877163945938
+55931629388075
+56337210599311
+56343378039530
+56371414093476
+56770746140763
+57036014695640
+57411476446828
+57591766903156
+57639038789953
+58077963325046
+58125719417731
+58151535988236
+58495298334169
+58672610426914
+59237705210131
+59298262140915
+59519641402838
+59631146040043
+60223264077831
+60364168943206
+60426036428227
+60661075871207
+60689245854036
+60866252099702
+60945585426179
+60956808355665
+61930640708589
+62061601639436
+62234124269205
+62243043607799
+62569005106546
+62732994327293
+62805624875144
+63163980006292
+63174145980378
+63333506894818
+64175744606748
+64249465998446
+64328596815617
+64328655986831
+64329498883566
+64372570992762
+64550272376622
+64606076581686
+64968482197256
+65765735341742
+66051038895212
+66479529512465
+66718083708209
+66741511006189
+67095062349663
+67431015997117
+67456548948609
+67606754148021
+68393047347237
+69071328982290
+69174369087661
+69181749385449
+69277278118852
+69321516629824
+69382565518506
+69502760172144
+69818576461956
+69903834130025
+70019238278444
+70020758635779
+70022408630916
+70022667538006
+70023046591689
+70023990860835
+70024942523372
+70025328553301
+70025890876285
+70026745865418
+70028060031468
+70028686954959
+70029144109562
+70029432493234
+70029517899411
+70032542305696
+70038175911360
+70039463406061
+70044600421852
+70044911919558
+70053716693439
+70066245367167
+70189151364856
+70216158793643
+70233652198178
+70266544438145
+70308652345002
+70356129987956
+70502118999158
+70588973570551
+70676678899417
+70707573083215
+70724839070648
+70739720775539
+70740113610310
+70744799431876
+70850693571020
+70856850969228
+70961177672030
+70964170251274
+71104638695344
+71127936500591
+71233804334119
+71497798654021
+71540208858243
+71606595177636
+71624604381104
+71821465793254
+72635299340538
+72796726523418
+72860332258242
+72867187067984
+73010429509244
+73067096648391
+73502527004769
+73548916086020
+73822070202199
+74008203416928
+74009887611183
+74398773861300
+74556629896383
+74692372306901
+74749105076196
+75122028642077
+105408513666370
diff --git a/lambda-calcul/rust/proptest-regressions/ast.txt b/lambda-calcul/rust/proptest-regressions/ast.txt
new file mode 100644
index 0000000..7a8c8d1
--- /dev/null
+++ b/lambda-calcul/rust/proptest-regressions/ast.txt
@@ -0,0 +1,7 @@
+# Seeds for failure cases proptest has generated in the past. It is
+# automatically read and these particular cases re-run before any
+# novel cases are generated.
+#
+# It is recommended to check this file in to source control so that
+# everyone who runs the test benefits from these saved cases.
+cc 5ce217238e9cf11ab2c5369b545fd374a630a943184d4b61579b65aa4d8f49b8 # shrinks to mut atoms = [Sym("ꧠ"), Sym("ቊ")]
diff --git a/lambda-calcul/rust/proptest-regressions/lambda.txt b/lambda-calcul/rust/proptest-regressions/lambda.txt
new file mode 100644
index 0000000..2867930
--- /dev/null
+++ b/lambda-calcul/rust/proptest-regressions/lambda.txt
@@ -0,0 +1,7 @@
+# Seeds for failure cases proptest has generated in the past. It is
+# automatically read and these particular cases re-run before any
+# novel cases are generated.
+#
+# It is recommended to check this file in to source control so that
+# everyone who runs the test benefits from these saved cases.
+cc 1589680cd328dc53046b4c3d6dd3956c643d75b4a8cdca25b69acfc4b5e80070 # shrinks to i = 0
diff --git a/lambda-calcul/rust/proptest-regressions/parser.txt b/lambda-calcul/rust/proptest-regressions/parser.txt
new file mode 100644
index 0000000..cd13f63
--- /dev/null
+++ b/lambda-calcul/rust/proptest-regressions/parser.txt
@@ -0,0 +1,7 @@
+# Seeds for failure cases proptest has generated in the past. It is
+# automatically read and these particular cases re-run before any
+# novel cases are generated.
+#
+# It is recommended to check this file in to source control so that
+# everyone who runs the test benefits from these saved cases.
+cc 369f514eb0f4e92e4809a33e1af32452801757a413be00426c99ba26bead4fa9 # shrinks to values = [Sym(" ")]
diff --git a/rust/sample/test.txt b/lambda-calcul/rust/sample/test.txt
index 76dc68a..76dc68a 100644
--- a/rust/sample/test.txt
+++ b/lambda-calcul/rust/sample/test.txt
diff --git a/rust/sample/test01/input b/lambda-calcul/rust/sample/test01/input
index 48082f7..48082f7 100644
--- a/rust/sample/test01/input
+++ b/lambda-calcul/rust/sample/test01/input
diff --git a/rust/sample/test01/output b/lambda-calcul/rust/sample/test01/output
index 48082f7..48082f7 100644
--- a/rust/sample/test01/output
+++ b/lambda-calcul/rust/sample/test01/output
diff --git a/rust/sample/test02/input b/lambda-calcul/rust/sample/test02/input
index 81a0443..81a0443 100644
--- a/rust/sample/test02/input
+++ b/lambda-calcul/rust/sample/test02/input
diff --git a/rust/sample/test02/output b/lambda-calcul/rust/sample/test02/output
index c61e10e..c61e10e 100644
--- a/rust/sample/test02/output
+++ b/lambda-calcul/rust/sample/test02/output
diff --git a/rust/sample/test03/input b/lambda-calcul/rust/sample/test03/input
index 6cff466..6cff466 100644
--- a/rust/sample/test03/input
+++ b/lambda-calcul/rust/sample/test03/input
diff --git a/rust/sample/test03/output b/lambda-calcul/rust/sample/test03/output
index fd56297..fd56297 100644
--- a/rust/sample/test03/output
+++ b/lambda-calcul/rust/sample/test03/output
diff --git a/rust/sample/test_bool.txt b/lambda-calcul/rust/sample/test_bool.txt
index a1b1309..a1b1309 100644
--- a/rust/sample/test_bool.txt
+++ b/lambda-calcul/rust/sample/test_bool.txt
diff --git a/rust/sample/test_full.txt b/lambda-calcul/rust/sample/test_full.txt
index ece76b8..ece76b8 100644
--- a/rust/sample/test_full.txt
+++ b/lambda-calcul/rust/sample/test_full.txt
diff --git a/rust/sample/test_let.txt b/lambda-calcul/rust/sample/test_let.txt
index 6027cd0..6027cd0 100644
--- a/rust/sample/test_let.txt
+++ b/lambda-calcul/rust/sample/test_let.txt
diff --git a/rust/sample/test_nat.txt b/lambda-calcul/rust/sample/test_nat.txt
index 81a6e9d..81a6e9d 100644
--- a/rust/sample/test_nat.txt
+++ b/lambda-calcul/rust/sample/test_nat.txt
diff --git a/rust/sample/test_normal.txt b/lambda-calcul/rust/sample/test_normal.txt
index 00abde9..00abde9 100644
--- a/rust/sample/test_normal.txt
+++ b/lambda-calcul/rust/sample/test_normal.txt
diff --git a/rust/src/ast.rs b/lambda-calcul/rust/src/ast.rs
index d0f1d6f..d0f1d6f 100644
--- a/rust/src/ast.rs
+++ b/lambda-calcul/rust/src/ast.rs
diff --git a/rust/src/io.rs b/lambda-calcul/rust/src/io.rs
index 8c628ba..8c628ba 100644
--- a/rust/src/io.rs
+++ b/lambda-calcul/rust/src/io.rs
diff --git a/rust/src/lambda.rs b/lambda-calcul/rust/src/lambda.rs
index a73ca34..a73ca34 100644
--- a/rust/src/lambda.rs
+++ b/lambda-calcul/rust/src/lambda.rs
diff --git a/rust/src/lib.rs b/lambda-calcul/rust/src/lib.rs
index a8cf18e..a8cf18e 100644
--- a/rust/src/lib.rs
+++ b/lambda-calcul/rust/src/lib.rs
diff --git a/rust/src/main.rs b/lambda-calcul/rust/src/main.rs
index 8d52c46..8d52c46 100644
--- a/rust/src/main.rs
+++ b/lambda-calcul/rust/src/main.rs
diff --git a/rust/src/parser.rs b/lambda-calcul/rust/src/parser.rs
index 52aad5a..52aad5a 100644
--- a/rust/src/parser.rs
+++ b/lambda-calcul/rust/src/parser.rs
diff --git a/rust/src/tester.rs b/lambda-calcul/rust/src/tester.rs
index eb66d4e..eb66d4e 100644
--- a/rust/src/tester.rs
+++ b/lambda-calcul/rust/src/tester.rs
diff --git a/rust/src/web.rs b/lambda-calcul/rust/src/web.rs
index 3f8f056..3f8f056 100644
--- a/rust/src/web.rs
+++ b/lambda-calcul/rust/src/web.rs
diff --git a/rust/templates/leaderboard.html b/lambda-calcul/rust/templates/leaderboard.html
index 82992d1..82992d1 100644
--- a/rust/templates/leaderboard.html
+++ b/lambda-calcul/rust/templates/leaderboard.html
diff --git a/rust/tests/interpret_test.rs b/lambda-calcul/rust/tests/interpret_test.rs
index 16e7fb7..16e7fb7 100644
--- a/rust/tests/interpret_test.rs
+++ b/lambda-calcul/rust/tests/interpret_test.rs
diff --git a/support/2024-10-10.md b/lambda-calcul/support/2024-10-10.md
index 390ff10..390ff10 100644
--- a/support/2024-10-10.md
+++ b/lambda-calcul/support/2024-10-10.md
diff --git a/support/2024-10-10.pdf b/lambda-calcul/support/2024-10-10.pdf
index 68a3c7b..68a3c7b 100644
--- a/support/2024-10-10.pdf
+++ b/lambda-calcul/support/2024-10-10.pdf
Binary files differ
diff --git a/support/Makefile b/lambda-calcul/support/Makefile
index 2a45ef1..2a45ef1 100644
--- a/support/Makefile
+++ b/lambda-calcul/support/Makefile