Index: tests/concurrency/.expect/clib.txt
===================================================================
--- tests/concurrency/.expect/clib.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/clib.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,21 @@
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done Unparker
Index: tests/concurrency/.expect/clib_tls.txt
===================================================================
--- tests/concurrency/.expect/clib_tls.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/clib_tls.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,12 @@
+Local Init
+Local Init
+Local Init
+Local Init
+Starting Checkers
+Done
+Done
+Done
+Done
+Done
+Done
+Done
Index: tests/concurrency/.expect/cluster.txt
===================================================================
--- tests/concurrency/.expect/cluster.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/cluster.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+done
Index: tests/concurrency/.expect/coroutineYield.txt
===================================================================
--- tests/concurrency/.expect/coroutineYield.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/coroutineYield.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,4000 @@
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
+Thread 1
+Coroutine 1
+Coroutine 2
+Thread 2
Index: tests/concurrency/.expect/ctor-check.txt
===================================================================
--- tests/concurrency/.expect/ctor-check.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/ctor-check.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,8 @@
+concurrency/ctor-check.cfa:11:1 error: constructors cannot have mutex parameters
+?{}: function
+... with parameters
+  this: mutex reference to instance of struct Empty with body
+... returning nothing
+ with body
+  Compound Statement:
+
Index: tests/concurrency/.expect/join.txt
===================================================================
--- tests/concurrency/.expect/join.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/join.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+All workers got 42
+All other workers got 27
Index: tests/concurrency/.expect/keywordErrors.txt
===================================================================
--- tests/concurrency/.expect/keywordErrors.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/keywordErrors.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+concurrency/keywordErrors.cfa:1:1 error: thread keyword requires threads to be in scope, add #include <thread.hfa>
+thread A with body
+
+concurrency/keywordErrors.cfa:6:1 error: thread keyword requires threads to be in scope, add #include <thread.hfa>
+thread B with body
+
Index: tests/concurrency/.expect/lockfree_stack.txt
===================================================================
--- tests/concurrency/.expect/lockfree_stack.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/lockfree_stack.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+done
Index: tests/concurrency/.expect/mainError.txt
===================================================================
--- tests/concurrency/.expect/mainError.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/mainError.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,11 @@
+concurrency/mainError.cfa:1:1 error: thread keyword requires threads to be in scope, add #include <thread.hfa>
+thread Test with body
+
+concurrency/mainError.cfa:2:1 error: thread keyword requires threads to be in scope, add #include <thread.hfa>
+main: function
+... with parameters
+  reference to instance of struct Test with body
+... returning nothing
+ with body
+  Compound Statement:
+
Index: tests/concurrency/.expect/migrate.txt
===================================================================
--- tests/concurrency/.expect/migrate.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/migrate.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+done
Index: tests/concurrency/.expect/monitor.txt
===================================================================
--- tests/concurrency/.expect/monitor.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/monitor.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+3000000
Index: tests/concurrency/.expect/multi-monitor.txt
===================================================================
--- tests/concurrency/.expect/multi-monitor.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/multi-monitor.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+2000000 2000000 2000000
Index: tests/concurrency/.expect/once.txt
===================================================================
--- tests/concurrency/.expect/once.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/once.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+starting
+done
Index: tests/concurrency/.expect/preempt.txt
===================================================================
--- tests/concurrency/.expect/preempt.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/preempt.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5 @@
+100
+200
+300
+400
+500
Index: tests/concurrency/.expect/preempt2.txt
===================================================================
--- tests/concurrency/.expect/preempt2.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/preempt2.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+Done
Index: tests/concurrency/.expect/sleep.txt
===================================================================
--- tests/concurrency/.expect/sleep.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/sleep.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/.expect/suspend_then.txt
===================================================================
--- tests/concurrency/.expect/suspend_then.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/suspend_then.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,4001 @@
+T - took
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
+C - Suspending
+C - Publishing
+T - took
+C - Back
Index: tests/concurrency/.expect/thread.txt
===================================================================
--- tests/concurrency/.expect/thread.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/.expect/thread.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,22 @@
+User main begin
+First : Suspend No. 1
+First : Suspend No. 2
+First : Suspend No. 3
+First : Suspend No. 4
+First : Suspend No. 5
+First : Suspend No. 6
+First : Suspend No. 7
+First : Suspend No. 8
+First : Suspend No. 9
+First : Suspend No. 10
+Second : Suspend No. 1
+Second : Suspend No. 2
+Second : Suspend No. 3
+Second : Suspend No. 4
+Second : Suspend No. 5
+Second : Suspend No. 6
+Second : Suspend No. 7
+Second : Suspend No. 8
+Second : Suspend No. 9
+Second : Suspend No. 10
+User main end
Index: tests/concurrency/actors/.expect/dynamic.txt
===================================================================
--- tests/concurrency/actors/.expect/dynamic.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/.expect/dynamic.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5 @@
+starting
+started
+stopping
+Done
+stopped
Index: tests/concurrency/actors/.expect/executor.txt
===================================================================
--- tests/concurrency/actors/.expect/executor.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/.expect/executor.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,4 @@
+starting
+started
+stopping
+stopped
Index: tests/concurrency/actors/.expect/inherit.txt
===================================================================
--- tests/concurrency/actors/.expect/inherit.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/.expect/inherit.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+Start
+A
+A
+A
+A
+Finished
Index: tests/concurrency/actors/.expect/matrix.txt
===================================================================
--- tests/concurrency/actors/.expect/matrix.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/.expect/matrix.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,4 @@
+starting
+started
+stopping
+stopped
Index: tests/concurrency/actors/.expect/pingpong.txt
===================================================================
--- tests/concurrency/actors/.expect/pingpong.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/.expect/pingpong.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+end
Index: tests/concurrency/actors/.expect/poison.txt
===================================================================
--- tests/concurrency/actors/.expect/poison.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/.expect/poison.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5 @@
+Start
+Finished
+Delete
+Destroy
+Done
Index: tests/concurrency/actors/.expect/static.txt
===================================================================
--- tests/concurrency/actors/.expect/static.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/.expect/static.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5 @@
+starting
+started
+stopping
+Done
+stopped
Index: tests/concurrency/actors/.expect/types.txt
===================================================================
--- tests/concurrency/actors/.expect/types.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/.expect/types.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,17 @@
+start
+basic test
+1
+2
+same message and different actors test
+3
+3
+same message and different actor types test
+4
+4
+different message types, one actor test
+-1
+5
+nested inheritance actor test
+-1
+5
+end
Index: tests/concurrency/actors/dynamic.cfa
===================================================================
--- tests/concurrency/actors/dynamic.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/dynamic.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,69 @@
+#include <actor.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <string.h>
+#include <stdio.h>
+
+int Times = 1000000;								// default values
+
+struct derived_actor { inline actor; };
+struct derived_msg {
+    inline message;
+    int cnt;
+};
+
+void ?{}( derived_msg & this, int cnt ) {
+    ((message &) this){ Delete };
+    this.cnt = cnt;
+}
+void ?{}( derived_msg & this ) { ((derived_msg &)this){ 0 }; }
+
+Allocation receive( derived_actor & receiver, derived_msg & msg ) {
+    if ( msg.cnt >= Times ) {
+        sout | "Done";
+        return Delete;
+    }
+    derived_msg * d_msg = alloc();
+    (*d_msg){ msg.cnt + 1 };
+    derived_actor * d_actor = alloc();
+    (*d_actor){};
+    *d_actor << *d_msg;
+    return Delete;
+}
+
+int main( int argc, char * argv[] ) {
+    switch ( argc ) {
+	  case 2:
+		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
+			Times = atoi( argv[1] );
+			if ( Times < 1 ) goto Usage;
+		} // if
+	  case 1:											// use defaults
+		break;
+	  default:
+	  Usage:
+		sout | "Usage: " | argv[0] | " [ times (> 0) ]";
+		exit( EXIT_FAILURE );
+	} // switch
+
+    printf("starting\n");
+
+    executor e{ 0, 1, 1, false };
+    start_actor_system( e );
+
+    printf("started\n");
+
+    derived_msg * d_msg = alloc();
+    (*d_msg){};
+    derived_actor * d_actor = alloc();
+    (*d_actor){};
+    *d_actor << *d_msg;
+
+    printf("stopping\n");
+
+    stop_actor_system();
+
+    printf("stopped\n");
+
+    return 0;
+}
Index: tests/concurrency/actors/executor.cfa
===================================================================
--- tests/concurrency/actors/executor.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/executor.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,106 @@
+#include <actor.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <string.h>
+#include <stdio.h>
+
+// int Actors = 40000, Set = 100, Rounds = 100, Processors = 1, Batch = 1, BufSize = 10; // default values
+int Actors = 1000, Set = 20, Rounds = 10, Processors = 1, Batch = 1, BufSize = 10; // other defaults for test to run in reasonable time
+
+static int ids = 0;
+struct d_actor { 
+    inline actor;
+    d_actor * gstart;
+    int id, rounds, recs, sends;
+};
+void ?{}( d_actor & this ) with(this) {
+    id = ids++;
+    gstart = (&this + (id / Set * Set - id)); // remember group-start array-element
+    rounds = Set * Rounds;	// send at least one message to each group member
+    recs = 0;
+    sends = 0;
+}
+
+struct d_msg { inline message; } shared_msg;
+
+Allocation receive( d_actor & this, d_msg & msg ) with( this ) {
+    if ( recs == rounds ) return Finished;
+    if ( recs % Batch == 0 ) {
+        for ( i; Batch ) {
+            gstart[sends % Set] << shared_msg;
+            sends += 1;
+        }
+    }
+    recs += 1;
+    return Nodelete;
+}
+
+int main( int argc, char * argv[] ) {
+    switch ( argc ) {
+	  case 7:
+		if ( strcmp( argv[6], "d" ) != 0 ) {			// default ?
+			BufSize = atoi( argv[6] );
+			if ( BufSize < 0 ) goto Usage;
+		} // if
+	  case 6:
+		if ( strcmp( argv[5], "d" ) != 0 ) {			// default ?
+			Batch = atoi( argv[5] );
+			if ( Batch < 1 ) goto Usage;
+		} // if
+	  case 5:
+		if ( strcmp( argv[4], "d" ) != 0 ) {			// default ?
+			Processors = atoi( argv[4] );
+			if ( Processors < 1 ) goto Usage;
+		} // if
+	  case 4:
+		if ( strcmp( argv[3], "d" ) != 0 ) {			// default ?
+			Rounds = atoi( argv[3] );
+			if ( Rounds < 1 ) goto Usage;
+		} // if
+	  case 3:
+		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
+			Set = atoi( argv[2] );
+			if ( Set < 1 ) goto Usage;
+		} // if
+	  case 2:
+		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
+			Actors = atoi( argv[1] );
+			if ( Actors < 1 || Actors <= Set || Actors % Set != 0 ) goto Usage;
+		} // if
+	  case 1:											// use defaults
+		break;
+	  default:
+	  Usage:
+		sout | "Usage: " | argv[0]
+             | " [ actors (> 0 && > set && actors % set == 0 ) | 'd' (default " | Actors
+			 | ") ] [ set (> 0) | 'd' (default " | Set
+			 | ") ] [ rounds (> 0) | 'd' (default " | Rounds
+			 | ") ] [ processors (> 0) | 'd' (default " | Processors
+			 | ") ] [ batch (> 0) | 'd' (default " | Batch
+			 | ") ] [ buffer size (>= 0) | 'd' (default " | BufSize
+			 | ") ]" ;
+		exit( EXIT_FAILURE );
+	} // switch
+
+    executor e{ Processors, Processors, Processors == 1 ? 1 : Processors * 512, true };
+
+    printf("starting\n");
+
+    start_actor_system( e );
+
+    printf("started\n");
+
+    d_actor actors[ Actors ];
+
+	for ( i; Actors ) {
+		actors[i] << shared_msg;
+	} // for
+
+    printf("stopping\n");
+
+    stop_actor_system();
+
+    printf("stopped\n");
+
+    return 0;
+}
Index: tests/concurrency/actors/inherit.cfa
===================================================================
--- tests/concurrency/actors/inherit.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/inherit.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,52 @@
+#include <actor.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <string.h>
+#include <stdio.h>
+#include <mutex_stmt.hfa>
+
+struct Server { inline actor; };
+struct Server2 { inline Server; int b; };
+struct D_msg { int a; inline message; };
+struct D_msg2 { inline D_msg; };
+
+void ^?{}( Server2 & this ) { mutex(sout) sout | 'A'; }
+void ?{}( D_msg & this ) { set_allocation( this, Delete ); }
+void ^?{}( D_msg & this ) { mutex(sout) sout | 'A'; }
+
+Allocation handle() {
+    return Finished;
+}
+
+Allocation receive( Server & receiver, D_msg & msg ) { return handle(); }
+Allocation receive( Server & receiver, D_msg2 & msg ) { return handle(); }
+Allocation receive( Server2 & receiver, D_msg & msg ) { return Delete; }
+Allocation receive( Server2 & receiver, D_msg2 & msg ) { return Delete; }
+
+int main() {
+    sout | "Start";
+    {
+        start_actor_system();
+        D_msg * dm = alloc();
+        (*dm){};
+        D_msg2 dm2;
+        Server2 * s = alloc();
+        (*s){};
+        Server2 * s2 = alloc();
+        (*s2){};
+        *s << *dm;
+        *s2 << dm2;
+        stop_actor_system();
+    }
+    {
+        start_actor_system();
+        Server s[2];
+        D_msg * dm = alloc();
+        (*dm){};
+        D_msg2 dm2;
+        s[0] << *dm;
+        s[1] << dm2;
+        stop_actor_system();
+    }
+    sout | "Finished";
+}
Index: tests/concurrency/actors/matrix.cfa
===================================================================
--- tests/concurrency/actors/matrix.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/matrix.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,125 @@
+#include <actor.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <string.h>
+#include <stdio.h>
+
+unsigned int xr = 500, xc = 500, yc = 500, Processors = 1; // default values
+
+struct derived_actor { inline actor; };
+
+struct derived_msg {
+    inline message;
+    int * Z;
+	int * X;
+    int ** Y;
+};
+
+void ?{}( derived_msg & this ) {}
+void ?{}( derived_msg & this, int * Z, int * X, int ** Y ) {
+    ((message &) this){ Nodelete };
+    this.Z = Z;
+    this.X = X;
+    this.Y = Y;
+}
+
+Allocation receive( derived_actor & receiver, derived_msg & msg ) {
+    for ( unsigned int i = 0; i < yc; i += 1 ) { // multiply X_row by Y_col and sum products
+        msg.Z[i] = 0;
+        for ( unsigned int j = 0; j < xc; j += 1 ) {
+            msg.Z[i] += msg.X[j] * msg.Y[j][i];
+        } // for
+    } // for
+    return Finished;
+}
+
+int main( int argc, char * argv[] ) {
+    switch ( argc ) {
+	  case 5:
+		if ( strcmp( argv[4], "d" ) != 0 ) {			// default ?
+			Processors = atoi( argv[4] );
+			if ( Processors < 1 ) goto Usage;
+		} // if
+	  case 4:
+		if ( strcmp( argv[3], "d" ) != 0 ) {			// default ?
+			xr = atoi( argv[3] );
+			if ( xr < 1 ) goto Usage;
+		} // if
+	  case 3:
+		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
+			xc = atoi( argv[2] );
+			if ( xc < 1 ) goto Usage;
+		} // if
+	  case 2:
+		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
+			yc = atoi( argv[1] );
+			if ( yc < 1 ) goto Usage;
+		} // if
+	  case 1:											// use defaults
+		break;
+	  default:
+	  Usage:
+		sout | "Usage: " | argv[0]
+			 | " [ yc (> 0) | 'd' (default " | yc
+			 | ") ] [ xc (> 0) | 'd' (default " | xc
+			 | ") ] [ xr (> 0) | 'd' (default " | xr
+			 | ") ] [ processors (> 0) | 'd' (default " | Processors
+			 | ") ]" ;
+		exit( EXIT_FAILURE );
+	} // switch
+
+    unsigned int r, c;
+	int * Z[xr], * X[xr], * Y[xc];
+
+	for ( r = 0; r < xr; r += 1 ) {						// create/initialize X matrix
+		X[r] = aalloc( xc );
+		for ( c = 0; c < xc; c += 1 ) {
+			X[r][c] = r * c % 37;						// for timing
+		} // for
+	} // for
+	for ( r = 0; r < xc; r += 1 ) {						// create/initialize Y matrix
+		Y[r] = aalloc( yc );
+		for ( c = 0; c < yc; c += 1 ) {
+			Y[r][c] = r * c % 37;						// for timing
+		} // for
+	} // for
+	for ( r = 0; r < xr; r += 1 ) {						// create Z matrix
+		Z[r] = aalloc( yc );
+	} // for
+
+    executor e{ Processors, Processors, Processors == 1 ? 1 : Processors * 16, true };
+
+    printf("starting\n");
+
+    start_actor_system( e );
+
+    printf("started\n");
+
+    derived_msg messages[xr];
+
+    derived_actor actors[xr];
+
+	for ( unsigned int r = 0; r < xr; r += 1 ) {
+		messages[r]{ Z[r], X[r], Y };
+	} // for
+
+	for ( unsigned int r = 0; r < xr; r += 1 ) {
+		actors[r] << messages[r];
+	} // for
+
+    printf("stopping\n");
+
+    stop_actor_system();
+
+    printf("stopped\n");
+
+    for ( r = 0; r < xr; r += 1 ) {						// deallocate X and Z matrices
+		free( X[r] );
+        free( Z[r] );
+	} // for
+	for ( r = 0; r < xc; r += 1 ) {						// deallocate Y matrix
+        free( Y[r] );
+	} // for
+
+    return 0;
+}
Index: tests/concurrency/actors/pingpong.cfa
===================================================================
--- tests/concurrency/actors/pingpong.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/pingpong.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,60 @@
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <string.h>
+#include <stdio.h>
+#include <mutex_stmt.hfa>
+#include <actor.hfa>
+
+struct ping { inline actor; };
+struct pong { inline actor; };
+
+struct p_msg {
+    inline message;
+    size_t count;
+};
+static inline void ?{}( p_msg & this ) { ((message &)this){}; this.count = 0; }
+
+ping * pi;
+pong * po;
+size_t times = 100000;
+
+Allocation receive( ping & receiver, p_msg & msg ) {
+    msg.count++;
+    if ( msg.count > times ) return Finished;
+
+    Allocation retval = Nodelete;
+    if ( msg.count == times ) retval = Finished;
+    *po << msg;
+    return retval;
+}
+
+Allocation receive( pong & receiver, p_msg & msg ) {
+    msg.count++;
+    if ( msg.count > times ) return Finished;
+    
+    Allocation retval = Nodelete;
+    if ( msg.count == times ) retval = Finished;
+    *pi << msg;
+    return retval;
+}
+
+size_t Processors = 2;
+
+int main( int argc, char * argv[] ) {
+    printf("start\n");
+
+    processor p[Processors - 1];
+
+    start_actor_system( Processors ); // test passing number of processors
+
+    ping pi_actor;
+    pong po_actor;
+    po = &po_actor;
+    pi = &pi_actor;
+    p_msg m;
+    pi_actor << m;
+    stop_actor_system();
+
+    printf("end\n");
+    return 0;
+}
Index: tests/concurrency/actors/poison.cfa
===================================================================
--- tests/concurrency/actors/poison.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/poison.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,50 @@
+#include <actor.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <string.h>
+#include <stdio.h>
+
+struct Server { int val; inline actor; };
+
+void ?{}( Server & this ) { this.val = 999; }
+void ^?{}( Server & this ) { this.val = 777; }
+
+int main() {
+    sout | "Start";
+
+    sout | "Finished";
+    {
+        start_actor_system();
+        Server s[10];
+        for ( i; 10 ) {
+            s[i] << FinishedMsg;
+        }
+        stop_actor_system();
+    }
+
+    sout | "Delete";
+    {
+        start_actor_system();
+        for ( i; 10 ) {
+            Server * s = alloc();
+            (*s){};
+            (*s) << DeleteMsg;
+        }
+        stop_actor_system();
+    }
+
+    sout | "Destroy";
+    {
+        start_actor_system();
+        Server s[10];
+        for ( i; 10 )
+            s[i] << DestroyMsg;
+        stop_actor_system();
+        for ( i; 10 )
+            if (s[i].val != 777)
+                sout | "Error: dtor not called correctly.";
+    }
+
+    sout | "Done";
+    return 0;
+}
Index: tests/concurrency/actors/static.cfa
===================================================================
--- tests/concurrency/actors/static.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/static.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,66 @@
+#include <actor.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <string.h>
+#include <stdio.h>
+
+int Times = 1000000;								// default values
+
+struct derived_actor { inline actor; };
+struct derived_msg {
+    inline message;
+    int cnt;
+};
+
+void ?{}( derived_msg & this, int cnt ) {
+    ((message &) this){ Nodelete };
+    this.cnt = cnt;
+}
+void ?{}( derived_msg & this ) { ((derived_msg &)this){ 0 }; }
+
+Allocation receive( derived_actor & receiver, derived_msg & msg ) {
+    if ( msg.cnt >= Times ) {
+        sout | "Done";
+        return Finished;
+    }
+    msg.cnt++;
+    receiver << msg;
+    return Nodelete;
+}
+
+int main( int argc, char * argv[] ) {
+    switch ( argc ) {
+	  case 2:
+		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
+			Times = atoi( argv[1] );
+			if ( Times < 1 ) goto Usage;
+		} // if
+	  case 1:											// use defaults
+		break;
+	  default:
+	  Usage:
+		sout | "Usage: " | argv[0] | " [ times (> 0) ]";
+		exit( EXIT_FAILURE );
+	} // switch
+
+    printf("starting\n");
+
+    executor e{ 0, 1, 1, false };
+    start_actor_system( e );
+
+    printf("started\n");
+
+    derived_msg msg;
+
+    derived_actor actor;
+
+    actor << msg;
+
+    printf("stopping\n");
+
+    stop_actor_system();
+
+    printf("stopped\n");
+
+    return 0;
+}
Index: tests/concurrency/actors/types.cfa
===================================================================
--- tests/concurrency/actors/types.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/actors/types.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,128 @@
+#include <actor.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <string.h>
+#include <stdio.h>
+#include <mutex_stmt.hfa>
+
+struct dummy_actor { actor a; }; // this won't work since the actor isn't inlined
+
+struct derived_actor {
+    inline actor;
+    int counter;
+};
+static inline void ?{}( derived_actor & this ) { ((actor &)this){}; this.counter = 0; }
+
+struct d_msg {
+    inline message;
+    int num;
+};
+
+// this isn't a valid receive routine since int is not a message type
+Allocation receive( derived_actor & receiver, int i ) with( receiver ) {
+    mutex(sout) sout | i;
+    counter++;
+    if ( counter == 2 ) return Finished;
+    return Nodelete; 
+}
+
+Allocation receive( derived_actor & receiver, d_msg & msg ) {
+    return receive( receiver, msg.num );
+}
+
+struct derived_actor2 {
+    struct nested { int i; }; // testing nested before inline
+    inline actor;
+};
+
+Allocation receive( derived_actor2 & receiver, d_msg & msg ) {
+    mutex(sout) sout | msg.num;
+    return Finished;
+}
+
+struct derived_actor3 { inline actor; };
+struct derived_actor4 { inline derived_actor3; };
+struct d_msg2 {
+    inline message;
+    int num;
+};
+
+Allocation receive( derived_actor3 & receiver, d_msg & msg ) {
+    mutex(sout) sout | msg.num;
+    if ( msg.num == -1 ) return Nodelete;
+    return Finished;
+}
+
+Allocation receive( derived_actor3 & receiver, d_msg2 & msg ) {
+    mutex(sout) sout | msg.num;
+    return Finished;
+}
+
+size_t Processors = 3;
+
+int main( int argc, char * argv[] ) {
+    printf("start\n");
+
+    processor p[Processors - 1];
+
+    printf("basic test\n"); 
+    start_actor_system( Processors ); // test passing number of processors
+    derived_actor a;
+    d_msg b, c;
+    b.num = 1;
+    c.num = 2;
+    a << b << c;
+    stop_actor_system();
+
+    printf("same message and different actors test\n");
+    start_actor_system(); // let system detect # of processors
+    derived_actor2 d_ac2_0, d_ac2_1;
+    d_msg d_ac2_msg;
+    d_ac2_msg.num = 3;
+    d_ac2_0 << d_ac2_msg;
+    d_ac2_1 << d_ac2_msg;
+    stop_actor_system();
+
+    
+    {
+        printf("same message and different actor types test\n");
+        executor e{ 0, Processors, Processors == 1 ? 1 : Processors * 4, false };
+        start_actor_system( e ); // pass an explicit executor
+        derived_actor2 d_ac2_2;
+        derived_actor3 d_ac3_0;
+        d_msg d_ac23_msg;
+        d_ac23_msg.num = 4;
+        d_ac3_0 << d_ac23_msg;
+        d_ac2_2 << d_ac23_msg;
+        stop_actor_system();
+    } // RAII to clean up executor
+
+    {
+        printf("different message types, one actor test\n");
+        executor e{ 1, Processors, Processors == 1 ? 1 : Processors * 4, true };
+        start_actor_system( Processors );
+        derived_actor3 a3;
+        d_msg b1;
+        d_msg2 c2;
+        b1.num = -1;
+        c2.num = 5;
+        a3 << b1 << c2;
+        stop_actor_system();
+    } // RAII to clean up executor
+
+    {
+        printf("nested inheritance actor test\n");
+        executor e{ 1, Processors, Processors == 1 ? 1 : Processors * 4, true };
+        start_actor_system( Processors );
+        derived_actor4 a4;
+        d_msg b1;
+        d_msg2 c2;
+        b1.num = -1;
+        c2.num = 5;
+        a4 << b1 << c2;
+        stop_actor_system();
+    } // RAII to clean up executor
+
+    printf("end\n");
+    return 0;
+}
Index: tests/concurrency/barrier/.expect/generation.txt
===================================================================
--- tests/concurrency/barrier/.expect/generation.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/barrier/.expect/generation.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+AAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZAAAAAAAAABBBBBBBBBCCCCCCCCCDDDDDDDDDEEEEEEEEEFFFFFFFFFGGGGGGGGGHHHHHHHHHIIIIIIIIIJJJJJJJJJKKKKKKKKKLLLLLLLLLMMMMMMMMMNNNNNNNNNOOOOOOOOOPPPPPPPPPQQQQQQQQQRRRRRRRRRSSSSSSSSSTTTTTTTTTUUUUUUUUUVVVVVVVVVWWWWWWWWWXXXXXXXXXYYYYYYYYYZZZZZZZZZ
Index: tests/concurrency/barrier/.expect/last.txt
===================================================================
--- tests/concurrency/barrier/.expect/last.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/barrier/.expect/last.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+done
Index: tests/concurrency/barrier/.expect/order.txt
===================================================================
--- tests/concurrency/barrier/.expect/order.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/barrier/.expect/order.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+done
Index: tests/concurrency/barrier/gen_generation_expect.cfa
===================================================================
--- tests/concurrency/barrier/gen_generation_expect.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/barrier/gen_generation_expect.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,31 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2022 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// gen_generation_expect.cfa -- simple 'script' generates the expect file for concurrent/barrier/generation
+//
+// Author           : Thierry Delisle
+// Created On       : Thu Mar 31 16:44:43 2022
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+
+#include <fstream.hfa>
+
+int NUM_THREADS = 9;
+int NUM_LAPS = 53;
+
+int main() {
+
+	for(NUM_LAPS)
+		for(c; 'A' ~= 'Z') {
+			for(NUM_THREADS) {
+				sout | c | nonl;
+			}
+		}
+	sout | nl;
+}
Index: tests/concurrency/barrier/generation.cfa
===================================================================
--- tests/concurrency/barrier/generation.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/barrier/generation.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,58 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2022 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// concurrent/barrier/generation.cfa -- simple test that validates barriers by printing
+//                                      alphabetical generations
+//
+// Author           : Thierry Delisle
+// Created On       : Thu Mar 31 16:43:45 2022
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+// Test validates barrier by having each thread print ABCD...
+// If the barrier is correct it should print all As, all Bs, etc.
+
+unsigned NUM_THREADS = 9;
+unsigned NUM_LAPS = 53;
+
+#include <concurrency/barrier.hfa>
+#include <fstream.hfa>
+#include <mutex_stmt.hfa>
+#include <thread.hfa>
+
+// The barrier we are testing
+barrier bar = { NUM_THREADS };
+
+
+thread Tester {};
+void main( Tester & this ) {
+	// Repeat the experiment a few times
+	for(NUM_LAPS)
+		// For each letters
+		for(c; 'A' ~= 'Z') {
+			// Yield for chaos
+			yield( prng(this, 10) );
+
+			// Print the generation, no newline because
+			mutex(sout) sout | c | nonl;
+
+			// Yield again for more chaos
+			yield( prng(this, 10) );
+
+			// Block on the barrier
+			block(bar);
+		}
+}
+
+int main() {
+	processor p[4];
+	{
+		Tester testers[NUM_THREADS];
+	}
+	sout | nl;
+}
Index: tests/concurrency/barrier/last.cfa
===================================================================
--- tests/concurrency/barrier/last.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/barrier/last.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,84 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2022 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// concurrent/barrier/last.cfa -- validates barrier's last hook functionality
+//
+// Author           : Thierry Delisle
+// Created On       : Fri Apr 01 14:24:28 2022
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+// Test validates barrier correctly blocks threads, and that the last
+// function is called at the appropriate time.
+
+#include <concurrency/barrier.hfa>
+#include <fstream.hfa>
+#include <mutex_stmt.hfa>
+#include <thread.hfa>
+
+const unsigned NUM_LAPS = 223;
+const unsigned NUM_THREADS = 13;
+
+// The barrier we are testing
+barrier bar = { NUM_THREADS };
+
+// The return values of the previous generation.
+volatile unsigned * generation;
+
+// Check that validate is actually getting called as expected;
+volatile unsigned validate_calls = 0;
+
+void validate() {
+	unsigned vc = validate_calls;
+	unsigned expected = generation[0];
+	for(i; 1 ~ NUM_THREADS) {
+		unsigned obtained = generation[i];
+		if( obtained != expected ) {
+			sout | "Index 0 and" | i | "disagree on current generation:" | expected | "vs" | obtained;
+		}
+	}
+	validate_calls = vc + 1;
+}
+
+thread Tester {
+	unsigned id;
+};
+void main( Tester & this) {
+	park();
+	// Repeat a few times
+	for(l; NUM_LAPS) {
+		// Block
+		block(bar, validate);
+
+		// Update what we thing the generation is
+		generation[this.id]++;
+	}
+}
+
+int main() {
+	// Create the data ans zero it.
+	volatile unsigned gen_data[NUM_THREADS];
+	for(t; NUM_THREADS)
+		gen_data[t] = 0;
+
+	generation = gen_data;
+
+	// Run the experiment
+	processor p[6];
+	{
+		Tester testers[NUM_THREADS];
+		for(i; NUM_THREADS) {
+			testers[i].id = i;
+			unpark(testers[i]);
+		}
+	}
+	if(validate_calls != NUM_LAPS) {
+		sout | "Unexpected number of calls to validate: expcted" | NUM_LAPS | ", got" | validate_calls;
+	}
+	sout | "done";
+}
Index: tests/concurrency/barrier/order.cfa
===================================================================
--- tests/concurrency/barrier/order.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/barrier/order.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,72 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2022 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// concurrent/barrier/order.cfa -- validates barriers the return value of
+//                                 barrier block
+//
+// Author           : Thierry Delisle
+// Created On       : Fri Apr 01 11:39:09 2022
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+// Test validates barrier and block return value by checking
+// that no more than one thread gets the same return value
+
+#include <concurrency/barrier.hfa>
+#include <fstream.hfa>
+#include <mutex_stmt.hfa>
+#include <thread.hfa>
+
+const unsigned NUM_LAPS = 173;
+const unsigned NUM_THREADS = 11;
+
+// The barrier we are testing
+barrier bar = { NUM_THREADS };
+
+// The return values of the previous generation.
+volatile unsigned * generation;
+
+thread Tester {};
+void main( Tester & this ) {
+	// Repeat a few times
+	for(l; NUM_LAPS) {
+		// Yield for chaos
+		yield( prng(this, 10) );
+
+		// Block and what order we arrived
+		unsigned ret = block(bar);
+
+		// Check what was the last generation of that last thread in this position
+		unsigned g = generation[ret];
+
+		// Is it what we expect?
+		if(g != l) {
+			// Complain that they are different
+			sout | "Gen" | l | ": Expeced generation at" | ret | "to be" | l | "was" | g;
+		}
+
+		// Mark the expected next generation
+		generation[ret] = l+1;
+	}
+}
+
+int main() {
+	// Create the data ans zero it.
+	volatile unsigned gen_data[NUM_THREADS];
+	for(t; NUM_THREADS)
+		gen_data[t] = 0;
+
+	generation = gen_data;
+
+	// Run the experiment
+	processor p[4];
+	{
+		Tester testers[NUM_THREADS];
+	}
+	sout | "done";
+}
Index: tests/concurrency/channels/.expect/big_elems.txt
===================================================================
--- tests/concurrency/channels/.expect/big_elems.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/.expect/big_elems.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5 @@
+start
+prods
+cons
+flush
+done
Index: tests/concurrency/channels/.expect/churn.txt
===================================================================
--- tests/concurrency/channels/.expect/churn.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/.expect/churn.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/channels/.expect/contend.txt
===================================================================
--- tests/concurrency/channels/.expect/contend.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/.expect/contend.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/channels/.expect/daisy_chain.txt
===================================================================
--- tests/concurrency/channels/.expect/daisy_chain.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/.expect/daisy_chain.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/channels/.expect/hot_potato.txt
===================================================================
--- tests/concurrency/channels/.expect/hot_potato.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/.expect/hot_potato.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/channels/.expect/ping_pong.txt
===================================================================
--- tests/concurrency/channels/.expect/ping_pong.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/.expect/ping_pong.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/channels/.expect/pub_sub.txt
===================================================================
--- tests/concurrency/channels/.expect/pub_sub.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/.expect/pub_sub.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/channels/.expect/zero_size.txt
===================================================================
--- tests/concurrency/channels/.expect/zero_size.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/.expect/zero_size.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5 @@
+start
+prods
+cons
+flush
+done
Index: tests/concurrency/channels/barrier.cfa
===================================================================
--- tests/concurrency/channels/barrier.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/barrier.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,130 @@
+#include <locks.hfa>
+#include <fstream.hfa>
+#include <stdio.h>
+#include <channel.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+#include <string.h>
+
+size_t total_operations = 0;
+int Processors = 1, Tasks = 5, BarrierSize = 2;
+
+typedef channel( int ) Channel;
+
+Channel * barWait;
+Channel * entryWait;
+owner_lock o;
+
+bool done = false;
+size_t tasks_done = 0;
+
+static inline void initBarrier() {
+    for ( j; BarrierSize )
+        insert( *entryWait, j );
+}
+
+static inline void barrier() {
+    int ticket = remove( *entryWait );
+
+    if ( ticket == BarrierSize - 1 ) {
+		for ( j; BarrierSize - 1 )
+            insert( *barWait, j );
+        return;
+	}
+    ticket = remove( *barWait );
+
+	// last one out
+	if ( BarrierSize == 1 || ticket == BarrierSize - 2 ) {
+		for ( j; BarrierSize )
+            insert( *entryWait, j );
+	}
+}
+
+thread Task {};
+static inline void ?{}( Task & p, cluster & clu ) {
+    ((thread &)p){ clu };
+}
+void main(Task & this) {
+    size_t runs = 0;
+    try {
+        for ( ;; ) {
+            if ( done ) break;
+            barrier();
+            runs++;
+        }
+    } catch ( channel_closed * e ) {} 
+    lock(o);
+    total_operations += runs;
+    // sout | "P: " | runs;
+    unlock(o);
+}
+
+
+int main( int argc, char * argv[] ) {
+    switch ( argc ) {
+	  case 3:
+		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
+			BarrierSize = atoi( argv[2] );
+            if ( Processors < 1 ) goto Usage;
+		} // if
+	  case 2:
+		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
+			Processors = atoi( argv[1] );
+			if ( Processors < 1 ) goto Usage;
+		} // if
+	  case 1:											// use defaults
+		break;
+	  default:
+	  Usage:
+		sout | "Usage: " | argv[0]
+             | " [ processors (> 0) | 'd' (default " | Processors
+			 | ") ] [ BarrierSize (> 0) | 'd' (default " | BarrierSize
+			 | ") ]" ;
+		exit( EXIT_FAILURE );
+	} // switch
+    if ( Tasks < BarrierSize )
+        Tasks = BarrierSize;
+
+    size_t Clusters = 1;
+    // create a cluster
+    cluster clus[Clusters];
+    processor * proc[Processors];
+    for ( i; Processors ) {
+        (*(proc[i] = malloc())){clus[i % Clusters]};
+    }
+
+    Channel entry{ BarrierSize };
+    Channel wait{ BarrierSize };
+
+    entryWait = &entry;
+    barWait = &wait;
+
+    initBarrier();
+
+    sout | "start";
+    Task * t[Tasks];
+
+    for ( i; Tasks ) {
+        (*(t[i] = malloc())){ clus[i % Clusters] };
+    }
+
+    sleep(10`s);
+    done = true;
+
+    sout | "sleep";
+
+    close( entry );
+    close( wait );
+
+    for ( i; Tasks ) {
+        delete(t[i]);
+    }
+    
+    // sout | total_operations;
+
+    for ( i; Processors ) {
+        delete(proc[i]);
+    }
+    sout | "done";
+    return 0;
+}
Index: tests/concurrency/channels/big_elems.cfa
===================================================================
--- tests/concurrency/channels/big_elems.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/big_elems.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,8 @@
+#define BIG 1
+#include "parallel_harness.hfa"
+
+size_t Processors = 10, Channels = 10, Producers = 40, Consumers = 40, ChannelSize = 128;
+
+int main() {
+    test(Processors, Channels, Producers, Consumers, ChannelSize);
+}
Index: tests/concurrency/channels/churn.cfa
===================================================================
--- tests/concurrency/channels/churn.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/churn.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,145 @@
+#include <locks.hfa>
+#include <fstream.hfa>
+#include <stdio.h>
+#include <string.h>
+#include <channel.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+
+size_t Processors = 1, Channels = 4, Producers = 2, Consumers = 2, ChannelSize = 128;
+
+owner_lock o;
+
+size_t total_operations = 0;
+size_t cons_check = 0, prod_check = 0;
+
+channel( size_t ) * channels;
+thread Consumer {};
+
+void getRandArray( int * chanIndices ) {
+    for ( int i = 0; i < Channels; i++ ) {
+        chanIndices[i] = i;
+    }
+    for ( int i = 0; i < Channels; i++ ) {
+        int loc_1 = prng() % Channels;
+        int loc_2 = prng() % Channels;
+        int temp = chanIndices[ loc_1 ];
+        chanIndices[ loc_1 ] = chanIndices[ loc_2 ];
+        chanIndices[ loc_2 ] = temp;
+    }
+}
+
+void main(Consumer & this) {
+    size_t i = 0;
+    size_t runs = 0;
+    size_t my_check = 0;
+    int chanIndices[Channels];
+    getRandArray( chanIndices );
+    try {
+        for ( ;;i++ ) {
+            size_t j = remove( channels[ chanIndices[ i % Channels ] ] );
+            my_check = my_check ^ j;
+            runs++;
+        }
+    } catch ( channel_closed * e ) {}
+
+    // flush out rest of channels
+    for ( i; Channels ) {
+        try {
+            for ( ;; ) {
+                size_t j = remove( channels[ i ] );
+                my_check = my_check ^ j;
+                runs++;
+            }
+        } catchResume ( channel_closed * e ) {} // continue to remove until would block
+        catch ( channel_closed * e ) {} 
+    }
+
+    lock(o);
+    total_operations += runs;
+    cons_check = cons_check ^ my_check;
+    // sout | "Cons: " | runs;
+    unlock(o);
+}
+
+thread Producer {};
+
+void main(Producer & this) {
+    size_t i = 0;
+    size_t runs = 0;
+    size_t my_check = 0;
+    int chanIndices[Channels];
+    getRandArray( chanIndices );
+    try {
+        for ( ;;i++ ) {
+            insert( channels[ chanIndices[ i % Channels ] ], i );
+            my_check = my_check ^ i;
+            runs++;
+        }
+    } catch ( channel_closed * e ) {} 
+    lock(o);
+    total_operations += runs;
+    prod_check = prod_check ^ my_check;
+    // sout | "Prods: " | runs;
+    unlock(o);
+}
+
+
+int main( int argc, char *argv[] ) {
+    switch( argc ) {
+      case 4:
+		if ( strcmp( argv[3], "d" ) != 0 ) {			// default ?
+			if ( atoi( argv[3] ) < 1 ) goto Usage;
+			ChannelSize = atoi( argv[3] );
+		} // if
+      case 3:
+		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
+			if ( atoi( argv[2] ) < 1 ) goto Usage;
+			Channels = atoi( argv[2] );
+		} // if
+      case 2:
+		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
+			if ( atoi( argv[1] ) < 1 ) goto Usage;
+			Processors = atoi( argv[1] );
+		} // if
+	  case 1:											// use defaults
+		break;
+	  default:
+	  Usage:
+		sout | "Usage: " | argv[0]
+             | " [ processors > 0 | d ]"
+             | " [ producers > 0 | d ]"
+             | " [ consumers > 0 | d ]"
+             | " [ channels > 0 | d ]";
+		exit( EXIT_FAILURE );
+    }
+    processor p[Processors - 1];
+    channels = aalloc( Channels );
+
+    // sout | "Processors: " | Processors | " Producers: " | Producers | " Consumers: " | Consumers | "Channels: " | Channels | " Channel Size: " | ChannelSize;
+
+    for ( i; Channels )
+        channels[i]{ ChannelSize };
+
+    sout | "start";
+    {   
+        Consumer c[Consumers];
+        {
+            Producer p[Producers];
+            sleep(10`s);
+            for ( i; Channels )
+                close( channels[i] );
+        }
+    }
+
+    adelete( channels );
+
+    if ( cons_check != prod_check )
+        sout | "CHECKSUM MISMATCH !!!";
+
+    // sout | total_operations;
+    // print_stats_now( *active_cluster(), CFA_STATS_READY_Q );
+
+    sout | "done";
+    return 0;
+}
Index: tests/concurrency/channels/contend.cfa
===================================================================
--- tests/concurrency/channels/contend.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/contend.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,147 @@
+#include <locks.hfa>
+#include <fstream.hfa>
+#include <stdio.h>
+#include <channel.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+#include <string.h>
+
+owner_lock o;
+
+size_t total_operations = 0;
+
+typedef channel( size_t ) Channel;
+
+Channel * channels;
+
+size_t cons_check = 0, prod_check = 0;
+
+thread Consumer {
+    size_t i;
+};
+static inline void ?{}( Consumer & c, size_t i, cluster & clu ) {
+    ((thread &)c){ clu };
+    c.i = i; 
+}
+void main(Consumer & this) {
+    size_t runs = 0;
+    size_t my_check = 0;
+    try {
+        for ( ;; ) {
+            size_t j = remove( channels[ this.i ] );
+            my_check = my_check ^ j;
+            runs++;
+        }
+    } catchResume ( channel_closed * e ) {} // continue to remove until would block
+    catch ( channel_closed * e ) {} 
+    lock(o);
+    total_operations += runs;
+    cons_check = cons_check ^ my_check;
+    // sout | "C: " | runs;
+    unlock(o);
+}
+
+thread Producer {
+    size_t i;
+};
+static inline void ?{}( Producer & p, size_t i, cluster & clu ) {
+    ((thread &)p){ clu };
+    p.i = i;
+}
+void main(Producer & this) {
+    size_t runs = 0;
+    size_t my_check = 0;
+    try {
+        for ( ;; ) {
+            insert( channels[ this.i  ], (size_t)runs );
+            my_check = my_check ^ ((size_t)runs);
+            runs++;
+        }
+    } catch ( channel_closed * e ) {} 
+    lock(o);
+    total_operations += runs;
+    prod_check = prod_check ^ my_check;
+    // sout | "P: " | runs;
+    unlock(o);
+}
+
+static inline int test( size_t Processors, size_t Channels, size_t Producers, size_t Consumers, size_t ChannelSize ) {
+    size_t Clusters = Channels;
+    // create a cluster
+    cluster clus[Clusters];
+    processor * proc[Processors];
+    for ( i; Processors ) {
+        (*(proc[i] = malloc())){clus[i % Clusters]};
+    }
+
+    channels = aalloc( Channels );
+
+    // sout | "Processors: " | Processors | " ProdsPerChan: " | Producers | " ConsPerChan: " | Consumers | "Channels: " | Channels | " Channel Size: " | ChannelSize;
+    
+    for ( i; Channels ) {
+        channels[i]{ ChannelSize };
+    }
+
+    sout | "start";
+    Consumer * c[Consumers * Channels];
+    Producer * p[Producers * Channels];
+
+    for ( j; Channels ) {
+        for ( i; Producers ) {
+            (*(p[i] = malloc())){ j, clus[j % Clusters] };
+        }
+
+        for ( i; Consumers ) {
+            (*(c[i] = malloc())){ j, clus[j % Clusters] };
+        }
+    }
+
+    sleep(10`s);
+
+    for ( i; Channels )
+        close( channels[i] );
+
+    for ( i; Producers * Channels ) {
+        delete(p[i]);
+    }
+    for ( i; Consumers * Channels ) {
+        delete(c[i]);
+    }
+
+    adelete( channels );
+    // sout | total_operations;
+    if ( cons_check != prod_check )
+        sout | "CHECKSUM MISMATCH !!!";
+    // print_stats_now( *active_cluster(), CFA_STATS_READY_Q);
+
+    for ( i; Processors ) {
+        delete(proc[i]);
+    }
+    sout | "done";
+    return 0;
+}
+
+int main( int argc, char * argv[] ) {
+    size_t Processors = 1, Channels = 1, Producers = 4, Consumers = 4, ChannelSize = 128;
+    switch ( argc ) {
+	  case 3:
+		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
+			ChannelSize = atoi( argv[2] );
+		} // if
+	  case 2:
+		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
+			Processors = atoi( argv[1] );
+			if ( Processors < 1 ) goto Usage;
+		} // if
+	  case 1:											// use defaults
+		break;
+	  default:
+	  Usage:
+		sout | "Usage: " | argv[0]
+             | " [ processors (> 0) | 'd' (default " | Processors
+			 | ") ] [ channel size (>= 0) | 'd' (default " | ChannelSize
+			 | ") ]" ;
+		exit( EXIT_FAILURE );
+	} // switch
+    test(Processors, Channels, Producers, Consumers, ChannelSize);
+}
Index: tests/concurrency/channels/daisy_chain.cfa
===================================================================
--- tests/concurrency/channels/daisy_chain.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/daisy_chain.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,74 @@
+#include <locks.hfa>
+#include <fstream.hfa>
+#include <stdio.h>
+#include <channel.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+#include <string.h>
+
+size_t total_operations = 0;
+size_t Processors = 1, Tasks = 4;
+
+owner_lock o;
+
+typedef channel( int ) Channel;
+
+Channel * chain;
+
+thread Task {};
+void main(Task & this) {
+    size_t runs = 0;
+    try{
+        for ( ;; ) {
+            remove( *chain );
+            insert( *chain, 0 );
+            runs++;
+        }
+    } catch ( channel_closed * e ) {}
+    lock( o );
+    total_operations += runs;
+    unlock( o );
+}
+
+
+int main( int argc, char * argv[] ) {
+    switch ( argc ) {
+	  case 3:
+		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
+			Tasks = atoi( argv[2] );
+            if ( Tasks < 1 ) goto Usage;
+		} // if
+	  case 2:
+		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
+			Processors = atoi( argv[1] );
+			if ( Processors < 1 ) goto Usage;
+		} // if
+	  case 1:											// use defaults
+		break;
+	  default:
+	  Usage:
+		sout | "Usage: " | argv[0]
+             | " [ processors (> 0) | 'd' (default " | Processors
+			 | ") ] [ channel size (>= 0) | 'd' (default " | Tasks
+			 | ") ]" ;
+		exit( EXIT_FAILURE );
+	} // switch
+    processor proc[Processors - 1];
+
+    sout | "start";
+    Channel chainChan{ 1 };
+
+    insert( chainChan, 0 );
+
+    chain = &chainChan;    
+    {
+        Task t[Tasks];
+        sleep(10`s);
+        close( chainChan );
+    }
+    
+    // sout | total_operations;
+    sout | "done";
+
+    return 0;
+}
Index: tests/concurrency/channels/hot_potato.cfa
===================================================================
--- tests/concurrency/channels/hot_potato.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/hot_potato.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,88 @@
+#include <locks.hfa>
+#include <fstream.hfa>
+#include <stdio.h>
+#include <channel.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+#include <string.h>
+
+size_t total_operations = 0;
+size_t Processors = 1, Tasks = 4;
+
+owner_lock o;
+
+typedef channel( int ) Channel;
+
+Channel * chain;
+
+bool done = false;
+int id_counter = 0;
+thread Task { int id; int right; };
+static inline void ?{}( Task & this ) with(this) {
+    id = __atomic_fetch_add( &id_counter, 1, __ATOMIC_SEQ_CST );
+    right = (id + 1) % Tasks;
+}
+void main(Task & this) with(this) {
+    size_t runs = 0;
+    try {
+        for ( ;; ) {
+            if ( done ) break;
+            remove( chain[id] );
+            insert( chain[right], 0 );
+            runs++;
+        }
+    } catch ( channel_closed * e ) {}
+    lock( o );
+    total_operations += runs;
+    unlock( o );
+}
+
+
+int main( int argc, char * argv[] ) {
+    switch ( argc ) {
+	  case 3:
+		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
+			Tasks = atoi( argv[2] );
+            if ( Tasks < 1 ) goto Usage;
+		} // if
+	  case 2:
+		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
+			Processors = atoi( argv[1] );
+			if ( Processors < 1 ) goto Usage;
+		} // if
+	  case 1:											// use defaults
+		break;
+	  default:
+	  Usage:
+		sout | "Usage: " | argv[0]
+             | " [ processors (> 0) | 'd' (default " | Processors
+			 | ") ] [ channel size (>= 0) | 'd' (default " | Tasks
+			 | ") ]" ;
+		exit( EXIT_FAILURE );
+	} // switch
+    processor proc[Processors - 1];
+
+    sout | "start";
+
+    chain = aalloc( Tasks );
+    for ( i; Tasks ) {
+        chain[i]{ 1 };
+    }
+
+    insert( chain[0], 0 );
+    {
+        Task t[Tasks];
+        sleep(10`s);
+        done = true;
+        for ( j; Tasks )
+            close( chain[j] );
+    }
+    
+    // sout | total_operations;
+
+    sout | "done";
+
+    adelete(chain);
+
+    return 0;
+}
Index: tests/concurrency/channels/parallel_harness.hfa
===================================================================
--- tests/concurrency/channels/parallel_harness.hfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/parallel_harness.hfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,184 @@
+#include <locks.hfa>
+#include <fstream.hfa>
+#include <stdio.h>
+#include <channel.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+
+// user defines this
+// #define BIG 1
+
+owner_lock o;
+
+unsigned long long total_operations = 0;
+
+struct bigObject {
+    size_t a;
+    size_t b;
+    size_t c;
+    size_t d;
+    size_t e;
+    size_t f;
+    size_t g;
+    size_t h;
+};
+
+void ?{}( bigObject & this, size_t i ) with(this) { a = i; b = i; c = i; d = i; e = i; f = i; g = i; h = i; }
+void ?{}( bigObject & this ) { this{0}; }
+
+#ifdef BIG
+typedef channel( bigObject ) Channel;
+#else
+typedef channel( size_t ) Channel;
+#endif
+
+Channel * channels;
+
+volatile bool cons_done = false, prod_done = false;
+volatile int cons_done_count = 0;
+size_t cons_check = 0, prod_check = 0;
+
+thread Consumer {
+    size_t i;
+};
+static inline void ?{}( Consumer & c, size_t i, cluster & clu ) {
+    ((thread &)c){ clu };
+    c.i = i; 
+}
+void main(Consumer & this) {
+    unsigned long long runs = 0;
+    size_t my_check = 0;
+    for ( ;; ) {
+        if ( cons_done ) break;
+        #ifdef BIG
+        bigObject j = remove( channels[ this.i ] );
+        my_check = my_check ^ (j.a + j.b + j.c + j.d + j.d + j.e + j.f + j.g + j.h);
+        #else
+        size_t j = remove( channels[ this.i ] );
+        my_check = my_check ^ j;
+        #endif
+        
+        if ( !prod_done ) runs++;
+    }
+    lock(o);
+    total_operations += runs;
+    cons_done_count++;
+    cons_check = cons_check ^ my_check;
+    // sout | "C: " | runs;
+    unlock(o);
+}
+
+thread Producer {
+    size_t i;
+};
+static inline void ?{}( Producer & p, size_t i, cluster & clu ) {
+    ((thread &)p){ clu };
+    p.i = i;
+}
+void main(Producer & this) {
+    unsigned long long runs = 0;
+    size_t my_check = 0;
+    for ( ;; ) {
+        if ( prod_done ) break;
+        #ifdef BIG
+        bigObject j{(size_t)runs};
+        insert( channels[ this.i ], j );
+        my_check = my_check ^ (j.a + j.b + j.c + j.d + j.d + j.e + j.f + j.g + j.h);
+        #else
+        insert( channels[ this.i ], (size_t)runs );
+        my_check = my_check ^ ((size_t)runs);
+        #endif
+        runs++;
+    }
+    lock(o);
+    total_operations += runs;
+    prod_check = prod_check ^ my_check;
+    // sout | "P: " | runs;
+    unlock(o);
+}
+
+
+int test( size_t Processors, size_t Channels, size_t Producers, size_t Consumers, size_t ChannelSize ) {
+    size_t Clusters = Processors;
+    // create a cluster
+    cluster clus[Clusters];
+    processor * proc[Processors];
+    for ( i; Processors ) {
+        (*(proc[i] = alloc())){clus[i % Clusters]};
+    }
+
+    channels = aalloc( Channels );
+
+    // sout | "Processors: " | Processors | " ProdsPerChan: " | Producers | " ConsPerChan: " | Consumers | "Channels: " | Channels | " Channel Size: " | ChannelSize;
+    
+    for ( i; Channels ) {
+        channels[i]{ ChannelSize };
+    }
+
+    sout | "start";
+    Consumer * c[Consumers * Channels];
+    Producer * p[Producers * Channels];
+
+    for ( i; Consumers * Channels ) {
+        (*(c[i] = alloc())){ i % Channels, clus[i % Clusters] };
+    }
+
+    for ( i; Producers * Channels ) {
+        (*(p[i] = alloc())){ i % Channels, clus[i % Clusters] };
+    }
+
+    sleep(10`s);
+    prod_done = true;
+
+    for ( i; Producers * Channels ) {
+        delete(p[i]);
+    }
+
+    sout | "prods";
+    cons_done = true;
+    while( cons_done_count != Consumers * Channels ) {
+        for ( i; Channels ) {
+            if ( has_waiters( channels[i] ) ){
+                #ifdef BIG
+                bigObject b{0};
+                insert( channels[i], b );
+                #else
+                insert( channels[i], 0 );
+                #endif
+            }
+        }
+        
+    }
+
+    sout | "cons";
+    for ( i; Consumers * Channels ) {
+        delete(c[i]);
+    }
+
+    sout | "flush";
+    for ( i; Channels ) {
+        for ( ;; ) {
+            if ( get_count( channels[i] ) > 0 ) {
+                #ifdef BIG
+                bigObject j = remove( channels[ i ] );
+                cons_check = cons_check ^ (j.a + j.b + j.c + j.d + j.d + j.e + j.f + j.g + j.h);
+                #else
+                size_t j = remove( channels[ i ] );
+                cons_check = cons_check ^ j;
+                #endif
+            } else break;
+        }
+    }
+
+    adelete( channels );
+    // sout | "total channel ops: " | total_operations;
+    if ( cons_check != prod_check )
+        sout | "CHECKSUM MISMATCH !!!";
+    // print_stats_now( *active_cluster(), CFA_STATS_READY_Q);
+
+    for ( i; Processors ) {
+        delete(proc[i]);
+    }
+    sout | "done";
+    return 0;
+}
Index: tests/concurrency/channels/ping_pong.cfa
===================================================================
--- tests/concurrency/channels/ping_pong.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/ping_pong.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,64 @@
+#include <locks.hfa>
+#include <fstream.hfa>
+#include <stdio.h>
+#include <channel.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+#include <string.h>
+
+typedef channel( int ) Channel;
+
+Channel * ping;
+Channel * pong;
+
+bool done = false;
+size_t total_operations = 0;
+
+thread Pong {};
+void main(Pong & this) {
+    try {
+        for ( ;; ) {
+            if ( done ) break;
+            insert( *ping, 0 );
+            remove( *pong );
+        }
+    } catch ( channel_closed * e ) {} 
+}
+
+thread Ping {};
+void main(Ping & this) {
+    try {
+        for ( ;; ) {
+            if ( done ) break;
+            remove( *ping );
+            insert( *pong, 1 );
+            total_operations++;
+        }
+    } catch ( channel_closed * e ) {} 
+}
+
+
+int main( int argc, char * argv[] ) {
+    sout | "start";
+    processor proc[1];
+
+    Channel pingChan{ 1 };
+    Channel pongChan{ 1 };
+
+    ping = &pingChan;
+    pong = &pongChan;
+    
+    {
+        Ping pi;
+        Pong po;
+        sleep(10`s);
+        done = true;
+        close( *pong );
+        close( *ping );
+    }
+
+    // sout | total_operations;
+    
+    sout | "done";
+    return 0;
+}
Index: tests/concurrency/channels/pub_sub.cfa
===================================================================
--- tests/concurrency/channels/pub_sub.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/pub_sub.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,155 @@
+#include <locks.hfa>
+#include <fstream.hfa>
+#include <stdio.h>
+#include <channel.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+#include <string.h>
+#include <mutex_stmt.hfa>
+
+size_t total_operations = 0;
+size_t Processors = 1, Tasks = 4;
+
+typedef channel( size_t ) Channel;
+
+channel( int ) * barWait;
+channel( int ) * entryWait;
+int BarrierSize = 4;
+static inline void closeBarrier() {
+    close(*entryWait);
+    close(*barWait);
+}
+
+static inline void initBarrier() {
+    barWait = malloc();
+    entryWait = malloc();
+    (*barWait){ BarrierSize };
+    (*entryWait){ BarrierSize };
+    for ( j; BarrierSize )
+        insert( *entryWait, j );
+}
+
+static inline void deleteBarrier() {
+    delete(barWait);
+    delete(entryWait);
+}
+
+static inline void barrier() {
+    int ticket = remove( *entryWait );
+    if ( ticket == BarrierSize - 1 ) {
+		for ( j; BarrierSize - 1 )
+            insert( *barWait, j );
+        return;
+	}
+    ticket = remove( *barWait );
+
+	// last one out
+	if ( BarrierSize == 1 || ticket == BarrierSize - 2 ) {
+		for ( j; BarrierSize )
+            insert( *entryWait, j );
+	}
+}
+
+Channel * chans;
+owner_lock o;
+
+thread Task { size_t id; };
+static inline void ?{}( Task & p, size_t i, cluster & clu ) {
+    ((thread &)p){ clu };
+    p.id = i;
+}
+void main(Task & this) with(this) {
+    size_t runs = 0;
+    try {
+        for ( ;; ) {
+            // publish
+            for ( i; Tasks ) {
+                insert(chans[id], i);
+            }
+
+            // subscribe
+            for ( i; Tasks ) {
+                remove( chans[i] );
+            }
+            barrier();
+            runs++;
+        }
+    } catch ( channel_closed * e ) { }
+    lock(o);
+    total_operations += runs;
+    // sout | runs;
+    unlock(o);
+}
+
+
+int main( int argc, char * argv[] ) {
+    switch ( argc ) {
+	  case 3:
+		if ( strcmp( argv[2], "d" ) != 0 ) {			// default ?
+			Tasks = atoi( argv[2] );
+            if ( Tasks < 1 ) goto Usage;
+		} // if
+	  case 2:
+		if ( strcmp( argv[1], "d" ) != 0 ) {			// default ?
+			Processors = atoi( argv[1] );
+			if ( Processors < 1 ) goto Usage;
+		} // if
+	  case 1:											// use defaults
+		break;
+	  default:
+	  Usage:
+		sout | "Usage: " | argv[0]
+             | " [ processors (> 0) | 'd' (default " | Processors
+			 | ") ] [ Tasks (> 0) | 'd' (default " | Tasks
+			 | ") ]" ;
+		exit( EXIT_FAILURE );
+	} // switch
+    BarrierSize = Tasks;
+
+    size_t Clusters = 1;
+    // create a cluster
+    cluster clus[Clusters];
+    processor * proc[Processors];
+
+    // setup processors
+    for ( i; Processors )
+        (*(proc[i] = malloc())){clus[i % Clusters]};
+
+    // setup pub/sub chans
+    chans = aalloc( Tasks );
+    for ( i; Tasks )
+        chans[i]{ Tasks };
+
+    // setup barrier
+    initBarrier();
+
+    // sout | "Processors: " | Processors | " ProdsPerChan: " | Producers | " ConsPerChan: " | Consumers | "Channels: " | Channels | " Channel Size: " | ChannelSize;
+
+    sout | "start";
+    Task * t[Tasks];
+
+    // create tasks
+    for ( i; Tasks )
+        (*(t[i] = malloc())){ i, clus[i % Clusters] };
+
+    sleep(10`s);
+
+    closeBarrier();
+    for ( i; Tasks )
+        close( chans[i] );
+
+    for ( i; Tasks ) {
+        delete(t[i]);
+    }
+
+    deleteBarrier();
+    
+    // sout | total_operations;
+
+    for ( i; Processors ) {
+        delete(proc[i]);
+    }
+    adelete( chans );
+    sout | "done";
+    return 0;
+}
Index: tests/concurrency/channels/zero_size.cfa
===================================================================
--- tests/concurrency/channels/zero_size.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/channels/zero_size.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,7 @@
+#include "parallel_harness.hfa"
+
+size_t Processors = 10, Channels = 1, Producers = 10, Consumers = 10, ChannelSize = 0;
+
+int main() {
+    test(Processors, Channels, Producers, Consumers, ChannelSize);
+}
Index: tests/concurrency/clib.c
===================================================================
--- tests/concurrency/clib.c	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/clib.c	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,85 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <clib/cfathread.h>
+#include <bits/defs.hfa>
+
+extern "C" {
+void _exit(int status);
+}
+
+_Thread_local struct drand48_data buffer = { 0 };
+int myrand() {
+	long int result;
+	lrand48_r(&buffer, &result);
+	return result;
+}
+
+
+enum Constants { blocked_size = 20 };
+cfathread_t volatile blocked[blocked_size];
+
+void * Worker( void * ) {
+	for(int i = 0; i < 1000; i++) {
+		int idx = myrand() % blocked_size;
+		if(blocked[idx]) {
+			cfathread_t thrd = __atomic_exchange_n(&blocked[idx], NULL, __ATOMIC_SEQ_CST);
+			cfathread_unpark( thrd );
+		} else {
+			cfathread_t thrd = __atomic_exchange_n(&blocked[idx], cfathread_self(), __ATOMIC_SEQ_CST);
+			cfathread_unpark( thrd );
+			cfathread_park();
+		}
+	}
+	printf("Done\n");
+	return NULL;
+}
+
+volatile bool stop;
+void * Unparker( void * ) {
+	while(!stop) {
+		int idx = myrand() % blocked_size;
+		cfathread_t thrd = __atomic_exchange_n(&blocked[idx], NULL, __ATOMIC_SEQ_CST);
+		cfathread_unpark( thrd );
+		int r = myrand() % 20;
+		for( int i = 0; i < r; i++ ) {
+			cfathread_yield();
+		}
+	}
+	printf("Done Unparker\n");
+	return NULL;
+}
+
+
+int main() {
+	stop = false;
+	for(int i = 0; i < blocked_size; i++) {
+		blocked[i] = NULL;
+	}
+
+	cfathread_cluster_t cl = cfathread_cluster_self();
+
+	cfathread_cluster_add_worker( cl, NULL, NULL, NULL );
+	cfathread_cluster_add_worker( cl, NULL, NULL, NULL );
+	cfathread_cluster_add_worker( cl, NULL, NULL, NULL );
+
+	cfathread_attr_t attr;
+	cfathread_attr_init(&attr);
+	cfathread_attr_setcluster(&attr, cl);
+
+	cfathread_t u;
+	cfathread_create( &u, &attr, Unparker, NULL );
+	{
+		cfathread_t t[20];
+		for(int i = 0; i < 20; i++) {
+			cfathread_create( &t[i], &attr, Worker, NULL );
+		}
+		for(int i = 0; i < 20; i++) {
+			cfathread_join( t[i], NULL );
+		}
+	}
+	stop = true;
+	cfathread_join(u, NULL);
+	cfathread_attr_destroy(&attr);
+	fflush(stdout);
+	_exit(0);
+}
Index: tests/concurrency/clib_tls.c
===================================================================
--- tests/concurrency/clib_tls.c	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/clib_tls.c	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <clib/cfathread.h>
+#include <bits/defs.hfa>
+#include <time_t.hfa>
+
+extern "C" {
+void _exit(int status);
+}
+
+Duration default_preemption(){
+	return 0;
+}
+
+
+__thread int checkval = 0xBAADF00D;
+
+void init(void * ) {
+	printf("Local Init\n");
+	checkval = 0xFEEDFACE;
+}
+
+void * checker( void * ) {
+	for(int i = 0; i < 50; i++) {
+		if(checkval != 0xFeedFace) {
+			printf("Bad Food!\n");
+		}
+		cfathread_yield();
+	}
+	printf("Done\n");
+	return NULL;
+}
+
+int main() {
+	init(NULL);
+	cfathread_cluster_t cl = cfathread_cluster_self();
+
+	cfathread_cluster_add_worker( cl, NULL, init, NULL );
+	cfathread_cluster_add_worker( cl, NULL, init, NULL );
+	cfathread_cluster_add_worker( cl, NULL, init, NULL );
+
+	cfathread_attr_t attr;
+	cfathread_attr_init(&attr);
+	cfathread_attr_setcluster(&attr, cl);
+	{
+		printf("Starting Checkers\n");
+		cfathread_t t[7];
+		for(int i = 0; i < 7; i++) {
+			cfathread_create( &t[i], &attr, checker, NULL );
+		}
+		for(int i = 0; i < 7; i++) {
+			cfathread_join( t[i], NULL );
+		}
+	}
+	cfathread_attr_destroy(&attr);
+	fflush(stdout);
+	_exit(0);
+}
Index: tests/concurrency/cluster.cfa
===================================================================
--- tests/concurrency/cluster.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/cluster.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,35 @@
+#include <kernel.hfa>
+#include <thread.hfa>
+
+static cluster * the_cluster;
+
+thread MyThread {};
+void ?{}( MyThread & this ) {
+	((thread&)this){ *the_cluster };
+}
+
+void main( MyThread & this ) {
+	for(50) {
+		yield();
+	}
+}
+
+struct MyProc {
+	processor self;
+};
+
+void ?{}( MyProc & this ) {
+	(this.self){ *the_cluster };
+}
+
+int main() {
+	cluster cl;
+	the_cluster = &cl;
+	{
+		MyProc procs[4];
+		{
+			MyThread threads[17];
+		}
+	}
+	printf( "done\n" );				// non-empty .expect file
+}
Index: tests/concurrency/coroutineYield.cfa
===================================================================
--- tests/concurrency/coroutineYield.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/coroutineYield.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,53 @@
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+
+#define __kick_rate 150000ul
+#include "long_tests.hfa"
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10`ms
+#endif
+
+Duration default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+#ifdef TEST_LONG
+static const unsigned long N = 600_000ul;
+#else
+static const unsigned long N = 1_000ul;
+#endif
+
+coroutine Coroutine {};
+
+void main(Coroutine& this) {
+	while(true) {
+		#if !defined(TEST_FOREVER)
+			sout | "Coroutine 1";
+		#endif
+		yield();
+		#if !defined(TEST_FOREVER)
+			sout | "Coroutine 2";
+		#endif
+		suspend;
+	}
+}
+
+
+Coroutine c;
+int main(int argc, char* argv[]) {
+	for(int i = 0; TEST(i < N); i++) {
+		#if !defined(TEST_FOREVER)
+			sout | "Thread 1";
+		#endif
+		resume(c);
+		#if !defined(TEST_FOREVER)
+			sout | "Thread 2";
+		#endif
+		yield();
+		KICK_WATCHDOG;
+	}
+}
Index: tests/concurrency/ctor-check.cfa
===================================================================
--- tests/concurrency/ctor-check.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/ctor-check.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,15 @@
+#include <monitor.hfa>
+
+monitor Empty {};
+
+struct Test {};
+
+// Should work:
+void ?{}(Test & this, Empty & mutex mon) {}
+
+// Should not work:
+void ?{}(Empty & mutex this) {}
+
+int main(void) {
+	printf("done\n");
+}
Index: tests/concurrency/examples/.expect/boundedBufferEXT.txt
===================================================================
--- tests/concurrency/examples/.expect/boundedBufferEXT.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/.expect/boundedBufferEXT.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+total:400000
Index: tests/concurrency/examples/.expect/boundedBufferINT.txt
===================================================================
--- tests/concurrency/examples/.expect/boundedBufferINT.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/.expect/boundedBufferINT.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+total:400000
Index: tests/concurrency/examples/.expect/datingService.txt
===================================================================
--- tests/concurrency/examples/.expect/datingService.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/.expect/datingService.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+done
Index: tests/concurrency/examples/.expect/gortn.txt
===================================================================
--- tests/concurrency/examples/.expect/gortn.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/.expect/gortn.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,3 @@
+0
+2.5
+1 2
Index: tests/concurrency/examples/.expect/matrixSum.txt
===================================================================
--- tests/concurrency/examples/.expect/matrixSum.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/.expect/matrixSum.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+10000
Index: tests/concurrency/examples/.expect/quickSort.txt
===================================================================
--- tests/concurrency/examples/.expect/quickSort.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/.expect/quickSort.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,32 @@
+25 6 8 -5 99 100 101 7
+-5 6 7 8 25 99 100 101
+
+1 -3 5
+-3 1 5
+
+
+
+
+9 8 7 6 5 4 3 2 1 0
+0 1 2 3 4 5 6 7 8 9
+
+1 2 3 4 5
+1 2 3 4 5
+
+5 4 3 2 1
+1 2 3 4 5
+
+3 1 5 4 2
+1 2 3 4 5
+
+
+
+
+1 1 1 1 1
+1 1 1 1 1
+
+29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
+  7 6 5 4 3 2 1 0
+0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
+  22 23 24 25 26 27 28 29
+
Index: tests/concurrency/examples/.in/quickSort.txt
===================================================================
--- tests/concurrency/examples/.in/quickSort.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/.in/quickSort.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,10 @@
+8 25 6 8 -5 99 100 101 7
+3 1 -3 5
+0
+10 9 8 7 6 5 4 3 2 1 0
+5 1 2 3 4 5
+5 5 4 3 2 1
+5 3 1 5 4 2
+0
+5 1 1 1 1 1
+30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Index: tests/concurrency/examples/boundedBufferEXT.cfa
===================================================================
--- tests/concurrency/examples/boundedBufferEXT.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/boundedBufferEXT.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,126 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// boundedBufferEXT.c --
+//
+// Author           : Peter A. Buhr
+// Created On       : Wed Apr 18 22:52:12 2018
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jan 16 22:36:34 2020
+// Update Count     : 15
+//
+
+#include <stdlib.hfa>									// random
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <thread.hfa>
+#include <unistd.h>										// getpid
+
+//Duration default_preemption() { return 0; }
+
+enum { BufferSize = 50 };
+
+forall( T ) {
+	monitor Buffer {
+		int front, back, count;
+		T elements[BufferSize];
+	}; // Buffer
+
+	void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; }
+
+	int query( Buffer(T) & buffer ) { return buffer.count; } // read-only, no mutual exclusion
+
+	T remove( Buffer(T) & mutex buffer );				// forward
+
+	void insert( Buffer(T) & mutex buffer, T elem ) with( buffer ) {
+		if ( count == BufferSize ) waitfor( remove : buffer );
+		elements[back] = elem;
+		back = ( back + 1 ) % BufferSize;
+		count += 1;
+	} // insert
+
+	T remove( Buffer(T) & mutex buffer ) with( buffer ) {
+		if ( count == 0 ) waitfor( insert : buffer );
+		T elem = elements[front];
+		front = ( front + 1 ) % BufferSize;
+		count -= 1;
+		return elem;
+	} // remove
+}
+
+enum { Sentinel = -1 };
+
+thread Producer {
+	Buffer(int) & buffer;
+	unsigned int N;
+};
+void main( Producer & prod ) with( prod ) {
+	for ( i; 1 ~= N ) {
+		yield( random( 5 ) );
+		insert( buffer, 1 );
+	} // for
+}
+void ?{}( Producer & prod, Buffer(int) * buffer, int N ) {
+	&prod.buffer = buffer;
+	prod.N = N;
+}
+
+thread Consumer {
+	Buffer(int) & buffer;
+	int & sum;											// summation of producer values
+};
+void main( Consumer & cons ) with( cons ) {
+	sum = 0;
+	for () {
+		yield( random( 5 ) );
+		int item = remove( buffer );
+	  if ( item == Sentinel ) break;					// sentinel ?
+		sum += item;
+	} // for
+}
+void ?{}( Consumer & cons, Buffer(int) * buffer, int & sum ) {
+	&cons.buffer = buffer;
+	&cons.sum = &sum;
+}
+
+enum { Prods = 4, Cons = 5 };
+Producer * prods[Prods];
+Consumer * cons[Cons];
+
+int main() {
+	Buffer(int) buffer;
+	int sums[Cons];
+	int i;
+	processor p;
+
+	//srandom( getpid() );
+	srandom( 1003 );
+
+	for ( i; Cons ) {									// create consumers
+		cons[i] = new( &buffer, sums[i] );
+	} // for
+	for ( i; Prods ) {									// create producers
+		prods[i] = new( &buffer, 100000 );
+	} // for
+
+	for ( i; Prods ) {									// wait for producers to finish
+		delete( prods[i] );
+	} // for
+	for ( i; Cons ) {									// generate sentinal values to stop consumers
+		insert( buffer, Sentinel );
+	} // for
+	int sum = 0;
+	for ( i; Cons ) {									// wait for consumers to finish
+		delete( cons[i] );
+		sum += sums[i];
+	} // for
+	sout | "total:" | sum;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa boundedBufferEXT.cfa" //
+// End: //
Index: tests/concurrency/examples/boundedBufferINT.cfa
===================================================================
--- tests/concurrency/examples/boundedBufferINT.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/boundedBufferINT.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,126 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
+// 
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// boundedBuffer.c --
+//
+// Author           : Peter A. Buhr
+// Created On       : Mon Oct 30 12:45:13 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Jun 21 08:20:46 2019
+// Update Count     : 90
+//
+
+#include <stdlib.hfa>									// random
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <thread.hfa>
+#include <unistd.h>										// getpid
+
+//Duration default_preemption() { return 0; }
+
+enum { BufferSize = 50 };
+
+forall( T ) {
+	monitor Buffer {
+		condition full, empty;
+		int front, back, count;
+		T elements[BufferSize];
+	}; // Buffer
+
+	void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; }
+
+	int query( Buffer(T) & buffer ) { return buffer.count; } // read-only, no mutual exclusion
+
+	void insert( Buffer(T) & mutex buffer, T elem ) with( buffer ) {
+		if ( count == BufferSize ) wait( empty );
+		elements[back] = elem;
+		back = ( back + 1 ) % BufferSize;
+		count += 1;
+		signal( full );
+	} // insert
+
+	T remove( Buffer(T) & mutex buffer ) with( buffer ) {
+		if ( count == 0 ) wait( full );
+		T elem = elements[front];
+		front = ( front + 1 ) % BufferSize;
+		count -= 1;
+		signal( empty );
+		return elem;
+	} // remove
+}
+
+enum { Sentinel = -1 };
+
+thread Producer {
+	Buffer(int) & buffer;
+	unsigned int N;
+};
+void main( Producer & prod ) with( prod ) {
+	for ( i; 1 ~= N ) {
+		yield( random( 5 ) );
+		insert( buffer, 1 );
+	} // for
+}
+void ?{}( Producer & prod, Buffer(int) * buffer, int N ) {
+	&prod.buffer = buffer;
+	prod.N = N;
+}
+
+thread Consumer {
+	Buffer(int) & buffer;
+	int & sum;											// summation of producer values
+};
+void main( Consumer & cons ) with( cons ) {
+	sum = 0;
+	for () {
+		yield( random( 5 ) );
+		int item = remove( buffer );
+	  if ( item == Sentinel ) break;					// sentinel ?
+		sum += item;
+	} // for
+}
+void ?{}( Consumer & cons, Buffer(int) * buffer, int & sum ) {
+	&cons.buffer = buffer;
+	&cons.sum = &sum;
+}
+
+int main() {
+	Buffer(int) buffer;
+	enum { Prods = 4, Cons = 5 };
+	Producer * prods[Prods];
+	Consumer * cons[Cons];
+	int sums[Cons];
+	int i;
+	processor p;
+
+	//srandom( getpid() );
+	srandom( 1003 );
+
+	for ( i; Cons ) {									// create consumers
+		cons[i] = new( &buffer, sums[i] );
+	} // for
+	for ( i; Prods ) {									// create producers
+		prods[i] = new( &buffer, 100000 );
+	} // for
+
+	for ( i; Prods ) {									// wait for producers to finish
+		delete( prods[i] );
+	} // for
+	for ( i; Cons ) {									// generate sentinal values to stop consumers
+		insert( buffer, Sentinel );
+	} // for
+	int sum = 0;
+	for ( i; Cons ) {									// wait for consumers to finish
+		delete( cons[i] );
+		sum += sums[i];
+	} // for
+	sout | "total:" | sum;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa boundedBufferINT.cfa" //
+// End: //
Index: tests/concurrency/examples/boundedBufferTHREAD.cfa
===================================================================
--- tests/concurrency/examples/boundedBufferTHREAD.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/boundedBufferTHREAD.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,130 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
+// 
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// boundedBufferTHREAD.c --
+//
+// Author           : Peter A. Buhr
+// Created On       : Wed Apr 18 22:52:12 2018
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jan 16 23:09:43 2020
+// Update Count     : 25
+//
+
+#include <stdlib.hfa>									// random
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <thread.hfa>
+#include <unistd.h>										// getpid
+
+//Duration default_preemption() { return 0; }
+
+enum { BufferSize = 50 };
+
+//forall( otype T ) {
+	thread Buffer {
+		int front, back, count;
+		int elements[BufferSize];
+	}; // Buffer
+
+	void ?{}( Buffer & buffer ) with( buffer ) { [front, back, count] = 0; }
+
+	int query( Buffer & buffer ) { return buffer.count; } // read-only, no mutual exclusion
+
+	void insert( Buffer & mutex buffer, int elem ) with( buffer ) {
+		elements[back] = elem;
+	} // insert
+
+	int remove( Buffer & mutex buffer ) with( buffer ) {
+		return elements[front];
+	} // remove
+
+	void main( Buffer & buffer ) with( buffer ) {
+		for () {
+			waitfor( ^?{} : buffer ) {
+				break;
+			} or when ( count != 20 ) waitfor( insert : buffer ) {
+				back = (back + 1) % 20;
+				count += 1;
+			} or when ( count != 0 ) waitfor( remove : buffer ) {
+				front = (front + 1) % 20;
+				count -= 1;
+			} // waitfor
+		} // for
+	} // main
+//}
+
+enum { Sentinel = -1 };
+
+thread Producer {
+	Buffer & buffer;
+	unsigned int N;
+};
+void main( Producer & prod ) with( prod ) {
+	for ( i; 1 ~= N ) {
+		yield( random( 5 ) );
+		insert( buffer, 1 );
+	} // for
+}
+void ?{}( Producer & prod, Buffer * buffer, int N ) {
+	&prod.buffer = buffer;
+	prod.N = N;
+}
+
+thread Consumer {
+	Buffer & buffer;
+	int & sum;											// summation of producer values
+};
+void main( Consumer & cons ) with( cons ) {
+	sum = 0;
+	for () {
+		yield( random( 5 ) );
+		int item = remove( buffer );
+	  if ( item == Sentinel ) break;					// sentinel ?
+		sum += item;
+	} // for
+}
+void ?{}( Consumer & cons, Buffer * buffer, int & sum ) {
+	&cons.buffer = buffer;
+	&cons.sum = &sum;
+}
+
+int main() {
+	Buffer buffer;
+	enum { Prods = 4, Cons = 5 };
+	Producer * prods[Prods];
+	Consumer * cons[Cons];
+	int sums[Cons];
+	int i;
+	processor p;
+
+	//srandom( getpid() );
+	srandom( 1003 );
+
+	for ( i; Cons ) {									// create consumers
+		cons[i] = new( &buffer, sums[i] );
+	} // for
+	for ( i; Prods ) {									// create producers
+		prods[i] = new( &buffer, 100000 );
+	} // for
+
+	for ( i; Prods ) {									// wait for producers to finish
+		delete( prods[i] );
+	} // for
+	for ( i; Cons ) {									// generate sentinal values to stop consumers
+		insert( buffer, Sentinel );
+	} // for
+	int sum = 0;
+	for ( i; Cons ) {									// wait for consumers to finish
+		delete( cons[i] );
+		sum += sums[i];
+	} // for
+	sout | "total:" | sum;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa boundedBufferTHREAD.cfa" //
+// End: //
Index: tests/concurrency/examples/datingService.cfa
===================================================================
--- tests/concurrency/examples/datingService.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/datingService.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,117 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// datingService.c --
+//
+// Author           : Peter A. Buhr
+// Created On       : Mon Oct 30 12:56:20 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Sep 27 15:42:25 2020
+// Update Count     : 40
+//
+
+#include <stdlib.hfa>									// random
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <thread.hfa>
+#include <unistd.h>										// getpid
+
+enum { CompCodes = 20 };								// number of compatibility codes
+
+monitor DatingService {
+	condition Girls[CompCodes], Boys[CompCodes];
+	unsigned int GirlPhoneNo, BoyPhoneNo;
+}; // DatingService
+
+unsigned int girl( DatingService & mutex ds, unsigned int PhoneNo, unsigned int ccode ) with( ds ) {
+	if ( is_empty( Boys[ccode] ) ) {					// no compatible boy ?
+		wait( Girls[ccode] );							// wait for boy
+		GirlPhoneNo = PhoneNo;							// make phone number available
+	} else {
+		GirlPhoneNo = PhoneNo;							// make phone number available
+		signal_block( Boys[ccode] );					// restart boy to set phone number
+	} // if
+	// sout | "Girl:" | PhoneNo | "is dating Boy at" | BoyPhoneNo | "with ccode" | ccode;
+	return BoyPhoneNo;
+} // DatingService girl
+
+unsigned int boy( DatingService & mutex ds, unsigned int PhoneNo, unsigned int ccode ) with( ds ) {
+	if ( is_empty( Girls[ccode] ) ) {					// no compatible girl ?
+		wait( Boys[ccode] );							// wait for girl
+		BoyPhoneNo = PhoneNo;							// make phone number available
+	} else {
+		BoyPhoneNo = PhoneNo;							// make phone number available
+		signal_block( Girls[ccode] );					// restart girl to set phone number
+	} // if
+	// sout | " Boy:" | PhoneNo | "is dating Girl" | GirlPhoneNo | "with ccode" | ccode;
+	return GirlPhoneNo;
+} // DatingService boy
+
+unsigned int girlck[CompCodes];
+unsigned int boyck[CompCodes];
+
+thread Girl {
+	DatingService & TheExchange;
+	unsigned int id, ccode;
+}; // Girl
+
+void main( Girl & g ) with( g ) {
+	yield( random( 100 ) );								// don't all start at the same time
+	unsigned int partner = girl( TheExchange, id, ccode );
+	girlck[id] = partner;
+} // Girl main
+
+void ?{}( Girl & g, DatingService * TheExchange, unsigned int id, unsigned int ccode ) {
+	&g.TheExchange = TheExchange;
+	g.id = id;
+	g.ccode = ccode;
+} // Girl ?{}
+
+thread Boy {
+	DatingService & TheExchange;
+	unsigned int id, ccode;
+}; // Boy
+
+void main( Boy & b ) with( b ) {
+	yield( random( 100 ) );								// don't all start at the same time
+	unsigned int partner = boy( TheExchange, id, ccode );
+	boyck[id] = partner;
+} // Boy main
+
+void ?{}( Boy & b, DatingService * TheExchange, unsigned int id, unsigned int ccode ) {
+	&b.TheExchange = TheExchange;
+	b.id = id;
+	b.ccode = ccode;
+} // Boy ?{}
+
+int main() {
+	DatingService TheExchange;
+	Girl * girls[CompCodes];
+	Boy  * boys[CompCodes];
+
+	srandom( /*getpid()*/ 103 );
+
+	for ( i; (unsigned int)CompCodes ) {
+		girls[i] = new( &TheExchange, i, i );			// TheExchange constructor needs unsigned int
+		boys[i]  = new( &TheExchange, i, CompCodes - ( i + 1 ) );
+	} // for
+
+	for ( i; CompCodes ) {
+		delete( boys[i] );
+		delete( girls[i] );
+	} // for
+
+	for ( i; CompCodes ) {
+		if ( girlck[ boyck[i] ] != boyck[ girlck[i] ] ) abort();
+	} // for
+
+	printf( "done\n" );									// non-empty .expect file
+} // main
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa datingService.cfa" //
+// End: //
Index: tests/concurrency/examples/gortn.cfa
===================================================================
--- tests/concurrency/examples/gortn.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/gortn.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,43 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2019 University of Waterloo
+// 
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// gortn.cfa -- compare waitfor and go channels
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Feb 20 08:02:37 2019
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jan 16 22:43:40 2020
+// Update Count     : 5
+// 
+
+#include <fstream.hfa>
+#include <thread.hfa>
+
+struct Msg { int i, j; };
+thread GoRtn { int i;  float f;  Msg m; };
+void ^?{}( GoRtn & mutex ) {}
+void mem1( GoRtn & mutex gortn, int i ) { gortn.i = i; }
+void mem2( GoRtn & mutex gortn, float f ) { gortn.f = f; }
+void mem3( GoRtn & mutex gortn, Msg m ) { gortn.m = m; }
+
+void main( GoRtn & gortn ) with( gortn ) {
+	for () {
+		waitfor( mem1 : gortn ) sout | i;
+		or waitfor( mem2 : gortn ) sout | f;
+		or waitfor( mem3 : gortn ) sout | m.i | m.j;
+		or waitfor( ^?{} : gortn ) break;
+	}
+}
+int main() {
+	GoRtn gortn;										// start thread
+	mem1( gortn, 0 );
+	mem2( gortn, 2.5 );
+	mem3( gortn, (Msg){ 1, 2} );
+} // wait for completion
+
+// Local Variables: //
+// tab-width: 4 //
+// End: //
Index: tests/concurrency/examples/matrixSum.cfa
===================================================================
--- tests/concurrency/examples/matrixSum.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/matrixSum.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,61 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// matrixSum.cfa --
+//
+// Author           : Peter A. Buhr
+// Created On       : Mon Oct  9 08:29:28 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Feb 20 08:37:53 2019
+// Update Count     : 16
+//
+
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <thread.hfa>
+
+thread Adder {
+	int * row, cols, & subtotal;						// communication
+};
+
+void ?{}( Adder & adder, int row[], int cols, int & subtotal ) {
+	adder.[ row, cols ] = [ row, cols ];				// expression disallowed in multi-member access
+	&adder.subtotal = &subtotal;
+}
+
+void main( Adder & adder ) with( adder ) {				// thread starts here
+	subtotal = 0;
+	for ( c; cols ) {
+		subtotal += row[c];
+	} // for
+}
+
+int main() {
+	/* const */ int rows = 10, cols = 1000;
+	int matrix[rows][cols], subtotals[rows], total = 0;
+	processor p;										// add kernel thread
+
+	for ( r; rows ) {
+		for ( c; cols ) {
+			matrix[r][c] = 1;
+		} // for
+	} // for
+	Adder * adders[rows];
+	for ( r; rows ) {									// start threads to sum rows
+		adders[r] = &(*malloc()){ matrix[r], cols, subtotals[r] };
+//		adders[r] = new( matrix[r], cols, &subtotals[r] );
+	} // for
+	for ( r; rows ) {									// wait for threads to finish
+		delete( adders[r] );
+		total += subtotals[r];							// total subtotals
+	} // for
+	sout | total;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa matrixSum.cfa" //
+// End: //
Index: tests/concurrency/examples/multiSort.cfa
===================================================================
--- tests/concurrency/examples/multiSort.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/multiSort.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,121 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2022 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// multiSort.c -- compute sort single array multiple times
+//			make sure sorting works, thread don't screw up
+//			and trampolines work on thread stacks
+//
+// Author           : Peter A. Buhr
+// Created On       : Tue 05 24 11:34:23 2022
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+#include <barrier.hfa>
+#include <fstream.hfa>
+#include <math.trait.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+
+forall(T) {
+	struct MyVec2 {
+		T val1;
+		T val2;
+	};
+
+	forall(| Equality( T ))
+	int ?!=?( MyVec2(T) lhs, MyVec2(T) rhs ) { return lhs.val1 != rhs.val1 || lhs.val2 != rhs.val2; }
+
+	forall(| Relational(T)) {
+		static inline int ?<?( MyVec2(T) lhs, MyVec2(T) rhs ) {
+			if(lhs.val1 < rhs.val1) return true;
+			if(lhs.val1 > rhs.val1) return false;
+			if(lhs.val2 < rhs.val2) return true;
+			if(lhs.val2 > rhs.val2) return false;
+			return false;
+		}
+	}
+
+	forall(| { T random( void ); })
+	MyVec2(T) random( void ) {
+		MyVec2(T) r;
+		r.val1 = random();
+		r.val2 = random();
+		return r;
+	}
+}
+
+
+
+const unsigned nthreads = 7;
+const unsigned nvecs = 313;
+barrier bar = { nthreads + 1 };
+const MyVec2(long int) * original;
+
+thread Sorter {
+	MyVec2(long int) * copy;
+};
+
+void ^?{}( Sorter & mutex this ) {
+	free(this.copy);
+}
+
+// Make this a polymorphic call to prevent thunks from being hosted
+forall( T | Relational(T) | sized(MyVec2(T)) )
+void block_sort( MyVec2(T) * vals, size_t dim ) __attribute__((noinline)) {
+	MyVec2(T) dummy = vals[0];
+	block( bar );
+
+	qsort(vals, dim);
+}
+
+
+void main( Sorter & this ) {
+	this.copy = aalloc(nvecs);
+	for(i; nvecs) {
+		this.copy[i] = original[i];
+	}
+
+	block_sort(this.copy, nvecs);
+}
+
+int main() {
+	sout | "Generating";
+	MyVec2(long int) * local = aalloc( nvecs );
+	for(i; nvecs) {
+		local[i] = random();
+	}
+
+	original = local;
+
+	sout | "Launching";
+
+	processor p; {
+		Sorter sorters[nthreads];
+
+		block( bar );
+
+		sout | "Sorting";
+
+		qsort(local, nvecs);
+
+		sout | "Checking";
+
+		for(i; nthreads) {
+			const MyVec2(long int) * copy = join( sorters[i] ).copy;
+			for(j; nvecs) {
+				if(copy[j] != original[j]) {
+					sout | "Error at thread" | i | ", index" | j | ": data doesn't match!";
+				}
+			}
+		}
+	}
+
+	free(local);
+
+	sout | "Done";
+}
Index: tests/concurrency/examples/quickSort.cfa
===================================================================
--- tests/concurrency/examples/quickSort.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/quickSort.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,189 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// quickSort.c -- In-place concurrent quick-sort: threads are created to partition to a specific depth, then sequential
+//		recursive-calls are use to sort each partition.
+//
+// Author           : Peter A. Buhr
+// Created On       : Wed Dec  6 12:15:52 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Feb 12 18:24:47 2020
+// Update Count     : 177
+//
+
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <kernel.hfa>
+#include <thread.hfa>
+#include <string.h>										// strcmp
+
+thread Quicksort {
+	int * values;										// communication variables
+	int low, high, depth;
+};
+
+void ?{}( Quicksort & qs, int values[], int size, int depth ) {
+	qs.[values, low, high, depth] = [values, 0, size, depth];
+} // Quicksort
+
+void main( Quicksort & qs ) {							// thread starts here
+	// nested routines: information hiding
+
+	void ?{}( Quicksort & qs, int values[], int low, int high, int depth ) {
+		qs.values = values;  qs.low = low;  qs.high = high;  qs.depth = depth;
+	} // Quicksort
+
+	void sort( int values[], int low, int high, int depth ) {
+		int left, right;								// index to left/right-hand side of the values
+		int pivot;										// pivot value of values
+		int swap;										// temporary
+
+		//verify();										// check for stack overflow due to recursion
+
+		// partition while 2 or more elements in the array
+		if ( low < high ) {
+			pivot = values[low + ( high - low ) / 2];
+			left  = low;
+			right = high;
+
+			// partition: move values less < pivot before the pivot and values > pivot after the pivot
+			do {
+				while ( values[left] < pivot ) left += 1; // changed values[left] < pivot
+				while ( pivot < values[right] ) right -= 1;
+				if ( left <= right ) {
+					swap = values[left];				// interchange values
+					values[left]  = values[right];
+					values[right] = swap;
+					left += 1;
+					right -= 1;
+				} // if
+			} while ( left <= right );
+
+			// restrict number of tasks to slightly greater than number of processors
+			if ( depth > 0 ) {
+				depth -= 1;
+				Quicksort lqs = { values, low, right, depth }; // concurrently sort lower half
+				Quicksort rqs = { values, left, high, depth }; // concurrently sort upper half
+				// Quicksort lqs = { values, low, right, depth }; // concurrently sort lower half
+				// sort( values, left, high, depth );		// concurrently sort upper half
+			} else {
+				sort( values, low, right, 0 );			// sequentially sort lower half
+				sort( values, left, high, 0 );			// sequentially sort upper half
+			} // if
+		} // if
+	} // sort
+
+	with( qs ) {
+		sort( values, low, high, depth );
+	} // with
+} // main
+
+
+bool convert( int & val, const char * nptr ) {			// convert C string to integer
+	char * eptr;
+	int temp = strto( nptr, &eptr, 10 );				// do not change val on false
+	// true => entire string valid with no extra characters
+	return *nptr != '\0' && *eptr == '\0' ? val = temp, true : false;
+} // convert
+
+void usage( char * argv[] ) {
+	sout | "Usage:" | argv[0] | "( -s unsorted-file [ sorted-file ] | -t size (>= 0) [ depth (>= 0) ] )";
+	exit( EXIT_FAILURE );								// TERMINATE!
+} // usage
+
+
+int main( int argc, char * argv[] ) {
+	ifstream & unsortedfile = sin;
+	ofstream & sortedfile = sout;						// default value
+	int depth = 0, size;
+
+	if ( argc != 1 ) {									// do not use defaults
+		if ( argc < 2 || argc > 4 ) usage( argv );		// wrong number of options
+		if ( strcmp( argv[1], "-t" ) == 0 ) {			// timing ?
+			&unsortedfile = (ifstream *)0;				// no input
+			choose ( argc ) {
+			  case 4:
+				if ( ! convert( depth, argv[3] ) || depth < 0 ) usage( argv );
+				fallthrough;
+			  case 3:
+				if ( ! convert( size, argv[2] ) || size < 0 ) usage( argv );
+			} // choose
+		} else {										// sort file
+			choose ( argc ) {
+			  case 3:
+				&sortedfile = new( (const char *)argv[2] ); // open the output file
+				if ( fail( sortedfile ) ) {
+					serr | "Error! Could not open sorted output file \"" | argv[2] | "\"";
+					usage( argv );
+				} // if
+				fallthrough;
+			  case 2:
+				&unsortedfile = new( (const char *)argv[1] ); // open the input file
+				if ( fail( unsortedfile ) ) {
+					serr | "Error! Could not open unsorted input file \"" | argv[1] | "\"";
+					usage( argv );
+				} // if
+			} // choose
+		} // if
+	} // if
+	sortedfile | nlOff;									// turn off auto newline
+
+	enum { ValuesPerLine = 22 };						// number of values printed per line
+
+	if ( &unsortedfile ) {								// generate output ?
+		for () {
+			unsortedfile | size;						// read number of elements in the list
+		  if ( eof( unsortedfile ) ) break;
+			int * values = alloc( size );				// values to be sorted, too large to put on stack
+			for ( counter; size ) {						// read unsorted numbers
+				unsortedfile | values[counter];
+				if ( counter != 0 && counter % ValuesPerLine == 0 ) sortedfile | nl | "  ";
+				sortedfile | values[counter];
+				if ( counter < size - 1 && (counter + 1) % ValuesPerLine != 0 ) sortedfile | ' ';
+			} // for
+			sortedfile | nl;
+			if ( size > 0 ) {							// values to sort ?
+				Quicksort QS = { values, size - 1, 0 }; // sort values
+			} // wait until sort tasks terminate
+			for ( counter; size ) {						// print sorted list
+				if ( counter != 0 && counter % ValuesPerLine == 0 ) sortedfile | nl | "  ";
+				sortedfile | values[counter];
+				if ( counter < size - 1 && (counter + 1) % ValuesPerLine != 0 ) sortedfile | ' ';
+			} // for
+			sortedfile | nl | nl;
+
+			delete( values );
+		} // for
+		if ( &unsortedfile != &sin ) delete( &unsortedfile ); // close input/output files
+		if ( &sortedfile != &sout ) delete( &sortedfile );
+	} else {
+		processor processors[ (1 << depth) - 1 ] __attribute__(( unused )); // create 2^depth-1 kernel threads
+
+		int * values = alloc( size );					// values to be sorted, too large to put on stack
+		for ( counter; size ) {							// generate unsorted numbers
+			values[counter] = size - counter;			// descending values
+		} // for
+		for ( i; 200 ) {								// random shuffle a few values
+			swap( values[rand() % size], values[rand() % size] );
+		} // for
+		{
+			Quicksort QS = { values, size - 1, depth }; // sort values
+		} // wait until sort tasks terminate
+
+		// for ( counter; size - 1 ) {				// check sorting
+		// 	if ( values[counter] > values[counter + 1] ) abort();
+		// } // for
+
+		delete( values );
+	} // if
+} // main
+
+// for depth in 0 1 2 3 4 5 ; do echo "sort 500000000 values with ${depth} depth" ; time -f "%Uu %Ss %E %Mkb" a.out -t 500000000 ${depth} ; done
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa quickSort.cfa" //
+// End: //
Index: tests/concurrency/examples/quickSort.generic.cfa
===================================================================
--- tests/concurrency/examples/quickSort.generic.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/examples/quickSort.generic.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,186 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// quickSort.c -- In-place concurrent quick-sort: threads are created to partition to a specific depth, then sequential
+//		recursive-calls are use to sort each partition.
+//
+// Author           : Peter A. Buhr
+// Created On       : Wed Dec  6 12:15:52 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Jun 21 08:28:20 2019
+// Update Count     : 149
+//
+
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <kernel.hfa>
+#include <thread.hfa>
+#include <string.h>										// strcmp
+
+forall( T | { int ?<?( T, T ); } ) {
+	thread Quicksort {
+		T * values;										// communication variables
+		int low, high, depth;
+	};
+
+	void ?{}( Quicksort(T) & qs, T values[], int size, int depth ) {
+		qs.values = values;  qs.low = 0;  qs.high = size;  qs.depth = depth;
+	} // Quicksort
+
+	void main( Quicksort(T) & qs ) {					// thread starts here
+		// nested routines: information hiding
+
+		void ?{}( Quicksort(T) & qs, T values[], int low, int high, int depth ) {
+			qs.values = values;  qs.low = low;  qs.high = high;  qs.depth = depth;
+		} // Quicksort
+
+		void sort( T values[], int low, int high, int depth ) {
+			int left, right;							// index to left/right-hand side of the values
+			T pivot;									// pivot value of values
+			T swap;										// temporary
+
+			//verify();									// check for stack overflow due to recursion
+
+			// partition while 2 or more elements in the array
+			if ( low < high ) {
+				pivot = values[low + ( high - low ) / 2];
+				left  = low;
+				right = high;
+
+				// partition: move values less < pivot before the pivot and values > pivot after the pivot
+				do {
+					while ( values[left] < pivot ) left += 1; // changed values[left] < pivot
+					while ( pivot < values[right] ) right -= 1;
+					if ( left <= right ) {
+						swap = values[left];			// interchange values
+						values[left]  = values[right];
+						values[right] = swap;
+						left += 1;
+						right -= 1;
+					} // if
+				} while ( left <= right );
+
+				// restrict number of tasks to slightly greater than number of processors
+				if ( depth > 0 ) {
+					depth -= 1;
+					Quicksort(T) rqs = { values, low, right, depth }; // concurrently sort upper half
+					//Quicksort lqs( values, left, high, depth ); // concurrently sort lower half
+					sort( values, left, high, depth );	// concurrently sort lower half
+				} else {
+					sort( values, low, right, 0 );		// sequentially sort lower half
+					sort( values, left, high, 0 );		// sequentially sort upper half
+				} // if
+			} // if
+		} // sort
+
+		with( qs ) {
+			sort( values, low, high, depth );
+		} // with
+	} // main
+}
+
+bool convert( int & val, const char * nptr ) {			// convert C string to integer
+	char * eptr;
+	int temp = strto( nptr, &eptr, 10 );				// do not change val on false
+	// true => entire string valid with no extra characters
+	return *nptr != '\0' && *eptr == '\0' ? val = temp, true : false;
+} // convert
+
+void usage( char * argv[] ) {
+	sout | "Usage:" | argv[0] | "( -s unsorted-file [ sorted-file ] | -t size (>= 0) [ depth (>= 0) ] )";
+	exit( EXIT_FAILURE );								// TERMINATE!
+} // usage
+
+
+#define ELEMTYPE int
+
+int main( int argc, char * argv[] ) {
+	ifstream & unsortedfile = sin;
+	ofstream & sortedfile = sout;						// default value
+	int depth = 0, size;
+
+	if ( argc != 1 ) {									// do not use defaults
+		if ( argc < 2 || argc > 4 ) usage( argv );		// wrong number of options
+		if ( strcmp( argv[1], "-t" ) == 0 ) {			// timing ?
+			&unsortedfile = (ifstream *)0;				// no input
+			choose ( argc ) {
+			  case 4:
+				if ( ! convert( depth, argv[3] ) || depth < 0 ) usage( argv );
+				fallthrough;
+			  case 3:
+				if ( ! convert( size, argv[2] ) || size < 0 ) usage( argv );
+			} // choose
+		} else {										// sort file
+			choose ( argc ) {
+			  case 3:
+				&sortedfile = new( (const char *)argv[2] ); // open the output file
+				if ( fail( sortedfile ) ) {
+					serr | "Error! Could not open sorted output file \"" | argv[2] | "\"";
+					usage( argv );
+				} // if
+				fallthrough;
+			  case 2:
+				&unsortedfile = new( (const char *)argv[1] ); // open the input file
+				if ( fail( unsortedfile ) ) {
+					serr | "Error! Could not open unsorted input file \"" | argv[1] | "\"";
+					usage( argv );
+				} // if
+			} // choose
+		} // if
+	} // if
+	sortedfile | nlOff;									// turn off auto newline
+
+	enum { ValuesPerLine = 22 };						// number of values printed per line
+
+	if ( &unsortedfile ) {								// generate output ?
+		for () {
+			unsortedfile | size;						// read number of elements in the list
+		  if ( eof( unsortedfile ) ) break;
+			ELEMTYPE * values = alloc( size );			// values to be sorted, too large to put on stack
+			for ( counter; size ) {						// read unsorted numbers
+				unsortedfile | values[counter];
+				if ( counter != 0 && counter % ValuesPerLine == 0 ) sortedfile | nl | "  ";
+				sortedfile | values[counter];
+				if ( counter < size - 1 && (counter + 1) % ValuesPerLine != 0 ) sortedfile | ' ';
+			} // for
+			sortedfile | nl;
+			if ( size > 0 ) {							// values to sort ?
+				Quicksort(ELEMTYPE) QS = { values, size - 1, 0 }; // sort values
+			} // wait until sort tasks terminate
+			for ( counter; size ) {						// print sorted list
+				if ( counter != 0 && counter % ValuesPerLine == 0 ) sortedfile | nl | "  ";
+				sortedfile | values[counter];
+				if ( counter < size - 1 && (counter + 1) % ValuesPerLine != 0 ) sortedfile | ' ';
+			} // for
+			sortedfile | nl | nl;
+
+			delete( values );
+		} // for
+		if ( &unsortedfile != &sin ) delete( &unsortedfile ); // close input/output files
+		if ( &sortedfile != &sout ) delete( &sortedfile );
+	} else {
+		processor processors[ (1 << depth) - 1 ] __attribute__(( unused )); // create 2^depth-1 kernel threads
+
+		ELEMTYPE * values = alloc( size );				// values to be sorted, too large to put on stack
+		for ( counter; size ) {							// generate unsorted numbers
+			values[counter] = size - counter;			// descending values
+		} // for
+		{
+			Quicksort(ELEMTYPE) QS = { values, size - 1, depth }; // sort values
+		} // wait until sort tasks terminate
+
+		// for ( counter; size - 1 ) {					// check sorting
+		// 	if ( values[counter] > values[counter + 1] ) abort();
+		// } // for
+
+		delete( values );
+	} // if
+} // main
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa quickSort.generic.cfa" //
+// End: //
Index: tests/concurrency/futures/.expect/abandon.txt
===================================================================
--- tests/concurrency/futures/.expect/abandon.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/.expect/abandon.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/futures/.expect/basic.txt
===================================================================
--- tests/concurrency/futures/.expect/basic.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/.expect/basic.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/futures/.expect/multi.txt
===================================================================
--- tests/concurrency/futures/.expect/multi.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/.expect/multi.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/futures/.expect/select_future.txt
===================================================================
--- tests/concurrency/futures/.expect/select_future.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/.expect/select_future.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+start 1: blocking path future test
+done 1
+start 2: nonblocking path future test
+done 2
+start 3: try_get future test
+done 3
Index: tests/concurrency/futures/.expect/typed.txt
===================================================================
--- tests/concurrency/futures/.expect/typed.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/.expect/typed.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/futures/.expect/wait_any.txt
===================================================================
--- tests/concurrency/futures/.expect/wait_any.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/.expect/wait_any.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+done
Index: tests/concurrency/futures/abandon.cfa
===================================================================
--- tests/concurrency/futures/abandon.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/abandon.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,102 @@
+#include <thread.hfa>
+
+enum {NFUTURES = 10};
+
+thread Server {
+	int cnt;
+	future_t * requests[NFUTURES];
+};
+
+void ?{}( Server & this ) {
+	this.cnt = 0;
+	for(i; NFUTURES) {
+		this.requests[i] = 0p;
+	}
+}
+
+void ^?{}( Server & mutex this ) {
+	assert(this.cnt == 0);
+	for(i; NFUTURES) {
+		this.requests[i] = 0p;
+	}
+}
+
+void process( Server & this, int i ) {
+	if( this.requests[i] == 0p ) return;
+	future_t * f = this.requests[i];
+	this.requests[i] = 0p;
+	this.cnt--;
+	fulfil( *f );
+}
+
+void call( Server & mutex this, future_t & f ) {
+	for(i; NFUTURES) {
+		if( this.requests[i] == 0p ) {
+			this.requests[i] = &f;
+			this.cnt++;
+			return;
+		}
+	}
+	abort("Monitor Error");
+}
+
+void main( Server & this ) {
+	unsigned i = 0;
+	for() {
+		waitfor( ^?{} : this ) {
+			break;
+		}
+		or when( this.cnt < NFUTURES ) waitfor( call: this ) {}
+		or else {
+			process( this, i % NFUTURES );
+			i++;
+		}
+	}
+
+	for(i; NFUTURES) {
+		process( this, i );
+	}
+}
+
+Server * the_server;
+thread Worker {};
+
+void thrash(void) {
+	volatile int locals[250];
+	for(i; 250) {
+		locals[i] = 0xdeadbeef;
+	}
+}
+
+void work(int i) {
+	future_t *mine = new();
+	call( *the_server, *mine );
+	if (i % 2 == 0) {
+		abandon( *mine );
+	} else {
+		wait( *mine );
+		delete( mine );
+	}
+}
+
+void main( Worker & ) {
+	for(i;150) {
+		thrash();
+		work(i);
+		thrash();
+	}
+}
+
+int main() {
+	printf( "start\n" );				// non-empty .expect file
+	processor procs[2];
+	{
+		Server server;
+		the_server = &server;
+		{
+			Worker workers[17];
+		}
+	}
+	printf( "done\n" );				// non-empty .expect file
+
+}
Index: tests/concurrency/futures/basic.cfa
===================================================================
--- tests/concurrency/futures/basic.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/basic.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,97 @@
+#include <thread.hfa>
+
+enum {NFUTURES = 10};
+
+thread Server {
+	int cnt;
+	future_t * requests[NFUTURES];
+};
+
+void ?{}( Server & this ) {
+	this.cnt = 0;
+	for(i; NFUTURES) {
+		this.requests[i] = 0p;
+	}
+}
+
+void ^?{}( Server & mutex this ) {
+	assert(this.cnt == 0);
+	for(i; NFUTURES) {
+		this.requests[i] = 0p;
+	}
+}
+
+void process( Server & this, int i ) {
+	if( this.requests[i] == 0p ) return;
+	future_t * f = this.requests[i];
+	this.requests[i] = 0p;
+	this.cnt--;
+	fulfil( *f );
+}
+
+void call( Server & mutex this, future_t & f ) {
+	for(i; NFUTURES) {
+		if( this.requests[i] == 0p ) {
+			this.requests[i] = &f;
+			this.cnt++;
+			return;
+		}
+	}
+	abort("Monitor Error");
+}
+
+void main( Server & this ) {
+	unsigned i = 0;
+	for() {
+		waitfor( ^?{} : this ) {
+			break;
+		}
+		or when( this.cnt < NFUTURES ) waitfor( call: this ) {}
+		or else {
+			process( this, i % NFUTURES );
+			i++;
+		}
+	}
+
+	for(i; NFUTURES) {
+		process( this, i );
+	}
+}
+
+Server * the_server;
+thread Worker {};
+
+void thrash(void) {
+	volatile int locals[250];
+	for(i; 250) {
+		locals[i] = 0xdeadbeef;
+	}
+}
+
+void work(void) {
+	future_t mine;
+	call( *the_server, mine );
+	wait( mine );
+}
+
+void main( Worker & ) {
+	for(150) {
+		thrash();
+		work();
+		thrash();
+	}
+}
+
+int main() {
+	printf( "start\n" );				// non-empty .expect file
+	processor procs[2];
+	{
+		Server server;
+		the_server = &server;
+		{
+			Worker workers[17];
+		}
+	}
+	printf( "done\n" );				// non-empty .expect file
+
+}
Index: tests/concurrency/futures/multi.cfa
===================================================================
--- tests/concurrency/futures/multi.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/multi.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,104 @@
+#include <thread.hfa>
+#include <future.hfa>
+
+enum {NFUTURES = 10};
+
+thread Server {
+	int pending, done, iteration;
+	multi_future(int) * request;
+};
+
+void ?{}( Server & this ) {
+	((thread&)this){"Server Thread"};
+	this.pending = 0;
+	this.done = 0;
+	this.iteration = 0;
+	this.request = 0p;
+}
+
+void ^?{}( Server & mutex this ) {
+	assert(this.pending == 0);
+	this.request = 0p;
+}
+
+void init( Server & this , multi_future(int) * f ) {
+	this.request = f;
+}
+
+void call( Server & mutex this ) {
+	this.pending++;
+}
+
+void finish( Server & mutex this ) {
+	this.done++;
+}
+
+void main( Server & this ) {
+	MAIN_LOOP:
+	for() {
+		waitfor( ^?{} : this ) {
+			break;
+		}
+		or waitfor( call: this ) {
+			if (this.pending != NFUTURES) { continue MAIN_LOOP; }
+
+			this.pending = 0;
+			fulfil( *this.request, this.iteration );
+			this.iteration++;
+
+			for(NFUTURES) {
+				waitfor( finish: this );
+			}
+
+			reset( *this.request );
+			this.done = 0;
+		}
+	}
+
+}
+
+Server * the_server;
+thread Worker {};
+void ?{}(Worker & this) {
+	((thread&)this){"Worker Thread"};
+}
+
+multi_future(int) * shared_future;
+
+void thrash(void) {
+	volatile int locals[250];
+	for(i; 250) {
+		locals[i] = 0xdeadbeef;
+	}
+}
+
+void work(int num) {
+	call( *the_server );
+	int res = wait( *shared_future );
+	if( res != num ) abort();
+	finish( *the_server );
+}
+
+void main( Worker & ) {
+	for (i; 10) {
+		thrash();
+		work(i);
+		thrash();
+	}
+}
+
+int main() {
+	printf( "start\n" );				// non-empty .expect file
+	processor procs[2];
+	shared_future = new();
+	{
+		Server server;
+		the_server = &server;
+		init(server, shared_future);
+		{
+			Worker workers[NFUTURES];
+		}
+	}
+	delete( shared_future );
+	printf( "done\n" );				// non-empty .expect file
+}
Index: tests/concurrency/futures/select_future.cfa
===================================================================
--- tests/concurrency/futures/select_future.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/select_future.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,198 @@
+#include <thread.hfa>
+#include <future.hfa>
+#include <concurrency/barrier.hfa>
+
+enum {NFUTURES = 10};
+
+thread Server {
+	int pending, done, iteration;
+	future(int) * request;
+};
+
+void ?{}( Server & this ) {
+	((thread&)this){"Server Thread"};
+	this.pending = 0;
+	this.done = 0;
+	this.iteration = 0;
+	this.request = 0p;
+}
+
+void ^?{}( Server & mutex this ) {
+	assert(this.pending == 0);
+	this.request = 0p;
+}
+
+void init( Server & this , future(int) * f ) {
+	this.request = f;
+}
+
+void call( Server & mutex this ) {
+	this.pending++;
+}
+
+void finish( Server & mutex this ) {
+	this.done++;
+}
+
+void main( Server & this ) {
+	MAIN_LOOP:
+	for() {
+		waitfor( ^?{} : this ) {
+			break;
+		}
+		or waitfor( call: this ) {
+			if (this.pending != NFUTURES) { continue MAIN_LOOP; }
+
+			this.pending = 0;
+			fulfil( *this.request, this.iteration );
+			this.iteration++;
+
+			for(NFUTURES) {
+				waitfor( finish: this );
+			}
+
+			reset( *this.request );
+			this.done = 0;
+		}
+	}
+
+}
+
+Server * the_server;
+thread Worker {};
+void ?{}(Worker & this) {
+	((thread&)this){"Worker Thread"};
+}
+
+future(int) * shared_future;
+
+void thrash(void) {
+	volatile int locals[250];
+	for(i; 250) {
+		locals[i] = 0xdeadbeef;
+	}
+}
+
+void work(int num) {
+	call( *the_server );
+	int res = get( *shared_future );
+	if( res != num ) abort();
+	finish( *the_server );
+}
+
+void main( Worker & ) {
+	for (i; 10) {
+		thrash();
+		work(i);
+		thrash();
+	}
+}
+
+thread Worker2 {};
+
+semaphore before{0};
+semaphore after_server{0};
+semaphore after_worker{0};
+
+void work2( int num ) {
+    P( before );
+	int res = get( *shared_future );
+	if( res != num ) abort();
+	V( after_server );
+    P( after_worker );
+}
+
+void main( Worker2 & ) {
+	for (i; 10) {
+		thrash();
+		work2(i);
+		thrash();
+	}
+}
+
+thread Server2 {};
+
+void main( Server2 & ) {
+	for (i; 10) {
+		fulfil( *shared_future , i );
+        V( before, NFUTURES );
+        for ( i; NFUTURES ) P( after_server );
+        reset( *shared_future );
+        V( after_worker, NFUTURES );
+	}
+}
+
+barrier bar = { NFUTURES + 1 };
+
+thread Worker3 {};
+
+void work3( int num ) {
+    [int, bool] tt;
+    do {
+        tt = try_get( *shared_future );
+    } while ( ! tt.1 );
+	if( tt.0 != num ) abort();
+	V( after_server );
+    block(bar);
+}
+
+void main( Worker3 & ) {
+	for (i; 10) {
+		thrash();
+		work3(i);
+		thrash();
+	}
+}
+
+thread Server3 {};
+
+void main( Server3 & ) {
+	for (i; 10) {
+		fulfil( *shared_future , i );
+        for ( i; NFUTURES ) P( after_server );
+        reset( *shared_future );
+        block(bar);
+	}
+}
+
+int main() {
+	printf( "start 1: blocking path future test\n" );
+	processor procs[11];
+	shared_future = new();
+	{
+		Server server;
+		the_server = &server;
+		init(server, shared_future);
+		{
+			Worker workers[NFUTURES];
+		}
+	}
+	delete( shared_future );
+	printf( "done 1\n" );
+
+    printf( "start 2: nonblocking path future test\n" );
+    shared_future = new();
+
+    {
+        Server2 server;
+		{
+			Worker2 workers[NFUTURES];
+		}
+	}
+
+    delete( shared_future );
+	printf( "done 2\n" );
+
+    printf( "start 3: try_get future test\n" );
+    shared_future = new();
+
+    {
+        Worker3 workers[NFUTURES];
+		{
+			Server3 server;
+		}
+	}
+
+    delete( shared_future );
+	printf( "done 3\n" );
+}
Index: tests/concurrency/futures/typed.cfa
===================================================================
--- tests/concurrency/futures/typed.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/typed.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,97 @@
+#include <thread.hfa>
+#include <future.hfa>
+enum {NFUTURES = 10};
+
+thread Server {
+	int cnt;
+	single_future(int) * requests[NFUTURES];
+};
+
+void ?{}( Server & this ) {
+	this.cnt = 0;
+	for(i; NFUTURES) {
+		this.requests[i] = 0p;
+	}
+}
+
+void ^?{}( Server & mutex this ) {
+	assert(this.cnt == 0);
+	for(i; NFUTURES) {
+		this.requests[i] = 0p;
+	}
+}
+
+void process( Server & this, int i ) {
+	if( this.requests[i] == 0p ) return;
+	single_future(int) * f = this.requests[i];
+	this.requests[i] = 0p;
+	this.cnt--;
+	fulfil( *f , i);
+}
+
+void call( Server & mutex this, single_future(int) & f ) {
+	for(i; NFUTURES) {
+		if( this.requests[i] == 0p ) {
+			this.requests[i] = &f;
+			this.cnt++;
+			return;
+		}
+	}
+	abort("Monitor Error");
+}
+
+void main( Server & this ) {
+	unsigned i = 0;
+	for() {
+		waitfor( ^?{} : this ) {
+			break;
+		}
+		or when( this.cnt < NFUTURES ) waitfor( call: this ) {}
+		or else {
+			process( this, i % NFUTURES );
+			i++;
+		}
+	}
+
+	for(i; NFUTURES) {
+		process( this, i );
+	}
+}
+
+Server * the_server;
+thread Worker {};
+
+void thrash(void) {
+	volatile int locals[250];
+	for(i; 250) {
+		locals[i] = 0xdeadbeef;
+	}
+}
+
+void work(void) {
+	single_future(int) mine;
+	call( *the_server, mine );
+	wait( mine );
+}
+
+void main( Worker & ) {
+	for(150) {
+		thrash();
+		work();
+		thrash();
+	}
+}
+
+int main() {
+	printf( "start\n" );				// non-empty .expect file
+	processor procs[2];
+	{
+		Server server;
+		the_server = &server;
+		{
+			Worker workers[17];
+		}
+	}
+	printf( "done\n" );				// non-empty .expect file
+
+}
Index: tests/concurrency/futures/wait_any.cfa
===================================================================
--- tests/concurrency/futures/wait_any.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/futures/wait_any.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,77 @@
+#include <thread.hfa>
+#include <fstream.hfa>
+#include <stdlib.hfa>
+#include <mutex_stmt.hfa>
+#include <locks.hfa>
+
+simple_owner_lock l;
+pthread_cond_var( simple_owner_lock ) c;
+
+size_t num_futures = 10;
+
+future_t * futures;
+
+size_t * shuffle_arr;
+
+size_t numtimes = 10;
+
+volatile bool done = false;
+
+void synchronize() {
+    lock(l);
+    if (empty(c)) {
+        wait(c,l);
+    } else {
+        for ( i; num_futures ) {
+            reset(futures[i]);
+        }
+        notify_one(c);
+    }
+    unlock(l);
+}
+
+thread Waiter {};
+void main( Waiter & this ) {
+    for (numtimes) {
+        wait_any(futures, num_futures);
+        synchronize();
+    }
+    done = true;
+    while (done) notify_one(c);
+}
+
+thread Deliverer {};
+void main( Deliverer & this ) {
+    while (!done) {
+        size_t num_satisfy = random(1,num_futures);
+        for ( i; num_satisfy ) {								// random shuffle a few values
+			swap( shuffle_arr[random(num_futures)], shuffle_arr[random(num_futures)] );
+		}
+        for ( i; num_satisfy ) {
+            fulfil(futures[shuffle_arr[i]]);
+        }
+        synchronize();
+    }
+    done = false;
+}
+
+int main() {
+	sout | "start";
+    futures = alloc( num_futures );
+    shuffle_arr = alloc( num_futures );
+    for ( i; num_futures ) {								// random shuffle a few values
+        futures[i]{};
+        swap( shuffle_arr[random(num_futures)], shuffle_arr[random(num_futures)] );
+    }
+    for ( i; num_futures ) {
+        shuffle_arr[i] = i;
+    }
+	processor procs[1];
+	{
+		Waiter w;
+		Deliverer d;
+	}
+    free( futures );
+    free( shuffle_arr );
+	sout | "done";
+}
Index: tests/concurrency/join.cfa
===================================================================
--- tests/concurrency/join.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/join.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,52 @@
+#include <fstream.hfa>
+#include <thread.hfa>
+
+thread Worker { volatile int result; };
+
+void main(Worker & this) {
+	this.result = -10;
+	for(50) {
+		yield();
+	}
+	this.result = 42;
+}
+
+thread OtherWorker { volatile int result; };
+
+void main(OtherWorker & this) {
+	this.result = -10;
+	LOOP: for() {
+		waitfor( ^?{} : this) {
+			break LOOP;
+		}
+		or else {
+			yield();
+		}
+	}
+	this.result = 27;
+}
+
+
+int main(int argc, char* argv[]) {
+	{
+		Worker workers[17];
+		for(i; 17) {
+			int res = join( workers[i] ).result;
+			if( res != 42 ) {
+				sout | "Worker" | i | "got incorrect result:" | res;
+			}
+		}
+	}
+	sout | "All workers got 42";
+
+	{
+		OtherWorker workers[17];
+		for(i; 17) {
+			int res = join( workers[i] ).result;
+			if( res != 27 ) {
+				sout | "Other Worker" | i | "got incorrect result:" | res;
+			}
+		}
+	}
+	sout | "All other workers got 27";
+}
Index: tests/concurrency/joinerror.cfa
===================================================================
--- tests/concurrency/joinerror.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/joinerror.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,61 @@
+#include <fstream.hfa>
+#include <thread.hfa>
+
+thread Worker { volatile int result; };
+
+void main(Worker & this) {
+	this.result = -10;
+	for(50) {
+		yield();
+	}
+	this.result = 42;
+}
+
+int get_result( Worker & mutex this ) {
+	return this.result;
+}
+
+thread OtherWorker { volatile int result; };
+
+void main(OtherWorker & this) {
+	this.result = -10;
+	LOOP: for() {
+		waitfor( ^?{} : this) {
+			break LOOP;
+		}
+		or else {
+			yield();
+		}
+	}
+	this.result = 27;
+}
+
+int get_result( OtherWorker & mutex this ) {
+	return this.result;
+}
+
+int main(int argc, char* argv[]) {
+	{
+		Worker workers[17];
+		for(i; 17) {
+			join( workers[i] );
+			int res = get_result( workers[i] );
+			if( res != 42 ) {
+				sout | "Worker" | i | "got incorrect result:" | res;
+			}
+		}
+	}
+	sout | "All workers got 42";
+
+	{
+		OtherWorker workers[17];
+		for(i; 17) {
+			join( workers[i] );
+			int res = get_result( workers[i] );
+			if( res != 27 ) {
+				sout | "Other Worker" | i | "got incorrect result:" | res;
+			}
+		}
+	}
+	sout | "All other workers got 27";
+}
Index: tests/concurrency/keywordErrors.cfa
===================================================================
--- tests/concurrency/keywordErrors.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/keywordErrors.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+thread A {};
+
+// This include isn't enough but used to fool the check
+#include <invoke.h>
+
+thread B {};
Index: tests/concurrency/lockfree_stack.cfa
===================================================================
--- tests/concurrency/lockfree_stack.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/lockfree_stack.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,87 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2022 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// lockfree_stack.cfa -- 
+//
+// Author           : Peter A. Buhr
+// Created On       : Thu May 25 15:36:50 2023
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu May 25 16:20:23 2023
+// Update Count     : 2
+// 
+
+#include <thread.hfa>
+#include <atomic.hfa>									// CASV
+#include <fstream.hfa>
+
+struct Node;											// forward declaration
+union Link {
+	struct {											// 64-bit x 2
+		Node * volatile top;							// pointer to stack top
+		uintptr_t count;								// count each push
+	};
+	__int128 atom;										// gcc, 128-bit integer
+} __attribute__(( aligned( 16 ) ));
+
+struct Node {
+	// resource data
+	Link next;											// pointer to next node/count (resource)
+};
+struct Stack {
+	Link stack;
+};
+
+void push( Stack & s, Node & n ) with(s) {
+	n.next = stack;										// atomic assignment unnecessary
+	for () {											// busy wait
+		if ( CASV( stack.atom, n.next.atom, ((Link){ &n, n.next.count + 1 }.atom) ) ) break; // attempt to update top node
+	}
+}
+
+Node * pop( Stack & s ) with(s) {
+	Link t = stack;										// atomic assignment unnecessary
+	for () {											// busy wait
+		if ( t.top == NULL ) return NULL;				// empty stack ?
+		if ( CASV( stack.atom, t.atom, ((Link){ t.top->next.top, t.count }.atom) ) ) return t.top; // attempt to update top node
+	}
+}
+void ?{}( Stack & s ) with(s) { stack.atom = 0; }
+
+Stack stack;											// global stack
+
+thread Worker {};
+void main( Worker & w ) {
+	for ( i; 100000 ) {
+		Node & n = *pop( stack );
+		assert( &n != NULL );
+		n.next.top = 0p;								// shrub fields
+		n.next.count = 0;
+		//yield( rand() % 3 );
+		push( stack, n );
+	}
+}
+
+
+int main() {
+	enum { N = 10 };
+	processor p[N - 1];									// kernel threads
+
+	for ( i; N ) {										// push N values on stack
+		// storage must be 16-bytes aligned for cmpxchg16b
+		push( stack, *(Node *)memalign( 16, sizeof( Node ) ) );
+	}
+	{
+		Worker workers[N];								// run test
+	}
+	for ( i; N ) {										// pop N nodes from list
+		free( pop( stack ) );
+	}
+	sout | "done";										// non-empty .expect file
+}
+
+// Local Variables: //
+// compile-command: "cfa -g -O3 lockfree_stack.cfa" //
+// End: //
Index: tests/concurrency/mainError.cfa
===================================================================
--- tests/concurrency/mainError.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/mainError.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+thread Test {};
+void main(Test&) {}
Index: tests/concurrency/migrate.cfa
===================================================================
--- tests/concurrency/migrate.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/migrate.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,85 @@
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <thread.hfa>
+
+#include <stdatomic.h>
+#include <assert.h>
+
+struct cluster_wrapper {
+	cluster self;
+	const uint64_t canary;
+	struct {
+		volatile uint64_t want;
+		volatile uint64_t have;
+	} checksum;
+};
+
+void ?{}( cluster_wrapper & this ) {
+	(this.self){};
+	(*(uint64_t *)&this.canary) = 0xDEAD2BADDEAD2BAD;
+	this.checksum.want = 0;
+	this.checksum.have = 0;
+}
+
+void ^?{}( cluster_wrapper & this ) {
+	assert(this.canary == 0xDEAD2BADDEAD2BAD);
+}
+
+static cluster_wrapper * the_clusters;
+static unsigned cluster_cnt;
+
+thread MyThread {
+
+};
+
+void ?{}( MyThread & this ) {}
+
+void checkcl( MyThread & this, cluster * cl) {
+	if(((thread&)this).curr_cluster != cl) {
+		abort | "Thread has unexpected cluster";
+	}
+}
+
+void main( MyThread & this ) {
+	waitfor( migrate : this ) {
+		assert( ((thread&)this).curr_cluster == active_cluster() );
+		assert( ((thread&)this).curr_cluster == active_processor()->cltr );
+	}
+
+	struct cluster_wrapper * curr = (struct cluster_wrapper *)&the_clusters[0];
+
+	for(100) {
+		unsigned idx = prng( this, cluster_cnt );
+
+		struct cluster_wrapper * next = &the_clusters[ idx ];
+		assert(next->canary == 0xDEAD2BADDEAD2BAD);
+
+		// next->
+
+		migrate( this, next->self );
+
+		assert( active_cluster() == &next->self );
+		assert( ((thread&)this).curr_cluster == active_cluster() );
+		assert( ((thread&)this).curr_cluster == active_processor()->cltr );
+	}
+}
+
+int main() {
+	cluster_cnt = 3;
+	cluster_wrapper cl[cluster_cnt];
+	the_clusters = cl;
+
+	{
+		set_concurrency( cl[0].self, 2 );
+		set_concurrency( cl[1].self, 2 );
+		set_concurrency( cl[2].self, 1 );
+
+		MyThread threads[17];
+		for(i;17) {
+			migrate( threads[i], cl[0].self );
+		}
+
+	}
+	// non-empty .expect file
+	printf( "done\n" );
+}
Index: tests/concurrency/monitor.cfa
===================================================================
--- tests/concurrency/monitor.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/monitor.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,43 @@
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <thread.hfa>
+
+monitor global_t {
+	int value;
+};
+
+void ?{}(global_t & this) {
+	this.value = 0;
+}
+
+static global_t global;
+
+void increment3( global_t & mutex this ) {
+	this.value += 1;
+}
+
+void increment2( global_t & mutex this ) {
+	increment3( this );
+}
+
+void increment( global_t & mutex this ) {
+	increment2( this );
+}
+
+thread MyThread {};
+
+void main( MyThread & this ) {
+	for(int i = 0; i < 750_000; i++) {
+		increment( global );
+	}
+}
+
+int main(int argc, char* argv[]) {
+	assert( global.__mon.entry_queue.tail != NULL );
+	processor p;
+	{
+		MyThread f[4];
+	}
+	sout | global.value;
+}
Index: tests/concurrency/multi-monitor.cfa
===================================================================
--- tests/concurrency/multi-monitor.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/multi-monitor.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,59 @@
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <thread.hfa>
+
+static int global12, global23, global13;
+
+monitor monitor_t {};
+
+static monitor_t m1, m2, m3;
+
+void increment( monitor_t & mutex p1, monitor_t & mutex p2, int & value ) {
+	assert(active_thread() == get_monitor(p1)->owner);
+	assert(active_thread() == get_monitor(p2)->owner);
+	value += 1;
+	assert(active_thread() == get_monitor(p1)->owner);
+	assert(active_thread() == get_monitor(p2)->owner);
+}
+
+thread MyThread {
+	int target;
+};
+
+void ?{}( MyThread & this, int target ) {
+	this.target = target;
+}
+
+void ^?{}( MyThread & mutex this ) {}
+
+void main( MyThread & this ) {
+	for(int i = 0; i < 1000000; i++) {
+		choose(this.target) {
+			case 0: increment( m1, m2, global12 );
+			case 1: increment( m2, m3, global23 );
+			case 2: increment( m1, m3, global13 );
+		}
+	}
+}
+
+forall(T & | sized(T) | { void ^?{}(T & mutex); })
+void delete_mutex(T * x) {
+	^(*x){};
+	free(x);
+}
+
+int main(int argc, char* argv[]) {
+	processor p;
+	{
+		MyThread * f[6];
+		for(int i = 0; i < 6; i++) {
+			f[i] = new(i % 3);
+		}
+
+		for(int i = 0; i < 6; i++) {
+			delete_mutex( f[i] );
+		}
+	}
+	sout | global12 | global23 | global13;
+}
Index: tests/concurrency/mutexstmt/.expect/locks.txt
===================================================================
--- tests/concurrency/mutexstmt/.expect/locks.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/mutexstmt/.expect/locks.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+Start Test: single lock mutual exclusion
+End Test: single lock mutual exclusion
+Start Test: multi lock deadlock/mutual exclusion
+End Test: multi lock deadlock/mutual exclusion
+Start Test: multi polymorphic lock deadlock/mutual exclusion
+End Test: multi polymorphic lock deadlock/mutual exclusion
Index: tests/concurrency/mutexstmt/.expect/monitors.txt
===================================================================
--- tests/concurrency/mutexstmt/.expect/monitors.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/mutexstmt/.expect/monitors.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,4 @@
+Start Test: single monitor mutual exclusion
+End Test: single monitor mutual exclusion
+Start Test: multi monitor deadlock/mutual exclusion
+End Test: multi monitor deadlock/mutual exclusion
Index: tests/concurrency/mutexstmt/locks.cfa
===================================================================
--- tests/concurrency/mutexstmt/locks.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/mutexstmt/locks.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,133 @@
+#include <mutex_stmt.hfa>
+#include <locks.hfa>
+
+const unsigned int num_times = 10000;
+
+Duration default_preemption() { return 0; }
+
+single_acquisition_lock m1, m2, m3, m4, m5;
+
+thread T_Mutex {};
+bool insideFlag = false;
+int count = 0;
+
+void main( T_Mutex & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		mutex ( m1 ) count++;
+		mutex ( m1 ) { 
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
+void refTest( single_acquisition_lock & m ) {
+	mutex ( m ) {
+		assert(!insideFlag);
+		insideFlag = true;
+		assert(insideFlag);
+		insideFlag = false;
+	}
+}
+
+thread T_Multi {};
+
+void main( T_Multi & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		refTest( m1 );
+		mutex ( m1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m2, m3, m4, m5 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m3, m1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m2, m4 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m3, m4, m5 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
+single_acquisition_lock l1;
+exp_backoff_then_block_lock l2;
+owner_lock l3;
+
+monitor monitor_t {};
+
+monitor_t l4;
+
+thread T_Multi_Poly {};
+
+void main( T_Multi_Poly & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		refTest( l1 );
+		mutex ( l1, l4 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( l1, l2, l3 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( l3, l1, l4 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( l1, l2, l4 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
+int num_tasks = 10;
+int main() {
+	processor p[num_tasks - 1];
+
+	printf("Start Test: single lock mutual exclusion\n");
+	{
+		T_Mutex t[num_tasks];
+	}
+	assert(count == num_tasks * num_times);
+	printf("End Test: single lock mutual exclusion\n");
+	printf("Start Test: multi lock deadlock/mutual exclusion\n");
+	{
+		T_Multi t[num_tasks];
+	}
+	printf("End Test: multi lock deadlock/mutual exclusion\n");
+	printf("Start Test: multi polymorphic lock deadlock/mutual exclusion\n");
+	{
+		T_Multi_Poly t[num_tasks];
+	}
+	printf("End Test: multi polymorphic lock deadlock/mutual exclusion\n");
+}
Index: tests/concurrency/mutexstmt/monitors.cfa
===================================================================
--- tests/concurrency/mutexstmt/monitors.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/mutexstmt/monitors.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,81 @@
+#include <monitor.hfa>
+#include <mutex_stmt.hfa>
+#include <stdio.h>
+#include <stdlib.hfa>
+#include <thread.hfa>
+
+const unsigned int num_times = 10000;
+
+monitor monitor_t {};
+
+monitor_t m1, m2, m3, m4, m5;
+
+thread T_Mutex {};
+bool insideFlag = false;
+int count = 0;
+bool startFlag = false;
+
+void main( T_Mutex & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		mutex ( m1 ) count++;
+		mutex ( m1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
+thread T_Multi {};
+
+void main( T_Multi & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		mutex ( m1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m2, m3, m4, m5 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m3, m1 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m2, m4 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+		mutex ( m1, m3, m4, m5 ) {
+			assert(!insideFlag);
+			insideFlag = true;
+			assert(insideFlag);
+			insideFlag = false;
+		}
+	}
+}
+
+
+int main() {
+	processor p[10];
+
+	printf("Start Test: single monitor mutual exclusion\n");
+	{
+		T_Mutex t[10];
+	}
+	printf("End Test: single monitor mutual exclusion\n");
+	printf("Start Test: multi monitor deadlock/mutual exclusion\n");
+	{
+		T_Multi t[10];
+	}
+	printf("End Test: multi monitor deadlock/mutual exclusion\n");
+}
Index: tests/concurrency/once.cfa
===================================================================
--- tests/concurrency/once.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/once.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,44 @@
+#include <barrier.hfa>
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <once.hfa>
+#include <thread.hfa>
+
+once_flag global;
+
+volatile int check;
+
+void reset() {
+	(global){};
+	check = 0;
+}
+
+void must_once(void) {
+	int prev = __atomic_fetch_add( &check, 1, __ATOMIC_SEQ_CST );
+	if(prev != 0) {
+		abort | "'must_once' appears to have been called more than once, check was" | prev;
+	}
+}
+
+barrier barr = { 11 };
+
+thread Tester {};
+
+void main( Tester & this ) {
+	for(500) {
+		block( barr, reset );
+
+		// sometime yields
+		yield( prng(this, 3) );
+	}
+}
+
+int main() {
+	processor p[2];
+
+	sout | "starting";
+	{
+		Tester testers[11];
+	}
+	sout | "done";
+}
Index: tests/concurrency/park/.expect/contention.txt
===================================================================
--- tests/concurrency/park/.expect/contention.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/park/.expect/contention.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,21 @@
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done
+Done Unparker
Index: tests/concurrency/park/.expect/force_preempt.txt
===================================================================
--- tests/concurrency/park/.expect/force_preempt.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/park/.expect/force_preempt.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+done
Index: tests/concurrency/park/.expect/start_parked.txt
===================================================================
--- tests/concurrency/park/.expect/start_parked.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/park/.expect/start_parked.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+done
Index: tests/concurrency/park/contention.cfa
===================================================================
--- tests/concurrency/park/contention.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/park/contention.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,62 @@
+#include <kernel.hfa>
+#include <thread.hfa>
+
+__thread drand48_data buffer = { 0 };
+int myrand() {
+	long int result;
+	lrand48_r(&buffer, &result);
+	return result;
+}
+
+
+thread Thread {};
+void ^?{}(Thread & mutex this) {}
+
+enum Constants { blocked_size = 20 };
+Thread * volatile blocked[blocked_size];
+
+void main( Thread & this ) {
+	for(int i = 0; i < 1000; i++) {
+		int idx = myrand() % blocked_size;
+		if(blocked[idx]) {
+			Thread * thrd = __atomic_exchange_n(&blocked[idx], 0p, __ATOMIC_SEQ_CST);
+			unpark( *thrd );
+		} else {
+			Thread * thrd = __atomic_exchange_n(&blocked[idx], &this, __ATOMIC_SEQ_CST);
+			unpark( *thrd );
+			park();
+		}
+	}
+	printf("Done\n");
+}
+
+// Extra thread to avoid deadlocking
+thread Unparker {};
+
+void main( Unparker & this ) {
+	while(true) {
+		waitfor( ^?{} : this ) {
+			break;
+		} or else {
+			int idx = myrand() % blocked_size;
+			Thread * thrd = __atomic_exchange_n(&blocked[idx], 0p, __ATOMIC_SEQ_CST);
+			unpark( *thrd );
+			yield( myrand() % 20 );
+		}
+	}
+	printf("Done Unparker\n");
+}
+
+
+int main() {
+	for(i ; blocked_size) {
+		blocked[i] = 0p;
+	}
+
+	processor p[3];
+
+	Unparker u;
+	{
+		Thread t[20];
+	}
+}
Index: tests/concurrency/park/force_preempt.cfa
===================================================================
--- tests/concurrency/park/force_preempt.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/park/force_preempt.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,60 @@
+#include <thread.hfa>
+#include <fstream.hfa>
+
+volatile int global = 0;
+
+thread Poller {};
+void main(Poller & this) {
+	while(true) {
+		waitfor( ^?{} : this ) {
+			break;
+		} or else {
+			global = (global + 1) % 10;
+			yield();
+		}
+	}
+}
+
+thread Waiter {};
+
+volatile int count = 0;
+
+void main(Waiter & this) {
+	// Get a unique id
+	int id = __atomic_fetch_add(&count, 1, __ATOMIC_SEQ_CST);
+	int id_hash = id | (id << 8) | (id << 16) | (id << 24);
+	int mask = 0xCAFEBABA;
+
+	for(int i = 0; i < 5; i++) {
+		assert(mask == 0xCAFEBABA);
+
+		// Unpark this thread, don't force a yield
+		unpark( this );
+		assert(mask == 0xCAFEBABA);
+
+		// Hash the mask to make sure no one else messes with them
+		mask ^= id_hash;
+		assert(mask == (id_hash ^ 0xCAFEBABA));
+
+		// Force a preemption before the call to park
+		int prev = global;
+		while(prev == global) {}
+
+		// Park this thread,
+		assert(mask == (id_hash ^ 0xCAFEBABA));
+		park();
+		assert(mask == (id_hash ^ 0xCAFEBABA));
+
+		// Reset the hash and recheck it
+		mask ^= id_hash;
+		assert(mask == 0xCAFEBABA);
+	}
+}
+
+int main() {
+	Poller p;
+	{
+		Waiter waiters[5];
+	}
+	printf( "done\n" );				// non-empty .expect file
+}
Index: tests/concurrency/park/start_parked.cfa
===================================================================
--- tests/concurrency/park/start_parked.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/park/start_parked.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,14 @@
+#include <thread.hfa>
+
+thread Parker {};
+void main( Parker & ) {
+	park();
+}
+
+int main() {
+	for(1000) {
+		Parker parker;
+		unpark( parker );
+	}
+	printf( "done\n" );									// non-empty .expect file
+}
Index: tests/concurrency/preempt.cfa
===================================================================
--- tests/concurrency/preempt.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/preempt.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,92 @@
+#include <clock.hfa>
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+
+#include "long_tests.hfa"
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10`ms
+#endif
+
+Duration default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+#ifdef TEST_LONG
+static const unsigned long N = 30_000ul;
+#else
+static const unsigned long N = 500ul;
+#endif
+
+extern void __cfaabi_check_preemption();
+
+static struct {
+	volatile int counter;
+	volatile Time prev;
+	Duration durations[6];
+} globals;
+
+thread worker_t {
+	int value;
+	unsigned long long spin;
+};
+
+void ?{}( worker_t & this, int value ) {
+	this.value = value;
+	this.spin = 0;
+}
+
+void main(worker_t & this) {
+	while(TEST(globals.counter < N)) {
+		if(this.spin > 50_000_000_000) abort | "Worker" | this.value | "has been spinning too long! (" | this.spin | ")";
+		__cfaabi_check_preemption();
+		if( (globals.counter % 7) == this.value ) {
+			__cfaabi_check_preemption();
+			#if !defined(TEST_LONG)
+				Time now = timeHiRes();
+				Duration diff = now - globals.prev;
+				globals.prev = now;
+			#endif
+			int next = __atomic_add_fetch( &globals.counter, 1, __ATOMIC_SEQ_CST );
+			__cfaabi_check_preemption();
+			if( (next % 100) == 0 ) {
+				#if !defined(TEST_LONG)
+					unsigned idx = next / 100;
+					if (idx >= 6) abort | "Idx from next is invalid: " | idx | "vs" | next;
+					globals.durations[idx] = diff;
+					if(diff > 12`s) serr | "Duration suspiciously large:" | diff;
+				#endif
+				printf("%d\n", (int)next);
+
+			}
+			__cfaabi_check_preemption();
+			this.spin = 0;
+		}
+		__cfaabi_check_preemption();
+		KICK_WATCHDOG;
+		this.spin++;
+	}
+}
+
+int main(int argc, char* argv[]) {
+	processor p;
+	globals.counter = 0;
+	globals.durations[0] = 0;
+	globals.durations[1] = 0;
+	globals.durations[2] = 0;
+	globals.durations[3] = 0;
+	globals.durations[4] = 0;
+	globals.durations[5] = 0;
+	{
+		globals.prev = timeHiRes();
+		worker_t w0 = 0;
+		worker_t w1 = 1;
+		worker_t w2 = 2;
+		worker_t w3 = 3;
+		worker_t w4 = 4;
+		worker_t w5 = 5;
+		worker_t w6 = 6;
+	}
+}
Index: tests/concurrency/preempt2.cfa
===================================================================
--- tests/concurrency/preempt2.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/preempt2.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,50 @@
+#include <fstream.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+
+#include "long_tests.hfa"
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10`ms
+#endif
+
+Duration default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+#ifdef TEST_LONG
+static const unsigned long N = 30_000ul;
+#else
+static const unsigned long N = 500ul;
+#endif
+
+extern void __cfaabi_check_preemption();
+
+static struct {
+	volatile int x;
+	volatile int y;
+} globals;
+
+thread T1 {};
+void main(T1 &) {
+	for() {
+		if ( globals.x == N ) break;
+		if ( globals.x < globals.y ) globals.x += 1;
+	}
+}
+
+thread T2 {};
+void main(T2 &) {
+	for() {
+		if ( globals.y == N ) break;
+		if ( globals.y == globals.x ) globals.y += 1;
+	}
+}
+
+int main() {
+	{
+		T1 t1;
+		T2 t2;
+	}
+	sout | "Done";
+} // main
Index: tests/concurrency/pthread/.expect/bounded_buffer.x64.txt
===================================================================
--- tests/concurrency/pthread/.expect/bounded_buffer.x64.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/.expect/bounded_buffer.x64.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+producer total value is 39780
+consumer total value is 39780
Index: tests/concurrency/pthread/.expect/bounded_buffer.x86.txt
===================================================================
--- tests/concurrency/pthread/.expect/bounded_buffer.x86.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/.expect/bounded_buffer.x86.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+producer total value is 1770
+consumer total value is 1770
Index: tests/concurrency/pthread/.expect/pthread_attr_test.txt
===================================================================
--- tests/concurrency/pthread/.expect/pthread_attr_test.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/.expect/pthread_attr_test.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+stack size is 123456789
Index: tests/concurrency/pthread/.expect/pthread_cond_test.txt
===================================================================
--- tests/concurrency/pthread/.expect/pthread_cond_test.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/.expect/pthread_cond_test.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1001 @@
+S1 done 0
+S1 done 1
+S1 done 2
+S1 done 3
+S1 done 4
+S1 done 5
+S1 done 6
+S1 done 7
+S1 done 8
+S1 done 9
+S1 done 10
+S1 done 11
+S1 done 12
+S1 done 13
+S1 done 14
+S1 done 15
+S1 done 16
+S1 done 17
+S1 done 18
+S1 done 19
+S1 done 20
+S1 done 21
+S1 done 22
+S1 done 23
+S1 done 24
+S1 done 25
+S1 done 26
+S1 done 27
+S1 done 28
+S1 done 29
+S1 done 30
+S1 done 31
+S1 done 32
+S1 done 33
+S1 done 34
+S1 done 35
+S1 done 36
+S1 done 37
+S1 done 38
+S1 done 39
+S1 done 40
+S1 done 41
+S1 done 42
+S1 done 43
+S1 done 44
+S1 done 45
+S1 done 46
+S1 done 47
+S1 done 48
+S1 done 49
+S1 done 50
+S1 done 51
+S1 done 52
+S1 done 53
+S1 done 54
+S1 done 55
+S1 done 56
+S1 done 57
+S1 done 58
+S1 done 59
+S1 done 60
+S1 done 61
+S1 done 62
+S1 done 63
+S1 done 64
+S1 done 65
+S1 done 66
+S1 done 67
+S1 done 68
+S1 done 69
+S1 done 70
+S1 done 71
+S1 done 72
+S1 done 73
+S1 done 74
+S1 done 75
+S1 done 76
+S1 done 77
+S1 done 78
+S1 done 79
+S1 done 80
+S1 done 81
+S1 done 82
+S1 done 83
+S1 done 84
+S1 done 85
+S1 done 86
+S1 done 87
+S1 done 88
+S1 done 89
+S1 done 90
+S1 done 91
+S1 done 92
+S1 done 93
+S1 done 94
+S1 done 95
+S1 done 96
+S1 done 97
+S1 done 98
+S1 done 99
+S1 done 100
+S1 done 101
+S1 done 102
+S1 done 103
+S1 done 104
+S1 done 105
+S1 done 106
+S1 done 107
+S1 done 108
+S1 done 109
+S1 done 110
+S1 done 111
+S1 done 112
+S1 done 113
+S1 done 114
+S1 done 115
+S1 done 116
+S1 done 117
+S1 done 118
+S1 done 119
+S1 done 120
+S1 done 121
+S1 done 122
+S1 done 123
+S1 done 124
+S1 done 125
+S1 done 126
+S1 done 127
+S1 done 128
+S1 done 129
+S1 done 130
+S1 done 131
+S1 done 132
+S1 done 133
+S1 done 134
+S1 done 135
+S1 done 136
+S1 done 137
+S1 done 138
+S1 done 139
+S1 done 140
+S1 done 141
+S1 done 142
+S1 done 143
+S1 done 144
+S1 done 145
+S1 done 146
+S1 done 147
+S1 done 148
+S1 done 149
+S1 done 150
+S1 done 151
+S1 done 152
+S1 done 153
+S1 done 154
+S1 done 155
+S1 done 156
+S1 done 157
+S1 done 158
+S1 done 159
+S1 done 160
+S1 done 161
+S1 done 162
+S1 done 163
+S1 done 164
+S1 done 165
+S1 done 166
+S1 done 167
+S1 done 168
+S1 done 169
+S1 done 170
+S1 done 171
+S1 done 172
+S1 done 173
+S1 done 174
+S1 done 175
+S1 done 176
+S1 done 177
+S1 done 178
+S1 done 179
+S1 done 180
+S1 done 181
+S1 done 182
+S1 done 183
+S1 done 184
+S1 done 185
+S1 done 186
+S1 done 187
+S1 done 188
+S1 done 189
+S1 done 190
+S1 done 191
+S1 done 192
+S1 done 193
+S1 done 194
+S1 done 195
+S1 done 196
+S1 done 197
+S1 done 198
+S1 done 199
+S1 done 200
+S1 done 201
+S1 done 202
+S1 done 203
+S1 done 204
+S1 done 205
+S1 done 206
+S1 done 207
+S1 done 208
+S1 done 209
+S1 done 210
+S1 done 211
+S1 done 212
+S1 done 213
+S1 done 214
+S1 done 215
+S1 done 216
+S1 done 217
+S1 done 218
+S1 done 219
+S1 done 220
+S1 done 221
+S1 done 222
+S1 done 223
+S1 done 224
+S1 done 225
+S1 done 226
+S1 done 227
+S1 done 228
+S1 done 229
+S1 done 230
+S1 done 231
+S1 done 232
+S1 done 233
+S1 done 234
+S1 done 235
+S1 done 236
+S1 done 237
+S1 done 238
+S1 done 239
+S1 done 240
+S1 done 241
+S1 done 242
+S1 done 243
+S1 done 244
+S1 done 245
+S1 done 246
+S1 done 247
+S1 done 248
+S1 done 249
+S1 done 250
+S1 done 251
+S1 done 252
+S1 done 253
+S1 done 254
+S1 done 255
+S1 done 256
+S1 done 257
+S1 done 258
+S1 done 259
+S1 done 260
+S1 done 261
+S1 done 262
+S1 done 263
+S1 done 264
+S1 done 265
+S1 done 266
+S1 done 267
+S1 done 268
+S1 done 269
+S1 done 270
+S1 done 271
+S1 done 272
+S1 done 273
+S1 done 274
+S1 done 275
+S1 done 276
+S1 done 277
+S1 done 278
+S1 done 279
+S1 done 280
+S1 done 281
+S1 done 282
+S1 done 283
+S1 done 284
+S1 done 285
+S1 done 286
+S1 done 287
+S1 done 288
+S1 done 289
+S1 done 290
+S1 done 291
+S1 done 292
+S1 done 293
+S1 done 294
+S1 done 295
+S1 done 296
+S1 done 297
+S1 done 298
+S1 done 299
+S1 done 300
+S1 done 301
+S1 done 302
+S1 done 303
+S1 done 304
+S1 done 305
+S1 done 306
+S1 done 307
+S1 done 308
+S1 done 309
+S1 done 310
+S1 done 311
+S1 done 312
+S1 done 313
+S1 done 314
+S1 done 315
+S1 done 316
+S1 done 317
+S1 done 318
+S1 done 319
+S1 done 320
+S1 done 321
+S1 done 322
+S1 done 323
+S1 done 324
+S1 done 325
+S1 done 326
+S1 done 327
+S1 done 328
+S1 done 329
+S1 done 330
+S1 done 331
+S1 done 332
+S1 done 333
+S1 done 334
+S1 done 335
+S1 done 336
+S1 done 337
+S1 done 338
+S1 done 339
+S1 done 340
+S1 done 341
+S1 done 342
+S1 done 343
+S1 done 344
+S1 done 345
+S1 done 346
+S1 done 347
+S1 done 348
+S1 done 349
+S1 done 350
+S1 done 351
+S1 done 352
+S1 done 353
+S1 done 354
+S1 done 355
+S1 done 356
+S1 done 357
+S1 done 358
+S1 done 359
+S1 done 360
+S1 done 361
+S1 done 362
+S1 done 363
+S1 done 364
+S1 done 365
+S1 done 366
+S1 done 367
+S1 done 368
+S1 done 369
+S1 done 370
+S1 done 371
+S1 done 372
+S1 done 373
+S1 done 374
+S1 done 375
+S1 done 376
+S1 done 377
+S1 done 378
+S1 done 379
+S1 done 380
+S1 done 381
+S1 done 382
+S1 done 383
+S1 done 384
+S1 done 385
+S1 done 386
+S1 done 387
+S1 done 388
+S1 done 389
+S1 done 390
+S1 done 391
+S1 done 392
+S1 done 393
+S1 done 394
+S1 done 395
+S1 done 396
+S1 done 397
+S1 done 398
+S1 done 399
+S1 done 400
+S1 done 401
+S1 done 402
+S1 done 403
+S1 done 404
+S1 done 405
+S1 done 406
+S1 done 407
+S1 done 408
+S1 done 409
+S1 done 410
+S1 done 411
+S1 done 412
+S1 done 413
+S1 done 414
+S1 done 415
+S1 done 416
+S1 done 417
+S1 done 418
+S1 done 419
+S1 done 420
+S1 done 421
+S1 done 422
+S1 done 423
+S1 done 424
+S1 done 425
+S1 done 426
+S1 done 427
+S1 done 428
+S1 done 429
+S1 done 430
+S1 done 431
+S1 done 432
+S1 done 433
+S1 done 434
+S1 done 435
+S1 done 436
+S1 done 437
+S1 done 438
+S1 done 439
+S1 done 440
+S1 done 441
+S1 done 442
+S1 done 443
+S1 done 444
+S1 done 445
+S1 done 446
+S1 done 447
+S1 done 448
+S1 done 449
+S1 done 450
+S1 done 451
+S1 done 452
+S1 done 453
+S1 done 454
+S1 done 455
+S1 done 456
+S1 done 457
+S1 done 458
+S1 done 459
+S1 done 460
+S1 done 461
+S1 done 462
+S1 done 463
+S1 done 464
+S1 done 465
+S1 done 466
+S1 done 467
+S1 done 468
+S1 done 469
+S1 done 470
+S1 done 471
+S1 done 472
+S1 done 473
+S1 done 474
+S1 done 475
+S1 done 476
+S1 done 477
+S1 done 478
+S1 done 479
+S1 done 480
+S1 done 481
+S1 done 482
+S1 done 483
+S1 done 484
+S1 done 485
+S1 done 486
+S1 done 487
+S1 done 488
+S1 done 489
+S1 done 490
+S1 done 491
+S1 done 492
+S1 done 493
+S1 done 494
+S1 done 495
+S1 done 496
+S1 done 497
+S1 done 498
+S1 done 499
+S1 done 500
+S1 done 501
+S1 done 502
+S1 done 503
+S1 done 504
+S1 done 505
+S1 done 506
+S1 done 507
+S1 done 508
+S1 done 509
+S1 done 510
+S1 done 511
+S1 done 512
+S1 done 513
+S1 done 514
+S1 done 515
+S1 done 516
+S1 done 517
+S1 done 518
+S1 done 519
+S1 done 520
+S1 done 521
+S1 done 522
+S1 done 523
+S1 done 524
+S1 done 525
+S1 done 526
+S1 done 527
+S1 done 528
+S1 done 529
+S1 done 530
+S1 done 531
+S1 done 532
+S1 done 533
+S1 done 534
+S1 done 535
+S1 done 536
+S1 done 537
+S1 done 538
+S1 done 539
+S1 done 540
+S1 done 541
+S1 done 542
+S1 done 543
+S1 done 544
+S1 done 545
+S1 done 546
+S1 done 547
+S1 done 548
+S1 done 549
+S1 done 550
+S1 done 551
+S1 done 552
+S1 done 553
+S1 done 554
+S1 done 555
+S1 done 556
+S1 done 557
+S1 done 558
+S1 done 559
+S1 done 560
+S1 done 561
+S1 done 562
+S1 done 563
+S1 done 564
+S1 done 565
+S1 done 566
+S1 done 567
+S1 done 568
+S1 done 569
+S1 done 570
+S1 done 571
+S1 done 572
+S1 done 573
+S1 done 574
+S1 done 575
+S1 done 576
+S1 done 577
+S1 done 578
+S1 done 579
+S1 done 580
+S1 done 581
+S1 done 582
+S1 done 583
+S1 done 584
+S1 done 585
+S1 done 586
+S1 done 587
+S1 done 588
+S1 done 589
+S1 done 590
+S1 done 591
+S1 done 592
+S1 done 593
+S1 done 594
+S1 done 595
+S1 done 596
+S1 done 597
+S1 done 598
+S1 done 599
+S1 done 600
+S1 done 601
+S1 done 602
+S1 done 603
+S1 done 604
+S1 done 605
+S1 done 606
+S1 done 607
+S1 done 608
+S1 done 609
+S1 done 610
+S1 done 611
+S1 done 612
+S1 done 613
+S1 done 614
+S1 done 615
+S1 done 616
+S1 done 617
+S1 done 618
+S1 done 619
+S1 done 620
+S1 done 621
+S1 done 622
+S1 done 623
+S1 done 624
+S1 done 625
+S1 done 626
+S1 done 627
+S1 done 628
+S1 done 629
+S1 done 630
+S1 done 631
+S1 done 632
+S1 done 633
+S1 done 634
+S1 done 635
+S1 done 636
+S1 done 637
+S1 done 638
+S1 done 639
+S1 done 640
+S1 done 641
+S1 done 642
+S1 done 643
+S1 done 644
+S1 done 645
+S1 done 646
+S1 done 647
+S1 done 648
+S1 done 649
+S1 done 650
+S1 done 651
+S1 done 652
+S1 done 653
+S1 done 654
+S1 done 655
+S1 done 656
+S1 done 657
+S1 done 658
+S1 done 659
+S1 done 660
+S1 done 661
+S1 done 662
+S1 done 663
+S1 done 664
+S1 done 665
+S1 done 666
+S1 done 667
+S1 done 668
+S1 done 669
+S1 done 670
+S1 done 671
+S1 done 672
+S1 done 673
+S1 done 674
+S1 done 675
+S1 done 676
+S1 done 677
+S1 done 678
+S1 done 679
+S1 done 680
+S1 done 681
+S1 done 682
+S1 done 683
+S1 done 684
+S1 done 685
+S1 done 686
+S1 done 687
+S1 done 688
+S1 done 689
+S1 done 690
+S1 done 691
+S1 done 692
+S1 done 693
+S1 done 694
+S1 done 695
+S1 done 696
+S1 done 697
+S1 done 698
+S1 done 699
+S1 done 700
+S1 done 701
+S1 done 702
+S1 done 703
+S1 done 704
+S1 done 705
+S1 done 706
+S1 done 707
+S1 done 708
+S1 done 709
+S1 done 710
+S1 done 711
+S1 done 712
+S1 done 713
+S1 done 714
+S1 done 715
+S1 done 716
+S1 done 717
+S1 done 718
+S1 done 719
+S1 done 720
+S1 done 721
+S1 done 722
+S1 done 723
+S1 done 724
+S1 done 725
+S1 done 726
+S1 done 727
+S1 done 728
+S1 done 729
+S1 done 730
+S1 done 731
+S1 done 732
+S1 done 733
+S1 done 734
+S1 done 735
+S1 done 736
+S1 done 737
+S1 done 738
+S1 done 739
+S1 done 740
+S1 done 741
+S1 done 742
+S1 done 743
+S1 done 744
+S1 done 745
+S1 done 746
+S1 done 747
+S1 done 748
+S1 done 749
+S1 done 750
+S1 done 751
+S1 done 752
+S1 done 753
+S1 done 754
+S1 done 755
+S1 done 756
+S1 done 757
+S1 done 758
+S1 done 759
+S1 done 760
+S1 done 761
+S1 done 762
+S1 done 763
+S1 done 764
+S1 done 765
+S1 done 766
+S1 done 767
+S1 done 768
+S1 done 769
+S1 done 770
+S1 done 771
+S1 done 772
+S1 done 773
+S1 done 774
+S1 done 775
+S1 done 776
+S1 done 777
+S1 done 778
+S1 done 779
+S1 done 780
+S1 done 781
+S1 done 782
+S1 done 783
+S1 done 784
+S1 done 785
+S1 done 786
+S1 done 787
+S1 done 788
+S1 done 789
+S1 done 790
+S1 done 791
+S1 done 792
+S1 done 793
+S1 done 794
+S1 done 795
+S1 done 796
+S1 done 797
+S1 done 798
+S1 done 799
+S1 done 800
+S1 done 801
+S1 done 802
+S1 done 803
+S1 done 804
+S1 done 805
+S1 done 806
+S1 done 807
+S1 done 808
+S1 done 809
+S1 done 810
+S1 done 811
+S1 done 812
+S1 done 813
+S1 done 814
+S1 done 815
+S1 done 816
+S1 done 817
+S1 done 818
+S1 done 819
+S1 done 820
+S1 done 821
+S1 done 822
+S1 done 823
+S1 done 824
+S1 done 825
+S1 done 826
+S1 done 827
+S1 done 828
+S1 done 829
+S1 done 830
+S1 done 831
+S1 done 832
+S1 done 833
+S1 done 834
+S1 done 835
+S1 done 836
+S1 done 837
+S1 done 838
+S1 done 839
+S1 done 840
+S1 done 841
+S1 done 842
+S1 done 843
+S1 done 844
+S1 done 845
+S1 done 846
+S1 done 847
+S1 done 848
+S1 done 849
+S1 done 850
+S1 done 851
+S1 done 852
+S1 done 853
+S1 done 854
+S1 done 855
+S1 done 856
+S1 done 857
+S1 done 858
+S1 done 859
+S1 done 860
+S1 done 861
+S1 done 862
+S1 done 863
+S1 done 864
+S1 done 865
+S1 done 866
+S1 done 867
+S1 done 868
+S1 done 869
+S1 done 870
+S1 done 871
+S1 done 872
+S1 done 873
+S1 done 874
+S1 done 875
+S1 done 876
+S1 done 877
+S1 done 878
+S1 done 879
+S1 done 880
+S1 done 881
+S1 done 882
+S1 done 883
+S1 done 884
+S1 done 885
+S1 done 886
+S1 done 887
+S1 done 888
+S1 done 889
+S1 done 890
+S1 done 891
+S1 done 892
+S1 done 893
+S1 done 894
+S1 done 895
+S1 done 896
+S1 done 897
+S1 done 898
+S1 done 899
+S1 done 900
+S1 done 901
+S1 done 902
+S1 done 903
+S1 done 904
+S1 done 905
+S1 done 906
+S1 done 907
+S1 done 908
+S1 done 909
+S1 done 910
+S1 done 911
+S1 done 912
+S1 done 913
+S1 done 914
+S1 done 915
+S1 done 916
+S1 done 917
+S1 done 918
+S1 done 919
+S1 done 920
+S1 done 921
+S1 done 922
+S1 done 923
+S1 done 924
+S1 done 925
+S1 done 926
+S1 done 927
+S1 done 928
+S1 done 929
+S1 done 930
+S1 done 931
+S1 done 932
+S1 done 933
+S1 done 934
+S1 done 935
+S1 done 936
+S1 done 937
+S1 done 938
+S1 done 939
+S1 done 940
+S1 done 941
+S1 done 942
+S1 done 943
+S1 done 944
+S1 done 945
+S1 done 946
+S1 done 947
+S1 done 948
+S1 done 949
+S1 done 950
+S1 done 951
+S1 done 952
+S1 done 953
+S1 done 954
+S1 done 955
+S1 done 956
+S1 done 957
+S1 done 958
+S1 done 959
+S1 done 960
+S1 done 961
+S1 done 962
+S1 done 963
+S1 done 964
+S1 done 965
+S1 done 966
+S1 done 967
+S1 done 968
+S1 done 969
+S1 done 970
+S1 done 971
+S1 done 972
+S1 done 973
+S1 done 974
+S1 done 975
+S1 done 976
+S1 done 977
+S1 done 978
+S1 done 979
+S1 done 980
+S1 done 981
+S1 done 982
+S1 done 983
+S1 done 984
+S1 done 985
+S1 done 986
+S1 done 987
+S1 done 988
+S1 done 989
+S1 done 990
+S1 done 991
+S1 done 992
+S1 done 993
+S1 done 994
+S1 done 995
+S1 done 996
+S1 done 997
+S1 done 998
+S1 done 999
+S2 statement done!
Index: tests/concurrency/pthread/.expect/pthread_demo_create_join.txt
===================================================================
--- tests/concurrency/pthread/.expect/pthread_demo_create_join.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/.expect/pthread_demo_create_join.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+final res is 190
Index: tests/concurrency/pthread/.expect/pthread_demo_lock.txt
===================================================================
--- tests/concurrency/pthread/.expect/pthread_demo_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/.expect/pthread_demo_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+lock res is 2000000000
+in trylocktest1 res1 is 0
+in trylocktest1 res2 is 0
+in trylocktest2 res1 is 16
+in trylocktest2 res2 is 16
+cnt_trylock is 200000000
Index: tests/concurrency/pthread/.expect/pthread_key_test.txt
===================================================================
--- tests/concurrency/pthread/.expect/pthread_key_test.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/.expect/pthread_key_test.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+Destructor function invoked
+Destructor function invoked
+Destructor function invoked
+Destructor function invoked
+Destructor function invoked
+total value is 207, total value by pthread_getspecific is 207
Index: tests/concurrency/pthread/.expect/pthread_once_test.txt
===================================================================
--- tests/concurrency/pthread/.expect/pthread_once_test.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/.expect/pthread_once_test.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+in once_fn
Index: tests/concurrency/pthread/bounded_buffer.cfa
===================================================================
--- tests/concurrency/pthread/bounded_buffer.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/bounded_buffer.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,156 @@
+#include <stdlib.h>										// prototype: rand
+#include <fstream.hfa>
+#include <thread.hfa>
+#include <pthread.h>
+#include <errno.h>
+// tested pthread mutex related routines, pthread cond related routines
+// tested pthread_create/join
+
+enum { BufferSize = 50 };
+
+volatile int producer_val_total;
+volatile int consumer_val_total;
+
+pthread_mutex_t producer_cnt_lock, consumer_cnt_lock;
+
+
+forall( T ){
+    struct Buffer
+    {
+        int front, back, count;
+		T elements[BufferSize];
+        pthread_mutex_t _mutex;
+	    pthread_cond_t Full, Empty;							// waiting consumers & producers
+    };
+
+    void ?{}( Buffer(T) & buffer ) with( buffer ) {
+         [front, back, count] = 0; 
+         pthread_mutex_init(&_mutex, NULL);
+         pthread_cond_init(&Full, NULL);
+         pthread_cond_init(&Empty, NULL);
+    }
+
+    void ^?{}( Buffer(T) & buffer ) with( buffer ){
+        pthread_mutex_destroy(&_mutex);
+        pthread_cond_destroy(&Full);
+        pthread_cond_destroy(&Empty);
+    }
+
+    int query( Buffer(T) & buffer ) { return buffer.count; } // read-only, no mutual exclusion
+    
+    void insert( Buffer(T) & buffer, T elem ) with(buffer) {
+		pthread_mutex_lock(&_mutex);
+		while ( count == 20 ) pthread_cond_wait( &Empty, &_mutex ); // block producer
+		elements[back] = elem;
+		back = ( back + 1 ) % 20;
+		count += 1;
+		pthread_cond_signal( &Full );					// unblock consumer
+        pthread_mutex_unlock(&_mutex);
+	}
+
+    T remove(Buffer(T) & buffer) with(buffer) {
+		pthread_mutex_lock(&_mutex);
+		while ( count == 0 ) pthread_cond_wait( &Full, &_mutex ); // block consumer
+		T elem = elements[front];
+		front = ( front + 1 ) % 20;
+		count -= 1;
+		pthread_cond_signal( &Empty );					// unblock producer
+        pthread_mutex_unlock(&_mutex);
+		return elem;
+	}
+
+}
+
+void *producer( void *arg ) {
+    Buffer(int) &buf = *(Buffer(int)*)arg;
+	const int NoOfItems = prng(*active_thread(), 40);
+	int item;
+	for ( int i = 1; i <= NoOfItems; i += 1 ) {			// produce a bunch of items
+		item = prng(*active_thread(), 1, 101);			// produce a random number
+		//sout | "Producer:" | pthread_self() | " value:" | item;
+		insert( buf,item );								// insert element into queue
+        pthread_mutex_lock(&producer_cnt_lock);
+        producer_val_total += item;
+        pthread_mutex_unlock(&producer_cnt_lock);
+	} // for
+	//sout | "Producer:" | pthread_self() | " is finished";
+	return NULL;
+} // producer
+
+void *consumer( void *arg ) {
+	Buffer(int) &buf = *(Buffer(int) *)arg;
+	int item;
+	for ( ;; ) {										// consume until a negative element appears
+		item = remove(buf);							// remove from front of queue
+		//sout | "Consumer:" | pthread_self() | " value:" | item;
+	  if ( item == -1 ) break;
+        pthread_mutex_lock(&consumer_cnt_lock);
+        consumer_val_total += item;
+        pthread_mutex_unlock(&consumer_cnt_lock);
+	} // for
+	//sout | "Consumer:" | pthread_self() | " is finished";
+	return NULL;
+} // consumer
+
+int main() {
+	const int NoOfCons = 20, NoOfProds = 30;
+	Buffer(int) buf;								// create a buffer monitor
+	pthread_t cons[NoOfCons];							// pointer to an array of consumers
+	pthread_t prods[NoOfProds];							// pointer to an array of producers
+    pthread_mutex_init(&producer_cnt_lock, NULL);
+    pthread_mutex_init(&consumer_cnt_lock, NULL);
+	// parallelism
+    set_seed( 1003 );
+
+	processor p[5];
+    {
+        // create/join and mutex/condition test
+        //sout | "create/join and mutex/condition test";
+        for ( int i = 0; i < NoOfCons; i += 1 ) {			// create consumers
+            if ( pthread_create( &cons[i], NULL, consumer, (void*)&buf ) != 0 ) {
+                sout | "create thread failure, errno:" | errno;
+                exit( EXIT_FAILURE );
+            } // if
+        } // for
+        for ( int i = 0; i < NoOfProds; i += 1 ) {			// 	create producers
+            if ( pthread_create( &prods[i], NULL, producer, (void*)&buf ) != 0 ) {
+                sout | "create thread failure";
+                exit( EXIT_FAILURE );
+            } // if
+        } // for
+
+        void *result;
+        for ( int i = 0; i < NoOfProds; i += 1 ) {			// wait for producers to end
+            if ( pthread_join( prods[i], &result ) != 0 ) {
+                sout | " producers join thread failure";
+                exit( EXIT_FAILURE );
+            } // if
+            if ( (uint64_t)result != 0 ) {
+                sout | "producers" | prods[i] |" bad return value " | result;
+                exit( EXIT_FAILURE );
+            } // if
+            //sout | "join prods[" | i | "]:" | prods[i] | " result:" | result;
+        } // for
+
+        for ( int i = 0; i < NoOfCons; i += 1 ) {			// terminate each consumer
+            insert(buf, -1 );
+        } // for
+
+        for ( int i = 0; i < NoOfCons; i += 1 ) {			// wait for consumer to end
+            if ( pthread_join( cons[i], &result ) != 0 ) {
+                sout| "consumers join thread failure" ;
+                exit( EXIT_FAILURE );
+            } // if
+            if ( (uint64_t)result != 0 ) {
+                sout| "consumers bad return value" | result;
+                exit( EXIT_FAILURE );
+            } // if
+        } // for
+        sout | "producer total value is " | producer_val_total;
+        sout | "consumer total value is " | consumer_val_total;
+    }
+
+	
+
+	
+}
Index: tests/concurrency/pthread/pthread_attr_test.cfa
===================================================================
--- tests/concurrency/pthread/pthread_attr_test.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/pthread_attr_test.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,29 @@
+/* test attr init; set stack; get stack */
+
+#include <fstream.hfa>
+#include <thread.hfa>
+
+void* foo(void* _attr){
+    size_t size;
+    pthread_attr_t* attr = (pthread_attr_t*)_attr;
+    int status = pthread_attr_getstacksize(attr, &size);
+    if (status != 0){
+        sout | "error return code";
+        exit(1);
+    }
+    sout | "stack size is " | size;
+    return NULL;
+}
+
+int main(int argc, char const *argv[])
+{
+    pthread_attr_t attr;
+    pthread_attr_init(&attr);
+    pthread_attr_setstacksize(&attr, 123456789);
+    pthread_t thr;
+    void* res;
+    pthread_create(&thr, &attr, foo, (void*)&attr);
+    pthread_join(thr, &res);
+    pthread_attr_destroy(&attr);
+    return 0;
+}
Index: tests/concurrency/pthread/pthread_cond_test.cfa
===================================================================
--- tests/concurrency/pthread/pthread_cond_test.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/pthread_cond_test.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,46 @@
+/* small test of pthread cond */
+
+#include <fstream.hfa>
+#include <thread.hfa>
+#include <pthread.h>
+
+int done_flag = 0;
+pthread_mutex_t _mutex;
+pthread_cond_t cond;
+
+extern "C"{
+    void* S1(void* arg){
+        pthread_mutex_lock(&_mutex);
+        for (int i = 0; i < 1000; i++) sout | "S1 done " | i;
+        done_flag = 1;
+        pthread_mutex_unlock(&_mutex);
+        pthread_cond_signal(&cond);
+        return NULL;
+    }
+
+    void* S2(void* arg){
+        pthread_mutex_lock(&_mutex);
+        if (!done_flag) pthread_cond_wait(&cond, &_mutex);
+        sout | "S2 statement done!";
+        pthread_mutex_unlock(&_mutex);
+        return NULL;
+    }
+}
+
+
+
+int main(int argc, char const *argv[])
+{
+    /* code */
+    pthread_mutex_init(&_mutex, NULL);
+    pthread_cond_init(&cond, NULL);
+    pthread_t s1,s2;
+    pthread_create(&s1, NULL, S1, NULL);
+    pthread_create(&s2, NULL, S2, NULL);
+    void* res = NULL;
+    pthread_join(s1, &res);
+    pthread_join(s2, &res);
+    pthread_mutex_destroy(&_mutex);
+    pthread_cond_destroy(&cond);
+    return 0;
+}
Index: tests/concurrency/pthread/pthread_demo_create_join.cfa
===================================================================
--- tests/concurrency/pthread/pthread_demo_create_join.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/pthread_demo_create_join.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,41 @@
+#include <fstream.hfa>
+#include <thread.hfa>
+/* test pthread create/join/exit */
+
+int arr[20];
+
+void* fetch(void* idx){
+    int res = arr[(uint64_t)idx];
+    pthread_exit((void*)res);
+    sout | "it should not be here";
+    exit(1);
+    //return (void*)res;
+}
+
+void arr_init(){
+    for (int i = 0; i < 20; i++){
+        arr[i] = i;
+    }
+}
+
+int main(int argc, char const *argv[])
+{
+    pthread_t threads[20];
+    arr_init();
+    int status;
+    for (int i = 0; i < 20; i++){
+        status = pthread_create(&threads[i], NULL, fetch, (void*)i);
+        if (status != 0) exit(1);
+    }
+    int res = 0;
+    for (int i = 0; i < 20; i++){
+        void* _res = NULL;
+        status = pthread_join(threads[i], &_res);
+        if (status != 0) exit(2);
+        if (((uint64_t)_res) != i) exit(3);
+        res += (uint64_t)_res;
+    }
+    sout | "final res is" | res;
+
+    return 0;
+}
Index: tests/concurrency/pthread/pthread_demo_lock.cfa
===================================================================
--- tests/concurrency/pthread/pthread_demo_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/pthread_demo_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,124 @@
+#include <fstream.hfa>
+#include <thread.hfa>
+/* 
+    test pthread_mutex to provide mutual exclusion
+    test pthread_mutex_trylock not block when lock is acquired by others; test pthread_mutex_trylock can acquire the lock
+*/
+volatile int cnt_nolock = 0;
+volatile int cnt_lock = 0;
+volatile int cnt_trylock = 0;
+extern "C"{
+    static pthread_mutex_t _mutex;
+}
+
+/* mutex pthread routine  */
+// unlocked increnment
+void* inc_unlock(void* cnt){
+    for (int i = 0; i < (uint64_t)cnt; i++){
+        cnt_nolock++;
+    }   // for
+    return NULL;
+}   
+// locked increment
+void* inc_lock(void* cnt){
+    pthread_mutex_lock(&_mutex);
+    for (int i = 0; i < (uint64_t)cnt; i++){
+        cnt_lock++;
+    }   // for
+    pthread_mutex_unlock(&_mutex);
+    return NULL;
+}
+
+/* test lock vs unlock */
+void test_unlock(){
+    pthread_t threads[20];
+    for (int i = 0; i < 20; i++){
+        pthread_create(&threads[i], NULL, inc_unlock, (void*)100000000);
+    }
+    for (int i = 0; i < 20; i++){
+        void * res = NULL;
+        pthread_join(threads[i], &res);
+    }
+    sout | "unlock res is" | cnt_nolock;
+    cnt_nolock = 0;
+}
+extern "C"{
+    void test_lock(){
+        pthread_mutex_init(&_mutex, NULL);
+        pthread_t threads[20];
+        for (int i = 0; i < 20; i++){
+            
+            pthread_create(&threads[i], NULL, inc_lock, (void*)100000000);
+        }
+        for (int i = 0; i < 20; i++){
+            void * res = NULL;
+            pthread_join(threads[i], &res);
+        }
+        sout | "lock res is" | cnt_lock;
+        pthread_mutex_destroy(&_mutex);
+        if (cnt_lock != 100000000 * 20) {
+            sout | "pthread mutex not working";
+            exit(1);
+        }
+        cnt_lock = 0;
+    }
+}
+
+
+/* mutex trylock pthread routine  */
+void* trylock_test2(void* arg){
+    int res = pthread_mutex_trylock(&_mutex);
+    sout | "in trylocktest2 res1 is" | res;
+    res = pthread_mutex_trylock(&_mutex);
+    sout | "in trylocktest2 res2 is" | res;
+    pthread_mutex_lock(&_mutex);
+    for (int i = 0; i < (uint64_t)arg; i++) cnt_trylock++;
+    pthread_mutex_unlock(&_mutex);
+    return NULL;
+}
+
+void* trylock_test1(void* arg){
+    int res = pthread_mutex_trylock(&_mutex);
+    sout | "in trylocktest1 res1 is" | res;
+    res = pthread_mutex_trylock(&_mutex);
+    sout | "in trylocktest1 res2 is" | res;
+    pthread_t task2;
+    pthread_create(&task2, NULL, trylock_test2, (void*)100000000);
+
+    // inc cnt then release the lock
+    for (int i = 0; i < (uint64_t)arg; i++) cnt_trylock++;
+    pthread_mutex_unlock(&_mutex);
+    pthread_mutex_unlock(&_mutex);
+    void * dummy = NULL;
+    pthread_join(task2, &dummy);
+    sout | "cnt_trylock is " | cnt_trylock;
+    return NULL;
+}
+
+// trylock test
+void test_trylock(){
+    pthread_mutex_init(&_mutex, NULL);
+    pthread_t task1;
+    pthread_create(&task1, NULL, trylock_test1, (void*)100000000);
+    void * dummy = NULL;
+    pthread_join(task1,&dummy);
+    pthread_mutex_destroy(&_mutex);
+    if (cnt_trylock != 100000000 * 2) {
+        sout | "pthread try mutex not working";
+        exit(1);
+    }
+    cnt_trylock = 0;
+}
+
+
+
+int main(int argc, char const *argv[])
+{
+    
+    // compare unlock vs lock
+    test_lock();
+    // test trylock
+    test_trylock();
+    
+    return 0;
+}
Index: tests/concurrency/pthread/pthread_key_test.cfa
===================================================================
--- tests/concurrency/pthread/pthread_key_test.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/pthread_key_test.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,126 @@
+
+/* test pthread_key_create/set_specific/get_specific
+    get specific == set specific
+    dtor is invoked (no mem leak)
+*/
+
+
+extern "C"{
+
+    #include <stdio.h>
+    #include <stdlib.h>
+    #include <errno.h>
+    #include <pthread.h>
+
+    #define THREADS 5
+    #define BUFFSZ  48
+    pthread_key_t   key;
+    volatile int total_value,total_value_getspec;
+    pthread_mutex_t value_mutex;
+
+    void            *threadfunc(void *parm)
+    {
+        int        status;
+        void      *value;
+        int        threadnum;
+        int       *tnum;
+        void      *getvalue;
+        char       Buffer[BUFFSZ];
+
+        tnum = (int*)parm;
+        threadnum = *tnum;
+
+        //printf("Thread %d executing\n", threadnum);
+        value = (void *)(rand()%100);
+        status = pthread_setspecific(key, (void *) value);
+        if ( status !=  0) {
+            printf("pthread_setspecific failed, thread %d, errno %d",
+                                                        threadnum, errno);
+            return (void*)12;
+        }
+        pthread_mutex_lock(&value_mutex);
+        total_value_getspec += (int)value;
+        total_value += (int)pthread_getspecific(key);
+        pthread_mutex_unlock(&value_mutex);
+
+
+        if (!(value = malloc(sizeof(Buffer))))
+            printf("Thread %d could not allocate storage, errno = %d\n",
+                                                        threadnum, errno);
+        status = pthread_setspecific(key, (void *) value);
+        if ( status !=  0) {
+            printf("pthread_setspecific failed, thread %d, errno %d",
+                                                        threadnum, errno);
+            return (void*)12;
+        }
+        //printf("Thread %d setspecific value: %d\n", threadnum, value);
+
+        getvalue = 0;
+        getvalue = pthread_getspecific(key);
+
+        if (getvalue != value) {
+        printf("getvalue not valid, getvalue=%d", (u_int64_t)getvalue);
+            return (void*)68;
+        }
+
+        pthread_exit((void *)0);
+    }
+
+    void  destr_fn(void *parm)
+    {
+
+        printf("Destructor function invoked\n");
+        free(parm);
+    }
+
+
+    int main() {
+        int          getvalue;
+        int          status;
+        int          i;
+        int          threadparm[THREADS];
+        pthread_t    threadid[THREADS];
+        void*          thread_stat[THREADS];
+
+        // rand seed for testing
+        srand(1003);
+        pthread_mutex_init(&value_mutex, NULL);
+
+        // testing getspec and setspec
+        total_value = 0;
+        total_value_getspec = 0;
+
+        if ((status = pthread_key_create(&key, destr_fn )) < 0) {
+            printf("pthread_key_create failed, errno=%d", errno);
+            exit(1);
+        }
+
+        // create 3 THREADS, pass each its number
+        for (i=0; i<THREADS; i++) {
+            threadparm[i] = i+1;
+            status = pthread_create( &threadid[i],
+                                    NULL,
+                                    threadfunc,
+                                    (void *)&threadparm[i]);
+            if ( status <  0) {
+            printf("pthread_create failed, errno=%d", errno);
+            exit(2);
+            }
+        }
+
+        for ( i=0; i<THREADS; i++) {
+            status = pthread_join( threadid[i], (void **)&thread_stat[i]);
+            if ( status <  0) {
+            printf("pthread_join failed, thread %d, errno=%d\n", i+1, errno);
+            }
+
+            if (thread_stat[i] != 0)   {
+                printf("bad thread status, thread %d, status=%d\n", i+1,
+                                                        (u_int64_t)thread_stat[i]);
+            }
+        }
+        printf("total value is %d, total value by pthread_getspecific is %d\n", total_value, total_value_getspec);
+        exit(0);
+    }   // main
+}
+
Index: tests/concurrency/pthread/pthread_once_test.cfa
===================================================================
--- tests/concurrency/pthread/pthread_once_test.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/pthread/pthread_once_test.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,96 @@
+// tested pthread once,create,join
+
+                                                          
+                                                                                
+                                                            
+#include <fstream.hfa>
+#include <thread.hfa>                                                                    
+#define THREADS 20                                                                                                                                                    
+
+extern "C"{
+    #include <pthread.h>
+    #include <stdio.h>
+    #include <errno.h> 
+    int             once_counter=0;                                                 
+    pthread_once_t  once_control = PTHREAD_ONCE_INIT;                               
+                                                                                    
+    void  once_fn(void)                                                             
+    {                                                                               
+    puts("in once_fn");                                                            
+    once_counter++;                                                                
+    }                                                                               
+                                                                                    
+    void            *threadfunc(void *parm)                                         
+    {                                                                               
+    int        status;                                                             
+    int        threadnum;                                                          
+    int        *tnum;                                                              
+                                                                                    
+    tnum = (int *)parm;                                                                   
+    threadnum = *tnum;                                                             
+                                                                                    
+    //printf("Thread %d executing\n", threadnum);                                    
+                                                                                    
+    status = pthread_once(&once_control, once_fn);                                 
+    if ( status <  0)                                                              
+        printf("pthread_once failed, thread %d, errno=%d\n", threadnum,             
+                                                                errno);             
+                                                                                    
+    //pthread_exit((void *)0);  
+    return NULL;                                                     
+    }  
+
+
+    void once_rtn(){
+        printf("in once init\n");
+    }
+    void test(){
+
+        processor p[10];
+        
+
+        int          status;                                                           
+        int          i;                                                                
+        int          threadparm[THREADS];                                              
+        pthread_t    threadid[THREADS];                                                
+        void*          thread_stat[THREADS];                                             
+                                                                                        
+        for (i=0; i<THREADS; i++) {                                                    
+            threadparm[i] = i+1;                                                        
+            status = pthread_create( &threadid[i],                                      
+                                    NULL,                                              
+                                    threadfunc,                                        
+                                    (void *)&threadparm[i]);                           
+            if ( status <  0) {                                                         
+            printf("pthread_create failed, errno=%d", errno);                        
+            exit(2);                                                                 
+            }                                                                           
+        }                                                                             
+                                                                                        
+        for ( i=0; i<THREADS; i++) {                                                   
+            status = pthread_join( threadid[i], (void **)&thread_stat[i]);               
+            if ( status <  0)                                                           
+            printf("pthread_join failed, thread %d, errno=%d\n", i+1, errno);        
+                                                                                        
+            if (thread_stat[i] != 0)                                                    
+                printf("bad thread status, thread %d, status=%d\n", i+1,                
+                                                        (int)thread_stat[i]);             
+        }                                                                             
+                                                                                        
+        if (once_counter != 1) {
+            printf("once_fn did not get control once, counter=%d",once_counter);         
+            exit(1);
+        }                                                        
+        
+        exit(0);
+        
+    }
+}
+
+
+
+int main(int argc, char const *argv[])
+{
+    test();
+    return 0;
+}
Index: tests/concurrency/readyQ/.expect/barrier_sleeper.txt
===================================================================
--- tests/concurrency/readyQ/.expect/barrier_sleeper.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/readyQ/.expect/barrier_sleeper.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+Done
Index: tests/concurrency/readyQ/.expect/leader_spin.txt
===================================================================
--- tests/concurrency/readyQ/.expect/leader_spin.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/readyQ/.expect/leader_spin.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+Leader done
+done
Index: tests/concurrency/readyQ/barrier_sleeper.cfa
===================================================================
--- tests/concurrency/readyQ/barrier_sleeper.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/readyQ/barrier_sleeper.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,59 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2022 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// concurrent/readyQ/barrier_sleeper.cfa -- testing the ready-queue
+//
+// Author           : Thierry Delisle
+// Created On       : Fri Apr 01 14:01:00 2022
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+// Test validates that processors running out of work repeatedly won't deadlock
+// Processors and thread are removed in an interleaved fashion for a weirder case.
+
+#include <concurrency/barrier.hfa>
+#include <fstream.hfa>
+#include <time.hfa>
+#include <thread.hfa>
+
+const unsigned NUM_LAPS = 173;
+const unsigned NUM_THREADS = 11;
+
+barrier bar = { NUM_THREADS };
+
+thread Eager {};
+void main( Eager & ) {
+	for(NUM_LAPS) {
+		block(bar);
+	}
+}
+
+thread Sleeper{};
+void main( Sleeper & ) {
+	for(NUM_LAPS) {
+		sleep(500`us);
+		block(bar);
+	}
+}
+
+int main() {
+	{
+		processor p1[2];
+		{
+			if (NUM_THREADS <= 4) sout | "Insufficient threads";
+			Eager e[NUM_THREADS - 3];
+			{
+				processor p2[2];
+				{
+					Sleeper s[3];
+				}
+			}
+		}
+	}
+	sout | "Done";
+}
Index: tests/concurrency/readyQ/leader_spin.cfa
===================================================================
--- tests/concurrency/readyQ/leader_spin.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/readyQ/leader_spin.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,128 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2022 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// concurrent/readyQ/leader_spin.cfa -- validates ready queue fairness
+//
+// Author           : Thierry Delisle
+// Created On       : Fri Apr 01 11:39:09 2022
+// Last Modified By :
+// Last Modified On :
+// Update Count     :
+//
+
+#include <stdlib.hfa>
+#include <fstream.hfa>
+#include <thread.hfa>
+
+// Test validates that all cores being constantly active doesn't prevent starvation.
+// This test is very similar to the transfer benchmark, without all the benchmark bells and whistle.
+
+// Deactivate preemption because it could fix starvation issues.
+Duration default_preemption() {
+	return 0;
+}
+
+PRNG64 lead_rng;
+volatile unsigned leader;
+volatile size_t lead_idx;
+
+const uint64_t nthreads = 17;
+const uint64_t stop_count = 327;
+
+thread$ * the_main;
+
+thread __attribute__((aligned(128))) MyThread {
+	unsigned id;
+	volatile size_t idx;
+};
+
+void ?{}( MyThread & this, unsigned id ) {
+	this.id = id;
+	this.idx = 0;
+}
+
+MyThread ** threads;
+
+static void waitgroup() {
+	for(i; nthreads) {
+		while( threads[i]->idx != lead_idx ) {
+			sched_yield();
+		}
+	}
+}
+
+static void lead(MyThread & this) {
+	this.idx = ++lead_idx;
+	if(lead_idx > stop_count) {
+		sout | "Leader done";
+		unpark( the_main );
+		return;
+	}
+
+	waitgroup();
+
+	unsigned nleader = prng( lead_rng, nthreads );
+	__atomic_store_n( &leader, nleader, __ATOMIC_SEQ_CST );
+}
+
+static void wait(MyThread & this) {
+	yield();
+	if(lead_idx == this.idx) {
+		return;
+	}
+
+	assert( (lead_idx - 1) == this.idx );
+	__atomic_add_fetch( &this.idx, 1, __ATOMIC_SEQ_CST );
+	yield();
+}
+
+void main(MyThread & this) {
+	park();
+
+	unsigned me = this.id;
+
+	for() {
+		if(leader == me) {
+			lead( this );
+		}
+		else {
+			wait( this );
+		}
+		if(lead_idx > stop_count) break;
+	}
+}
+
+// ==================================================
+int main(int argc, char * argv[]) {
+	lead_idx = 0;
+	leader = prng( lead_rng, nthreads );
+
+	the_main = active_thread();
+	processor procs[2];
+	{
+		threads = alloc(nthreads);
+		for(i; nthreads) {
+			threads[i] = malloc();
+			(*threads[i]){
+				i
+			};
+		}
+
+		for(i; nthreads) unpark(*threads[i]);
+
+		park();
+
+		for(i; nthreads) {
+			MyThread * thrd = threads[i];
+			join(*thrd);
+			^( *thrd ){};
+			free(thrd);
+		}
+
+		free(threads);
+	}
+	sout | "done";
+}
Index: tests/concurrency/signal/.expect/block.txt
===================================================================
--- tests/concurrency/signal/.expect/block.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/signal/.expect/block.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+Starting waiters
+Waiters done
Index: tests/concurrency/signal/.expect/disjoint.txt
===================================================================
--- tests/concurrency/signal/.expect/disjoint.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/signal/.expect/disjoint.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,11 @@
+1000
+2000
+3000
+4000
+5000
+6000
+7000
+8000
+9000
+10000
+All waiter done
Index: tests/concurrency/signal/.expect/wait.txt
===================================================================
--- tests/concurrency/signal/.expect/wait.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/signal/.expect/wait.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+Starting
+Done
Index: tests/concurrency/signal/block.cfa
===================================================================
--- tests/concurrency/signal/block.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/signal/block.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,139 @@
+//---------------------------------------------------------
+// Barging test
+// Ensures that no barging can occur between :
+//   - the frontend of the signal_block and the signaled thread
+//   - the signaled  threadand the backend of the signal_block
+//---------------------------------------------------------
+
+
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+
+#include "long_tests.hfa"
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10`ms
+#endif
+
+Duration default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+#ifdef TEST_LONG
+static const unsigned long N = 150_000ul;
+#else
+static const unsigned long N = 5_000ul;
+#endif
+
+enum state_t { WAITED, SIGNAL, BARGE };
+
+monitor global_data_t {
+	thread$ * last_thread;
+	thread$ * last_signaller;
+};
+
+void ?{} ( global_data_t & this ) {
+	this.last_thread = NULL;
+	this.last_signaller = NULL;
+}
+
+void ^?{} ( global_data_t & mutex this ) {}
+
+global_data_t globalA, globalB;
+
+condition cond;
+
+volatile bool done;
+
+//------------------------------------------------------------------------------
+void wait_op( global_data_t & mutex a, global_data_t & mutex b, unsigned i ) {
+    wait( cond, (uintptr_t)active_thread() );
+
+	yield( random( 10 ) );
+
+	if(a.last_thread != a.last_signaller || b.last_thread != b.last_signaller ) {
+		sout | "ERROR Barging detected, expected" | a.last_signaller | b.last_signaller | "got" | a.last_thread | b.last_thread;
+		abort();
+	}
+
+	a.last_thread = b.last_thread = active_thread();
+
+	yield( random( 10 ) );
+}
+
+thread Waiter {};
+void main( Waiter & this ) {
+	for( int i = 0; TEST(i < N); i++ ) {
+		wait_op( globalA, globalB, i );
+		KICK_WATCHDOG;
+	}
+}
+
+//------------------------------------------------------------------------------
+void signal_op( global_data_t & mutex a, global_data_t & mutex b ) {
+	yield( random( 10 ) );
+
+	[a.last_thread, b.last_thread, a.last_signaller, b.last_signaller] = active_thread();
+
+	if( !is_empty( cond ) ) {
+
+		thread$ * next = ( thread$ * ) front( cond );
+
+		if( ! signal_block( cond ) ) {
+			sout | "ERROR expected to be able to signal";
+			abort();
+		}
+
+		yield( random( 10 ) );
+
+		if(a.last_thread != next || b.last_thread != next) {
+			sout | "ERROR Barging detected, expected" | next | "got" | a.last_thread | b.last_thread;
+			abort();
+		}
+	}
+
+}
+
+thread Signaller {};
+void main( Signaller & this ) {
+	while( !done ) {
+		signal_op( globalA, globalB );
+	}
+}
+
+//------------------------------------------------------------------------------
+void barge_op( global_data_t & mutex a ) {
+	a.last_thread = active_thread();
+}
+
+thread Barger {};
+void main( Barger & this ) {
+	for( unsigned i = 0; !done; i++ ) {
+		//Choose some monitor to barge into with some irregular pattern
+		bool choose_a = (i % 13) > (i % 17);
+		if ( choose_a ) barge_op( globalA );
+		else barge_op( globalB );
+	}
+}
+
+//------------------------------------------------------------------------------
+
+int main(int argc, char* argv[]) {
+	srandom( time( NULL ) );
+	done = false;
+	processor p;
+	{
+		Signaller s[4];
+		Barger b[13];
+		sout | "Starting waiters";
+		{
+			Waiter w[3];
+		}
+		sout | "Waiters done";
+		done = true;
+	}
+}
Index: tests/concurrency/signal/disjoint.cfa
===================================================================
--- tests/concurrency/signal/disjoint.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/signal/disjoint.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,146 @@
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+
+#include "long_tests.hfa"
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10`ms
+#endif
+
+Duration default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+#ifdef TEST_LONG
+static const unsigned long N = 300_000ul;
+#else
+static const unsigned long N = 10_000ul;
+#endif
+
+// This tests checks what happens when someone barges in the midle of the release
+// of a bulk of monitors.
+
+enum state_t { WAIT, SIGNAL, BARGE };
+
+monitor global_t {};
+
+monitor global_data_t;
+void ?{}( global_data_t & this );
+void ^?{} ( global_data_t & mutex this );
+
+monitor global_data_t {
+	int counter;
+	state_t state;
+};
+
+// Use a global struct because the order needs to match with Signaller thread
+static struct {
+	global_t mut;
+	global_data_t data;
+} globals;
+
+condition cond;
+
+volatile bool all_done;
+
+void ?{}( global_data_t & this ) {
+	this.counter = 0;
+	this.state = BARGE;
+}
+
+void ^?{} ( global_data_t & mutex this ) {}
+
+//------------------------------------------------------------------------------
+// Barging logic
+void barge( global_data_t & mutex d ) {
+	d.state = BARGE;
+}
+
+thread Barger {};
+void ?{}( Barger & this ) {
+	((thread&)this){ "Barger Thread" };
+}
+
+void main( Barger & this ) {
+	while( !all_done ) {
+		barge( globals.data );
+		yield();
+	}
+}
+
+//------------------------------------------------------------------------------
+// Waiting logic
+bool wait( global_t & mutex m, global_data_t & mutex d ) {
+	wait( cond );
+	if( d.state != SIGNAL ) {
+		abort | "ERROR barging!";
+	}
+
+	#if !defined(TEST_FOREVER)
+		d.counter++;
+		if( (d.counter % 1000) == 0 ) sout | d.counter;
+	#endif
+
+	return TEST(d.counter < N);
+}
+
+thread Waiter {};
+void ?{}( Waiter & this ) {
+	((thread&)this){ "Waiter Thread" };
+}
+
+void main( Waiter & this ) {
+	while( wait( globals.mut, globals.data ) ) { KICK_WATCHDOG; yield(); }
+}
+
+
+//------------------------------------------------------------------------------
+// Signalling logic
+void signal( condition & cond, global_t & mutex a, global_data_t & mutex b ) {
+	b.state = SIGNAL;
+	signal( cond );
+}
+
+void logic( global_t & mutex a ) {
+	signal( cond, a, globals.data );
+
+	yield( random( 10 ) );
+
+	//This is technically a mutual exclusion violation but the mutex monitor protects us
+	bool running = TEST(globals.data.counter < N) && globals.data.counter > 0;
+	if( globals.data.state != SIGNAL && running ) {
+		abort | "ERROR Eager signal" | globals.data.state;
+	}
+}
+
+thread Signaller {};
+void ?{}( Signaller & this ) {
+	((thread&)this){ "Signaller Thread" };
+}
+
+void main( Signaller & this ) {
+	while( !all_done ) {
+		logic( globals.mut );
+		yield();
+	}
+}
+
+//------------------------------------------------------------------------------
+// Main loop
+int main(int argc, char* argv[]) {
+	srandom( time( NULL ) );
+	all_done = false;
+	processor p;
+	{
+		Signaller s;
+		Barger b[17];
+		{
+			Waiter w[4];
+		}
+		sout | "All waiter done";
+		all_done = true;
+	}
+}
Index: tests/concurrency/signal/wait.cfa
===================================================================
--- tests/concurrency/signal/wait.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/signal/wait.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,153 @@
+//---------------------------------------------------------
+// Multi wait test
+// Ensures that no deadlock from waiting/signalling conditions
+//---------------------------------------------------------
+
+
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+
+#define __kick_rate 12000ul
+#include "long_tests.hfa"
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10`ms
+#endif
+
+Duration default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+#ifdef TEST_LONG
+static const unsigned long N = 375_000ul;
+#else
+static const unsigned long N = 2_500ul;
+#endif
+
+monitor global_t {};
+
+global_t globalA;
+global_t globalB;
+global_t globalC;
+
+condition condAB, condAC, condBC, condABC;
+
+thread Signaler {};
+thread WaiterAB {};
+thread WaiterAC {};
+thread WaiterBC {};
+thread WaiterABC{};
+
+volatile int waiter_left;
+
+//----------------------------------------------------------------------------------------------------
+// Tools
+void signal( condition & cond, global_t & mutex a, global_t & mutex b ) {
+	signal( cond );
+}
+
+void signal( condition & cond, global_t & mutex a, global_t & mutex b, global_t & mutex c ) {
+	signal( cond );
+}
+
+void wait( condition & cond, global_t & mutex a, global_t & mutex b ) {
+	wait( cond );
+}
+
+void wait( condition & cond, global_t & mutex a, global_t & mutex b, global_t & mutex c ) {
+	wait( cond );
+}
+
+//----------------------------------------------------------------------------------------------------
+// Signaler
+void main( Signaler & this ) {
+
+	while( waiter_left != 0 ) {
+		unsigned action = random( 4 );
+		switch( action ) {
+			case 0:
+				signal( condABC, globalA, globalB, globalC );
+				break;
+			case 1:
+				signal( condAB , globalA, globalB );
+				break;
+			case 2:
+				signal( condBC , globalB, globalC );
+				break;
+			case 3:
+				signal( condAC , globalA, globalC );
+				break;
+			default:
+				sout | "Something went wrong";
+				abort();
+		}
+		yield();
+	}
+}
+
+//----------------------------------------------------------------------------------------------------
+// Waiter ABC
+void main( WaiterABC & this ) {
+	for( int i = 0; TEST(i < N); i++ ) {
+		wait( condABC, globalA, globalB, globalC );
+		KICK_WATCHDOG;
+	}
+
+	__atomic_fetch_sub( &waiter_left, 1,  __ATOMIC_SEQ_CST );
+}
+
+//----------------------------------------------------------------------------------------------------
+// Waiter AB
+void main( WaiterAB & this ) {
+	for( int i = 0; TEST(i < N); i++ ) {
+		wait( condAB , globalA, globalB );
+		KICK_WATCHDOG;
+	}
+
+	__atomic_fetch_sub( &waiter_left, 1,  __ATOMIC_SEQ_CST );
+}
+
+//----------------------------------------------------------------------------------------------------
+// Waiter AC
+void main( WaiterAC & this ) {
+	for( int i = 0; TEST(i < N); i++ ) {
+		wait( condAC , globalA, globalC );
+		KICK_WATCHDOG;
+	}
+
+	__atomic_fetch_sub( &waiter_left, 1,  __ATOMIC_SEQ_CST );
+}
+
+//----------------------------------------------------------------------------------------------------
+// Waiter BC
+void main( WaiterBC & this ) {
+	for( int i = 0; TEST(i < N); i++ ) {
+		wait( condBC , globalB, globalC );
+		KICK_WATCHDOG;
+	}
+
+	__atomic_fetch_sub( &waiter_left, 1,  __ATOMIC_SEQ_CST );
+}
+
+//----------------------------------------------------------------------------------------------------
+// Main
+int main(int argc, char* argv[]) {
+	srandom( time( NULL ) );
+	waiter_left = 4;
+	processor p[2];
+	sout | "Starting";
+	{
+		Signaler  e;
+		{
+			WaiterABC a;
+			WaiterAB  b;
+			WaiterBC  c;
+			WaiterAC  d;
+		}
+	}
+	sout | "Done";
+}
Index: tests/concurrency/sleep.cfa
===================================================================
--- tests/concurrency/sleep.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/sleep.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,41 @@
+#include <fstream.hfa>
+#include <thread.hfa>
+#include <mutex_stmt.hfa>
+#include <time.hfa>
+
+Duration default_preemption() {
+	return 0;
+}
+
+volatile int counter = 0;
+
+thread fast_sleeper {};
+void main(fast_sleeper &) {
+	Duration wait = 47`ms;
+	for(i; 20) {
+		sleep(wait);
+		__atomic_fetch_add( &counter, 1, __ATOMIC_RELAXED );
+	}
+}
+
+thread slow_sleeper {};
+void main(slow_sleeper &) {
+	Duration wait = 277`ms;
+	for(i; 4) {
+		sleep(wait);
+		int val = __atomic_add_fetch( &counter, -5, __ATOMIC_RELAXED );
+		if(val < -9) abort | "Value reached negative value:" | val;
+	}
+}
+
+int main() {
+	mutex( sout ) sout | "start";
+	{
+		slow_sleeper slow;
+		yield();
+		fast_sleeper fast;
+		yield();
+	}
+	mutex( sout ) sout | "done";
+}
+
Index: tests/concurrency/suspend_then.cfa
===================================================================
--- tests/concurrency/suspend_then.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/suspend_then.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,88 @@
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <thread.hfa>
+#include <time.hfa>
+#include <stdlib.hfa>
+#include <string.h>
+
+#define __kick_rate 150000ul
+#include "long_tests.hfa"
+
+Duration default_preemption() {
+	return 0;
+}
+
+#ifdef TEST_LONG
+static const unsigned long N = 600_000ul;
+#else
+static const unsigned long N = 1_000ul;
+#endif
+
+#if !defined(TEST_FOREVER)
+	static inline void print(const char * const text ) {
+		write( STDOUT_FILENO, text, strlen(text) );
+	}
+#else
+	static inline void print(Printer & this, const char * const text ) {}
+#endif
+
+generator Coroutine { int i; };
+
+volatile bool done = false;
+Coroutine * volatile the_cor = 0p;
+
+void store(Coroutine & cor) {
+	__atomic_store_n(&the_cor, &cor, __ATOMIC_SEQ_CST);
+}
+
+Coroutine * take(void) {
+	Coroutine * val = 0p;
+	Coroutine * ret = __atomic_exchange_n(&the_cor, val, __ATOMIC_SEQ_CST);
+	assert(!ret || !the_cor);
+	return ret;
+}
+
+void main(Coroutine& this) {
+	this.i = 0;
+	suspend;
+	for(;TEST(this.i < N); this.i++) {
+
+		print("C - Suspending\n");
+		suspend{
+			print("C - Publishing\n");
+			assert(!the_cor);
+			store( this );
+		}
+		assert(!the_cor);
+		print("C - Back\n");
+		KICK_WATCHDOG;
+		yield();
+	}
+	done = true;
+	suspend;
+}
+
+thread Thread {};
+void main(Thread & this) {
+	Coroutine * mine = 0p;
+	while(!done) {
+		yield();
+
+		mine = take();
+		if(!mine) continue;
+
+		print("T - took\n");
+		resume(*mine);
+	}
+}
+
+
+int main(int argc, char* argv[]) {
+	processor p[2];
+	Coroutine c;
+	resume(c); // Prime the coroutine to avoid one of the threads being its starter
+	the_cor = &c;
+	{
+		Thread t[2];
+	}
+}
Index: tests/concurrency/thread.cfa
===================================================================
--- tests/concurrency/thread.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/thread.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,41 @@
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <locks.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+
+thread First  { semaphore* lock; };
+thread Second { semaphore* lock; };
+
+void ?{}( First  & this, semaphore & lock ) { ((thread&)this){ "Thread 1" }; this.lock = &lock; }
+void ?{}( Second & this, semaphore & lock ) { ((thread&)this){ "Thread 2" }; this.lock = &lock; }
+
+void main(First& this) {
+	for(int i = 0; i < 10; i++) {
+		sout | "First : Suspend No." | i + 1;
+		yield();
+	}
+	V(*this.lock);
+}
+
+void main(Second& this) {
+	P(*this.lock);
+	for(int i = 0; i < 10; i++) {
+		sout | "Second : Suspend No." | i + 1;
+		yield();
+	}
+}
+
+
+int main(int argc, char* argv[]) {
+	semaphore lock = { 0 };
+	sout | "User main begin";
+	{
+		processor p;
+		{
+			First  f = { lock };
+			Second s = { lock };
+		}
+	}
+	sout | "User main end";
+}
Index: tests/concurrency/unified_locking/.expect/block_spin_lock.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/block_spin_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/block_spin_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,3 @@
+Starting
+Done!
+Match!
Index: tests/concurrency/unified_locking/.expect/exp_backoff.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/exp_backoff.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/exp_backoff.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,3 @@
+Starting
+Done!
+Match!
Index: tests/concurrency/unified_locking/.expect/fast_block_lock.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/fast_block_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/fast_block_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,3 @@
+Starting
+Done!
+Match!
Index: tests/concurrency/unified_locking/.expect/futex_mutex.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/futex_mutex.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/futex_mutex.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,3 @@
+Starting
+Done!
+Match!
Index: tests/concurrency/unified_locking/.expect/locks.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/locks.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/locks.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,26 @@
+Start Test 1: multi acquisition lock and condition variable single wait/notify
+Done Test 1
+Start Test 2: multi acquisition lock and condition variable 3 wait/notify all
+Done Test 2
+Start Test 3: single acquisition lock and condition variable single wait/notify
+Done Test 3
+Start Test 4: single acquisition lock and condition variable 3 wait/notify all
+Done Test 4
+Start Test 5: owner lock and condition variable single wait/notify
+Done Test 5
+Start Test 6: owner lock and condition variable 3 wait/notify all
+Done Test 6
+Start Test 7: linear backoff lock and condition variable single wait/notify
+Done Test 7
+Start Test 8: linear backoff lock and condition variable 3 wait/notify all
+Done Test 8
+Start Test 9: multi acquisiton lock and condition variable multiple acquire and wait/notify
+Done Test 9
+Start Test 10: owner lock and condition variable multiple acquire and wait/notify
+Done Test 10
+Start Test 11: no lock condition variable wait/notify
+Done Test 11
+Start Test 12: locked condition variable wait/notify with front()
+Done Test 12
+Start Test 13: fast block lock and fast cond var single wait/notify
+Done Test 13
Index: tests/concurrency/unified_locking/.expect/mcs.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/mcs.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/mcs.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,3 @@
+Starting
+Done!
+Match!
Index: tests/concurrency/unified_locking/.expect/mcs_block_spin_lock.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/mcs_block_spin_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/mcs_block_spin_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,3 @@
+Starting
+Done!
+Match!
Index: tests/concurrency/unified_locking/.expect/mcs_spin.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/mcs_spin.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/mcs_spin.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,3 @@
+Starting
+Done!
+Match!
Index: tests/concurrency/unified_locking/.expect/pthread_locks.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/pthread_locks.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/pthread_locks.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,8 @@
+Start Test 1: lock and condition variable single wait/notify
+Done Test 1
+Start Test 2: lock and condition variable 3 wait/notify all
+Done Test 2
+Start Test 3: lock and condition variable multiple acquire and wait/notify
+Done Test 3
+Start Test 4: lock and condition variable single timed wait/notify
+Done Test 4
Index: tests/concurrency/unified_locking/.expect/simple_owner_lock.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/simple_owner_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/simple_owner_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,3 @@
+Starting
+Done!
+Match!
Index: tests/concurrency/unified_locking/.expect/spin_queue_lock.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/spin_queue_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/spin_queue_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,3 @@
+Starting
+Done!
+Match!
Index: tests/concurrency/unified_locking/.expect/timeout_lock.txt
===================================================================
--- tests/concurrency/unified_locking/.expect/timeout_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/.expect/timeout_lock.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,4 @@
+Start Test 1: surface testing condition variable timeout routines
+Done Test 1
+Start Test 2: testing timeout vs signalling with varying timeout durations
+Done Test 2
Index: tests/concurrency/unified_locking/block_spin_lock.cfa
===================================================================
--- tests/concurrency/unified_locking/block_spin_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/block_spin_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,8 @@
+#include <locks.hfa>
+
+#define LOCK block_spin_lock
+#include "mutex_test.hfa"
+
+int main() {
+    test();
+}
Index: tests/concurrency/unified_locking/exp_backoff.cfa
===================================================================
--- tests/concurrency/unified_locking/exp_backoff.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/exp_backoff.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,8 @@
+#include <locks.hfa>
+
+#define LOCK exp_backoff_then_block_lock
+#include "mutex_test.hfa"
+
+int main() {
+    test();
+}
Index: tests/concurrency/unified_locking/fast_block_lock.cfa
===================================================================
--- tests/concurrency/unified_locking/fast_block_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/fast_block_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,8 @@
+#include <locks.hfa>
+
+#define LOCK fast_block_lock
+#include "mutex_test.hfa"
+
+int main() {
+    test();
+}
Index: tests/concurrency/unified_locking/futex_mutex.cfa
===================================================================
--- tests/concurrency/unified_locking/futex_mutex.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/futex_mutex.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,8 @@
+#include <locks.hfa>
+
+#define LOCK futex_mutex
+#include "mutex_test.hfa"
+
+int main() {
+    test();
+}
Index: tests/concurrency/unified_locking/locks.cfa
===================================================================
--- tests/concurrency/unified_locking/locks.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/locks.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,348 @@
+#include <stdio.h>
+#include "locks.hfa"
+#include <stdlib.hfa>
+#include <thread.hfa>
+
+const unsigned int num_times = 50000;
+
+multiple_acquisition_lock m;
+condition_variable( multiple_acquisition_lock ) c_m;
+
+single_acquisition_lock s;
+condition_variable( single_acquisition_lock ) c_s;
+
+owner_lock o;
+condition_variable( owner_lock ) c_o;
+
+exp_backoff_then_block_lock l;
+condition_variable( exp_backoff_then_block_lock ) c_l;
+
+fast_block_lock f;
+fast_cond_var( fast_block_lock ) f_c_f;
+
+thread T_C_M_WS1 {};
+
+void main( T_C_M_WS1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(m);
+		if(empty(c_m) && i != num_times - 1) {
+			wait(c_m,m);
+		}else{
+			notify_one(c_m);
+		}
+		unlock(m);
+	}
+}
+
+thread T_C_M_WB1 {};
+
+void main( T_C_M_WB1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(m);
+		if(counter(c_m) == 3 || i == num_times - 1) {
+			notify_all(c_m);
+		}else{
+			wait(c_m,m);
+		}
+		unlock(m);
+	}
+}
+
+thread T_C_S_WS1 {};
+
+void main( T_C_S_WS1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(s);
+		if(empty(c_s) && i != num_times - 1) {
+			wait(c_s,s);
+		}else{
+			notify_one(c_s);
+		}
+		unlock(s);
+	}
+}
+
+thread T_C_S_WB1 {};
+
+void main( T_C_S_WB1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(s);
+		if(counter(c_s) == 3 || i == num_times - 1) {
+			notify_all(c_s);
+		}else{
+			wait(c_s,s);
+		}
+		unlock(s);
+	}
+}
+
+thread T_C_L_WS1 {};
+
+void main( T_C_L_WS1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(l);
+		if(empty(c_l) && i != num_times - 1) {
+			wait(c_l,l);
+		}else{
+			notify_one(c_l);
+		}
+		unlock(l);
+	}
+}
+
+thread T_C_L_WB1 {};
+
+void main( T_C_L_WB1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(l);
+		if(counter(c_l) == 3 || i == num_times - 1) {
+			notify_all(c_l);
+		}else{
+			wait(c_l,l);
+		}
+		unlock(l);
+	}
+}
+
+thread T_F_C_F_WS1 {};
+
+void main( T_F_C_F_WS1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(f);
+		if(empty(f_c_f) && i != num_times - 1) {
+			wait(f_c_f,f);
+		}else{
+			notify_one(f_c_f);
+		}
+		unlock(f);
+	}
+}
+
+thread T_C_O_WS1 {};
+
+void main( T_C_O_WS1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(o);
+		if(empty(c_o) && i != num_times - 1) {
+			wait(c_o,o);
+		}else{
+			notify_one(c_o);
+		}
+		unlock(o);
+	}
+}
+
+thread T_C_O_WB1 {};
+
+void main( T_C_O_WB1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(o);
+		if(counter(c_o) == 3 || i == num_times - 1) {
+			notify_all(c_o);
+		}else{
+			wait(c_o,o);
+		}
+		unlock(o);
+	}
+}
+
+thread T_C_M_WS2 {};
+
+void main( T_C_M_WS2 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(m);
+		lock(m);
+		lock(m);
+		if(empty(c_m) && i != num_times - 1) {
+			wait(c_m,m);
+		}else{
+			notify_one(c_m);
+		}
+		unlock(m);
+		unlock(m);
+		unlock(m);
+	}
+}
+
+thread T_C_O_WS2 {};
+
+void main( T_C_O_WS2 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(o);
+		lock(o);
+		lock(o);
+		if(empty(c_o) && i != num_times - 1) {
+			wait(c_o,o);
+		}else{
+			notify_one(c_o);
+		}
+		unlock(o);
+		unlock(o);
+		unlock(o);
+	}
+}
+
+thread T_C_NLW {};
+
+void main( T_C_NLW & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		wait(c_o);
+	}
+}
+
+thread T_C_NLS {};
+
+void main( T_C_NLS & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		while (empty(c_o)) { }
+		notify_one(c_o);
+	}
+}
+
+thread T_C_S_WNF {};
+
+void main( T_C_S_WNF & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(s);
+		if(empty(c_s) && i != num_times - 1) {
+			wait(c_s, s, 10);
+		}else{
+			if(!empty(c_s)) assert(front(c_s) == 10);
+			notify_one(c_s);
+		}
+		unlock(s);
+	}
+}
+
+bool done = false;
+
+thread T_C_NLWD {};
+
+void main( T_C_NLWD & this ) {
+	done = false;
+	for (unsigned int i = 0; i < num_times/5; i++) {
+		if (i % 1000 == 0) printf("Iteration: %d\n", i);
+		wait(c_s, 1`ns);
+	}
+	done = true;
+}
+
+thread T_C_WDS {};
+
+void main( T_C_WDS & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		while (empty(c_s) && !done) { }
+		notify_one(c_s);
+		sleep(1`ns);
+		if(done) break;
+	}
+}
+
+thread T_C_LWD {};
+
+void main( T_C_LWD & this ) {
+	done = false;
+	for (unsigned int i = 0; i < num_times/5; i++) {
+		if (i % 1000 == 0) printf("Iteration: %d\n", i);
+		lock(s);
+		wait(c_s, s, 1`ns);
+		unlock(s);
+	}
+	done = true;
+}
+
+thread T_C_LWDS {};
+
+void main( T_C_LWDS & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		while (empty(c_s) && !done) { }
+		lock(s);
+		notify_one(c_s);
+		unlock(s);
+		sleep(1`ns);
+		if(done) break;
+	}
+}
+
+int main() {
+	processor p[2];
+	printf("Start Test 1: multi acquisition lock and condition variable single wait/notify\n");
+	{
+		T_C_M_WS1 t1[2];
+	}
+	printf("Done Test 1\n");
+
+	printf("Start Test 2: multi acquisition lock and condition variable 3 wait/notify all\n");
+	{
+		T_C_M_WB1 t1[4];
+	}
+	printf("Done Test 2\n");
+
+	printf("Start Test 3: single acquisition lock and condition variable single wait/notify\n");
+	{
+		T_C_S_WS1 t1[2];
+	}
+	printf("Done Test 3\n");
+
+	printf("Start Test 4: single acquisition lock and condition variable 3 wait/notify all\n");
+	{
+		T_C_S_WB1 t1[4];
+	}
+	printf("Done Test 4\n");
+
+	printf("Start Test 5: owner lock and condition variable single wait/notify\n");
+	{
+		T_C_O_WS1 t1[2];
+	}
+	printf("Done Test 5\n");
+
+	printf("Start Test 6: owner lock and condition variable 3 wait/notify all\n");
+	{
+		T_C_O_WB1 t1[4];
+	}
+	printf("Done Test 6\n");
+
+	printf("Start Test 7: linear backoff lock and condition variable single wait/notify\n");
+	{
+		T_C_L_WS1 t1[2];
+	}
+	printf("Done Test 7\n");
+
+	printf("Start Test 8: linear backoff lock and condition variable 3 wait/notify all\n");
+	{
+		T_C_L_WB1 t1[4];
+	}
+	printf("Done Test 8\n");
+
+	printf("Start Test 9: multi acquisiton lock and condition variable multiple acquire and wait/notify\n");
+	{
+		T_C_M_WS2 t1[2];
+	}
+	printf("Done Test 9\n");
+
+	printf("Start Test 10: owner lock and condition variable multiple acquire and wait/notify\n");
+	{
+		T_C_O_WS2 t1[2];
+	}
+	printf("Done Test 10\n");
+
+	printf("Start Test 11: no lock condition variable wait/notify\n");
+	{
+		T_C_NLW t1;
+		T_C_NLS t2;
+	}
+	printf("Done Test 11\n");
+
+	printf("Start Test 12: locked condition variable wait/notify with front()\n");
+	{
+		T_C_S_WNF t1[2];
+	}
+	printf("Done Test 12\n");
+
+	printf("Start Test 13: fast block lock and fast cond var single wait/notify\n");
+	{
+		T_F_C_F_WS1 t1[2];
+	}
+	printf("Done Test 13\n");
+	
+}
Index: tests/concurrency/unified_locking/mcs.cfa
===================================================================
--- tests/concurrency/unified_locking/mcs.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/mcs.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,66 @@
+#include <fstream.hfa>
+#include <locks.hfa>
+#include <thread.hfa>
+
+const unsigned int num_times = 50000;
+
+struct MutexObj {
+	mcs_lock l;
+	thread$ * id;
+	size_t sum;
+};
+
+MutexObj mo;
+
+void trash() {
+	unsigned t[100];
+	for(i; 100) {
+		t[i] = 0xDEADBEEF;
+	}
+}
+
+unsigned cs() {
+	thread$ * me = active_thread();
+	unsigned value = (unsigned)me;
+	mcs_node n;
+	lock(mo.l, n);
+	{
+		size_t tsum = mo.sum;
+		mo.id = me;
+		yield(random(5));
+		if(mo.id != me) sout | "Intruder!";
+		mo.sum = tsum + value;
+	}
+	unlock(mo.l, n);
+	return value;
+}
+
+thread LockCheck {
+	size_t sum;
+};
+
+void main(LockCheck & this) {
+	this.sum = 0;
+	for(num_times) {
+		trash();
+		this.sum += cs();
+		trash();
+		yield(random(10));
+	}
+}
+
+int main() {
+	size_t sum = -32;
+	mo.sum = -32;
+	processor p[2];
+	sout | "Starting";
+	{
+		LockCheck checkers[13];
+		for(i;13) {
+			sum += join(checkers[i]).sum;
+		}
+	}
+	sout | "Done!";
+	if(sum == mo.sum) sout | "Match!";
+	else sout | "No Match!" | sum | "vs" | mo.sum;
+}
Index: tests/concurrency/unified_locking/mcs_block_spin_lock.cfa
===================================================================
--- tests/concurrency/unified_locking/mcs_block_spin_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/mcs_block_spin_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,8 @@
+#include <locks.hfa>
+
+#define LOCK mcs_block_spin_lock
+#include "mutex_test.hfa"
+
+int main() {
+    test();
+}
Index: tests/concurrency/unified_locking/mcs_spin.cfa
===================================================================
--- tests/concurrency/unified_locking/mcs_spin.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/mcs_spin.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,78 @@
+
+#include <fstream.hfa>
+#include <locks.hfa>
+#include <thread.hfa>
+
+const unsigned int num_times = 50;
+
+struct MutexObj {
+	mcs_spin_lock l;
+	thread$ * id;
+	uint32_t sum;
+	uint32_t cnt;
+};
+
+MutexObj mo;
+
+void trash() {
+	unsigned t[100];
+	for(i; 100) {
+		t[i] = 0xDEADBEEF;
+	}
+}
+
+uint32_t cs() {
+	thread$ * me = active_thread();
+	uint32_t value;
+    mcs_spin_node node;
+	lock(mo.l, node);
+	{
+		uint32_t tsum = mo.sum;
+		uint32_t cnt = mo.cnt;
+		mo.id = me;
+		yield(random(5));
+		value = ((uint32_t)random()) ^ ((uint32_t)me);
+		if(mo.id != me) sout | "Intruder!";
+		mo.cnt = cnt + 1;
+		mo.sum = tsum + value;
+	}
+	unlock(mo.l, node);
+	return value;
+}
+
+thread LockCheck {
+	uint32_t sum;
+};
+
+void main(LockCheck & this) {
+	this.sum = 0;
+	for(num_times) {
+		trash();
+		this.sum += cs();
+		trash();
+		yield(random(10));
+	}
+}
+
+void test() {
+	uint32_t sum = -32;
+	mo.sum = -32;
+	mo.cnt = 0;
+	processor p[2];
+	sout | "Starting";
+	{
+		LockCheck checkers[13];
+		for(i;13) {
+			sum += join(checkers[i]).sum;
+		}
+	}
+	sout | "Done!";
+	if(mo.cnt != (13 * num_times)) sout | "Invalid cs count!" | mo.cnt | "vs "| (13 * num_times) | "(13 *" | num_times | ')';
+	if(sum == mo.sum) sout | "Match!";
+	else sout | "No Match!" | sum | "vs" | mo.sum;
+}
+
+int main() {
+    test();
+	return 0;
+}
Index: tests/concurrency/unified_locking/mutex_test.hfa
===================================================================
--- tests/concurrency/unified_locking/mutex_test.hfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/mutex_test.hfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,79 @@
+
+#include <fstream.hfa>
+#include <locks.hfa>
+#include <thread.hfa>
+
+const unsigned int num_times = 50;
+
+struct MutexObj {
+	LOCK l;
+	thread$ * id;
+	uint32_t sum;
+	uint32_t cnt;
+};
+
+MutexObj mo;
+
+void trash() {
+	unsigned t[100];
+	for(i; 100) {
+		t[i] = 0xDEADBEEF;
+	}
+}
+
+uint32_t cs(uint32_t & entries) {
+	thread$ * me = active_thread();
+	uint32_t value;
+	lock(mo.l);
+	{
+		entries++;
+		uint32_t tsum = mo.sum;
+		uint32_t cnt = mo.cnt;
+		mo.id = me;
+		yield(random(5));
+		value = ((uint32_t)random()) ^ ((uint32_t)me);
+		if(mo.id != me) sout | "Intruder!";
+		mo.cnt = cnt + 1;
+		mo.sum = tsum + value;
+	}
+	unlock(mo.l);
+	return value;
+}
+
+thread LockCheck {
+	uint32_t sum;
+	uint32_t entries;
+};
+
+void main(LockCheck & this) {
+	this.sum = 0;
+	this.entries = 0;
+	for(num_times) {
+		trash();
+		this.sum += cs( this.entries );
+		trash();
+		yield(random(10));
+	}
+}
+
+void test() {
+	uint32_t sum = -32;
+	mo.sum = -32;
+	mo.cnt = 0;
+	uint32_t real_entries = 0;
+	processor p[2];
+	sout | "Starting";
+	{
+		LockCheck checkers[13];
+		for(i;13) {
+			LockCheck & curr = join(checkers[i]);
+			sum += curr.sum;
+			real_entries += curr.entries;
+		}
+	}
+	sout | "Done!";
+	if(real_entries != (13 * num_times)) sout | "Invalid real cs count!" | mo.cnt | "vs "| (13 * num_times) | "(13 *" | num_times | ')';
+	if(mo.cnt != (13 * num_times)) sout | "Invalid concurrent cs count!" | mo.cnt | "vs "| (13 * num_times) | "(13 *" | num_times | ')';
+	if(sum == mo.sum) sout | "Match!";
+	else sout | "No Match!" | sum | "vs" | mo.sum;
+}
Index: tests/concurrency/unified_locking/pthread_locks.cfa
===================================================================
--- tests/concurrency/unified_locking/pthread_locks.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/pthread_locks.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,108 @@
+#include <stdio.h>
+#include "locks.hfa"
+#include <stdlib.hfa>
+#include <thread.hfa>
+#include <time.h>
+#include <stdlib.hfa>
+
+const unsigned int num_times = 50;
+
+simple_owner_lock l;
+pthread_cond_var( simple_owner_lock ) c;
+
+owner_lock l2;
+condition_variable( owner_lock ) c2;
+
+volatile int counter = 0;
+
+thread Wait_Signal_1 {};
+
+void main( Wait_Signal_1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(l);
+		if(empty(c) && i != num_times - 1) {
+			wait(c,l);
+		}else{
+			notify_one(c);
+		}
+		unlock(l);
+	}
+}
+
+thread Wait_3_Signal_3 {};
+
+void main( Wait_3_Signal_3 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(l);
+        counter++;
+		if(counter == 4 || i == num_times - 1) {
+            counter = 0;
+			notify_all(c);
+		}else{
+			wait(c,l);
+		}
+		unlock(l);
+	}
+}
+
+thread Rec_Lock_Wait_Signal_1 {};
+
+void main( Rec_Lock_Wait_Signal_1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(l);
+		lock(l);
+		lock(l);
+		if(empty(c) && i != num_times - 1) {
+			wait(c,l);
+		}else{
+			notify_one(c);
+		}
+		unlock(l);
+		unlock(l);
+		unlock(l);
+	}
+}
+
+thread Wait_Time_Signal_1 {};
+
+void main( Wait_Time_Signal_1 & this ) {
+	for (unsigned int i = 0; i < num_times; i++) {
+		lock(l);
+		if(empty(c) || random(10) >= 9 ) {
+			timespec t;
+			clock_gettime(CLOCK_REALTIME, &t);
+			timespec waitTime{0,1};
+			bool woken = wait(c,l, t + waitTime);
+		}else{
+			notify_one(c);
+		}
+		unlock(l);
+	}
+}
+
+int main() {
+	processor p[1];
+	printf("Start Test 1: lock and condition variable single wait/notify\n");
+	{
+		Wait_Signal_1 t1[2];
+	}
+	printf("Done Test 1\n");
+
+	printf("Start Test 2: lock and condition variable 3 wait/notify all\n");
+	{
+		Wait_3_Signal_3 t1[4];
+	}
+	printf("Done Test 2\n");
+
+	printf("Start Test 3: lock and condition variable multiple acquire and wait/notify\n");
+	{
+		Rec_Lock_Wait_Signal_1 t1[2];
+	}
+	printf("Done Test 3\n");
+
+	printf("Start Test 4: lock and condition variable single timed wait/notify\n");
+	{
+		Wait_Time_Signal_1 t1[2];
+	}
+	printf("Done Test 4\n");
+}
Index: tests/concurrency/unified_locking/simple_owner_lock.cfa
===================================================================
--- tests/concurrency/unified_locking/simple_owner_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/simple_owner_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,8 @@
+#include <locks.hfa>
+
+#define LOCK simple_owner_lock
+#include "mutex_test.hfa"
+
+int main() {
+    test();
+}
Index: tests/concurrency/unified_locking/spin_queue_lock.cfa
===================================================================
--- tests/concurrency/unified_locking/spin_queue_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/spin_queue_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,8 @@
+#include <locks.hfa>
+
+#define LOCK spin_queue_lock
+#include "mutex_test.hfa"
+
+int main() {
+    test();
+}
Index: tests/concurrency/unified_locking/test_debug.cfa
===================================================================
--- tests/concurrency/unified_locking/test_debug.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/test_debug.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,31 @@
+#include "locks.hfa"
+
+fast_block_lock f;
+fast_block_lock f2;
+fast_cond_var( fast_block_lock ) f_c_f;
+
+thread T1 {};
+bool wait = true;
+bool wait2 = true;
+void main( T1 & this ) {
+    lock(f);
+    if (wait) {
+        wait = false;
+        wait(f_c_f, f);
+    } else {
+        notify_one(f_c_f);
+        unlock(f);
+    }
+    lock(f2);
+    if (wait2) {
+        wait2 = false;
+        wait(f_c_f, f2);
+    } else {
+        notify_one(f_c_f);
+        unlock(f2);
+    }
+}
+
+int main() {
+    T1 t[2];
+}
Index: tests/concurrency/unified_locking/thread_test.cfa
===================================================================
--- tests/concurrency/unified_locking/thread_test.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/thread_test.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,108 @@
+#include <stdio.h>
+#include "locks.hfa"
+#include <stdlib.hfa>
+#include <thread.hfa>
+#include <containers/array.hfa>
+
+static unsigned int taskCount = 4;
+static unsigned int threadCount = 2;
+static unsigned int lockCount = 1;
+static unsigned int total_times = 320000;
+static unsigned int num_times;
+static const int workBufferSize = 16;
+static unsigned int work_unlocked = 10000;
+static unsigned int work_locked = 10000;
+
+// taken from martin's thread_test
+static inline void dowork(volatile int* buffer, unsigned int steps) {
+  int value = 0;
+  for (unsigned int i = 0; i < steps; i += 1) {
+    // a little more work than just a single memory access helps with stability
+    value += (buffer[i % workBufferSize] * 17) / 23 + 55;
+  }
+  buffer[0] += value;
+}
+
+thread worker {
+    exp_backoff_then_block_lock * locks;
+    bool improved;
+};
+
+void ?{}( worker & w, exp_backoff_then_block_lock * locks, bool improved ) {
+	w.locks = locks;
+    w.improved = improved;
+}
+
+
+void main( worker & this ) with(this) {
+	int buffer[workBufferSize];
+    for (int i = 0; i < workBufferSize; i += 1) buffer[i] = rand() % 1024;
+    unsigned int lck = rand() % lockCount;
+    exp_backoff_then_block_lock * curr_lock = &locks[lck];
+    for (unsigned int i = 0; i < num_times; i++) {
+        dowork(buffer, work_unlocked);
+        if (improved) lock_improved(*curr_lock);
+        else lock(*curr_lock);
+        dowork(buffer, work_locked);
+        unlock(*curr_lock);
+        lck = rand() % lockCount;
+        curr_lock = &locks[lck];
+    }
+}
+
+int doOne = 0;
+int main(int argc, char* argv[]) {
+    switch (argc) {
+        case 8:
+            doOne = atoi(argv[7]);
+        case 7:
+            work_unlocked = atoi(argv[6]);
+        case 6:
+            work_locked = atoi(argv[5]);
+        case 5:
+            total_times = atoi(argv[4]);
+        case 4:
+            lockCount = atoi(argv[3]);
+        case 3:
+            threadCount = atoi(argv[2]);
+        case 2:
+            taskCount = atoi(argv[1]);
+        case 1:
+            break;
+        default:
+            break;
+    }
+	processor p[threadCount];
+    exp_backoff_then_block_lock locks[lockCount];
+    worker * worker_arr[taskCount];
+    num_times = total_times  / taskCount;
+    //printf("%d\n", doOne);
+	//
+	//clock_t begin = clock();
+    if (doOne == 1) {
+        printf("Start Test: martin lock simple %d\n", num_times);
+	for (unsigned int i = 0; i < taskCount; i++) {
+        worker_arr[i] = new( locks, false );
+    }
+    for (unsigned int i = 0; i < taskCount; i++) {
+        delete( worker_arr[i] );
+    }
+    }
+	//clock_t end = clock();
+	//double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
+	//printf("norm: %f\n", time_spent);
+
+    //printf("Start Test: martin lock improved\n");
+	//begin = clock();
+    if (doOne == 2) {
+	for (unsigned int i = 0; i < taskCount; i++) {
+        worker_arr[i] = new( locks, true );
+    }
+    for (unsigned int i = 0; i < taskCount; i++) {
+        delete( worker_arr[i] );
+    }
+    }
+	//end = clock();
+	//time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
+	//printf("improved: %f\n", time_spent);
+}
Index: tests/concurrency/unified_locking/timeout_lock.cfa
===================================================================
--- tests/concurrency/unified_locking/timeout_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/unified_locking/timeout_lock.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,87 @@
+#include <stdio.h>
+#include <locks.hfa>
+#include <alarm.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+#include <kernel.hfa>
+
+multiple_acquisition_lock m, n;
+condition_variable( multiple_acquisition_lock ) c_m, c_n;
+
+const unsigned int NoOfTimes = 20;
+
+void block() { // used for barrier like behaviour
+	lock(n);
+	if (empty( c_n )) {
+		wait( c_n, n );
+	} else {
+		notify_one( c_n );
+	}
+	unlock(n);
+}
+
+thread T1 {};
+
+void main( T1 & this ) {
+	lock(m);
+	wait( c_m, m, 1`s );
+	// printf("Thread: %p timedout\n", active_thread()); // removed since can't expect non deterministic output
+
+	block();
+
+	// Test calls which occur increasingly close to timeout value.
+
+	for ( unsigned int i = 0; i < NoOfTimes + 3; i += 1 ) {
+	    if ( wait( c_m, m, 1000000`ns ) ) {
+			// printf("Thread: %p signalled\n", active_thread()); // removed since can't expect non deterministic output
+	    } else {
+			// printf("Thread: %p timedout\n", active_thread()); // removed since can't expect non deterministic output
+	    } // if
+
+	    block();
+	} // for
+}
+
+
+thread T2 {};
+
+void main( T2 & this ) {
+	block();
+
+	// Test calls which occur increasingly close to timeout value.
+
+	sleep( 100000`ns );
+	notify_one(c_m);
+	block();
+
+	sleep( 500000`ns );
+	notify_one(c_m);
+	block();
+
+	sleep( 900000`ns );
+	notify_one(c_m);
+	block();
+
+	for ( unsigned int i = 0; i < NoOfTimes; i += 1 ) {
+	    sleep( 999700`ns );
+		notify_one(c_m);
+	    block();
+	} // for
+}
+
+int main() {
+	processor p[2];
+	printf("Start Test 1: surface testing condition variable timeout routines\n");
+	wait( c_m, 1`ns );														// bool wait( condition_variable(L) & this, Duration duration );
+	wait( c_m, 10, 1`ns );													// bool wait( condition_variable(L) & this, uintptr_t info, Duration duration );
+	lock(m); wait( c_m, m, 1`ns ); unlock(m); 								// bool wait( condition_variable(L) & this, L & l, Duration duration );
+	lock(m); wait( c_m, m, 10, 1`ns ); unlock(m);							// bool wait( condition_variable(L) & this, L & l, uintptr_t info, Duration duration );
+	printf("Done Test 1\n");
+
+	printf("Start Test 2: testing timeout vs signalling with varying timeout durations\n");
+	{
+		T1 t1;
+		T2 t2;
+	}
+	printf("Done Test 2\n");
+}
Index: tests/concurrency/waitfor/.expect/barge.txt
===================================================================
--- tests/concurrency/waitfor/.expect/barge.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/.expect/barge.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5002 @@
+Starting
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1944
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2026
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2095
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+2109
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2170
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2215
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2265
+2266
+2267
+2268
+2269
+2270
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2310
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2351
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2402
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2498
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
+2514
+2515
+2516
+2517
+2518
+2519
+2520
+2521
+2522
+2523
+2524
+2525
+2526
+2527
+2528
+2529
+2530
+2531
+2532
+2533
+2534
+2535
+2536
+2537
+2538
+2539
+2540
+2541
+2542
+2543
+2544
+2545
+2546
+2547
+2548
+2549
+2550
+2551
+2552
+2553
+2554
+2555
+2556
+2557
+2558
+2559
+2560
+2561
+2562
+2563
+2564
+2565
+2566
+2567
+2568
+2569
+2570
+2571
+2572
+2573
+2574
+2575
+2576
+2577
+2578
+2579
+2580
+2581
+2582
+2583
+2584
+2585
+2586
+2587
+2588
+2589
+2590
+2591
+2592
+2593
+2594
+2595
+2596
+2597
+2598
+2599
+2600
+2601
+2602
+2603
+2604
+2605
+2606
+2607
+2608
+2609
+2610
+2611
+2612
+2613
+2614
+2615
+2616
+2617
+2618
+2619
+2620
+2621
+2622
+2623
+2624
+2625
+2626
+2627
+2628
+2629
+2630
+2631
+2632
+2633
+2634
+2635
+2636
+2637
+2638
+2639
+2640
+2641
+2642
+2643
+2644
+2645
+2646
+2647
+2648
+2649
+2650
+2651
+2652
+2653
+2654
+2655
+2656
+2657
+2658
+2659
+2660
+2661
+2662
+2663
+2664
+2665
+2666
+2667
+2668
+2669
+2670
+2671
+2672
+2673
+2674
+2675
+2676
+2677
+2678
+2679
+2680
+2681
+2682
+2683
+2684
+2685
+2686
+2687
+2688
+2689
+2690
+2691
+2692
+2693
+2694
+2695
+2696
+2697
+2698
+2699
+2700
+2701
+2702
+2703
+2704
+2705
+2706
+2707
+2708
+2709
+2710
+2711
+2712
+2713
+2714
+2715
+2716
+2717
+2718
+2719
+2720
+2721
+2722
+2723
+2724
+2725
+2726
+2727
+2728
+2729
+2730
+2731
+2732
+2733
+2734
+2735
+2736
+2737
+2738
+2739
+2740
+2741
+2742
+2743
+2744
+2745
+2746
+2747
+2748
+2749
+2750
+2751
+2752
+2753
+2754
+2755
+2756
+2757
+2758
+2759
+2760
+2761
+2762
+2763
+2764
+2765
+2766
+2767
+2768
+2769
+2770
+2771
+2772
+2773
+2774
+2775
+2776
+2777
+2778
+2779
+2780
+2781
+2782
+2783
+2784
+2785
+2786
+2787
+2788
+2789
+2790
+2791
+2792
+2793
+2794
+2795
+2796
+2797
+2798
+2799
+2800
+2801
+2802
+2803
+2804
+2805
+2806
+2807
+2808
+2809
+2810
+2811
+2812
+2813
+2814
+2815
+2816
+2817
+2818
+2819
+2820
+2821
+2822
+2823
+2824
+2825
+2826
+2827
+2828
+2829
+2830
+2831
+2832
+2833
+2834
+2835
+2836
+2837
+2838
+2839
+2840
+2841
+2842
+2843
+2844
+2845
+2846
+2847
+2848
+2849
+2850
+2851
+2852
+2853
+2854
+2855
+2856
+2857
+2858
+2859
+2860
+2861
+2862
+2863
+2864
+2865
+2866
+2867
+2868
+2869
+2870
+2871
+2872
+2873
+2874
+2875
+2876
+2877
+2878
+2879
+2880
+2881
+2882
+2883
+2884
+2885
+2886
+2887
+2888
+2889
+2890
+2891
+2892
+2893
+2894
+2895
+2896
+2897
+2898
+2899
+2900
+2901
+2902
+2903
+2904
+2905
+2906
+2907
+2908
+2909
+2910
+2911
+2912
+2913
+2914
+2915
+2916
+2917
+2918
+2919
+2920
+2921
+2922
+2923
+2924
+2925
+2926
+2927
+2928
+2929
+2930
+2931
+2932
+2933
+2934
+2935
+2936
+2937
+2938
+2939
+2940
+2941
+2942
+2943
+2944
+2945
+2946
+2947
+2948
+2949
+2950
+2951
+2952
+2953
+2954
+2955
+2956
+2957
+2958
+2959
+2960
+2961
+2962
+2963
+2964
+2965
+2966
+2967
+2968
+2969
+2970
+2971
+2972
+2973
+2974
+2975
+2976
+2977
+2978
+2979
+2980
+2981
+2982
+2983
+2984
+2985
+2986
+2987
+2988
+2989
+2990
+2991
+2992
+2993
+2994
+2995
+2996
+2997
+2998
+2999
+3000
+3001
+3002
+3003
+3004
+3005
+3006
+3007
+3008
+3009
+3010
+3011
+3012
+3013
+3014
+3015
+3016
+3017
+3018
+3019
+3020
+3021
+3022
+3023
+3024
+3025
+3026
+3027
+3028
+3029
+3030
+3031
+3032
+3033
+3034
+3035
+3036
+3037
+3038
+3039
+3040
+3041
+3042
+3043
+3044
+3045
+3046
+3047
+3048
+3049
+3050
+3051
+3052
+3053
+3054
+3055
+3056
+3057
+3058
+3059
+3060
+3061
+3062
+3063
+3064
+3065
+3066
+3067
+3068
+3069
+3070
+3071
+3072
+3073
+3074
+3075
+3076
+3077
+3078
+3079
+3080
+3081
+3082
+3083
+3084
+3085
+3086
+3087
+3088
+3089
+3090
+3091
+3092
+3093
+3094
+3095
+3096
+3097
+3098
+3099
+3100
+3101
+3102
+3103
+3104
+3105
+3106
+3107
+3108
+3109
+3110
+3111
+3112
+3113
+3114
+3115
+3116
+3117
+3118
+3119
+3120
+3121
+3122
+3123
+3124
+3125
+3126
+3127
+3128
+3129
+3130
+3131
+3132
+3133
+3134
+3135
+3136
+3137
+3138
+3139
+3140
+3141
+3142
+3143
+3144
+3145
+3146
+3147
+3148
+3149
+3150
+3151
+3152
+3153
+3154
+3155
+3156
+3157
+3158
+3159
+3160
+3161
+3162
+3163
+3164
+3165
+3166
+3167
+3168
+3169
+3170
+3171
+3172
+3173
+3174
+3175
+3176
+3177
+3178
+3179
+3180
+3181
+3182
+3183
+3184
+3185
+3186
+3187
+3188
+3189
+3190
+3191
+3192
+3193
+3194
+3195
+3196
+3197
+3198
+3199
+3200
+3201
+3202
+3203
+3204
+3205
+3206
+3207
+3208
+3209
+3210
+3211
+3212
+3213
+3214
+3215
+3216
+3217
+3218
+3219
+3220
+3221
+3222
+3223
+3224
+3225
+3226
+3227
+3228
+3229
+3230
+3231
+3232
+3233
+3234
+3235
+3236
+3237
+3238
+3239
+3240
+3241
+3242
+3243
+3244
+3245
+3246
+3247
+3248
+3249
+3250
+3251
+3252
+3253
+3254
+3255
+3256
+3257
+3258
+3259
+3260
+3261
+3262
+3263
+3264
+3265
+3266
+3267
+3268
+3269
+3270
+3271
+3272
+3273
+3274
+3275
+3276
+3277
+3278
+3279
+3280
+3281
+3282
+3283
+3284
+3285
+3286
+3287
+3288
+3289
+3290
+3291
+3292
+3293
+3294
+3295
+3296
+3297
+3298
+3299
+3300
+3301
+3302
+3303
+3304
+3305
+3306
+3307
+3308
+3309
+3310
+3311
+3312
+3313
+3314
+3315
+3316
+3317
+3318
+3319
+3320
+3321
+3322
+3323
+3324
+3325
+3326
+3327
+3328
+3329
+3330
+3331
+3332
+3333
+3334
+3335
+3336
+3337
+3338
+3339
+3340
+3341
+3342
+3343
+3344
+3345
+3346
+3347
+3348
+3349
+3350
+3351
+3352
+3353
+3354
+3355
+3356
+3357
+3358
+3359
+3360
+3361
+3362
+3363
+3364
+3365
+3366
+3367
+3368
+3369
+3370
+3371
+3372
+3373
+3374
+3375
+3376
+3377
+3378
+3379
+3380
+3381
+3382
+3383
+3384
+3385
+3386
+3387
+3388
+3389
+3390
+3391
+3392
+3393
+3394
+3395
+3396
+3397
+3398
+3399
+3400
+3401
+3402
+3403
+3404
+3405
+3406
+3407
+3408
+3409
+3410
+3411
+3412
+3413
+3414
+3415
+3416
+3417
+3418
+3419
+3420
+3421
+3422
+3423
+3424
+3425
+3426
+3427
+3428
+3429
+3430
+3431
+3432
+3433
+3434
+3435
+3436
+3437
+3438
+3439
+3440
+3441
+3442
+3443
+3444
+3445
+3446
+3447
+3448
+3449
+3450
+3451
+3452
+3453
+3454
+3455
+3456
+3457
+3458
+3459
+3460
+3461
+3462
+3463
+3464
+3465
+3466
+3467
+3468
+3469
+3470
+3471
+3472
+3473
+3474
+3475
+3476
+3477
+3478
+3479
+3480
+3481
+3482
+3483
+3484
+3485
+3486
+3487
+3488
+3489
+3490
+3491
+3492
+3493
+3494
+3495
+3496
+3497
+3498
+3499
+3500
+3501
+3502
+3503
+3504
+3505
+3506
+3507
+3508
+3509
+3510
+3511
+3512
+3513
+3514
+3515
+3516
+3517
+3518
+3519
+3520
+3521
+3522
+3523
+3524
+3525
+3526
+3527
+3528
+3529
+3530
+3531
+3532
+3533
+3534
+3535
+3536
+3537
+3538
+3539
+3540
+3541
+3542
+3543
+3544
+3545
+3546
+3547
+3548
+3549
+3550
+3551
+3552
+3553
+3554
+3555
+3556
+3557
+3558
+3559
+3560
+3561
+3562
+3563
+3564
+3565
+3566
+3567
+3568
+3569
+3570
+3571
+3572
+3573
+3574
+3575
+3576
+3577
+3578
+3579
+3580
+3581
+3582
+3583
+3584
+3585
+3586
+3587
+3588
+3589
+3590
+3591
+3592
+3593
+3594
+3595
+3596
+3597
+3598
+3599
+3600
+3601
+3602
+3603
+3604
+3605
+3606
+3607
+3608
+3609
+3610
+3611
+3612
+3613
+3614
+3615
+3616
+3617
+3618
+3619
+3620
+3621
+3622
+3623
+3624
+3625
+3626
+3627
+3628
+3629
+3630
+3631
+3632
+3633
+3634
+3635
+3636
+3637
+3638
+3639
+3640
+3641
+3642
+3643
+3644
+3645
+3646
+3647
+3648
+3649
+3650
+3651
+3652
+3653
+3654
+3655
+3656
+3657
+3658
+3659
+3660
+3661
+3662
+3663
+3664
+3665
+3666
+3667
+3668
+3669
+3670
+3671
+3672
+3673
+3674
+3675
+3676
+3677
+3678
+3679
+3680
+3681
+3682
+3683
+3684
+3685
+3686
+3687
+3688
+3689
+3690
+3691
+3692
+3693
+3694
+3695
+3696
+3697
+3698
+3699
+3700
+3701
+3702
+3703
+3704
+3705
+3706
+3707
+3708
+3709
+3710
+3711
+3712
+3713
+3714
+3715
+3716
+3717
+3718
+3719
+3720
+3721
+3722
+3723
+3724
+3725
+3726
+3727
+3728
+3729
+3730
+3731
+3732
+3733
+3734
+3735
+3736
+3737
+3738
+3739
+3740
+3741
+3742
+3743
+3744
+3745
+3746
+3747
+3748
+3749
+3750
+3751
+3752
+3753
+3754
+3755
+3756
+3757
+3758
+3759
+3760
+3761
+3762
+3763
+3764
+3765
+3766
+3767
+3768
+3769
+3770
+3771
+3772
+3773
+3774
+3775
+3776
+3777
+3778
+3779
+3780
+3781
+3782
+3783
+3784
+3785
+3786
+3787
+3788
+3789
+3790
+3791
+3792
+3793
+3794
+3795
+3796
+3797
+3798
+3799
+3800
+3801
+3802
+3803
+3804
+3805
+3806
+3807
+3808
+3809
+3810
+3811
+3812
+3813
+3814
+3815
+3816
+3817
+3818
+3819
+3820
+3821
+3822
+3823
+3824
+3825
+3826
+3827
+3828
+3829
+3830
+3831
+3832
+3833
+3834
+3835
+3836
+3837
+3838
+3839
+3840
+3841
+3842
+3843
+3844
+3845
+3846
+3847
+3848
+3849
+3850
+3851
+3852
+3853
+3854
+3855
+3856
+3857
+3858
+3859
+3860
+3861
+3862
+3863
+3864
+3865
+3866
+3867
+3868
+3869
+3870
+3871
+3872
+3873
+3874
+3875
+3876
+3877
+3878
+3879
+3880
+3881
+3882
+3883
+3884
+3885
+3886
+3887
+3888
+3889
+3890
+3891
+3892
+3893
+3894
+3895
+3896
+3897
+3898
+3899
+3900
+3901
+3902
+3903
+3904
+3905
+3906
+3907
+3908
+3909
+3910
+3911
+3912
+3913
+3914
+3915
+3916
+3917
+3918
+3919
+3920
+3921
+3922
+3923
+3924
+3925
+3926
+3927
+3928
+3929
+3930
+3931
+3932
+3933
+3934
+3935
+3936
+3937
+3938
+3939
+3940
+3941
+3942
+3943
+3944
+3945
+3946
+3947
+3948
+3949
+3950
+3951
+3952
+3953
+3954
+3955
+3956
+3957
+3958
+3959
+3960
+3961
+3962
+3963
+3964
+3965
+3966
+3967
+3968
+3969
+3970
+3971
+3972
+3973
+3974
+3975
+3976
+3977
+3978
+3979
+3980
+3981
+3982
+3983
+3984
+3985
+3986
+3987
+3988
+3989
+3990
+3991
+3992
+3993
+3994
+3995
+3996
+3997
+3998
+3999
+4000
+4001
+4002
+4003
+4004
+4005
+4006
+4007
+4008
+4009
+4010
+4011
+4012
+4013
+4014
+4015
+4016
+4017
+4018
+4019
+4020
+4021
+4022
+4023
+4024
+4025
+4026
+4027
+4028
+4029
+4030
+4031
+4032
+4033
+4034
+4035
+4036
+4037
+4038
+4039
+4040
+4041
+4042
+4043
+4044
+4045
+4046
+4047
+4048
+4049
+4050
+4051
+4052
+4053
+4054
+4055
+4056
+4057
+4058
+4059
+4060
+4061
+4062
+4063
+4064
+4065
+4066
+4067
+4068
+4069
+4070
+4071
+4072
+4073
+4074
+4075
+4076
+4077
+4078
+4079
+4080
+4081
+4082
+4083
+4084
+4085
+4086
+4087
+4088
+4089
+4090
+4091
+4092
+4093
+4094
+4095
+4096
+4097
+4098
+4099
+4100
+4101
+4102
+4103
+4104
+4105
+4106
+4107
+4108
+4109
+4110
+4111
+4112
+4113
+4114
+4115
+4116
+4117
+4118
+4119
+4120
+4121
+4122
+4123
+4124
+4125
+4126
+4127
+4128
+4129
+4130
+4131
+4132
+4133
+4134
+4135
+4136
+4137
+4138
+4139
+4140
+4141
+4142
+4143
+4144
+4145
+4146
+4147
+4148
+4149
+4150
+4151
+4152
+4153
+4154
+4155
+4156
+4157
+4158
+4159
+4160
+4161
+4162
+4163
+4164
+4165
+4166
+4167
+4168
+4169
+4170
+4171
+4172
+4173
+4174
+4175
+4176
+4177
+4178
+4179
+4180
+4181
+4182
+4183
+4184
+4185
+4186
+4187
+4188
+4189
+4190
+4191
+4192
+4193
+4194
+4195
+4196
+4197
+4198
+4199
+4200
+4201
+4202
+4203
+4204
+4205
+4206
+4207
+4208
+4209
+4210
+4211
+4212
+4213
+4214
+4215
+4216
+4217
+4218
+4219
+4220
+4221
+4222
+4223
+4224
+4225
+4226
+4227
+4228
+4229
+4230
+4231
+4232
+4233
+4234
+4235
+4236
+4237
+4238
+4239
+4240
+4241
+4242
+4243
+4244
+4245
+4246
+4247
+4248
+4249
+4250
+4251
+4252
+4253
+4254
+4255
+4256
+4257
+4258
+4259
+4260
+4261
+4262
+4263
+4264
+4265
+4266
+4267
+4268
+4269
+4270
+4271
+4272
+4273
+4274
+4275
+4276
+4277
+4278
+4279
+4280
+4281
+4282
+4283
+4284
+4285
+4286
+4287
+4288
+4289
+4290
+4291
+4292
+4293
+4294
+4295
+4296
+4297
+4298
+4299
+4300
+4301
+4302
+4303
+4304
+4305
+4306
+4307
+4308
+4309
+4310
+4311
+4312
+4313
+4314
+4315
+4316
+4317
+4318
+4319
+4320
+4321
+4322
+4323
+4324
+4325
+4326
+4327
+4328
+4329
+4330
+4331
+4332
+4333
+4334
+4335
+4336
+4337
+4338
+4339
+4340
+4341
+4342
+4343
+4344
+4345
+4346
+4347
+4348
+4349
+4350
+4351
+4352
+4353
+4354
+4355
+4356
+4357
+4358
+4359
+4360
+4361
+4362
+4363
+4364
+4365
+4366
+4367
+4368
+4369
+4370
+4371
+4372
+4373
+4374
+4375
+4376
+4377
+4378
+4379
+4380
+4381
+4382
+4383
+4384
+4385
+4386
+4387
+4388
+4389
+4390
+4391
+4392
+4393
+4394
+4395
+4396
+4397
+4398
+4399
+4400
+4401
+4402
+4403
+4404
+4405
+4406
+4407
+4408
+4409
+4410
+4411
+4412
+4413
+4414
+4415
+4416
+4417
+4418
+4419
+4420
+4421
+4422
+4423
+4424
+4425
+4426
+4427
+4428
+4429
+4430
+4431
+4432
+4433
+4434
+4435
+4436
+4437
+4438
+4439
+4440
+4441
+4442
+4443
+4444
+4445
+4446
+4447
+4448
+4449
+4450
+4451
+4452
+4453
+4454
+4455
+4456
+4457
+4458
+4459
+4460
+4461
+4462
+4463
+4464
+4465
+4466
+4467
+4468
+4469
+4470
+4471
+4472
+4473
+4474
+4475
+4476
+4477
+4478
+4479
+4480
+4481
+4482
+4483
+4484
+4485
+4486
+4487
+4488
+4489
+4490
+4491
+4492
+4493
+4494
+4495
+4496
+4497
+4498
+4499
+4500
+4501
+4502
+4503
+4504
+4505
+4506
+4507
+4508
+4509
+4510
+4511
+4512
+4513
+4514
+4515
+4516
+4517
+4518
+4519
+4520
+4521
+4522
+4523
+4524
+4525
+4526
+4527
+4528
+4529
+4530
+4531
+4532
+4533
+4534
+4535
+4536
+4537
+4538
+4539
+4540
+4541
+4542
+4543
+4544
+4545
+4546
+4547
+4548
+4549
+4550
+4551
+4552
+4553
+4554
+4555
+4556
+4557
+4558
+4559
+4560
+4561
+4562
+4563
+4564
+4565
+4566
+4567
+4568
+4569
+4570
+4571
+4572
+4573
+4574
+4575
+4576
+4577
+4578
+4579
+4580
+4581
+4582
+4583
+4584
+4585
+4586
+4587
+4588
+4589
+4590
+4591
+4592
+4593
+4594
+4595
+4596
+4597
+4598
+4599
+4600
+4601
+4602
+4603
+4604
+4605
+4606
+4607
+4608
+4609
+4610
+4611
+4612
+4613
+4614
+4615
+4616
+4617
+4618
+4619
+4620
+4621
+4622
+4623
+4624
+4625
+4626
+4627
+4628
+4629
+4630
+4631
+4632
+4633
+4634
+4635
+4636
+4637
+4638
+4639
+4640
+4641
+4642
+4643
+4644
+4645
+4646
+4647
+4648
+4649
+4650
+4651
+4652
+4653
+4654
+4655
+4656
+4657
+4658
+4659
+4660
+4661
+4662
+4663
+4664
+4665
+4666
+4667
+4668
+4669
+4670
+4671
+4672
+4673
+4674
+4675
+4676
+4677
+4678
+4679
+4680
+4681
+4682
+4683
+4684
+4685
+4686
+4687
+4688
+4689
+4690
+4691
+4692
+4693
+4694
+4695
+4696
+4697
+4698
+4699
+4700
+4701
+4702
+4703
+4704
+4705
+4706
+4707
+4708
+4709
+4710
+4711
+4712
+4713
+4714
+4715
+4716
+4717
+4718
+4719
+4720
+4721
+4722
+4723
+4724
+4725
+4726
+4727
+4728
+4729
+4730
+4731
+4732
+4733
+4734
+4735
+4736
+4737
+4738
+4739
+4740
+4741
+4742
+4743
+4744
+4745
+4746
+4747
+4748
+4749
+4750
+4751
+4752
+4753
+4754
+4755
+4756
+4757
+4758
+4759
+4760
+4761
+4762
+4763
+4764
+4765
+4766
+4767
+4768
+4769
+4770
+4771
+4772
+4773
+4774
+4775
+4776
+4777
+4778
+4779
+4780
+4781
+4782
+4783
+4784
+4785
+4786
+4787
+4788
+4789
+4790
+4791
+4792
+4793
+4794
+4795
+4796
+4797
+4798
+4799
+4800
+4801
+4802
+4803
+4804
+4805
+4806
+4807
+4808
+4809
+4810
+4811
+4812
+4813
+4814
+4815
+4816
+4817
+4818
+4819
+4820
+4821
+4822
+4823
+4824
+4825
+4826
+4827
+4828
+4829
+4830
+4831
+4832
+4833
+4834
+4835
+4836
+4837
+4838
+4839
+4840
+4841
+4842
+4843
+4844
+4845
+4846
+4847
+4848
+4849
+4850
+4851
+4852
+4853
+4854
+4855
+4856
+4857
+4858
+4859
+4860
+4861
+4862
+4863
+4864
+4865
+4866
+4867
+4868
+4869
+4870
+4871
+4872
+4873
+4874
+4875
+4876
+4877
+4878
+4879
+4880
+4881
+4882
+4883
+4884
+4885
+4886
+4887
+4888
+4889
+4890
+4891
+4892
+4893
+4894
+4895
+4896
+4897
+4898
+4899
+4900
+4901
+4902
+4903
+4904
+4905
+4906
+4907
+4908
+4909
+4910
+4911
+4912
+4913
+4914
+4915
+4916
+4917
+4918
+4919
+4920
+4921
+4922
+4923
+4924
+4925
+4926
+4927
+4928
+4929
+4930
+4931
+4932
+4933
+4934
+4935
+4936
+4937
+4938
+4939
+4940
+4941
+4942
+4943
+4944
+4945
+4946
+4947
+4948
+4949
+4950
+4951
+4952
+4953
+4954
+4955
+4956
+4957
+4958
+4959
+4960
+4961
+4962
+4963
+4964
+4965
+4966
+4967
+4968
+4969
+4970
+4971
+4972
+4973
+4974
+4975
+4976
+4977
+4978
+4979
+4980
+4981
+4982
+4983
+4984
+4985
+4986
+4987
+4988
+4989
+4990
+4991
+4992
+4993
+4994
+4995
+4996
+4997
+4998
+4999
+Stopping
Index: tests/concurrency/waitfor/.expect/dtor.txt
===================================================================
--- tests/concurrency/waitfor/.expect/dtor.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/.expect/dtor.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+Starting
+Stopping
Index: tests/concurrency/waitfor/.expect/else.txt
===================================================================
--- tests/concurrency/waitfor/.expect/else.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/.expect/else.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,9 @@
+Starting
+Step 0
+else called
+Step 1
+else called
+Step 2
+else called
+Step 3
+Done
Index: tests/concurrency/waitfor/.expect/parse.txt
===================================================================
--- tests/concurrency/waitfor/.expect/parse.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/.expect/parse.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,1 @@
+concurrency/waitfor/parse.cfa:255:25: warning: Compiled
Index: tests/concurrency/waitfor/.expect/recurse.txt
===================================================================
--- tests/concurrency/waitfor/.expect/recurse.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/.expect/recurse.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5002 @@
+Starting
+0 1st 2nd 3rd Last 3rd 2nd 1st
+1 1st 2nd 3rd Last 3rd 2nd 1st
+2 1st 2nd 3rd Last 3rd 2nd 1st
+3 1st 2nd 3rd Last 3rd 2nd 1st
+4 1st 2nd 3rd Last 3rd 2nd 1st
+5 1st 2nd 3rd Last 3rd 2nd 1st
+6 1st 2nd 3rd Last 3rd 2nd 1st
+7 1st 2nd 3rd Last 3rd 2nd 1st
+8 1st 2nd 3rd Last 3rd 2nd 1st
+9 1st 2nd 3rd Last 3rd 2nd 1st
+10 1st 2nd 3rd Last 3rd 2nd 1st
+11 1st 2nd 3rd Last 3rd 2nd 1st
+12 1st 2nd 3rd Last 3rd 2nd 1st
+13 1st 2nd 3rd Last 3rd 2nd 1st
+14 1st 2nd 3rd Last 3rd 2nd 1st
+15 1st 2nd 3rd Last 3rd 2nd 1st
+16 1st 2nd 3rd Last 3rd 2nd 1st
+17 1st 2nd 3rd Last 3rd 2nd 1st
+18 1st 2nd 3rd Last 3rd 2nd 1st
+19 1st 2nd 3rd Last 3rd 2nd 1st
+20 1st 2nd 3rd Last 3rd 2nd 1st
+21 1st 2nd 3rd Last 3rd 2nd 1st
+22 1st 2nd 3rd Last 3rd 2nd 1st
+23 1st 2nd 3rd Last 3rd 2nd 1st
+24 1st 2nd 3rd Last 3rd 2nd 1st
+25 1st 2nd 3rd Last 3rd 2nd 1st
+26 1st 2nd 3rd Last 3rd 2nd 1st
+27 1st 2nd 3rd Last 3rd 2nd 1st
+28 1st 2nd 3rd Last 3rd 2nd 1st
+29 1st 2nd 3rd Last 3rd 2nd 1st
+30 1st 2nd 3rd Last 3rd 2nd 1st
+31 1st 2nd 3rd Last 3rd 2nd 1st
+32 1st 2nd 3rd Last 3rd 2nd 1st
+33 1st 2nd 3rd Last 3rd 2nd 1st
+34 1st 2nd 3rd Last 3rd 2nd 1st
+35 1st 2nd 3rd Last 3rd 2nd 1st
+36 1st 2nd 3rd Last 3rd 2nd 1st
+37 1st 2nd 3rd Last 3rd 2nd 1st
+38 1st 2nd 3rd Last 3rd 2nd 1st
+39 1st 2nd 3rd Last 3rd 2nd 1st
+40 1st 2nd 3rd Last 3rd 2nd 1st
+41 1st 2nd 3rd Last 3rd 2nd 1st
+42 1st 2nd 3rd Last 3rd 2nd 1st
+43 1st 2nd 3rd Last 3rd 2nd 1st
+44 1st 2nd 3rd Last 3rd 2nd 1st
+45 1st 2nd 3rd Last 3rd 2nd 1st
+46 1st 2nd 3rd Last 3rd 2nd 1st
+47 1st 2nd 3rd Last 3rd 2nd 1st
+48 1st 2nd 3rd Last 3rd 2nd 1st
+49 1st 2nd 3rd Last 3rd 2nd 1st
+50 1st 2nd 3rd Last 3rd 2nd 1st
+51 1st 2nd 3rd Last 3rd 2nd 1st
+52 1st 2nd 3rd Last 3rd 2nd 1st
+53 1st 2nd 3rd Last 3rd 2nd 1st
+54 1st 2nd 3rd Last 3rd 2nd 1st
+55 1st 2nd 3rd Last 3rd 2nd 1st
+56 1st 2nd 3rd Last 3rd 2nd 1st
+57 1st 2nd 3rd Last 3rd 2nd 1st
+58 1st 2nd 3rd Last 3rd 2nd 1st
+59 1st 2nd 3rd Last 3rd 2nd 1st
+60 1st 2nd 3rd Last 3rd 2nd 1st
+61 1st 2nd 3rd Last 3rd 2nd 1st
+62 1st 2nd 3rd Last 3rd 2nd 1st
+63 1st 2nd 3rd Last 3rd 2nd 1st
+64 1st 2nd 3rd Last 3rd 2nd 1st
+65 1st 2nd 3rd Last 3rd 2nd 1st
+66 1st 2nd 3rd Last 3rd 2nd 1st
+67 1st 2nd 3rd Last 3rd 2nd 1st
+68 1st 2nd 3rd Last 3rd 2nd 1st
+69 1st 2nd 3rd Last 3rd 2nd 1st
+70 1st 2nd 3rd Last 3rd 2nd 1st
+71 1st 2nd 3rd Last 3rd 2nd 1st
+72 1st 2nd 3rd Last 3rd 2nd 1st
+73 1st 2nd 3rd Last 3rd 2nd 1st
+74 1st 2nd 3rd Last 3rd 2nd 1st
+75 1st 2nd 3rd Last 3rd 2nd 1st
+76 1st 2nd 3rd Last 3rd 2nd 1st
+77 1st 2nd 3rd Last 3rd 2nd 1st
+78 1st 2nd 3rd Last 3rd 2nd 1st
+79 1st 2nd 3rd Last 3rd 2nd 1st
+80 1st 2nd 3rd Last 3rd 2nd 1st
+81 1st 2nd 3rd Last 3rd 2nd 1st
+82 1st 2nd 3rd Last 3rd 2nd 1st
+83 1st 2nd 3rd Last 3rd 2nd 1st
+84 1st 2nd 3rd Last 3rd 2nd 1st
+85 1st 2nd 3rd Last 3rd 2nd 1st
+86 1st 2nd 3rd Last 3rd 2nd 1st
+87 1st 2nd 3rd Last 3rd 2nd 1st
+88 1st 2nd 3rd Last 3rd 2nd 1st
+89 1st 2nd 3rd Last 3rd 2nd 1st
+90 1st 2nd 3rd Last 3rd 2nd 1st
+91 1st 2nd 3rd Last 3rd 2nd 1st
+92 1st 2nd 3rd Last 3rd 2nd 1st
+93 1st 2nd 3rd Last 3rd 2nd 1st
+94 1st 2nd 3rd Last 3rd 2nd 1st
+95 1st 2nd 3rd Last 3rd 2nd 1st
+96 1st 2nd 3rd Last 3rd 2nd 1st
+97 1st 2nd 3rd Last 3rd 2nd 1st
+98 1st 2nd 3rd Last 3rd 2nd 1st
+99 1st 2nd 3rd Last 3rd 2nd 1st
+100 1st 2nd 3rd Last 3rd 2nd 1st
+101 1st 2nd 3rd Last 3rd 2nd 1st
+102 1st 2nd 3rd Last 3rd 2nd 1st
+103 1st 2nd 3rd Last 3rd 2nd 1st
+104 1st 2nd 3rd Last 3rd 2nd 1st
+105 1st 2nd 3rd Last 3rd 2nd 1st
+106 1st 2nd 3rd Last 3rd 2nd 1st
+107 1st 2nd 3rd Last 3rd 2nd 1st
+108 1st 2nd 3rd Last 3rd 2nd 1st
+109 1st 2nd 3rd Last 3rd 2nd 1st
+110 1st 2nd 3rd Last 3rd 2nd 1st
+111 1st 2nd 3rd Last 3rd 2nd 1st
+112 1st 2nd 3rd Last 3rd 2nd 1st
+113 1st 2nd 3rd Last 3rd 2nd 1st
+114 1st 2nd 3rd Last 3rd 2nd 1st
+115 1st 2nd 3rd Last 3rd 2nd 1st
+116 1st 2nd 3rd Last 3rd 2nd 1st
+117 1st 2nd 3rd Last 3rd 2nd 1st
+118 1st 2nd 3rd Last 3rd 2nd 1st
+119 1st 2nd 3rd Last 3rd 2nd 1st
+120 1st 2nd 3rd Last 3rd 2nd 1st
+121 1st 2nd 3rd Last 3rd 2nd 1st
+122 1st 2nd 3rd Last 3rd 2nd 1st
+123 1st 2nd 3rd Last 3rd 2nd 1st
+124 1st 2nd 3rd Last 3rd 2nd 1st
+125 1st 2nd 3rd Last 3rd 2nd 1st
+126 1st 2nd 3rd Last 3rd 2nd 1st
+127 1st 2nd 3rd Last 3rd 2nd 1st
+128 1st 2nd 3rd Last 3rd 2nd 1st
+129 1st 2nd 3rd Last 3rd 2nd 1st
+130 1st 2nd 3rd Last 3rd 2nd 1st
+131 1st 2nd 3rd Last 3rd 2nd 1st
+132 1st 2nd 3rd Last 3rd 2nd 1st
+133 1st 2nd 3rd Last 3rd 2nd 1st
+134 1st 2nd 3rd Last 3rd 2nd 1st
+135 1st 2nd 3rd Last 3rd 2nd 1st
+136 1st 2nd 3rd Last 3rd 2nd 1st
+137 1st 2nd 3rd Last 3rd 2nd 1st
+138 1st 2nd 3rd Last 3rd 2nd 1st
+139 1st 2nd 3rd Last 3rd 2nd 1st
+140 1st 2nd 3rd Last 3rd 2nd 1st
+141 1st 2nd 3rd Last 3rd 2nd 1st
+142 1st 2nd 3rd Last 3rd 2nd 1st
+143 1st 2nd 3rd Last 3rd 2nd 1st
+144 1st 2nd 3rd Last 3rd 2nd 1st
+145 1st 2nd 3rd Last 3rd 2nd 1st
+146 1st 2nd 3rd Last 3rd 2nd 1st
+147 1st 2nd 3rd Last 3rd 2nd 1st
+148 1st 2nd 3rd Last 3rd 2nd 1st
+149 1st 2nd 3rd Last 3rd 2nd 1st
+150 1st 2nd 3rd Last 3rd 2nd 1st
+151 1st 2nd 3rd Last 3rd 2nd 1st
+152 1st 2nd 3rd Last 3rd 2nd 1st
+153 1st 2nd 3rd Last 3rd 2nd 1st
+154 1st 2nd 3rd Last 3rd 2nd 1st
+155 1st 2nd 3rd Last 3rd 2nd 1st
+156 1st 2nd 3rd Last 3rd 2nd 1st
+157 1st 2nd 3rd Last 3rd 2nd 1st
+158 1st 2nd 3rd Last 3rd 2nd 1st
+159 1st 2nd 3rd Last 3rd 2nd 1st
+160 1st 2nd 3rd Last 3rd 2nd 1st
+161 1st 2nd 3rd Last 3rd 2nd 1st
+162 1st 2nd 3rd Last 3rd 2nd 1st
+163 1st 2nd 3rd Last 3rd 2nd 1st
+164 1st 2nd 3rd Last 3rd 2nd 1st
+165 1st 2nd 3rd Last 3rd 2nd 1st
+166 1st 2nd 3rd Last 3rd 2nd 1st
+167 1st 2nd 3rd Last 3rd 2nd 1st
+168 1st 2nd 3rd Last 3rd 2nd 1st
+169 1st 2nd 3rd Last 3rd 2nd 1st
+170 1st 2nd 3rd Last 3rd 2nd 1st
+171 1st 2nd 3rd Last 3rd 2nd 1st
+172 1st 2nd 3rd Last 3rd 2nd 1st
+173 1st 2nd 3rd Last 3rd 2nd 1st
+174 1st 2nd 3rd Last 3rd 2nd 1st
+175 1st 2nd 3rd Last 3rd 2nd 1st
+176 1st 2nd 3rd Last 3rd 2nd 1st
+177 1st 2nd 3rd Last 3rd 2nd 1st
+178 1st 2nd 3rd Last 3rd 2nd 1st
+179 1st 2nd 3rd Last 3rd 2nd 1st
+180 1st 2nd 3rd Last 3rd 2nd 1st
+181 1st 2nd 3rd Last 3rd 2nd 1st
+182 1st 2nd 3rd Last 3rd 2nd 1st
+183 1st 2nd 3rd Last 3rd 2nd 1st
+184 1st 2nd 3rd Last 3rd 2nd 1st
+185 1st 2nd 3rd Last 3rd 2nd 1st
+186 1st 2nd 3rd Last 3rd 2nd 1st
+187 1st 2nd 3rd Last 3rd 2nd 1st
+188 1st 2nd 3rd Last 3rd 2nd 1st
+189 1st 2nd 3rd Last 3rd 2nd 1st
+190 1st 2nd 3rd Last 3rd 2nd 1st
+191 1st 2nd 3rd Last 3rd 2nd 1st
+192 1st 2nd 3rd Last 3rd 2nd 1st
+193 1st 2nd 3rd Last 3rd 2nd 1st
+194 1st 2nd 3rd Last 3rd 2nd 1st
+195 1st 2nd 3rd Last 3rd 2nd 1st
+196 1st 2nd 3rd Last 3rd 2nd 1st
+197 1st 2nd 3rd Last 3rd 2nd 1st
+198 1st 2nd 3rd Last 3rd 2nd 1st
+199 1st 2nd 3rd Last 3rd 2nd 1st
+200 1st 2nd 3rd Last 3rd 2nd 1st
+201 1st 2nd 3rd Last 3rd 2nd 1st
+202 1st 2nd 3rd Last 3rd 2nd 1st
+203 1st 2nd 3rd Last 3rd 2nd 1st
+204 1st 2nd 3rd Last 3rd 2nd 1st
+205 1st 2nd 3rd Last 3rd 2nd 1st
+206 1st 2nd 3rd Last 3rd 2nd 1st
+207 1st 2nd 3rd Last 3rd 2nd 1st
+208 1st 2nd 3rd Last 3rd 2nd 1st
+209 1st 2nd 3rd Last 3rd 2nd 1st
+210 1st 2nd 3rd Last 3rd 2nd 1st
+211 1st 2nd 3rd Last 3rd 2nd 1st
+212 1st 2nd 3rd Last 3rd 2nd 1st
+213 1st 2nd 3rd Last 3rd 2nd 1st
+214 1st 2nd 3rd Last 3rd 2nd 1st
+215 1st 2nd 3rd Last 3rd 2nd 1st
+216 1st 2nd 3rd Last 3rd 2nd 1st
+217 1st 2nd 3rd Last 3rd 2nd 1st
+218 1st 2nd 3rd Last 3rd 2nd 1st
+219 1st 2nd 3rd Last 3rd 2nd 1st
+220 1st 2nd 3rd Last 3rd 2nd 1st
+221 1st 2nd 3rd Last 3rd 2nd 1st
+222 1st 2nd 3rd Last 3rd 2nd 1st
+223 1st 2nd 3rd Last 3rd 2nd 1st
+224 1st 2nd 3rd Last 3rd 2nd 1st
+225 1st 2nd 3rd Last 3rd 2nd 1st
+226 1st 2nd 3rd Last 3rd 2nd 1st
+227 1st 2nd 3rd Last 3rd 2nd 1st
+228 1st 2nd 3rd Last 3rd 2nd 1st
+229 1st 2nd 3rd Last 3rd 2nd 1st
+230 1st 2nd 3rd Last 3rd 2nd 1st
+231 1st 2nd 3rd Last 3rd 2nd 1st
+232 1st 2nd 3rd Last 3rd 2nd 1st
+233 1st 2nd 3rd Last 3rd 2nd 1st
+234 1st 2nd 3rd Last 3rd 2nd 1st
+235 1st 2nd 3rd Last 3rd 2nd 1st
+236 1st 2nd 3rd Last 3rd 2nd 1st
+237 1st 2nd 3rd Last 3rd 2nd 1st
+238 1st 2nd 3rd Last 3rd 2nd 1st
+239 1st 2nd 3rd Last 3rd 2nd 1st
+240 1st 2nd 3rd Last 3rd 2nd 1st
+241 1st 2nd 3rd Last 3rd 2nd 1st
+242 1st 2nd 3rd Last 3rd 2nd 1st
+243 1st 2nd 3rd Last 3rd 2nd 1st
+244 1st 2nd 3rd Last 3rd 2nd 1st
+245 1st 2nd 3rd Last 3rd 2nd 1st
+246 1st 2nd 3rd Last 3rd 2nd 1st
+247 1st 2nd 3rd Last 3rd 2nd 1st
+248 1st 2nd 3rd Last 3rd 2nd 1st
+249 1st 2nd 3rd Last 3rd 2nd 1st
+250 1st 2nd 3rd Last 3rd 2nd 1st
+251 1st 2nd 3rd Last 3rd 2nd 1st
+252 1st 2nd 3rd Last 3rd 2nd 1st
+253 1st 2nd 3rd Last 3rd 2nd 1st
+254 1st 2nd 3rd Last 3rd 2nd 1st
+255 1st 2nd 3rd Last 3rd 2nd 1st
+256 1st 2nd 3rd Last 3rd 2nd 1st
+257 1st 2nd 3rd Last 3rd 2nd 1st
+258 1st 2nd 3rd Last 3rd 2nd 1st
+259 1st 2nd 3rd Last 3rd 2nd 1st
+260 1st 2nd 3rd Last 3rd 2nd 1st
+261 1st 2nd 3rd Last 3rd 2nd 1st
+262 1st 2nd 3rd Last 3rd 2nd 1st
+263 1st 2nd 3rd Last 3rd 2nd 1st
+264 1st 2nd 3rd Last 3rd 2nd 1st
+265 1st 2nd 3rd Last 3rd 2nd 1st
+266 1st 2nd 3rd Last 3rd 2nd 1st
+267 1st 2nd 3rd Last 3rd 2nd 1st
+268 1st 2nd 3rd Last 3rd 2nd 1st
+269 1st 2nd 3rd Last 3rd 2nd 1st
+270 1st 2nd 3rd Last 3rd 2nd 1st
+271 1st 2nd 3rd Last 3rd 2nd 1st
+272 1st 2nd 3rd Last 3rd 2nd 1st
+273 1st 2nd 3rd Last 3rd 2nd 1st
+274 1st 2nd 3rd Last 3rd 2nd 1st
+275 1st 2nd 3rd Last 3rd 2nd 1st
+276 1st 2nd 3rd Last 3rd 2nd 1st
+277 1st 2nd 3rd Last 3rd 2nd 1st
+278 1st 2nd 3rd Last 3rd 2nd 1st
+279 1st 2nd 3rd Last 3rd 2nd 1st
+280 1st 2nd 3rd Last 3rd 2nd 1st
+281 1st 2nd 3rd Last 3rd 2nd 1st
+282 1st 2nd 3rd Last 3rd 2nd 1st
+283 1st 2nd 3rd Last 3rd 2nd 1st
+284 1st 2nd 3rd Last 3rd 2nd 1st
+285 1st 2nd 3rd Last 3rd 2nd 1st
+286 1st 2nd 3rd Last 3rd 2nd 1st
+287 1st 2nd 3rd Last 3rd 2nd 1st
+288 1st 2nd 3rd Last 3rd 2nd 1st
+289 1st 2nd 3rd Last 3rd 2nd 1st
+290 1st 2nd 3rd Last 3rd 2nd 1st
+291 1st 2nd 3rd Last 3rd 2nd 1st
+292 1st 2nd 3rd Last 3rd 2nd 1st
+293 1st 2nd 3rd Last 3rd 2nd 1st
+294 1st 2nd 3rd Last 3rd 2nd 1st
+295 1st 2nd 3rd Last 3rd 2nd 1st
+296 1st 2nd 3rd Last 3rd 2nd 1st
+297 1st 2nd 3rd Last 3rd 2nd 1st
+298 1st 2nd 3rd Last 3rd 2nd 1st
+299 1st 2nd 3rd Last 3rd 2nd 1st
+300 1st 2nd 3rd Last 3rd 2nd 1st
+301 1st 2nd 3rd Last 3rd 2nd 1st
+302 1st 2nd 3rd Last 3rd 2nd 1st
+303 1st 2nd 3rd Last 3rd 2nd 1st
+304 1st 2nd 3rd Last 3rd 2nd 1st
+305 1st 2nd 3rd Last 3rd 2nd 1st
+306 1st 2nd 3rd Last 3rd 2nd 1st
+307 1st 2nd 3rd Last 3rd 2nd 1st
+308 1st 2nd 3rd Last 3rd 2nd 1st
+309 1st 2nd 3rd Last 3rd 2nd 1st
+310 1st 2nd 3rd Last 3rd 2nd 1st
+311 1st 2nd 3rd Last 3rd 2nd 1st
+312 1st 2nd 3rd Last 3rd 2nd 1st
+313 1st 2nd 3rd Last 3rd 2nd 1st
+314 1st 2nd 3rd Last 3rd 2nd 1st
+315 1st 2nd 3rd Last 3rd 2nd 1st
+316 1st 2nd 3rd Last 3rd 2nd 1st
+317 1st 2nd 3rd Last 3rd 2nd 1st
+318 1st 2nd 3rd Last 3rd 2nd 1st
+319 1st 2nd 3rd Last 3rd 2nd 1st
+320 1st 2nd 3rd Last 3rd 2nd 1st
+321 1st 2nd 3rd Last 3rd 2nd 1st
+322 1st 2nd 3rd Last 3rd 2nd 1st
+323 1st 2nd 3rd Last 3rd 2nd 1st
+324 1st 2nd 3rd Last 3rd 2nd 1st
+325 1st 2nd 3rd Last 3rd 2nd 1st
+326 1st 2nd 3rd Last 3rd 2nd 1st
+327 1st 2nd 3rd Last 3rd 2nd 1st
+328 1st 2nd 3rd Last 3rd 2nd 1st
+329 1st 2nd 3rd Last 3rd 2nd 1st
+330 1st 2nd 3rd Last 3rd 2nd 1st
+331 1st 2nd 3rd Last 3rd 2nd 1st
+332 1st 2nd 3rd Last 3rd 2nd 1st
+333 1st 2nd 3rd Last 3rd 2nd 1st
+334 1st 2nd 3rd Last 3rd 2nd 1st
+335 1st 2nd 3rd Last 3rd 2nd 1st
+336 1st 2nd 3rd Last 3rd 2nd 1st
+337 1st 2nd 3rd Last 3rd 2nd 1st
+338 1st 2nd 3rd Last 3rd 2nd 1st
+339 1st 2nd 3rd Last 3rd 2nd 1st
+340 1st 2nd 3rd Last 3rd 2nd 1st
+341 1st 2nd 3rd Last 3rd 2nd 1st
+342 1st 2nd 3rd Last 3rd 2nd 1st
+343 1st 2nd 3rd Last 3rd 2nd 1st
+344 1st 2nd 3rd Last 3rd 2nd 1st
+345 1st 2nd 3rd Last 3rd 2nd 1st
+346 1st 2nd 3rd Last 3rd 2nd 1st
+347 1st 2nd 3rd Last 3rd 2nd 1st
+348 1st 2nd 3rd Last 3rd 2nd 1st
+349 1st 2nd 3rd Last 3rd 2nd 1st
+350 1st 2nd 3rd Last 3rd 2nd 1st
+351 1st 2nd 3rd Last 3rd 2nd 1st
+352 1st 2nd 3rd Last 3rd 2nd 1st
+353 1st 2nd 3rd Last 3rd 2nd 1st
+354 1st 2nd 3rd Last 3rd 2nd 1st
+355 1st 2nd 3rd Last 3rd 2nd 1st
+356 1st 2nd 3rd Last 3rd 2nd 1st
+357 1st 2nd 3rd Last 3rd 2nd 1st
+358 1st 2nd 3rd Last 3rd 2nd 1st
+359 1st 2nd 3rd Last 3rd 2nd 1st
+360 1st 2nd 3rd Last 3rd 2nd 1st
+361 1st 2nd 3rd Last 3rd 2nd 1st
+362 1st 2nd 3rd Last 3rd 2nd 1st
+363 1st 2nd 3rd Last 3rd 2nd 1st
+364 1st 2nd 3rd Last 3rd 2nd 1st
+365 1st 2nd 3rd Last 3rd 2nd 1st
+366 1st 2nd 3rd Last 3rd 2nd 1st
+367 1st 2nd 3rd Last 3rd 2nd 1st
+368 1st 2nd 3rd Last 3rd 2nd 1st
+369 1st 2nd 3rd Last 3rd 2nd 1st
+370 1st 2nd 3rd Last 3rd 2nd 1st
+371 1st 2nd 3rd Last 3rd 2nd 1st
+372 1st 2nd 3rd Last 3rd 2nd 1st
+373 1st 2nd 3rd Last 3rd 2nd 1st
+374 1st 2nd 3rd Last 3rd 2nd 1st
+375 1st 2nd 3rd Last 3rd 2nd 1st
+376 1st 2nd 3rd Last 3rd 2nd 1st
+377 1st 2nd 3rd Last 3rd 2nd 1st
+378 1st 2nd 3rd Last 3rd 2nd 1st
+379 1st 2nd 3rd Last 3rd 2nd 1st
+380 1st 2nd 3rd Last 3rd 2nd 1st
+381 1st 2nd 3rd Last 3rd 2nd 1st
+382 1st 2nd 3rd Last 3rd 2nd 1st
+383 1st 2nd 3rd Last 3rd 2nd 1st
+384 1st 2nd 3rd Last 3rd 2nd 1st
+385 1st 2nd 3rd Last 3rd 2nd 1st
+386 1st 2nd 3rd Last 3rd 2nd 1st
+387 1st 2nd 3rd Last 3rd 2nd 1st
+388 1st 2nd 3rd Last 3rd 2nd 1st
+389 1st 2nd 3rd Last 3rd 2nd 1st
+390 1st 2nd 3rd Last 3rd 2nd 1st
+391 1st 2nd 3rd Last 3rd 2nd 1st
+392 1st 2nd 3rd Last 3rd 2nd 1st
+393 1st 2nd 3rd Last 3rd 2nd 1st
+394 1st 2nd 3rd Last 3rd 2nd 1st
+395 1st 2nd 3rd Last 3rd 2nd 1st
+396 1st 2nd 3rd Last 3rd 2nd 1st
+397 1st 2nd 3rd Last 3rd 2nd 1st
+398 1st 2nd 3rd Last 3rd 2nd 1st
+399 1st 2nd 3rd Last 3rd 2nd 1st
+400 1st 2nd 3rd Last 3rd 2nd 1st
+401 1st 2nd 3rd Last 3rd 2nd 1st
+402 1st 2nd 3rd Last 3rd 2nd 1st
+403 1st 2nd 3rd Last 3rd 2nd 1st
+404 1st 2nd 3rd Last 3rd 2nd 1st
+405 1st 2nd 3rd Last 3rd 2nd 1st
+406 1st 2nd 3rd Last 3rd 2nd 1st
+407 1st 2nd 3rd Last 3rd 2nd 1st
+408 1st 2nd 3rd Last 3rd 2nd 1st
+409 1st 2nd 3rd Last 3rd 2nd 1st
+410 1st 2nd 3rd Last 3rd 2nd 1st
+411 1st 2nd 3rd Last 3rd 2nd 1st
+412 1st 2nd 3rd Last 3rd 2nd 1st
+413 1st 2nd 3rd Last 3rd 2nd 1st
+414 1st 2nd 3rd Last 3rd 2nd 1st
+415 1st 2nd 3rd Last 3rd 2nd 1st
+416 1st 2nd 3rd Last 3rd 2nd 1st
+417 1st 2nd 3rd Last 3rd 2nd 1st
+418 1st 2nd 3rd Last 3rd 2nd 1st
+419 1st 2nd 3rd Last 3rd 2nd 1st
+420 1st 2nd 3rd Last 3rd 2nd 1st
+421 1st 2nd 3rd Last 3rd 2nd 1st
+422 1st 2nd 3rd Last 3rd 2nd 1st
+423 1st 2nd 3rd Last 3rd 2nd 1st
+424 1st 2nd 3rd Last 3rd 2nd 1st
+425 1st 2nd 3rd Last 3rd 2nd 1st
+426 1st 2nd 3rd Last 3rd 2nd 1st
+427 1st 2nd 3rd Last 3rd 2nd 1st
+428 1st 2nd 3rd Last 3rd 2nd 1st
+429 1st 2nd 3rd Last 3rd 2nd 1st
+430 1st 2nd 3rd Last 3rd 2nd 1st
+431 1st 2nd 3rd Last 3rd 2nd 1st
+432 1st 2nd 3rd Last 3rd 2nd 1st
+433 1st 2nd 3rd Last 3rd 2nd 1st
+434 1st 2nd 3rd Last 3rd 2nd 1st
+435 1st 2nd 3rd Last 3rd 2nd 1st
+436 1st 2nd 3rd Last 3rd 2nd 1st
+437 1st 2nd 3rd Last 3rd 2nd 1st
+438 1st 2nd 3rd Last 3rd 2nd 1st
+439 1st 2nd 3rd Last 3rd 2nd 1st
+440 1st 2nd 3rd Last 3rd 2nd 1st
+441 1st 2nd 3rd Last 3rd 2nd 1st
+442 1st 2nd 3rd Last 3rd 2nd 1st
+443 1st 2nd 3rd Last 3rd 2nd 1st
+444 1st 2nd 3rd Last 3rd 2nd 1st
+445 1st 2nd 3rd Last 3rd 2nd 1st
+446 1st 2nd 3rd Last 3rd 2nd 1st
+447 1st 2nd 3rd Last 3rd 2nd 1st
+448 1st 2nd 3rd Last 3rd 2nd 1st
+449 1st 2nd 3rd Last 3rd 2nd 1st
+450 1st 2nd 3rd Last 3rd 2nd 1st
+451 1st 2nd 3rd Last 3rd 2nd 1st
+452 1st 2nd 3rd Last 3rd 2nd 1st
+453 1st 2nd 3rd Last 3rd 2nd 1st
+454 1st 2nd 3rd Last 3rd 2nd 1st
+455 1st 2nd 3rd Last 3rd 2nd 1st
+456 1st 2nd 3rd Last 3rd 2nd 1st
+457 1st 2nd 3rd Last 3rd 2nd 1st
+458 1st 2nd 3rd Last 3rd 2nd 1st
+459 1st 2nd 3rd Last 3rd 2nd 1st
+460 1st 2nd 3rd Last 3rd 2nd 1st
+461 1st 2nd 3rd Last 3rd 2nd 1st
+462 1st 2nd 3rd Last 3rd 2nd 1st
+463 1st 2nd 3rd Last 3rd 2nd 1st
+464 1st 2nd 3rd Last 3rd 2nd 1st
+465 1st 2nd 3rd Last 3rd 2nd 1st
+466 1st 2nd 3rd Last 3rd 2nd 1st
+467 1st 2nd 3rd Last 3rd 2nd 1st
+468 1st 2nd 3rd Last 3rd 2nd 1st
+469 1st 2nd 3rd Last 3rd 2nd 1st
+470 1st 2nd 3rd Last 3rd 2nd 1st
+471 1st 2nd 3rd Last 3rd 2nd 1st
+472 1st 2nd 3rd Last 3rd 2nd 1st
+473 1st 2nd 3rd Last 3rd 2nd 1st
+474 1st 2nd 3rd Last 3rd 2nd 1st
+475 1st 2nd 3rd Last 3rd 2nd 1st
+476 1st 2nd 3rd Last 3rd 2nd 1st
+477 1st 2nd 3rd Last 3rd 2nd 1st
+478 1st 2nd 3rd Last 3rd 2nd 1st
+479 1st 2nd 3rd Last 3rd 2nd 1st
+480 1st 2nd 3rd Last 3rd 2nd 1st
+481 1st 2nd 3rd Last 3rd 2nd 1st
+482 1st 2nd 3rd Last 3rd 2nd 1st
+483 1st 2nd 3rd Last 3rd 2nd 1st
+484 1st 2nd 3rd Last 3rd 2nd 1st
+485 1st 2nd 3rd Last 3rd 2nd 1st
+486 1st 2nd 3rd Last 3rd 2nd 1st
+487 1st 2nd 3rd Last 3rd 2nd 1st
+488 1st 2nd 3rd Last 3rd 2nd 1st
+489 1st 2nd 3rd Last 3rd 2nd 1st
+490 1st 2nd 3rd Last 3rd 2nd 1st
+491 1st 2nd 3rd Last 3rd 2nd 1st
+492 1st 2nd 3rd Last 3rd 2nd 1st
+493 1st 2nd 3rd Last 3rd 2nd 1st
+494 1st 2nd 3rd Last 3rd 2nd 1st
+495 1st 2nd 3rd Last 3rd 2nd 1st
+496 1st 2nd 3rd Last 3rd 2nd 1st
+497 1st 2nd 3rd Last 3rd 2nd 1st
+498 1st 2nd 3rd Last 3rd 2nd 1st
+499 1st 2nd 3rd Last 3rd 2nd 1st
+500 1st 2nd 3rd Last 3rd 2nd 1st
+501 1st 2nd 3rd Last 3rd 2nd 1st
+502 1st 2nd 3rd Last 3rd 2nd 1st
+503 1st 2nd 3rd Last 3rd 2nd 1st
+504 1st 2nd 3rd Last 3rd 2nd 1st
+505 1st 2nd 3rd Last 3rd 2nd 1st
+506 1st 2nd 3rd Last 3rd 2nd 1st
+507 1st 2nd 3rd Last 3rd 2nd 1st
+508 1st 2nd 3rd Last 3rd 2nd 1st
+509 1st 2nd 3rd Last 3rd 2nd 1st
+510 1st 2nd 3rd Last 3rd 2nd 1st
+511 1st 2nd 3rd Last 3rd 2nd 1st
+512 1st 2nd 3rd Last 3rd 2nd 1st
+513 1st 2nd 3rd Last 3rd 2nd 1st
+514 1st 2nd 3rd Last 3rd 2nd 1st
+515 1st 2nd 3rd Last 3rd 2nd 1st
+516 1st 2nd 3rd Last 3rd 2nd 1st
+517 1st 2nd 3rd Last 3rd 2nd 1st
+518 1st 2nd 3rd Last 3rd 2nd 1st
+519 1st 2nd 3rd Last 3rd 2nd 1st
+520 1st 2nd 3rd Last 3rd 2nd 1st
+521 1st 2nd 3rd Last 3rd 2nd 1st
+522 1st 2nd 3rd Last 3rd 2nd 1st
+523 1st 2nd 3rd Last 3rd 2nd 1st
+524 1st 2nd 3rd Last 3rd 2nd 1st
+525 1st 2nd 3rd Last 3rd 2nd 1st
+526 1st 2nd 3rd Last 3rd 2nd 1st
+527 1st 2nd 3rd Last 3rd 2nd 1st
+528 1st 2nd 3rd Last 3rd 2nd 1st
+529 1st 2nd 3rd Last 3rd 2nd 1st
+530 1st 2nd 3rd Last 3rd 2nd 1st
+531 1st 2nd 3rd Last 3rd 2nd 1st
+532 1st 2nd 3rd Last 3rd 2nd 1st
+533 1st 2nd 3rd Last 3rd 2nd 1st
+534 1st 2nd 3rd Last 3rd 2nd 1st
+535 1st 2nd 3rd Last 3rd 2nd 1st
+536 1st 2nd 3rd Last 3rd 2nd 1st
+537 1st 2nd 3rd Last 3rd 2nd 1st
+538 1st 2nd 3rd Last 3rd 2nd 1st
+539 1st 2nd 3rd Last 3rd 2nd 1st
+540 1st 2nd 3rd Last 3rd 2nd 1st
+541 1st 2nd 3rd Last 3rd 2nd 1st
+542 1st 2nd 3rd Last 3rd 2nd 1st
+543 1st 2nd 3rd Last 3rd 2nd 1st
+544 1st 2nd 3rd Last 3rd 2nd 1st
+545 1st 2nd 3rd Last 3rd 2nd 1st
+546 1st 2nd 3rd Last 3rd 2nd 1st
+547 1st 2nd 3rd Last 3rd 2nd 1st
+548 1st 2nd 3rd Last 3rd 2nd 1st
+549 1st 2nd 3rd Last 3rd 2nd 1st
+550 1st 2nd 3rd Last 3rd 2nd 1st
+551 1st 2nd 3rd Last 3rd 2nd 1st
+552 1st 2nd 3rd Last 3rd 2nd 1st
+553 1st 2nd 3rd Last 3rd 2nd 1st
+554 1st 2nd 3rd Last 3rd 2nd 1st
+555 1st 2nd 3rd Last 3rd 2nd 1st
+556 1st 2nd 3rd Last 3rd 2nd 1st
+557 1st 2nd 3rd Last 3rd 2nd 1st
+558 1st 2nd 3rd Last 3rd 2nd 1st
+559 1st 2nd 3rd Last 3rd 2nd 1st
+560 1st 2nd 3rd Last 3rd 2nd 1st
+561 1st 2nd 3rd Last 3rd 2nd 1st
+562 1st 2nd 3rd Last 3rd 2nd 1st
+563 1st 2nd 3rd Last 3rd 2nd 1st
+564 1st 2nd 3rd Last 3rd 2nd 1st
+565 1st 2nd 3rd Last 3rd 2nd 1st
+566 1st 2nd 3rd Last 3rd 2nd 1st
+567 1st 2nd 3rd Last 3rd 2nd 1st
+568 1st 2nd 3rd Last 3rd 2nd 1st
+569 1st 2nd 3rd Last 3rd 2nd 1st
+570 1st 2nd 3rd Last 3rd 2nd 1st
+571 1st 2nd 3rd Last 3rd 2nd 1st
+572 1st 2nd 3rd Last 3rd 2nd 1st
+573 1st 2nd 3rd Last 3rd 2nd 1st
+574 1st 2nd 3rd Last 3rd 2nd 1st
+575 1st 2nd 3rd Last 3rd 2nd 1st
+576 1st 2nd 3rd Last 3rd 2nd 1st
+577 1st 2nd 3rd Last 3rd 2nd 1st
+578 1st 2nd 3rd Last 3rd 2nd 1st
+579 1st 2nd 3rd Last 3rd 2nd 1st
+580 1st 2nd 3rd Last 3rd 2nd 1st
+581 1st 2nd 3rd Last 3rd 2nd 1st
+582 1st 2nd 3rd Last 3rd 2nd 1st
+583 1st 2nd 3rd Last 3rd 2nd 1st
+584 1st 2nd 3rd Last 3rd 2nd 1st
+585 1st 2nd 3rd Last 3rd 2nd 1st
+586 1st 2nd 3rd Last 3rd 2nd 1st
+587 1st 2nd 3rd Last 3rd 2nd 1st
+588 1st 2nd 3rd Last 3rd 2nd 1st
+589 1st 2nd 3rd Last 3rd 2nd 1st
+590 1st 2nd 3rd Last 3rd 2nd 1st
+591 1st 2nd 3rd Last 3rd 2nd 1st
+592 1st 2nd 3rd Last 3rd 2nd 1st
+593 1st 2nd 3rd Last 3rd 2nd 1st
+594 1st 2nd 3rd Last 3rd 2nd 1st
+595 1st 2nd 3rd Last 3rd 2nd 1st
+596 1st 2nd 3rd Last 3rd 2nd 1st
+597 1st 2nd 3rd Last 3rd 2nd 1st
+598 1st 2nd 3rd Last 3rd 2nd 1st
+599 1st 2nd 3rd Last 3rd 2nd 1st
+600 1st 2nd 3rd Last 3rd 2nd 1st
+601 1st 2nd 3rd Last 3rd 2nd 1st
+602 1st 2nd 3rd Last 3rd 2nd 1st
+603 1st 2nd 3rd Last 3rd 2nd 1st
+604 1st 2nd 3rd Last 3rd 2nd 1st
+605 1st 2nd 3rd Last 3rd 2nd 1st
+606 1st 2nd 3rd Last 3rd 2nd 1st
+607 1st 2nd 3rd Last 3rd 2nd 1st
+608 1st 2nd 3rd Last 3rd 2nd 1st
+609 1st 2nd 3rd Last 3rd 2nd 1st
+610 1st 2nd 3rd Last 3rd 2nd 1st
+611 1st 2nd 3rd Last 3rd 2nd 1st
+612 1st 2nd 3rd Last 3rd 2nd 1st
+613 1st 2nd 3rd Last 3rd 2nd 1st
+614 1st 2nd 3rd Last 3rd 2nd 1st
+615 1st 2nd 3rd Last 3rd 2nd 1st
+616 1st 2nd 3rd Last 3rd 2nd 1st
+617 1st 2nd 3rd Last 3rd 2nd 1st
+618 1st 2nd 3rd Last 3rd 2nd 1st
+619 1st 2nd 3rd Last 3rd 2nd 1st
+620 1st 2nd 3rd Last 3rd 2nd 1st
+621 1st 2nd 3rd Last 3rd 2nd 1st
+622 1st 2nd 3rd Last 3rd 2nd 1st
+623 1st 2nd 3rd Last 3rd 2nd 1st
+624 1st 2nd 3rd Last 3rd 2nd 1st
+625 1st 2nd 3rd Last 3rd 2nd 1st
+626 1st 2nd 3rd Last 3rd 2nd 1st
+627 1st 2nd 3rd Last 3rd 2nd 1st
+628 1st 2nd 3rd Last 3rd 2nd 1st
+629 1st 2nd 3rd Last 3rd 2nd 1st
+630 1st 2nd 3rd Last 3rd 2nd 1st
+631 1st 2nd 3rd Last 3rd 2nd 1st
+632 1st 2nd 3rd Last 3rd 2nd 1st
+633 1st 2nd 3rd Last 3rd 2nd 1st
+634 1st 2nd 3rd Last 3rd 2nd 1st
+635 1st 2nd 3rd Last 3rd 2nd 1st
+636 1st 2nd 3rd Last 3rd 2nd 1st
+637 1st 2nd 3rd Last 3rd 2nd 1st
+638 1st 2nd 3rd Last 3rd 2nd 1st
+639 1st 2nd 3rd Last 3rd 2nd 1st
+640 1st 2nd 3rd Last 3rd 2nd 1st
+641 1st 2nd 3rd Last 3rd 2nd 1st
+642 1st 2nd 3rd Last 3rd 2nd 1st
+643 1st 2nd 3rd Last 3rd 2nd 1st
+644 1st 2nd 3rd Last 3rd 2nd 1st
+645 1st 2nd 3rd Last 3rd 2nd 1st
+646 1st 2nd 3rd Last 3rd 2nd 1st
+647 1st 2nd 3rd Last 3rd 2nd 1st
+648 1st 2nd 3rd Last 3rd 2nd 1st
+649 1st 2nd 3rd Last 3rd 2nd 1st
+650 1st 2nd 3rd Last 3rd 2nd 1st
+651 1st 2nd 3rd Last 3rd 2nd 1st
+652 1st 2nd 3rd Last 3rd 2nd 1st
+653 1st 2nd 3rd Last 3rd 2nd 1st
+654 1st 2nd 3rd Last 3rd 2nd 1st
+655 1st 2nd 3rd Last 3rd 2nd 1st
+656 1st 2nd 3rd Last 3rd 2nd 1st
+657 1st 2nd 3rd Last 3rd 2nd 1st
+658 1st 2nd 3rd Last 3rd 2nd 1st
+659 1st 2nd 3rd Last 3rd 2nd 1st
+660 1st 2nd 3rd Last 3rd 2nd 1st
+661 1st 2nd 3rd Last 3rd 2nd 1st
+662 1st 2nd 3rd Last 3rd 2nd 1st
+663 1st 2nd 3rd Last 3rd 2nd 1st
+664 1st 2nd 3rd Last 3rd 2nd 1st
+665 1st 2nd 3rd Last 3rd 2nd 1st
+666 1st 2nd 3rd Last 3rd 2nd 1st
+667 1st 2nd 3rd Last 3rd 2nd 1st
+668 1st 2nd 3rd Last 3rd 2nd 1st
+669 1st 2nd 3rd Last 3rd 2nd 1st
+670 1st 2nd 3rd Last 3rd 2nd 1st
+671 1st 2nd 3rd Last 3rd 2nd 1st
+672 1st 2nd 3rd Last 3rd 2nd 1st
+673 1st 2nd 3rd Last 3rd 2nd 1st
+674 1st 2nd 3rd Last 3rd 2nd 1st
+675 1st 2nd 3rd Last 3rd 2nd 1st
+676 1st 2nd 3rd Last 3rd 2nd 1st
+677 1st 2nd 3rd Last 3rd 2nd 1st
+678 1st 2nd 3rd Last 3rd 2nd 1st
+679 1st 2nd 3rd Last 3rd 2nd 1st
+680 1st 2nd 3rd Last 3rd 2nd 1st
+681 1st 2nd 3rd Last 3rd 2nd 1st
+682 1st 2nd 3rd Last 3rd 2nd 1st
+683 1st 2nd 3rd Last 3rd 2nd 1st
+684 1st 2nd 3rd Last 3rd 2nd 1st
+685 1st 2nd 3rd Last 3rd 2nd 1st
+686 1st 2nd 3rd Last 3rd 2nd 1st
+687 1st 2nd 3rd Last 3rd 2nd 1st
+688 1st 2nd 3rd Last 3rd 2nd 1st
+689 1st 2nd 3rd Last 3rd 2nd 1st
+690 1st 2nd 3rd Last 3rd 2nd 1st
+691 1st 2nd 3rd Last 3rd 2nd 1st
+692 1st 2nd 3rd Last 3rd 2nd 1st
+693 1st 2nd 3rd Last 3rd 2nd 1st
+694 1st 2nd 3rd Last 3rd 2nd 1st
+695 1st 2nd 3rd Last 3rd 2nd 1st
+696 1st 2nd 3rd Last 3rd 2nd 1st
+697 1st 2nd 3rd Last 3rd 2nd 1st
+698 1st 2nd 3rd Last 3rd 2nd 1st
+699 1st 2nd 3rd Last 3rd 2nd 1st
+700 1st 2nd 3rd Last 3rd 2nd 1st
+701 1st 2nd 3rd Last 3rd 2nd 1st
+702 1st 2nd 3rd Last 3rd 2nd 1st
+703 1st 2nd 3rd Last 3rd 2nd 1st
+704 1st 2nd 3rd Last 3rd 2nd 1st
+705 1st 2nd 3rd Last 3rd 2nd 1st
+706 1st 2nd 3rd Last 3rd 2nd 1st
+707 1st 2nd 3rd Last 3rd 2nd 1st
+708 1st 2nd 3rd Last 3rd 2nd 1st
+709 1st 2nd 3rd Last 3rd 2nd 1st
+710 1st 2nd 3rd Last 3rd 2nd 1st
+711 1st 2nd 3rd Last 3rd 2nd 1st
+712 1st 2nd 3rd Last 3rd 2nd 1st
+713 1st 2nd 3rd Last 3rd 2nd 1st
+714 1st 2nd 3rd Last 3rd 2nd 1st
+715 1st 2nd 3rd Last 3rd 2nd 1st
+716 1st 2nd 3rd Last 3rd 2nd 1st
+717 1st 2nd 3rd Last 3rd 2nd 1st
+718 1st 2nd 3rd Last 3rd 2nd 1st
+719 1st 2nd 3rd Last 3rd 2nd 1st
+720 1st 2nd 3rd Last 3rd 2nd 1st
+721 1st 2nd 3rd Last 3rd 2nd 1st
+722 1st 2nd 3rd Last 3rd 2nd 1st
+723 1st 2nd 3rd Last 3rd 2nd 1st
+724 1st 2nd 3rd Last 3rd 2nd 1st
+725 1st 2nd 3rd Last 3rd 2nd 1st
+726 1st 2nd 3rd Last 3rd 2nd 1st
+727 1st 2nd 3rd Last 3rd 2nd 1st
+728 1st 2nd 3rd Last 3rd 2nd 1st
+729 1st 2nd 3rd Last 3rd 2nd 1st
+730 1st 2nd 3rd Last 3rd 2nd 1st
+731 1st 2nd 3rd Last 3rd 2nd 1st
+732 1st 2nd 3rd Last 3rd 2nd 1st
+733 1st 2nd 3rd Last 3rd 2nd 1st
+734 1st 2nd 3rd Last 3rd 2nd 1st
+735 1st 2nd 3rd Last 3rd 2nd 1st
+736 1st 2nd 3rd Last 3rd 2nd 1st
+737 1st 2nd 3rd Last 3rd 2nd 1st
+738 1st 2nd 3rd Last 3rd 2nd 1st
+739 1st 2nd 3rd Last 3rd 2nd 1st
+740 1st 2nd 3rd Last 3rd 2nd 1st
+741 1st 2nd 3rd Last 3rd 2nd 1st
+742 1st 2nd 3rd Last 3rd 2nd 1st
+743 1st 2nd 3rd Last 3rd 2nd 1st
+744 1st 2nd 3rd Last 3rd 2nd 1st
+745 1st 2nd 3rd Last 3rd 2nd 1st
+746 1st 2nd 3rd Last 3rd 2nd 1st
+747 1st 2nd 3rd Last 3rd 2nd 1st
+748 1st 2nd 3rd Last 3rd 2nd 1st
+749 1st 2nd 3rd Last 3rd 2nd 1st
+750 1st 2nd 3rd Last 3rd 2nd 1st
+751 1st 2nd 3rd Last 3rd 2nd 1st
+752 1st 2nd 3rd Last 3rd 2nd 1st
+753 1st 2nd 3rd Last 3rd 2nd 1st
+754 1st 2nd 3rd Last 3rd 2nd 1st
+755 1st 2nd 3rd Last 3rd 2nd 1st
+756 1st 2nd 3rd Last 3rd 2nd 1st
+757 1st 2nd 3rd Last 3rd 2nd 1st
+758 1st 2nd 3rd Last 3rd 2nd 1st
+759 1st 2nd 3rd Last 3rd 2nd 1st
+760 1st 2nd 3rd Last 3rd 2nd 1st
+761 1st 2nd 3rd Last 3rd 2nd 1st
+762 1st 2nd 3rd Last 3rd 2nd 1st
+763 1st 2nd 3rd Last 3rd 2nd 1st
+764 1st 2nd 3rd Last 3rd 2nd 1st
+765 1st 2nd 3rd Last 3rd 2nd 1st
+766 1st 2nd 3rd Last 3rd 2nd 1st
+767 1st 2nd 3rd Last 3rd 2nd 1st
+768 1st 2nd 3rd Last 3rd 2nd 1st
+769 1st 2nd 3rd Last 3rd 2nd 1st
+770 1st 2nd 3rd Last 3rd 2nd 1st
+771 1st 2nd 3rd Last 3rd 2nd 1st
+772 1st 2nd 3rd Last 3rd 2nd 1st
+773 1st 2nd 3rd Last 3rd 2nd 1st
+774 1st 2nd 3rd Last 3rd 2nd 1st
+775 1st 2nd 3rd Last 3rd 2nd 1st
+776 1st 2nd 3rd Last 3rd 2nd 1st
+777 1st 2nd 3rd Last 3rd 2nd 1st
+778 1st 2nd 3rd Last 3rd 2nd 1st
+779 1st 2nd 3rd Last 3rd 2nd 1st
+780 1st 2nd 3rd Last 3rd 2nd 1st
+781 1st 2nd 3rd Last 3rd 2nd 1st
+782 1st 2nd 3rd Last 3rd 2nd 1st
+783 1st 2nd 3rd Last 3rd 2nd 1st
+784 1st 2nd 3rd Last 3rd 2nd 1st
+785 1st 2nd 3rd Last 3rd 2nd 1st
+786 1st 2nd 3rd Last 3rd 2nd 1st
+787 1st 2nd 3rd Last 3rd 2nd 1st
+788 1st 2nd 3rd Last 3rd 2nd 1st
+789 1st 2nd 3rd Last 3rd 2nd 1st
+790 1st 2nd 3rd Last 3rd 2nd 1st
+791 1st 2nd 3rd Last 3rd 2nd 1st
+792 1st 2nd 3rd Last 3rd 2nd 1st
+793 1st 2nd 3rd Last 3rd 2nd 1st
+794 1st 2nd 3rd Last 3rd 2nd 1st
+795 1st 2nd 3rd Last 3rd 2nd 1st
+796 1st 2nd 3rd Last 3rd 2nd 1st
+797 1st 2nd 3rd Last 3rd 2nd 1st
+798 1st 2nd 3rd Last 3rd 2nd 1st
+799 1st 2nd 3rd Last 3rd 2nd 1st
+800 1st 2nd 3rd Last 3rd 2nd 1st
+801 1st 2nd 3rd Last 3rd 2nd 1st
+802 1st 2nd 3rd Last 3rd 2nd 1st
+803 1st 2nd 3rd Last 3rd 2nd 1st
+804 1st 2nd 3rd Last 3rd 2nd 1st
+805 1st 2nd 3rd Last 3rd 2nd 1st
+806 1st 2nd 3rd Last 3rd 2nd 1st
+807 1st 2nd 3rd Last 3rd 2nd 1st
+808 1st 2nd 3rd Last 3rd 2nd 1st
+809 1st 2nd 3rd Last 3rd 2nd 1st
+810 1st 2nd 3rd Last 3rd 2nd 1st
+811 1st 2nd 3rd Last 3rd 2nd 1st
+812 1st 2nd 3rd Last 3rd 2nd 1st
+813 1st 2nd 3rd Last 3rd 2nd 1st
+814 1st 2nd 3rd Last 3rd 2nd 1st
+815 1st 2nd 3rd Last 3rd 2nd 1st
+816 1st 2nd 3rd Last 3rd 2nd 1st
+817 1st 2nd 3rd Last 3rd 2nd 1st
+818 1st 2nd 3rd Last 3rd 2nd 1st
+819 1st 2nd 3rd Last 3rd 2nd 1st
+820 1st 2nd 3rd Last 3rd 2nd 1st
+821 1st 2nd 3rd Last 3rd 2nd 1st
+822 1st 2nd 3rd Last 3rd 2nd 1st
+823 1st 2nd 3rd Last 3rd 2nd 1st
+824 1st 2nd 3rd Last 3rd 2nd 1st
+825 1st 2nd 3rd Last 3rd 2nd 1st
+826 1st 2nd 3rd Last 3rd 2nd 1st
+827 1st 2nd 3rd Last 3rd 2nd 1st
+828 1st 2nd 3rd Last 3rd 2nd 1st
+829 1st 2nd 3rd Last 3rd 2nd 1st
+830 1st 2nd 3rd Last 3rd 2nd 1st
+831 1st 2nd 3rd Last 3rd 2nd 1st
+832 1st 2nd 3rd Last 3rd 2nd 1st
+833 1st 2nd 3rd Last 3rd 2nd 1st
+834 1st 2nd 3rd Last 3rd 2nd 1st
+835 1st 2nd 3rd Last 3rd 2nd 1st
+836 1st 2nd 3rd Last 3rd 2nd 1st
+837 1st 2nd 3rd Last 3rd 2nd 1st
+838 1st 2nd 3rd Last 3rd 2nd 1st
+839 1st 2nd 3rd Last 3rd 2nd 1st
+840 1st 2nd 3rd Last 3rd 2nd 1st
+841 1st 2nd 3rd Last 3rd 2nd 1st
+842 1st 2nd 3rd Last 3rd 2nd 1st
+843 1st 2nd 3rd Last 3rd 2nd 1st
+844 1st 2nd 3rd Last 3rd 2nd 1st
+845 1st 2nd 3rd Last 3rd 2nd 1st
+846 1st 2nd 3rd Last 3rd 2nd 1st
+847 1st 2nd 3rd Last 3rd 2nd 1st
+848 1st 2nd 3rd Last 3rd 2nd 1st
+849 1st 2nd 3rd Last 3rd 2nd 1st
+850 1st 2nd 3rd Last 3rd 2nd 1st
+851 1st 2nd 3rd Last 3rd 2nd 1st
+852 1st 2nd 3rd Last 3rd 2nd 1st
+853 1st 2nd 3rd Last 3rd 2nd 1st
+854 1st 2nd 3rd Last 3rd 2nd 1st
+855 1st 2nd 3rd Last 3rd 2nd 1st
+856 1st 2nd 3rd Last 3rd 2nd 1st
+857 1st 2nd 3rd Last 3rd 2nd 1st
+858 1st 2nd 3rd Last 3rd 2nd 1st
+859 1st 2nd 3rd Last 3rd 2nd 1st
+860 1st 2nd 3rd Last 3rd 2nd 1st
+861 1st 2nd 3rd Last 3rd 2nd 1st
+862 1st 2nd 3rd Last 3rd 2nd 1st
+863 1st 2nd 3rd Last 3rd 2nd 1st
+864 1st 2nd 3rd Last 3rd 2nd 1st
+865 1st 2nd 3rd Last 3rd 2nd 1st
+866 1st 2nd 3rd Last 3rd 2nd 1st
+867 1st 2nd 3rd Last 3rd 2nd 1st
+868 1st 2nd 3rd Last 3rd 2nd 1st
+869 1st 2nd 3rd Last 3rd 2nd 1st
+870 1st 2nd 3rd Last 3rd 2nd 1st
+871 1st 2nd 3rd Last 3rd 2nd 1st
+872 1st 2nd 3rd Last 3rd 2nd 1st
+873 1st 2nd 3rd Last 3rd 2nd 1st
+874 1st 2nd 3rd Last 3rd 2nd 1st
+875 1st 2nd 3rd Last 3rd 2nd 1st
+876 1st 2nd 3rd Last 3rd 2nd 1st
+877 1st 2nd 3rd Last 3rd 2nd 1st
+878 1st 2nd 3rd Last 3rd 2nd 1st
+879 1st 2nd 3rd Last 3rd 2nd 1st
+880 1st 2nd 3rd Last 3rd 2nd 1st
+881 1st 2nd 3rd Last 3rd 2nd 1st
+882 1st 2nd 3rd Last 3rd 2nd 1st
+883 1st 2nd 3rd Last 3rd 2nd 1st
+884 1st 2nd 3rd Last 3rd 2nd 1st
+885 1st 2nd 3rd Last 3rd 2nd 1st
+886 1st 2nd 3rd Last 3rd 2nd 1st
+887 1st 2nd 3rd Last 3rd 2nd 1st
+888 1st 2nd 3rd Last 3rd 2nd 1st
+889 1st 2nd 3rd Last 3rd 2nd 1st
+890 1st 2nd 3rd Last 3rd 2nd 1st
+891 1st 2nd 3rd Last 3rd 2nd 1st
+892 1st 2nd 3rd Last 3rd 2nd 1st
+893 1st 2nd 3rd Last 3rd 2nd 1st
+894 1st 2nd 3rd Last 3rd 2nd 1st
+895 1st 2nd 3rd Last 3rd 2nd 1st
+896 1st 2nd 3rd Last 3rd 2nd 1st
+897 1st 2nd 3rd Last 3rd 2nd 1st
+898 1st 2nd 3rd Last 3rd 2nd 1st
+899 1st 2nd 3rd Last 3rd 2nd 1st
+900 1st 2nd 3rd Last 3rd 2nd 1st
+901 1st 2nd 3rd Last 3rd 2nd 1st
+902 1st 2nd 3rd Last 3rd 2nd 1st
+903 1st 2nd 3rd Last 3rd 2nd 1st
+904 1st 2nd 3rd Last 3rd 2nd 1st
+905 1st 2nd 3rd Last 3rd 2nd 1st
+906 1st 2nd 3rd Last 3rd 2nd 1st
+907 1st 2nd 3rd Last 3rd 2nd 1st
+908 1st 2nd 3rd Last 3rd 2nd 1st
+909 1st 2nd 3rd Last 3rd 2nd 1st
+910 1st 2nd 3rd Last 3rd 2nd 1st
+911 1st 2nd 3rd Last 3rd 2nd 1st
+912 1st 2nd 3rd Last 3rd 2nd 1st
+913 1st 2nd 3rd Last 3rd 2nd 1st
+914 1st 2nd 3rd Last 3rd 2nd 1st
+915 1st 2nd 3rd Last 3rd 2nd 1st
+916 1st 2nd 3rd Last 3rd 2nd 1st
+917 1st 2nd 3rd Last 3rd 2nd 1st
+918 1st 2nd 3rd Last 3rd 2nd 1st
+919 1st 2nd 3rd Last 3rd 2nd 1st
+920 1st 2nd 3rd Last 3rd 2nd 1st
+921 1st 2nd 3rd Last 3rd 2nd 1st
+922 1st 2nd 3rd Last 3rd 2nd 1st
+923 1st 2nd 3rd Last 3rd 2nd 1st
+924 1st 2nd 3rd Last 3rd 2nd 1st
+925 1st 2nd 3rd Last 3rd 2nd 1st
+926 1st 2nd 3rd Last 3rd 2nd 1st
+927 1st 2nd 3rd Last 3rd 2nd 1st
+928 1st 2nd 3rd Last 3rd 2nd 1st
+929 1st 2nd 3rd Last 3rd 2nd 1st
+930 1st 2nd 3rd Last 3rd 2nd 1st
+931 1st 2nd 3rd Last 3rd 2nd 1st
+932 1st 2nd 3rd Last 3rd 2nd 1st
+933 1st 2nd 3rd Last 3rd 2nd 1st
+934 1st 2nd 3rd Last 3rd 2nd 1st
+935 1st 2nd 3rd Last 3rd 2nd 1st
+936 1st 2nd 3rd Last 3rd 2nd 1st
+937 1st 2nd 3rd Last 3rd 2nd 1st
+938 1st 2nd 3rd Last 3rd 2nd 1st
+939 1st 2nd 3rd Last 3rd 2nd 1st
+940 1st 2nd 3rd Last 3rd 2nd 1st
+941 1st 2nd 3rd Last 3rd 2nd 1st
+942 1st 2nd 3rd Last 3rd 2nd 1st
+943 1st 2nd 3rd Last 3rd 2nd 1st
+944 1st 2nd 3rd Last 3rd 2nd 1st
+945 1st 2nd 3rd Last 3rd 2nd 1st
+946 1st 2nd 3rd Last 3rd 2nd 1st
+947 1st 2nd 3rd Last 3rd 2nd 1st
+948 1st 2nd 3rd Last 3rd 2nd 1st
+949 1st 2nd 3rd Last 3rd 2nd 1st
+950 1st 2nd 3rd Last 3rd 2nd 1st
+951 1st 2nd 3rd Last 3rd 2nd 1st
+952 1st 2nd 3rd Last 3rd 2nd 1st
+953 1st 2nd 3rd Last 3rd 2nd 1st
+954 1st 2nd 3rd Last 3rd 2nd 1st
+955 1st 2nd 3rd Last 3rd 2nd 1st
+956 1st 2nd 3rd Last 3rd 2nd 1st
+957 1st 2nd 3rd Last 3rd 2nd 1st
+958 1st 2nd 3rd Last 3rd 2nd 1st
+959 1st 2nd 3rd Last 3rd 2nd 1st
+960 1st 2nd 3rd Last 3rd 2nd 1st
+961 1st 2nd 3rd Last 3rd 2nd 1st
+962 1st 2nd 3rd Last 3rd 2nd 1st
+963 1st 2nd 3rd Last 3rd 2nd 1st
+964 1st 2nd 3rd Last 3rd 2nd 1st
+965 1st 2nd 3rd Last 3rd 2nd 1st
+966 1st 2nd 3rd Last 3rd 2nd 1st
+967 1st 2nd 3rd Last 3rd 2nd 1st
+968 1st 2nd 3rd Last 3rd 2nd 1st
+969 1st 2nd 3rd Last 3rd 2nd 1st
+970 1st 2nd 3rd Last 3rd 2nd 1st
+971 1st 2nd 3rd Last 3rd 2nd 1st
+972 1st 2nd 3rd Last 3rd 2nd 1st
+973 1st 2nd 3rd Last 3rd 2nd 1st
+974 1st 2nd 3rd Last 3rd 2nd 1st
+975 1st 2nd 3rd Last 3rd 2nd 1st
+976 1st 2nd 3rd Last 3rd 2nd 1st
+977 1st 2nd 3rd Last 3rd 2nd 1st
+978 1st 2nd 3rd Last 3rd 2nd 1st
+979 1st 2nd 3rd Last 3rd 2nd 1st
+980 1st 2nd 3rd Last 3rd 2nd 1st
+981 1st 2nd 3rd Last 3rd 2nd 1st
+982 1st 2nd 3rd Last 3rd 2nd 1st
+983 1st 2nd 3rd Last 3rd 2nd 1st
+984 1st 2nd 3rd Last 3rd 2nd 1st
+985 1st 2nd 3rd Last 3rd 2nd 1st
+986 1st 2nd 3rd Last 3rd 2nd 1st
+987 1st 2nd 3rd Last 3rd 2nd 1st
+988 1st 2nd 3rd Last 3rd 2nd 1st
+989 1st 2nd 3rd Last 3rd 2nd 1st
+990 1st 2nd 3rd Last 3rd 2nd 1st
+991 1st 2nd 3rd Last 3rd 2nd 1st
+992 1st 2nd 3rd Last 3rd 2nd 1st
+993 1st 2nd 3rd Last 3rd 2nd 1st
+994 1st 2nd 3rd Last 3rd 2nd 1st
+995 1st 2nd 3rd Last 3rd 2nd 1st
+996 1st 2nd 3rd Last 3rd 2nd 1st
+997 1st 2nd 3rd Last 3rd 2nd 1st
+998 1st 2nd 3rd Last 3rd 2nd 1st
+999 1st 2nd 3rd Last 3rd 2nd 1st
+1000 1st 2nd 3rd Last 3rd 2nd 1st
+1001 1st 2nd 3rd Last 3rd 2nd 1st
+1002 1st 2nd 3rd Last 3rd 2nd 1st
+1003 1st 2nd 3rd Last 3rd 2nd 1st
+1004 1st 2nd 3rd Last 3rd 2nd 1st
+1005 1st 2nd 3rd Last 3rd 2nd 1st
+1006 1st 2nd 3rd Last 3rd 2nd 1st
+1007 1st 2nd 3rd Last 3rd 2nd 1st
+1008 1st 2nd 3rd Last 3rd 2nd 1st
+1009 1st 2nd 3rd Last 3rd 2nd 1st
+1010 1st 2nd 3rd Last 3rd 2nd 1st
+1011 1st 2nd 3rd Last 3rd 2nd 1st
+1012 1st 2nd 3rd Last 3rd 2nd 1st
+1013 1st 2nd 3rd Last 3rd 2nd 1st
+1014 1st 2nd 3rd Last 3rd 2nd 1st
+1015 1st 2nd 3rd Last 3rd 2nd 1st
+1016 1st 2nd 3rd Last 3rd 2nd 1st
+1017 1st 2nd 3rd Last 3rd 2nd 1st
+1018 1st 2nd 3rd Last 3rd 2nd 1st
+1019 1st 2nd 3rd Last 3rd 2nd 1st
+1020 1st 2nd 3rd Last 3rd 2nd 1st
+1021 1st 2nd 3rd Last 3rd 2nd 1st
+1022 1st 2nd 3rd Last 3rd 2nd 1st
+1023 1st 2nd 3rd Last 3rd 2nd 1st
+1024 1st 2nd 3rd Last 3rd 2nd 1st
+1025 1st 2nd 3rd Last 3rd 2nd 1st
+1026 1st 2nd 3rd Last 3rd 2nd 1st
+1027 1st 2nd 3rd Last 3rd 2nd 1st
+1028 1st 2nd 3rd Last 3rd 2nd 1st
+1029 1st 2nd 3rd Last 3rd 2nd 1st
+1030 1st 2nd 3rd Last 3rd 2nd 1st
+1031 1st 2nd 3rd Last 3rd 2nd 1st
+1032 1st 2nd 3rd Last 3rd 2nd 1st
+1033 1st 2nd 3rd Last 3rd 2nd 1st
+1034 1st 2nd 3rd Last 3rd 2nd 1st
+1035 1st 2nd 3rd Last 3rd 2nd 1st
+1036 1st 2nd 3rd Last 3rd 2nd 1st
+1037 1st 2nd 3rd Last 3rd 2nd 1st
+1038 1st 2nd 3rd Last 3rd 2nd 1st
+1039 1st 2nd 3rd Last 3rd 2nd 1st
+1040 1st 2nd 3rd Last 3rd 2nd 1st
+1041 1st 2nd 3rd Last 3rd 2nd 1st
+1042 1st 2nd 3rd Last 3rd 2nd 1st
+1043 1st 2nd 3rd Last 3rd 2nd 1st
+1044 1st 2nd 3rd Last 3rd 2nd 1st
+1045 1st 2nd 3rd Last 3rd 2nd 1st
+1046 1st 2nd 3rd Last 3rd 2nd 1st
+1047 1st 2nd 3rd Last 3rd 2nd 1st
+1048 1st 2nd 3rd Last 3rd 2nd 1st
+1049 1st 2nd 3rd Last 3rd 2nd 1st
+1050 1st 2nd 3rd Last 3rd 2nd 1st
+1051 1st 2nd 3rd Last 3rd 2nd 1st
+1052 1st 2nd 3rd Last 3rd 2nd 1st
+1053 1st 2nd 3rd Last 3rd 2nd 1st
+1054 1st 2nd 3rd Last 3rd 2nd 1st
+1055 1st 2nd 3rd Last 3rd 2nd 1st
+1056 1st 2nd 3rd Last 3rd 2nd 1st
+1057 1st 2nd 3rd Last 3rd 2nd 1st
+1058 1st 2nd 3rd Last 3rd 2nd 1st
+1059 1st 2nd 3rd Last 3rd 2nd 1st
+1060 1st 2nd 3rd Last 3rd 2nd 1st
+1061 1st 2nd 3rd Last 3rd 2nd 1st
+1062 1st 2nd 3rd Last 3rd 2nd 1st
+1063 1st 2nd 3rd Last 3rd 2nd 1st
+1064 1st 2nd 3rd Last 3rd 2nd 1st
+1065 1st 2nd 3rd Last 3rd 2nd 1st
+1066 1st 2nd 3rd Last 3rd 2nd 1st
+1067 1st 2nd 3rd Last 3rd 2nd 1st
+1068 1st 2nd 3rd Last 3rd 2nd 1st
+1069 1st 2nd 3rd Last 3rd 2nd 1st
+1070 1st 2nd 3rd Last 3rd 2nd 1st
+1071 1st 2nd 3rd Last 3rd 2nd 1st
+1072 1st 2nd 3rd Last 3rd 2nd 1st
+1073 1st 2nd 3rd Last 3rd 2nd 1st
+1074 1st 2nd 3rd Last 3rd 2nd 1st
+1075 1st 2nd 3rd Last 3rd 2nd 1st
+1076 1st 2nd 3rd Last 3rd 2nd 1st
+1077 1st 2nd 3rd Last 3rd 2nd 1st
+1078 1st 2nd 3rd Last 3rd 2nd 1st
+1079 1st 2nd 3rd Last 3rd 2nd 1st
+1080 1st 2nd 3rd Last 3rd 2nd 1st
+1081 1st 2nd 3rd Last 3rd 2nd 1st
+1082 1st 2nd 3rd Last 3rd 2nd 1st
+1083 1st 2nd 3rd Last 3rd 2nd 1st
+1084 1st 2nd 3rd Last 3rd 2nd 1st
+1085 1st 2nd 3rd Last 3rd 2nd 1st
+1086 1st 2nd 3rd Last 3rd 2nd 1st
+1087 1st 2nd 3rd Last 3rd 2nd 1st
+1088 1st 2nd 3rd Last 3rd 2nd 1st
+1089 1st 2nd 3rd Last 3rd 2nd 1st
+1090 1st 2nd 3rd Last 3rd 2nd 1st
+1091 1st 2nd 3rd Last 3rd 2nd 1st
+1092 1st 2nd 3rd Last 3rd 2nd 1st
+1093 1st 2nd 3rd Last 3rd 2nd 1st
+1094 1st 2nd 3rd Last 3rd 2nd 1st
+1095 1st 2nd 3rd Last 3rd 2nd 1st
+1096 1st 2nd 3rd Last 3rd 2nd 1st
+1097 1st 2nd 3rd Last 3rd 2nd 1st
+1098 1st 2nd 3rd Last 3rd 2nd 1st
+1099 1st 2nd 3rd Last 3rd 2nd 1st
+1100 1st 2nd 3rd Last 3rd 2nd 1st
+1101 1st 2nd 3rd Last 3rd 2nd 1st
+1102 1st 2nd 3rd Last 3rd 2nd 1st
+1103 1st 2nd 3rd Last 3rd 2nd 1st
+1104 1st 2nd 3rd Last 3rd 2nd 1st
+1105 1st 2nd 3rd Last 3rd 2nd 1st
+1106 1st 2nd 3rd Last 3rd 2nd 1st
+1107 1st 2nd 3rd Last 3rd 2nd 1st
+1108 1st 2nd 3rd Last 3rd 2nd 1st
+1109 1st 2nd 3rd Last 3rd 2nd 1st
+1110 1st 2nd 3rd Last 3rd 2nd 1st
+1111 1st 2nd 3rd Last 3rd 2nd 1st
+1112 1st 2nd 3rd Last 3rd 2nd 1st
+1113 1st 2nd 3rd Last 3rd 2nd 1st
+1114 1st 2nd 3rd Last 3rd 2nd 1st
+1115 1st 2nd 3rd Last 3rd 2nd 1st
+1116 1st 2nd 3rd Last 3rd 2nd 1st
+1117 1st 2nd 3rd Last 3rd 2nd 1st
+1118 1st 2nd 3rd Last 3rd 2nd 1st
+1119 1st 2nd 3rd Last 3rd 2nd 1st
+1120 1st 2nd 3rd Last 3rd 2nd 1st
+1121 1st 2nd 3rd Last 3rd 2nd 1st
+1122 1st 2nd 3rd Last 3rd 2nd 1st
+1123 1st 2nd 3rd Last 3rd 2nd 1st
+1124 1st 2nd 3rd Last 3rd 2nd 1st
+1125 1st 2nd 3rd Last 3rd 2nd 1st
+1126 1st 2nd 3rd Last 3rd 2nd 1st
+1127 1st 2nd 3rd Last 3rd 2nd 1st
+1128 1st 2nd 3rd Last 3rd 2nd 1st
+1129 1st 2nd 3rd Last 3rd 2nd 1st
+1130 1st 2nd 3rd Last 3rd 2nd 1st
+1131 1st 2nd 3rd Last 3rd 2nd 1st
+1132 1st 2nd 3rd Last 3rd 2nd 1st
+1133 1st 2nd 3rd Last 3rd 2nd 1st
+1134 1st 2nd 3rd Last 3rd 2nd 1st
+1135 1st 2nd 3rd Last 3rd 2nd 1st
+1136 1st 2nd 3rd Last 3rd 2nd 1st
+1137 1st 2nd 3rd Last 3rd 2nd 1st
+1138 1st 2nd 3rd Last 3rd 2nd 1st
+1139 1st 2nd 3rd Last 3rd 2nd 1st
+1140 1st 2nd 3rd Last 3rd 2nd 1st
+1141 1st 2nd 3rd Last 3rd 2nd 1st
+1142 1st 2nd 3rd Last 3rd 2nd 1st
+1143 1st 2nd 3rd Last 3rd 2nd 1st
+1144 1st 2nd 3rd Last 3rd 2nd 1st
+1145 1st 2nd 3rd Last 3rd 2nd 1st
+1146 1st 2nd 3rd Last 3rd 2nd 1st
+1147 1st 2nd 3rd Last 3rd 2nd 1st
+1148 1st 2nd 3rd Last 3rd 2nd 1st
+1149 1st 2nd 3rd Last 3rd 2nd 1st
+1150 1st 2nd 3rd Last 3rd 2nd 1st
+1151 1st 2nd 3rd Last 3rd 2nd 1st
+1152 1st 2nd 3rd Last 3rd 2nd 1st
+1153 1st 2nd 3rd Last 3rd 2nd 1st
+1154 1st 2nd 3rd Last 3rd 2nd 1st
+1155 1st 2nd 3rd Last 3rd 2nd 1st
+1156 1st 2nd 3rd Last 3rd 2nd 1st
+1157 1st 2nd 3rd Last 3rd 2nd 1st
+1158 1st 2nd 3rd Last 3rd 2nd 1st
+1159 1st 2nd 3rd Last 3rd 2nd 1st
+1160 1st 2nd 3rd Last 3rd 2nd 1st
+1161 1st 2nd 3rd Last 3rd 2nd 1st
+1162 1st 2nd 3rd Last 3rd 2nd 1st
+1163 1st 2nd 3rd Last 3rd 2nd 1st
+1164 1st 2nd 3rd Last 3rd 2nd 1st
+1165 1st 2nd 3rd Last 3rd 2nd 1st
+1166 1st 2nd 3rd Last 3rd 2nd 1st
+1167 1st 2nd 3rd Last 3rd 2nd 1st
+1168 1st 2nd 3rd Last 3rd 2nd 1st
+1169 1st 2nd 3rd Last 3rd 2nd 1st
+1170 1st 2nd 3rd Last 3rd 2nd 1st
+1171 1st 2nd 3rd Last 3rd 2nd 1st
+1172 1st 2nd 3rd Last 3rd 2nd 1st
+1173 1st 2nd 3rd Last 3rd 2nd 1st
+1174 1st 2nd 3rd Last 3rd 2nd 1st
+1175 1st 2nd 3rd Last 3rd 2nd 1st
+1176 1st 2nd 3rd Last 3rd 2nd 1st
+1177 1st 2nd 3rd Last 3rd 2nd 1st
+1178 1st 2nd 3rd Last 3rd 2nd 1st
+1179 1st 2nd 3rd Last 3rd 2nd 1st
+1180 1st 2nd 3rd Last 3rd 2nd 1st
+1181 1st 2nd 3rd Last 3rd 2nd 1st
+1182 1st 2nd 3rd Last 3rd 2nd 1st
+1183 1st 2nd 3rd Last 3rd 2nd 1st
+1184 1st 2nd 3rd Last 3rd 2nd 1st
+1185 1st 2nd 3rd Last 3rd 2nd 1st
+1186 1st 2nd 3rd Last 3rd 2nd 1st
+1187 1st 2nd 3rd Last 3rd 2nd 1st
+1188 1st 2nd 3rd Last 3rd 2nd 1st
+1189 1st 2nd 3rd Last 3rd 2nd 1st
+1190 1st 2nd 3rd Last 3rd 2nd 1st
+1191 1st 2nd 3rd Last 3rd 2nd 1st
+1192 1st 2nd 3rd Last 3rd 2nd 1st
+1193 1st 2nd 3rd Last 3rd 2nd 1st
+1194 1st 2nd 3rd Last 3rd 2nd 1st
+1195 1st 2nd 3rd Last 3rd 2nd 1st
+1196 1st 2nd 3rd Last 3rd 2nd 1st
+1197 1st 2nd 3rd Last 3rd 2nd 1st
+1198 1st 2nd 3rd Last 3rd 2nd 1st
+1199 1st 2nd 3rd Last 3rd 2nd 1st
+1200 1st 2nd 3rd Last 3rd 2nd 1st
+1201 1st 2nd 3rd Last 3rd 2nd 1st
+1202 1st 2nd 3rd Last 3rd 2nd 1st
+1203 1st 2nd 3rd Last 3rd 2nd 1st
+1204 1st 2nd 3rd Last 3rd 2nd 1st
+1205 1st 2nd 3rd Last 3rd 2nd 1st
+1206 1st 2nd 3rd Last 3rd 2nd 1st
+1207 1st 2nd 3rd Last 3rd 2nd 1st
+1208 1st 2nd 3rd Last 3rd 2nd 1st
+1209 1st 2nd 3rd Last 3rd 2nd 1st
+1210 1st 2nd 3rd Last 3rd 2nd 1st
+1211 1st 2nd 3rd Last 3rd 2nd 1st
+1212 1st 2nd 3rd Last 3rd 2nd 1st
+1213 1st 2nd 3rd Last 3rd 2nd 1st
+1214 1st 2nd 3rd Last 3rd 2nd 1st
+1215 1st 2nd 3rd Last 3rd 2nd 1st
+1216 1st 2nd 3rd Last 3rd 2nd 1st
+1217 1st 2nd 3rd Last 3rd 2nd 1st
+1218 1st 2nd 3rd Last 3rd 2nd 1st
+1219 1st 2nd 3rd Last 3rd 2nd 1st
+1220 1st 2nd 3rd Last 3rd 2nd 1st
+1221 1st 2nd 3rd Last 3rd 2nd 1st
+1222 1st 2nd 3rd Last 3rd 2nd 1st
+1223 1st 2nd 3rd Last 3rd 2nd 1st
+1224 1st 2nd 3rd Last 3rd 2nd 1st
+1225 1st 2nd 3rd Last 3rd 2nd 1st
+1226 1st 2nd 3rd Last 3rd 2nd 1st
+1227 1st 2nd 3rd Last 3rd 2nd 1st
+1228 1st 2nd 3rd Last 3rd 2nd 1st
+1229 1st 2nd 3rd Last 3rd 2nd 1st
+1230 1st 2nd 3rd Last 3rd 2nd 1st
+1231 1st 2nd 3rd Last 3rd 2nd 1st
+1232 1st 2nd 3rd Last 3rd 2nd 1st
+1233 1st 2nd 3rd Last 3rd 2nd 1st
+1234 1st 2nd 3rd Last 3rd 2nd 1st
+1235 1st 2nd 3rd Last 3rd 2nd 1st
+1236 1st 2nd 3rd Last 3rd 2nd 1st
+1237 1st 2nd 3rd Last 3rd 2nd 1st
+1238 1st 2nd 3rd Last 3rd 2nd 1st
+1239 1st 2nd 3rd Last 3rd 2nd 1st
+1240 1st 2nd 3rd Last 3rd 2nd 1st
+1241 1st 2nd 3rd Last 3rd 2nd 1st
+1242 1st 2nd 3rd Last 3rd 2nd 1st
+1243 1st 2nd 3rd Last 3rd 2nd 1st
+1244 1st 2nd 3rd Last 3rd 2nd 1st
+1245 1st 2nd 3rd Last 3rd 2nd 1st
+1246 1st 2nd 3rd Last 3rd 2nd 1st
+1247 1st 2nd 3rd Last 3rd 2nd 1st
+1248 1st 2nd 3rd Last 3rd 2nd 1st
+1249 1st 2nd 3rd Last 3rd 2nd 1st
+1250 1st 2nd 3rd Last 3rd 2nd 1st
+1251 1st 2nd 3rd Last 3rd 2nd 1st
+1252 1st 2nd 3rd Last 3rd 2nd 1st
+1253 1st 2nd 3rd Last 3rd 2nd 1st
+1254 1st 2nd 3rd Last 3rd 2nd 1st
+1255 1st 2nd 3rd Last 3rd 2nd 1st
+1256 1st 2nd 3rd Last 3rd 2nd 1st
+1257 1st 2nd 3rd Last 3rd 2nd 1st
+1258 1st 2nd 3rd Last 3rd 2nd 1st
+1259 1st 2nd 3rd Last 3rd 2nd 1st
+1260 1st 2nd 3rd Last 3rd 2nd 1st
+1261 1st 2nd 3rd Last 3rd 2nd 1st
+1262 1st 2nd 3rd Last 3rd 2nd 1st
+1263 1st 2nd 3rd Last 3rd 2nd 1st
+1264 1st 2nd 3rd Last 3rd 2nd 1st
+1265 1st 2nd 3rd Last 3rd 2nd 1st
+1266 1st 2nd 3rd Last 3rd 2nd 1st
+1267 1st 2nd 3rd Last 3rd 2nd 1st
+1268 1st 2nd 3rd Last 3rd 2nd 1st
+1269 1st 2nd 3rd Last 3rd 2nd 1st
+1270 1st 2nd 3rd Last 3rd 2nd 1st
+1271 1st 2nd 3rd Last 3rd 2nd 1st
+1272 1st 2nd 3rd Last 3rd 2nd 1st
+1273 1st 2nd 3rd Last 3rd 2nd 1st
+1274 1st 2nd 3rd Last 3rd 2nd 1st
+1275 1st 2nd 3rd Last 3rd 2nd 1st
+1276 1st 2nd 3rd Last 3rd 2nd 1st
+1277 1st 2nd 3rd Last 3rd 2nd 1st
+1278 1st 2nd 3rd Last 3rd 2nd 1st
+1279 1st 2nd 3rd Last 3rd 2nd 1st
+1280 1st 2nd 3rd Last 3rd 2nd 1st
+1281 1st 2nd 3rd Last 3rd 2nd 1st
+1282 1st 2nd 3rd Last 3rd 2nd 1st
+1283 1st 2nd 3rd Last 3rd 2nd 1st
+1284 1st 2nd 3rd Last 3rd 2nd 1st
+1285 1st 2nd 3rd Last 3rd 2nd 1st
+1286 1st 2nd 3rd Last 3rd 2nd 1st
+1287 1st 2nd 3rd Last 3rd 2nd 1st
+1288 1st 2nd 3rd Last 3rd 2nd 1st
+1289 1st 2nd 3rd Last 3rd 2nd 1st
+1290 1st 2nd 3rd Last 3rd 2nd 1st
+1291 1st 2nd 3rd Last 3rd 2nd 1st
+1292 1st 2nd 3rd Last 3rd 2nd 1st
+1293 1st 2nd 3rd Last 3rd 2nd 1st
+1294 1st 2nd 3rd Last 3rd 2nd 1st
+1295 1st 2nd 3rd Last 3rd 2nd 1st
+1296 1st 2nd 3rd Last 3rd 2nd 1st
+1297 1st 2nd 3rd Last 3rd 2nd 1st
+1298 1st 2nd 3rd Last 3rd 2nd 1st
+1299 1st 2nd 3rd Last 3rd 2nd 1st
+1300 1st 2nd 3rd Last 3rd 2nd 1st
+1301 1st 2nd 3rd Last 3rd 2nd 1st
+1302 1st 2nd 3rd Last 3rd 2nd 1st
+1303 1st 2nd 3rd Last 3rd 2nd 1st
+1304 1st 2nd 3rd Last 3rd 2nd 1st
+1305 1st 2nd 3rd Last 3rd 2nd 1st
+1306 1st 2nd 3rd Last 3rd 2nd 1st
+1307 1st 2nd 3rd Last 3rd 2nd 1st
+1308 1st 2nd 3rd Last 3rd 2nd 1st
+1309 1st 2nd 3rd Last 3rd 2nd 1st
+1310 1st 2nd 3rd Last 3rd 2nd 1st
+1311 1st 2nd 3rd Last 3rd 2nd 1st
+1312 1st 2nd 3rd Last 3rd 2nd 1st
+1313 1st 2nd 3rd Last 3rd 2nd 1st
+1314 1st 2nd 3rd Last 3rd 2nd 1st
+1315 1st 2nd 3rd Last 3rd 2nd 1st
+1316 1st 2nd 3rd Last 3rd 2nd 1st
+1317 1st 2nd 3rd Last 3rd 2nd 1st
+1318 1st 2nd 3rd Last 3rd 2nd 1st
+1319 1st 2nd 3rd Last 3rd 2nd 1st
+1320 1st 2nd 3rd Last 3rd 2nd 1st
+1321 1st 2nd 3rd Last 3rd 2nd 1st
+1322 1st 2nd 3rd Last 3rd 2nd 1st
+1323 1st 2nd 3rd Last 3rd 2nd 1st
+1324 1st 2nd 3rd Last 3rd 2nd 1st
+1325 1st 2nd 3rd Last 3rd 2nd 1st
+1326 1st 2nd 3rd Last 3rd 2nd 1st
+1327 1st 2nd 3rd Last 3rd 2nd 1st
+1328 1st 2nd 3rd Last 3rd 2nd 1st
+1329 1st 2nd 3rd Last 3rd 2nd 1st
+1330 1st 2nd 3rd Last 3rd 2nd 1st
+1331 1st 2nd 3rd Last 3rd 2nd 1st
+1332 1st 2nd 3rd Last 3rd 2nd 1st
+1333 1st 2nd 3rd Last 3rd 2nd 1st
+1334 1st 2nd 3rd Last 3rd 2nd 1st
+1335 1st 2nd 3rd Last 3rd 2nd 1st
+1336 1st 2nd 3rd Last 3rd 2nd 1st
+1337 1st 2nd 3rd Last 3rd 2nd 1st
+1338 1st 2nd 3rd Last 3rd 2nd 1st
+1339 1st 2nd 3rd Last 3rd 2nd 1st
+1340 1st 2nd 3rd Last 3rd 2nd 1st
+1341 1st 2nd 3rd Last 3rd 2nd 1st
+1342 1st 2nd 3rd Last 3rd 2nd 1st
+1343 1st 2nd 3rd Last 3rd 2nd 1st
+1344 1st 2nd 3rd Last 3rd 2nd 1st
+1345 1st 2nd 3rd Last 3rd 2nd 1st
+1346 1st 2nd 3rd Last 3rd 2nd 1st
+1347 1st 2nd 3rd Last 3rd 2nd 1st
+1348 1st 2nd 3rd Last 3rd 2nd 1st
+1349 1st 2nd 3rd Last 3rd 2nd 1st
+1350 1st 2nd 3rd Last 3rd 2nd 1st
+1351 1st 2nd 3rd Last 3rd 2nd 1st
+1352 1st 2nd 3rd Last 3rd 2nd 1st
+1353 1st 2nd 3rd Last 3rd 2nd 1st
+1354 1st 2nd 3rd Last 3rd 2nd 1st
+1355 1st 2nd 3rd Last 3rd 2nd 1st
+1356 1st 2nd 3rd Last 3rd 2nd 1st
+1357 1st 2nd 3rd Last 3rd 2nd 1st
+1358 1st 2nd 3rd Last 3rd 2nd 1st
+1359 1st 2nd 3rd Last 3rd 2nd 1st
+1360 1st 2nd 3rd Last 3rd 2nd 1st
+1361 1st 2nd 3rd Last 3rd 2nd 1st
+1362 1st 2nd 3rd Last 3rd 2nd 1st
+1363 1st 2nd 3rd Last 3rd 2nd 1st
+1364 1st 2nd 3rd Last 3rd 2nd 1st
+1365 1st 2nd 3rd Last 3rd 2nd 1st
+1366 1st 2nd 3rd Last 3rd 2nd 1st
+1367 1st 2nd 3rd Last 3rd 2nd 1st
+1368 1st 2nd 3rd Last 3rd 2nd 1st
+1369 1st 2nd 3rd Last 3rd 2nd 1st
+1370 1st 2nd 3rd Last 3rd 2nd 1st
+1371 1st 2nd 3rd Last 3rd 2nd 1st
+1372 1st 2nd 3rd Last 3rd 2nd 1st
+1373 1st 2nd 3rd Last 3rd 2nd 1st
+1374 1st 2nd 3rd Last 3rd 2nd 1st
+1375 1st 2nd 3rd Last 3rd 2nd 1st
+1376 1st 2nd 3rd Last 3rd 2nd 1st
+1377 1st 2nd 3rd Last 3rd 2nd 1st
+1378 1st 2nd 3rd Last 3rd 2nd 1st
+1379 1st 2nd 3rd Last 3rd 2nd 1st
+1380 1st 2nd 3rd Last 3rd 2nd 1st
+1381 1st 2nd 3rd Last 3rd 2nd 1st
+1382 1st 2nd 3rd Last 3rd 2nd 1st
+1383 1st 2nd 3rd Last 3rd 2nd 1st
+1384 1st 2nd 3rd Last 3rd 2nd 1st
+1385 1st 2nd 3rd Last 3rd 2nd 1st
+1386 1st 2nd 3rd Last 3rd 2nd 1st
+1387 1st 2nd 3rd Last 3rd 2nd 1st
+1388 1st 2nd 3rd Last 3rd 2nd 1st
+1389 1st 2nd 3rd Last 3rd 2nd 1st
+1390 1st 2nd 3rd Last 3rd 2nd 1st
+1391 1st 2nd 3rd Last 3rd 2nd 1st
+1392 1st 2nd 3rd Last 3rd 2nd 1st
+1393 1st 2nd 3rd Last 3rd 2nd 1st
+1394 1st 2nd 3rd Last 3rd 2nd 1st
+1395 1st 2nd 3rd Last 3rd 2nd 1st
+1396 1st 2nd 3rd Last 3rd 2nd 1st
+1397 1st 2nd 3rd Last 3rd 2nd 1st
+1398 1st 2nd 3rd Last 3rd 2nd 1st
+1399 1st 2nd 3rd Last 3rd 2nd 1st
+1400 1st 2nd 3rd Last 3rd 2nd 1st
+1401 1st 2nd 3rd Last 3rd 2nd 1st
+1402 1st 2nd 3rd Last 3rd 2nd 1st
+1403 1st 2nd 3rd Last 3rd 2nd 1st
+1404 1st 2nd 3rd Last 3rd 2nd 1st
+1405 1st 2nd 3rd Last 3rd 2nd 1st
+1406 1st 2nd 3rd Last 3rd 2nd 1st
+1407 1st 2nd 3rd Last 3rd 2nd 1st
+1408 1st 2nd 3rd Last 3rd 2nd 1st
+1409 1st 2nd 3rd Last 3rd 2nd 1st
+1410 1st 2nd 3rd Last 3rd 2nd 1st
+1411 1st 2nd 3rd Last 3rd 2nd 1st
+1412 1st 2nd 3rd Last 3rd 2nd 1st
+1413 1st 2nd 3rd Last 3rd 2nd 1st
+1414 1st 2nd 3rd Last 3rd 2nd 1st
+1415 1st 2nd 3rd Last 3rd 2nd 1st
+1416 1st 2nd 3rd Last 3rd 2nd 1st
+1417 1st 2nd 3rd Last 3rd 2nd 1st
+1418 1st 2nd 3rd Last 3rd 2nd 1st
+1419 1st 2nd 3rd Last 3rd 2nd 1st
+1420 1st 2nd 3rd Last 3rd 2nd 1st
+1421 1st 2nd 3rd Last 3rd 2nd 1st
+1422 1st 2nd 3rd Last 3rd 2nd 1st
+1423 1st 2nd 3rd Last 3rd 2nd 1st
+1424 1st 2nd 3rd Last 3rd 2nd 1st
+1425 1st 2nd 3rd Last 3rd 2nd 1st
+1426 1st 2nd 3rd Last 3rd 2nd 1st
+1427 1st 2nd 3rd Last 3rd 2nd 1st
+1428 1st 2nd 3rd Last 3rd 2nd 1st
+1429 1st 2nd 3rd Last 3rd 2nd 1st
+1430 1st 2nd 3rd Last 3rd 2nd 1st
+1431 1st 2nd 3rd Last 3rd 2nd 1st
+1432 1st 2nd 3rd Last 3rd 2nd 1st
+1433 1st 2nd 3rd Last 3rd 2nd 1st
+1434 1st 2nd 3rd Last 3rd 2nd 1st
+1435 1st 2nd 3rd Last 3rd 2nd 1st
+1436 1st 2nd 3rd Last 3rd 2nd 1st
+1437 1st 2nd 3rd Last 3rd 2nd 1st
+1438 1st 2nd 3rd Last 3rd 2nd 1st
+1439 1st 2nd 3rd Last 3rd 2nd 1st
+1440 1st 2nd 3rd Last 3rd 2nd 1st
+1441 1st 2nd 3rd Last 3rd 2nd 1st
+1442 1st 2nd 3rd Last 3rd 2nd 1st
+1443 1st 2nd 3rd Last 3rd 2nd 1st
+1444 1st 2nd 3rd Last 3rd 2nd 1st
+1445 1st 2nd 3rd Last 3rd 2nd 1st
+1446 1st 2nd 3rd Last 3rd 2nd 1st
+1447 1st 2nd 3rd Last 3rd 2nd 1st
+1448 1st 2nd 3rd Last 3rd 2nd 1st
+1449 1st 2nd 3rd Last 3rd 2nd 1st
+1450 1st 2nd 3rd Last 3rd 2nd 1st
+1451 1st 2nd 3rd Last 3rd 2nd 1st
+1452 1st 2nd 3rd Last 3rd 2nd 1st
+1453 1st 2nd 3rd Last 3rd 2nd 1st
+1454 1st 2nd 3rd Last 3rd 2nd 1st
+1455 1st 2nd 3rd Last 3rd 2nd 1st
+1456 1st 2nd 3rd Last 3rd 2nd 1st
+1457 1st 2nd 3rd Last 3rd 2nd 1st
+1458 1st 2nd 3rd Last 3rd 2nd 1st
+1459 1st 2nd 3rd Last 3rd 2nd 1st
+1460 1st 2nd 3rd Last 3rd 2nd 1st
+1461 1st 2nd 3rd Last 3rd 2nd 1st
+1462 1st 2nd 3rd Last 3rd 2nd 1st
+1463 1st 2nd 3rd Last 3rd 2nd 1st
+1464 1st 2nd 3rd Last 3rd 2nd 1st
+1465 1st 2nd 3rd Last 3rd 2nd 1st
+1466 1st 2nd 3rd Last 3rd 2nd 1st
+1467 1st 2nd 3rd Last 3rd 2nd 1st
+1468 1st 2nd 3rd Last 3rd 2nd 1st
+1469 1st 2nd 3rd Last 3rd 2nd 1st
+1470 1st 2nd 3rd Last 3rd 2nd 1st
+1471 1st 2nd 3rd Last 3rd 2nd 1st
+1472 1st 2nd 3rd Last 3rd 2nd 1st
+1473 1st 2nd 3rd Last 3rd 2nd 1st
+1474 1st 2nd 3rd Last 3rd 2nd 1st
+1475 1st 2nd 3rd Last 3rd 2nd 1st
+1476 1st 2nd 3rd Last 3rd 2nd 1st
+1477 1st 2nd 3rd Last 3rd 2nd 1st
+1478 1st 2nd 3rd Last 3rd 2nd 1st
+1479 1st 2nd 3rd Last 3rd 2nd 1st
+1480 1st 2nd 3rd Last 3rd 2nd 1st
+1481 1st 2nd 3rd Last 3rd 2nd 1st
+1482 1st 2nd 3rd Last 3rd 2nd 1st
+1483 1st 2nd 3rd Last 3rd 2nd 1st
+1484 1st 2nd 3rd Last 3rd 2nd 1st
+1485 1st 2nd 3rd Last 3rd 2nd 1st
+1486 1st 2nd 3rd Last 3rd 2nd 1st
+1487 1st 2nd 3rd Last 3rd 2nd 1st
+1488 1st 2nd 3rd Last 3rd 2nd 1st
+1489 1st 2nd 3rd Last 3rd 2nd 1st
+1490 1st 2nd 3rd Last 3rd 2nd 1st
+1491 1st 2nd 3rd Last 3rd 2nd 1st
+1492 1st 2nd 3rd Last 3rd 2nd 1st
+1493 1st 2nd 3rd Last 3rd 2nd 1st
+1494 1st 2nd 3rd Last 3rd 2nd 1st
+1495 1st 2nd 3rd Last 3rd 2nd 1st
+1496 1st 2nd 3rd Last 3rd 2nd 1st
+1497 1st 2nd 3rd Last 3rd 2nd 1st
+1498 1st 2nd 3rd Last 3rd 2nd 1st
+1499 1st 2nd 3rd Last 3rd 2nd 1st
+1500 1st 2nd 3rd Last 3rd 2nd 1st
+1501 1st 2nd 3rd Last 3rd 2nd 1st
+1502 1st 2nd 3rd Last 3rd 2nd 1st
+1503 1st 2nd 3rd Last 3rd 2nd 1st
+1504 1st 2nd 3rd Last 3rd 2nd 1st
+1505 1st 2nd 3rd Last 3rd 2nd 1st
+1506 1st 2nd 3rd Last 3rd 2nd 1st
+1507 1st 2nd 3rd Last 3rd 2nd 1st
+1508 1st 2nd 3rd Last 3rd 2nd 1st
+1509 1st 2nd 3rd Last 3rd 2nd 1st
+1510 1st 2nd 3rd Last 3rd 2nd 1st
+1511 1st 2nd 3rd Last 3rd 2nd 1st
+1512 1st 2nd 3rd Last 3rd 2nd 1st
+1513 1st 2nd 3rd Last 3rd 2nd 1st
+1514 1st 2nd 3rd Last 3rd 2nd 1st
+1515 1st 2nd 3rd Last 3rd 2nd 1st
+1516 1st 2nd 3rd Last 3rd 2nd 1st
+1517 1st 2nd 3rd Last 3rd 2nd 1st
+1518 1st 2nd 3rd Last 3rd 2nd 1st
+1519 1st 2nd 3rd Last 3rd 2nd 1st
+1520 1st 2nd 3rd Last 3rd 2nd 1st
+1521 1st 2nd 3rd Last 3rd 2nd 1st
+1522 1st 2nd 3rd Last 3rd 2nd 1st
+1523 1st 2nd 3rd Last 3rd 2nd 1st
+1524 1st 2nd 3rd Last 3rd 2nd 1st
+1525 1st 2nd 3rd Last 3rd 2nd 1st
+1526 1st 2nd 3rd Last 3rd 2nd 1st
+1527 1st 2nd 3rd Last 3rd 2nd 1st
+1528 1st 2nd 3rd Last 3rd 2nd 1st
+1529 1st 2nd 3rd Last 3rd 2nd 1st
+1530 1st 2nd 3rd Last 3rd 2nd 1st
+1531 1st 2nd 3rd Last 3rd 2nd 1st
+1532 1st 2nd 3rd Last 3rd 2nd 1st
+1533 1st 2nd 3rd Last 3rd 2nd 1st
+1534 1st 2nd 3rd Last 3rd 2nd 1st
+1535 1st 2nd 3rd Last 3rd 2nd 1st
+1536 1st 2nd 3rd Last 3rd 2nd 1st
+1537 1st 2nd 3rd Last 3rd 2nd 1st
+1538 1st 2nd 3rd Last 3rd 2nd 1st
+1539 1st 2nd 3rd Last 3rd 2nd 1st
+1540 1st 2nd 3rd Last 3rd 2nd 1st
+1541 1st 2nd 3rd Last 3rd 2nd 1st
+1542 1st 2nd 3rd Last 3rd 2nd 1st
+1543 1st 2nd 3rd Last 3rd 2nd 1st
+1544 1st 2nd 3rd Last 3rd 2nd 1st
+1545 1st 2nd 3rd Last 3rd 2nd 1st
+1546 1st 2nd 3rd Last 3rd 2nd 1st
+1547 1st 2nd 3rd Last 3rd 2nd 1st
+1548 1st 2nd 3rd Last 3rd 2nd 1st
+1549 1st 2nd 3rd Last 3rd 2nd 1st
+1550 1st 2nd 3rd Last 3rd 2nd 1st
+1551 1st 2nd 3rd Last 3rd 2nd 1st
+1552 1st 2nd 3rd Last 3rd 2nd 1st
+1553 1st 2nd 3rd Last 3rd 2nd 1st
+1554 1st 2nd 3rd Last 3rd 2nd 1st
+1555 1st 2nd 3rd Last 3rd 2nd 1st
+1556 1st 2nd 3rd Last 3rd 2nd 1st
+1557 1st 2nd 3rd Last 3rd 2nd 1st
+1558 1st 2nd 3rd Last 3rd 2nd 1st
+1559 1st 2nd 3rd Last 3rd 2nd 1st
+1560 1st 2nd 3rd Last 3rd 2nd 1st
+1561 1st 2nd 3rd Last 3rd 2nd 1st
+1562 1st 2nd 3rd Last 3rd 2nd 1st
+1563 1st 2nd 3rd Last 3rd 2nd 1st
+1564 1st 2nd 3rd Last 3rd 2nd 1st
+1565 1st 2nd 3rd Last 3rd 2nd 1st
+1566 1st 2nd 3rd Last 3rd 2nd 1st
+1567 1st 2nd 3rd Last 3rd 2nd 1st
+1568 1st 2nd 3rd Last 3rd 2nd 1st
+1569 1st 2nd 3rd Last 3rd 2nd 1st
+1570 1st 2nd 3rd Last 3rd 2nd 1st
+1571 1st 2nd 3rd Last 3rd 2nd 1st
+1572 1st 2nd 3rd Last 3rd 2nd 1st
+1573 1st 2nd 3rd Last 3rd 2nd 1st
+1574 1st 2nd 3rd Last 3rd 2nd 1st
+1575 1st 2nd 3rd Last 3rd 2nd 1st
+1576 1st 2nd 3rd Last 3rd 2nd 1st
+1577 1st 2nd 3rd Last 3rd 2nd 1st
+1578 1st 2nd 3rd Last 3rd 2nd 1st
+1579 1st 2nd 3rd Last 3rd 2nd 1st
+1580 1st 2nd 3rd Last 3rd 2nd 1st
+1581 1st 2nd 3rd Last 3rd 2nd 1st
+1582 1st 2nd 3rd Last 3rd 2nd 1st
+1583 1st 2nd 3rd Last 3rd 2nd 1st
+1584 1st 2nd 3rd Last 3rd 2nd 1st
+1585 1st 2nd 3rd Last 3rd 2nd 1st
+1586 1st 2nd 3rd Last 3rd 2nd 1st
+1587 1st 2nd 3rd Last 3rd 2nd 1st
+1588 1st 2nd 3rd Last 3rd 2nd 1st
+1589 1st 2nd 3rd Last 3rd 2nd 1st
+1590 1st 2nd 3rd Last 3rd 2nd 1st
+1591 1st 2nd 3rd Last 3rd 2nd 1st
+1592 1st 2nd 3rd Last 3rd 2nd 1st
+1593 1st 2nd 3rd Last 3rd 2nd 1st
+1594 1st 2nd 3rd Last 3rd 2nd 1st
+1595 1st 2nd 3rd Last 3rd 2nd 1st
+1596 1st 2nd 3rd Last 3rd 2nd 1st
+1597 1st 2nd 3rd Last 3rd 2nd 1st
+1598 1st 2nd 3rd Last 3rd 2nd 1st
+1599 1st 2nd 3rd Last 3rd 2nd 1st
+1600 1st 2nd 3rd Last 3rd 2nd 1st
+1601 1st 2nd 3rd Last 3rd 2nd 1st
+1602 1st 2nd 3rd Last 3rd 2nd 1st
+1603 1st 2nd 3rd Last 3rd 2nd 1st
+1604 1st 2nd 3rd Last 3rd 2nd 1st
+1605 1st 2nd 3rd Last 3rd 2nd 1st
+1606 1st 2nd 3rd Last 3rd 2nd 1st
+1607 1st 2nd 3rd Last 3rd 2nd 1st
+1608 1st 2nd 3rd Last 3rd 2nd 1st
+1609 1st 2nd 3rd Last 3rd 2nd 1st
+1610 1st 2nd 3rd Last 3rd 2nd 1st
+1611 1st 2nd 3rd Last 3rd 2nd 1st
+1612 1st 2nd 3rd Last 3rd 2nd 1st
+1613 1st 2nd 3rd Last 3rd 2nd 1st
+1614 1st 2nd 3rd Last 3rd 2nd 1st
+1615 1st 2nd 3rd Last 3rd 2nd 1st
+1616 1st 2nd 3rd Last 3rd 2nd 1st
+1617 1st 2nd 3rd Last 3rd 2nd 1st
+1618 1st 2nd 3rd Last 3rd 2nd 1st
+1619 1st 2nd 3rd Last 3rd 2nd 1st
+1620 1st 2nd 3rd Last 3rd 2nd 1st
+1621 1st 2nd 3rd Last 3rd 2nd 1st
+1622 1st 2nd 3rd Last 3rd 2nd 1st
+1623 1st 2nd 3rd Last 3rd 2nd 1st
+1624 1st 2nd 3rd Last 3rd 2nd 1st
+1625 1st 2nd 3rd Last 3rd 2nd 1st
+1626 1st 2nd 3rd Last 3rd 2nd 1st
+1627 1st 2nd 3rd Last 3rd 2nd 1st
+1628 1st 2nd 3rd Last 3rd 2nd 1st
+1629 1st 2nd 3rd Last 3rd 2nd 1st
+1630 1st 2nd 3rd Last 3rd 2nd 1st
+1631 1st 2nd 3rd Last 3rd 2nd 1st
+1632 1st 2nd 3rd Last 3rd 2nd 1st
+1633 1st 2nd 3rd Last 3rd 2nd 1st
+1634 1st 2nd 3rd Last 3rd 2nd 1st
+1635 1st 2nd 3rd Last 3rd 2nd 1st
+1636 1st 2nd 3rd Last 3rd 2nd 1st
+1637 1st 2nd 3rd Last 3rd 2nd 1st
+1638 1st 2nd 3rd Last 3rd 2nd 1st
+1639 1st 2nd 3rd Last 3rd 2nd 1st
+1640 1st 2nd 3rd Last 3rd 2nd 1st
+1641 1st 2nd 3rd Last 3rd 2nd 1st
+1642 1st 2nd 3rd Last 3rd 2nd 1st
+1643 1st 2nd 3rd Last 3rd 2nd 1st
+1644 1st 2nd 3rd Last 3rd 2nd 1st
+1645 1st 2nd 3rd Last 3rd 2nd 1st
+1646 1st 2nd 3rd Last 3rd 2nd 1st
+1647 1st 2nd 3rd Last 3rd 2nd 1st
+1648 1st 2nd 3rd Last 3rd 2nd 1st
+1649 1st 2nd 3rd Last 3rd 2nd 1st
+1650 1st 2nd 3rd Last 3rd 2nd 1st
+1651 1st 2nd 3rd Last 3rd 2nd 1st
+1652 1st 2nd 3rd Last 3rd 2nd 1st
+1653 1st 2nd 3rd Last 3rd 2nd 1st
+1654 1st 2nd 3rd Last 3rd 2nd 1st
+1655 1st 2nd 3rd Last 3rd 2nd 1st
+1656 1st 2nd 3rd Last 3rd 2nd 1st
+1657 1st 2nd 3rd Last 3rd 2nd 1st
+1658 1st 2nd 3rd Last 3rd 2nd 1st
+1659 1st 2nd 3rd Last 3rd 2nd 1st
+1660 1st 2nd 3rd Last 3rd 2nd 1st
+1661 1st 2nd 3rd Last 3rd 2nd 1st
+1662 1st 2nd 3rd Last 3rd 2nd 1st
+1663 1st 2nd 3rd Last 3rd 2nd 1st
+1664 1st 2nd 3rd Last 3rd 2nd 1st
+1665 1st 2nd 3rd Last 3rd 2nd 1st
+1666 1st 2nd 3rd Last 3rd 2nd 1st
+1667 1st 2nd 3rd Last 3rd 2nd 1st
+1668 1st 2nd 3rd Last 3rd 2nd 1st
+1669 1st 2nd 3rd Last 3rd 2nd 1st
+1670 1st 2nd 3rd Last 3rd 2nd 1st
+1671 1st 2nd 3rd Last 3rd 2nd 1st
+1672 1st 2nd 3rd Last 3rd 2nd 1st
+1673 1st 2nd 3rd Last 3rd 2nd 1st
+1674 1st 2nd 3rd Last 3rd 2nd 1st
+1675 1st 2nd 3rd Last 3rd 2nd 1st
+1676 1st 2nd 3rd Last 3rd 2nd 1st
+1677 1st 2nd 3rd Last 3rd 2nd 1st
+1678 1st 2nd 3rd Last 3rd 2nd 1st
+1679 1st 2nd 3rd Last 3rd 2nd 1st
+1680 1st 2nd 3rd Last 3rd 2nd 1st
+1681 1st 2nd 3rd Last 3rd 2nd 1st
+1682 1st 2nd 3rd Last 3rd 2nd 1st
+1683 1st 2nd 3rd Last 3rd 2nd 1st
+1684 1st 2nd 3rd Last 3rd 2nd 1st
+1685 1st 2nd 3rd Last 3rd 2nd 1st
+1686 1st 2nd 3rd Last 3rd 2nd 1st
+1687 1st 2nd 3rd Last 3rd 2nd 1st
+1688 1st 2nd 3rd Last 3rd 2nd 1st
+1689 1st 2nd 3rd Last 3rd 2nd 1st
+1690 1st 2nd 3rd Last 3rd 2nd 1st
+1691 1st 2nd 3rd Last 3rd 2nd 1st
+1692 1st 2nd 3rd Last 3rd 2nd 1st
+1693 1st 2nd 3rd Last 3rd 2nd 1st
+1694 1st 2nd 3rd Last 3rd 2nd 1st
+1695 1st 2nd 3rd Last 3rd 2nd 1st
+1696 1st 2nd 3rd Last 3rd 2nd 1st
+1697 1st 2nd 3rd Last 3rd 2nd 1st
+1698 1st 2nd 3rd Last 3rd 2nd 1st
+1699 1st 2nd 3rd Last 3rd 2nd 1st
+1700 1st 2nd 3rd Last 3rd 2nd 1st
+1701 1st 2nd 3rd Last 3rd 2nd 1st
+1702 1st 2nd 3rd Last 3rd 2nd 1st
+1703 1st 2nd 3rd Last 3rd 2nd 1st
+1704 1st 2nd 3rd Last 3rd 2nd 1st
+1705 1st 2nd 3rd Last 3rd 2nd 1st
+1706 1st 2nd 3rd Last 3rd 2nd 1st
+1707 1st 2nd 3rd Last 3rd 2nd 1st
+1708 1st 2nd 3rd Last 3rd 2nd 1st
+1709 1st 2nd 3rd Last 3rd 2nd 1st
+1710 1st 2nd 3rd Last 3rd 2nd 1st
+1711 1st 2nd 3rd Last 3rd 2nd 1st
+1712 1st 2nd 3rd Last 3rd 2nd 1st
+1713 1st 2nd 3rd Last 3rd 2nd 1st
+1714 1st 2nd 3rd Last 3rd 2nd 1st
+1715 1st 2nd 3rd Last 3rd 2nd 1st
+1716 1st 2nd 3rd Last 3rd 2nd 1st
+1717 1st 2nd 3rd Last 3rd 2nd 1st
+1718 1st 2nd 3rd Last 3rd 2nd 1st
+1719 1st 2nd 3rd Last 3rd 2nd 1st
+1720 1st 2nd 3rd Last 3rd 2nd 1st
+1721 1st 2nd 3rd Last 3rd 2nd 1st
+1722 1st 2nd 3rd Last 3rd 2nd 1st
+1723 1st 2nd 3rd Last 3rd 2nd 1st
+1724 1st 2nd 3rd Last 3rd 2nd 1st
+1725 1st 2nd 3rd Last 3rd 2nd 1st
+1726 1st 2nd 3rd Last 3rd 2nd 1st
+1727 1st 2nd 3rd Last 3rd 2nd 1st
+1728 1st 2nd 3rd Last 3rd 2nd 1st
+1729 1st 2nd 3rd Last 3rd 2nd 1st
+1730 1st 2nd 3rd Last 3rd 2nd 1st
+1731 1st 2nd 3rd Last 3rd 2nd 1st
+1732 1st 2nd 3rd Last 3rd 2nd 1st
+1733 1st 2nd 3rd Last 3rd 2nd 1st
+1734 1st 2nd 3rd Last 3rd 2nd 1st
+1735 1st 2nd 3rd Last 3rd 2nd 1st
+1736 1st 2nd 3rd Last 3rd 2nd 1st
+1737 1st 2nd 3rd Last 3rd 2nd 1st
+1738 1st 2nd 3rd Last 3rd 2nd 1st
+1739 1st 2nd 3rd Last 3rd 2nd 1st
+1740 1st 2nd 3rd Last 3rd 2nd 1st
+1741 1st 2nd 3rd Last 3rd 2nd 1st
+1742 1st 2nd 3rd Last 3rd 2nd 1st
+1743 1st 2nd 3rd Last 3rd 2nd 1st
+1744 1st 2nd 3rd Last 3rd 2nd 1st
+1745 1st 2nd 3rd Last 3rd 2nd 1st
+1746 1st 2nd 3rd Last 3rd 2nd 1st
+1747 1st 2nd 3rd Last 3rd 2nd 1st
+1748 1st 2nd 3rd Last 3rd 2nd 1st
+1749 1st 2nd 3rd Last 3rd 2nd 1st
+1750 1st 2nd 3rd Last 3rd 2nd 1st
+1751 1st 2nd 3rd Last 3rd 2nd 1st
+1752 1st 2nd 3rd Last 3rd 2nd 1st
+1753 1st 2nd 3rd Last 3rd 2nd 1st
+1754 1st 2nd 3rd Last 3rd 2nd 1st
+1755 1st 2nd 3rd Last 3rd 2nd 1st
+1756 1st 2nd 3rd Last 3rd 2nd 1st
+1757 1st 2nd 3rd Last 3rd 2nd 1st
+1758 1st 2nd 3rd Last 3rd 2nd 1st
+1759 1st 2nd 3rd Last 3rd 2nd 1st
+1760 1st 2nd 3rd Last 3rd 2nd 1st
+1761 1st 2nd 3rd Last 3rd 2nd 1st
+1762 1st 2nd 3rd Last 3rd 2nd 1st
+1763 1st 2nd 3rd Last 3rd 2nd 1st
+1764 1st 2nd 3rd Last 3rd 2nd 1st
+1765 1st 2nd 3rd Last 3rd 2nd 1st
+1766 1st 2nd 3rd Last 3rd 2nd 1st
+1767 1st 2nd 3rd Last 3rd 2nd 1st
+1768 1st 2nd 3rd Last 3rd 2nd 1st
+1769 1st 2nd 3rd Last 3rd 2nd 1st
+1770 1st 2nd 3rd Last 3rd 2nd 1st
+1771 1st 2nd 3rd Last 3rd 2nd 1st
+1772 1st 2nd 3rd Last 3rd 2nd 1st
+1773 1st 2nd 3rd Last 3rd 2nd 1st
+1774 1st 2nd 3rd Last 3rd 2nd 1st
+1775 1st 2nd 3rd Last 3rd 2nd 1st
+1776 1st 2nd 3rd Last 3rd 2nd 1st
+1777 1st 2nd 3rd Last 3rd 2nd 1st
+1778 1st 2nd 3rd Last 3rd 2nd 1st
+1779 1st 2nd 3rd Last 3rd 2nd 1st
+1780 1st 2nd 3rd Last 3rd 2nd 1st
+1781 1st 2nd 3rd Last 3rd 2nd 1st
+1782 1st 2nd 3rd Last 3rd 2nd 1st
+1783 1st 2nd 3rd Last 3rd 2nd 1st
+1784 1st 2nd 3rd Last 3rd 2nd 1st
+1785 1st 2nd 3rd Last 3rd 2nd 1st
+1786 1st 2nd 3rd Last 3rd 2nd 1st
+1787 1st 2nd 3rd Last 3rd 2nd 1st
+1788 1st 2nd 3rd Last 3rd 2nd 1st
+1789 1st 2nd 3rd Last 3rd 2nd 1st
+1790 1st 2nd 3rd Last 3rd 2nd 1st
+1791 1st 2nd 3rd Last 3rd 2nd 1st
+1792 1st 2nd 3rd Last 3rd 2nd 1st
+1793 1st 2nd 3rd Last 3rd 2nd 1st
+1794 1st 2nd 3rd Last 3rd 2nd 1st
+1795 1st 2nd 3rd Last 3rd 2nd 1st
+1796 1st 2nd 3rd Last 3rd 2nd 1st
+1797 1st 2nd 3rd Last 3rd 2nd 1st
+1798 1st 2nd 3rd Last 3rd 2nd 1st
+1799 1st 2nd 3rd Last 3rd 2nd 1st
+1800 1st 2nd 3rd Last 3rd 2nd 1st
+1801 1st 2nd 3rd Last 3rd 2nd 1st
+1802 1st 2nd 3rd Last 3rd 2nd 1st
+1803 1st 2nd 3rd Last 3rd 2nd 1st
+1804 1st 2nd 3rd Last 3rd 2nd 1st
+1805 1st 2nd 3rd Last 3rd 2nd 1st
+1806 1st 2nd 3rd Last 3rd 2nd 1st
+1807 1st 2nd 3rd Last 3rd 2nd 1st
+1808 1st 2nd 3rd Last 3rd 2nd 1st
+1809 1st 2nd 3rd Last 3rd 2nd 1st
+1810 1st 2nd 3rd Last 3rd 2nd 1st
+1811 1st 2nd 3rd Last 3rd 2nd 1st
+1812 1st 2nd 3rd Last 3rd 2nd 1st
+1813 1st 2nd 3rd Last 3rd 2nd 1st
+1814 1st 2nd 3rd Last 3rd 2nd 1st
+1815 1st 2nd 3rd Last 3rd 2nd 1st
+1816 1st 2nd 3rd Last 3rd 2nd 1st
+1817 1st 2nd 3rd Last 3rd 2nd 1st
+1818 1st 2nd 3rd Last 3rd 2nd 1st
+1819 1st 2nd 3rd Last 3rd 2nd 1st
+1820 1st 2nd 3rd Last 3rd 2nd 1st
+1821 1st 2nd 3rd Last 3rd 2nd 1st
+1822 1st 2nd 3rd Last 3rd 2nd 1st
+1823 1st 2nd 3rd Last 3rd 2nd 1st
+1824 1st 2nd 3rd Last 3rd 2nd 1st
+1825 1st 2nd 3rd Last 3rd 2nd 1st
+1826 1st 2nd 3rd Last 3rd 2nd 1st
+1827 1st 2nd 3rd Last 3rd 2nd 1st
+1828 1st 2nd 3rd Last 3rd 2nd 1st
+1829 1st 2nd 3rd Last 3rd 2nd 1st
+1830 1st 2nd 3rd Last 3rd 2nd 1st
+1831 1st 2nd 3rd Last 3rd 2nd 1st
+1832 1st 2nd 3rd Last 3rd 2nd 1st
+1833 1st 2nd 3rd Last 3rd 2nd 1st
+1834 1st 2nd 3rd Last 3rd 2nd 1st
+1835 1st 2nd 3rd Last 3rd 2nd 1st
+1836 1st 2nd 3rd Last 3rd 2nd 1st
+1837 1st 2nd 3rd Last 3rd 2nd 1st
+1838 1st 2nd 3rd Last 3rd 2nd 1st
+1839 1st 2nd 3rd Last 3rd 2nd 1st
+1840 1st 2nd 3rd Last 3rd 2nd 1st
+1841 1st 2nd 3rd Last 3rd 2nd 1st
+1842 1st 2nd 3rd Last 3rd 2nd 1st
+1843 1st 2nd 3rd Last 3rd 2nd 1st
+1844 1st 2nd 3rd Last 3rd 2nd 1st
+1845 1st 2nd 3rd Last 3rd 2nd 1st
+1846 1st 2nd 3rd Last 3rd 2nd 1st
+1847 1st 2nd 3rd Last 3rd 2nd 1st
+1848 1st 2nd 3rd Last 3rd 2nd 1st
+1849 1st 2nd 3rd Last 3rd 2nd 1st
+1850 1st 2nd 3rd Last 3rd 2nd 1st
+1851 1st 2nd 3rd Last 3rd 2nd 1st
+1852 1st 2nd 3rd Last 3rd 2nd 1st
+1853 1st 2nd 3rd Last 3rd 2nd 1st
+1854 1st 2nd 3rd Last 3rd 2nd 1st
+1855 1st 2nd 3rd Last 3rd 2nd 1st
+1856 1st 2nd 3rd Last 3rd 2nd 1st
+1857 1st 2nd 3rd Last 3rd 2nd 1st
+1858 1st 2nd 3rd Last 3rd 2nd 1st
+1859 1st 2nd 3rd Last 3rd 2nd 1st
+1860 1st 2nd 3rd Last 3rd 2nd 1st
+1861 1st 2nd 3rd Last 3rd 2nd 1st
+1862 1st 2nd 3rd Last 3rd 2nd 1st
+1863 1st 2nd 3rd Last 3rd 2nd 1st
+1864 1st 2nd 3rd Last 3rd 2nd 1st
+1865 1st 2nd 3rd Last 3rd 2nd 1st
+1866 1st 2nd 3rd Last 3rd 2nd 1st
+1867 1st 2nd 3rd Last 3rd 2nd 1st
+1868 1st 2nd 3rd Last 3rd 2nd 1st
+1869 1st 2nd 3rd Last 3rd 2nd 1st
+1870 1st 2nd 3rd Last 3rd 2nd 1st
+1871 1st 2nd 3rd Last 3rd 2nd 1st
+1872 1st 2nd 3rd Last 3rd 2nd 1st
+1873 1st 2nd 3rd Last 3rd 2nd 1st
+1874 1st 2nd 3rd Last 3rd 2nd 1st
+1875 1st 2nd 3rd Last 3rd 2nd 1st
+1876 1st 2nd 3rd Last 3rd 2nd 1st
+1877 1st 2nd 3rd Last 3rd 2nd 1st
+1878 1st 2nd 3rd Last 3rd 2nd 1st
+1879 1st 2nd 3rd Last 3rd 2nd 1st
+1880 1st 2nd 3rd Last 3rd 2nd 1st
+1881 1st 2nd 3rd Last 3rd 2nd 1st
+1882 1st 2nd 3rd Last 3rd 2nd 1st
+1883 1st 2nd 3rd Last 3rd 2nd 1st
+1884 1st 2nd 3rd Last 3rd 2nd 1st
+1885 1st 2nd 3rd Last 3rd 2nd 1st
+1886 1st 2nd 3rd Last 3rd 2nd 1st
+1887 1st 2nd 3rd Last 3rd 2nd 1st
+1888 1st 2nd 3rd Last 3rd 2nd 1st
+1889 1st 2nd 3rd Last 3rd 2nd 1st
+1890 1st 2nd 3rd Last 3rd 2nd 1st
+1891 1st 2nd 3rd Last 3rd 2nd 1st
+1892 1st 2nd 3rd Last 3rd 2nd 1st
+1893 1st 2nd 3rd Last 3rd 2nd 1st
+1894 1st 2nd 3rd Last 3rd 2nd 1st
+1895 1st 2nd 3rd Last 3rd 2nd 1st
+1896 1st 2nd 3rd Last 3rd 2nd 1st
+1897 1st 2nd 3rd Last 3rd 2nd 1st
+1898 1st 2nd 3rd Last 3rd 2nd 1st
+1899 1st 2nd 3rd Last 3rd 2nd 1st
+1900 1st 2nd 3rd Last 3rd 2nd 1st
+1901 1st 2nd 3rd Last 3rd 2nd 1st
+1902 1st 2nd 3rd Last 3rd 2nd 1st
+1903 1st 2nd 3rd Last 3rd 2nd 1st
+1904 1st 2nd 3rd Last 3rd 2nd 1st
+1905 1st 2nd 3rd Last 3rd 2nd 1st
+1906 1st 2nd 3rd Last 3rd 2nd 1st
+1907 1st 2nd 3rd Last 3rd 2nd 1st
+1908 1st 2nd 3rd Last 3rd 2nd 1st
+1909 1st 2nd 3rd Last 3rd 2nd 1st
+1910 1st 2nd 3rd Last 3rd 2nd 1st
+1911 1st 2nd 3rd Last 3rd 2nd 1st
+1912 1st 2nd 3rd Last 3rd 2nd 1st
+1913 1st 2nd 3rd Last 3rd 2nd 1st
+1914 1st 2nd 3rd Last 3rd 2nd 1st
+1915 1st 2nd 3rd Last 3rd 2nd 1st
+1916 1st 2nd 3rd Last 3rd 2nd 1st
+1917 1st 2nd 3rd Last 3rd 2nd 1st
+1918 1st 2nd 3rd Last 3rd 2nd 1st
+1919 1st 2nd 3rd Last 3rd 2nd 1st
+1920 1st 2nd 3rd Last 3rd 2nd 1st
+1921 1st 2nd 3rd Last 3rd 2nd 1st
+1922 1st 2nd 3rd Last 3rd 2nd 1st
+1923 1st 2nd 3rd Last 3rd 2nd 1st
+1924 1st 2nd 3rd Last 3rd 2nd 1st
+1925 1st 2nd 3rd Last 3rd 2nd 1st
+1926 1st 2nd 3rd Last 3rd 2nd 1st
+1927 1st 2nd 3rd Last 3rd 2nd 1st
+1928 1st 2nd 3rd Last 3rd 2nd 1st
+1929 1st 2nd 3rd Last 3rd 2nd 1st
+1930 1st 2nd 3rd Last 3rd 2nd 1st
+1931 1st 2nd 3rd Last 3rd 2nd 1st
+1932 1st 2nd 3rd Last 3rd 2nd 1st
+1933 1st 2nd 3rd Last 3rd 2nd 1st
+1934 1st 2nd 3rd Last 3rd 2nd 1st
+1935 1st 2nd 3rd Last 3rd 2nd 1st
+1936 1st 2nd 3rd Last 3rd 2nd 1st
+1937 1st 2nd 3rd Last 3rd 2nd 1st
+1938 1st 2nd 3rd Last 3rd 2nd 1st
+1939 1st 2nd 3rd Last 3rd 2nd 1st
+1940 1st 2nd 3rd Last 3rd 2nd 1st
+1941 1st 2nd 3rd Last 3rd 2nd 1st
+1942 1st 2nd 3rd Last 3rd 2nd 1st
+1943 1st 2nd 3rd Last 3rd 2nd 1st
+1944 1st 2nd 3rd Last 3rd 2nd 1st
+1945 1st 2nd 3rd Last 3rd 2nd 1st
+1946 1st 2nd 3rd Last 3rd 2nd 1st
+1947 1st 2nd 3rd Last 3rd 2nd 1st
+1948 1st 2nd 3rd Last 3rd 2nd 1st
+1949 1st 2nd 3rd Last 3rd 2nd 1st
+1950 1st 2nd 3rd Last 3rd 2nd 1st
+1951 1st 2nd 3rd Last 3rd 2nd 1st
+1952 1st 2nd 3rd Last 3rd 2nd 1st
+1953 1st 2nd 3rd Last 3rd 2nd 1st
+1954 1st 2nd 3rd Last 3rd 2nd 1st
+1955 1st 2nd 3rd Last 3rd 2nd 1st
+1956 1st 2nd 3rd Last 3rd 2nd 1st
+1957 1st 2nd 3rd Last 3rd 2nd 1st
+1958 1st 2nd 3rd Last 3rd 2nd 1st
+1959 1st 2nd 3rd Last 3rd 2nd 1st
+1960 1st 2nd 3rd Last 3rd 2nd 1st
+1961 1st 2nd 3rd Last 3rd 2nd 1st
+1962 1st 2nd 3rd Last 3rd 2nd 1st
+1963 1st 2nd 3rd Last 3rd 2nd 1st
+1964 1st 2nd 3rd Last 3rd 2nd 1st
+1965 1st 2nd 3rd Last 3rd 2nd 1st
+1966 1st 2nd 3rd Last 3rd 2nd 1st
+1967 1st 2nd 3rd Last 3rd 2nd 1st
+1968 1st 2nd 3rd Last 3rd 2nd 1st
+1969 1st 2nd 3rd Last 3rd 2nd 1st
+1970 1st 2nd 3rd Last 3rd 2nd 1st
+1971 1st 2nd 3rd Last 3rd 2nd 1st
+1972 1st 2nd 3rd Last 3rd 2nd 1st
+1973 1st 2nd 3rd Last 3rd 2nd 1st
+1974 1st 2nd 3rd Last 3rd 2nd 1st
+1975 1st 2nd 3rd Last 3rd 2nd 1st
+1976 1st 2nd 3rd Last 3rd 2nd 1st
+1977 1st 2nd 3rd Last 3rd 2nd 1st
+1978 1st 2nd 3rd Last 3rd 2nd 1st
+1979 1st 2nd 3rd Last 3rd 2nd 1st
+1980 1st 2nd 3rd Last 3rd 2nd 1st
+1981 1st 2nd 3rd Last 3rd 2nd 1st
+1982 1st 2nd 3rd Last 3rd 2nd 1st
+1983 1st 2nd 3rd Last 3rd 2nd 1st
+1984 1st 2nd 3rd Last 3rd 2nd 1st
+1985 1st 2nd 3rd Last 3rd 2nd 1st
+1986 1st 2nd 3rd Last 3rd 2nd 1st
+1987 1st 2nd 3rd Last 3rd 2nd 1st
+1988 1st 2nd 3rd Last 3rd 2nd 1st
+1989 1st 2nd 3rd Last 3rd 2nd 1st
+1990 1st 2nd 3rd Last 3rd 2nd 1st
+1991 1st 2nd 3rd Last 3rd 2nd 1st
+1992 1st 2nd 3rd Last 3rd 2nd 1st
+1993 1st 2nd 3rd Last 3rd 2nd 1st
+1994 1st 2nd 3rd Last 3rd 2nd 1st
+1995 1st 2nd 3rd Last 3rd 2nd 1st
+1996 1st 2nd 3rd Last 3rd 2nd 1st
+1997 1st 2nd 3rd Last 3rd 2nd 1st
+1998 1st 2nd 3rd Last 3rd 2nd 1st
+1999 1st 2nd 3rd Last 3rd 2nd 1st
+2000 1st 2nd 3rd Last 3rd 2nd 1st
+2001 1st 2nd 3rd Last 3rd 2nd 1st
+2002 1st 2nd 3rd Last 3rd 2nd 1st
+2003 1st 2nd 3rd Last 3rd 2nd 1st
+2004 1st 2nd 3rd Last 3rd 2nd 1st
+2005 1st 2nd 3rd Last 3rd 2nd 1st
+2006 1st 2nd 3rd Last 3rd 2nd 1st
+2007 1st 2nd 3rd Last 3rd 2nd 1st
+2008 1st 2nd 3rd Last 3rd 2nd 1st
+2009 1st 2nd 3rd Last 3rd 2nd 1st
+2010 1st 2nd 3rd Last 3rd 2nd 1st
+2011 1st 2nd 3rd Last 3rd 2nd 1st
+2012 1st 2nd 3rd Last 3rd 2nd 1st
+2013 1st 2nd 3rd Last 3rd 2nd 1st
+2014 1st 2nd 3rd Last 3rd 2nd 1st
+2015 1st 2nd 3rd Last 3rd 2nd 1st
+2016 1st 2nd 3rd Last 3rd 2nd 1st
+2017 1st 2nd 3rd Last 3rd 2nd 1st
+2018 1st 2nd 3rd Last 3rd 2nd 1st
+2019 1st 2nd 3rd Last 3rd 2nd 1st
+2020 1st 2nd 3rd Last 3rd 2nd 1st
+2021 1st 2nd 3rd Last 3rd 2nd 1st
+2022 1st 2nd 3rd Last 3rd 2nd 1st
+2023 1st 2nd 3rd Last 3rd 2nd 1st
+2024 1st 2nd 3rd Last 3rd 2nd 1st
+2025 1st 2nd 3rd Last 3rd 2nd 1st
+2026 1st 2nd 3rd Last 3rd 2nd 1st
+2027 1st 2nd 3rd Last 3rd 2nd 1st
+2028 1st 2nd 3rd Last 3rd 2nd 1st
+2029 1st 2nd 3rd Last 3rd 2nd 1st
+2030 1st 2nd 3rd Last 3rd 2nd 1st
+2031 1st 2nd 3rd Last 3rd 2nd 1st
+2032 1st 2nd 3rd Last 3rd 2nd 1st
+2033 1st 2nd 3rd Last 3rd 2nd 1st
+2034 1st 2nd 3rd Last 3rd 2nd 1st
+2035 1st 2nd 3rd Last 3rd 2nd 1st
+2036 1st 2nd 3rd Last 3rd 2nd 1st
+2037 1st 2nd 3rd Last 3rd 2nd 1st
+2038 1st 2nd 3rd Last 3rd 2nd 1st
+2039 1st 2nd 3rd Last 3rd 2nd 1st
+2040 1st 2nd 3rd Last 3rd 2nd 1st
+2041 1st 2nd 3rd Last 3rd 2nd 1st
+2042 1st 2nd 3rd Last 3rd 2nd 1st
+2043 1st 2nd 3rd Last 3rd 2nd 1st
+2044 1st 2nd 3rd Last 3rd 2nd 1st
+2045 1st 2nd 3rd Last 3rd 2nd 1st
+2046 1st 2nd 3rd Last 3rd 2nd 1st
+2047 1st 2nd 3rd Last 3rd 2nd 1st
+2048 1st 2nd 3rd Last 3rd 2nd 1st
+2049 1st 2nd 3rd Last 3rd 2nd 1st
+2050 1st 2nd 3rd Last 3rd 2nd 1st
+2051 1st 2nd 3rd Last 3rd 2nd 1st
+2052 1st 2nd 3rd Last 3rd 2nd 1st
+2053 1st 2nd 3rd Last 3rd 2nd 1st
+2054 1st 2nd 3rd Last 3rd 2nd 1st
+2055 1st 2nd 3rd Last 3rd 2nd 1st
+2056 1st 2nd 3rd Last 3rd 2nd 1st
+2057 1st 2nd 3rd Last 3rd 2nd 1st
+2058 1st 2nd 3rd Last 3rd 2nd 1st
+2059 1st 2nd 3rd Last 3rd 2nd 1st
+2060 1st 2nd 3rd Last 3rd 2nd 1st
+2061 1st 2nd 3rd Last 3rd 2nd 1st
+2062 1st 2nd 3rd Last 3rd 2nd 1st
+2063 1st 2nd 3rd Last 3rd 2nd 1st
+2064 1st 2nd 3rd Last 3rd 2nd 1st
+2065 1st 2nd 3rd Last 3rd 2nd 1st
+2066 1st 2nd 3rd Last 3rd 2nd 1st
+2067 1st 2nd 3rd Last 3rd 2nd 1st
+2068 1st 2nd 3rd Last 3rd 2nd 1st
+2069 1st 2nd 3rd Last 3rd 2nd 1st
+2070 1st 2nd 3rd Last 3rd 2nd 1st
+2071 1st 2nd 3rd Last 3rd 2nd 1st
+2072 1st 2nd 3rd Last 3rd 2nd 1st
+2073 1st 2nd 3rd Last 3rd 2nd 1st
+2074 1st 2nd 3rd Last 3rd 2nd 1st
+2075 1st 2nd 3rd Last 3rd 2nd 1st
+2076 1st 2nd 3rd Last 3rd 2nd 1st
+2077 1st 2nd 3rd Last 3rd 2nd 1st
+2078 1st 2nd 3rd Last 3rd 2nd 1st
+2079 1st 2nd 3rd Last 3rd 2nd 1st
+2080 1st 2nd 3rd Last 3rd 2nd 1st
+2081 1st 2nd 3rd Last 3rd 2nd 1st
+2082 1st 2nd 3rd Last 3rd 2nd 1st
+2083 1st 2nd 3rd Last 3rd 2nd 1st
+2084 1st 2nd 3rd Last 3rd 2nd 1st
+2085 1st 2nd 3rd Last 3rd 2nd 1st
+2086 1st 2nd 3rd Last 3rd 2nd 1st
+2087 1st 2nd 3rd Last 3rd 2nd 1st
+2088 1st 2nd 3rd Last 3rd 2nd 1st
+2089 1st 2nd 3rd Last 3rd 2nd 1st
+2090 1st 2nd 3rd Last 3rd 2nd 1st
+2091 1st 2nd 3rd Last 3rd 2nd 1st
+2092 1st 2nd 3rd Last 3rd 2nd 1st
+2093 1st 2nd 3rd Last 3rd 2nd 1st
+2094 1st 2nd 3rd Last 3rd 2nd 1st
+2095 1st 2nd 3rd Last 3rd 2nd 1st
+2096 1st 2nd 3rd Last 3rd 2nd 1st
+2097 1st 2nd 3rd Last 3rd 2nd 1st
+2098 1st 2nd 3rd Last 3rd 2nd 1st
+2099 1st 2nd 3rd Last 3rd 2nd 1st
+2100 1st 2nd 3rd Last 3rd 2nd 1st
+2101 1st 2nd 3rd Last 3rd 2nd 1st
+2102 1st 2nd 3rd Last 3rd 2nd 1st
+2103 1st 2nd 3rd Last 3rd 2nd 1st
+2104 1st 2nd 3rd Last 3rd 2nd 1st
+2105 1st 2nd 3rd Last 3rd 2nd 1st
+2106 1st 2nd 3rd Last 3rd 2nd 1st
+2107 1st 2nd 3rd Last 3rd 2nd 1st
+2108 1st 2nd 3rd Last 3rd 2nd 1st
+2109 1st 2nd 3rd Last 3rd 2nd 1st
+2110 1st 2nd 3rd Last 3rd 2nd 1st
+2111 1st 2nd 3rd Last 3rd 2nd 1st
+2112 1st 2nd 3rd Last 3rd 2nd 1st
+2113 1st 2nd 3rd Last 3rd 2nd 1st
+2114 1st 2nd 3rd Last 3rd 2nd 1st
+2115 1st 2nd 3rd Last 3rd 2nd 1st
+2116 1st 2nd 3rd Last 3rd 2nd 1st
+2117 1st 2nd 3rd Last 3rd 2nd 1st
+2118 1st 2nd 3rd Last 3rd 2nd 1st
+2119 1st 2nd 3rd Last 3rd 2nd 1st
+2120 1st 2nd 3rd Last 3rd 2nd 1st
+2121 1st 2nd 3rd Last 3rd 2nd 1st
+2122 1st 2nd 3rd Last 3rd 2nd 1st
+2123 1st 2nd 3rd Last 3rd 2nd 1st
+2124 1st 2nd 3rd Last 3rd 2nd 1st
+2125 1st 2nd 3rd Last 3rd 2nd 1st
+2126 1st 2nd 3rd Last 3rd 2nd 1st
+2127 1st 2nd 3rd Last 3rd 2nd 1st
+2128 1st 2nd 3rd Last 3rd 2nd 1st
+2129 1st 2nd 3rd Last 3rd 2nd 1st
+2130 1st 2nd 3rd Last 3rd 2nd 1st
+2131 1st 2nd 3rd Last 3rd 2nd 1st
+2132 1st 2nd 3rd Last 3rd 2nd 1st
+2133 1st 2nd 3rd Last 3rd 2nd 1st
+2134 1st 2nd 3rd Last 3rd 2nd 1st
+2135 1st 2nd 3rd Last 3rd 2nd 1st
+2136 1st 2nd 3rd Last 3rd 2nd 1st
+2137 1st 2nd 3rd Last 3rd 2nd 1st
+2138 1st 2nd 3rd Last 3rd 2nd 1st
+2139 1st 2nd 3rd Last 3rd 2nd 1st
+2140 1st 2nd 3rd Last 3rd 2nd 1st
+2141 1st 2nd 3rd Last 3rd 2nd 1st
+2142 1st 2nd 3rd Last 3rd 2nd 1st
+2143 1st 2nd 3rd Last 3rd 2nd 1st
+2144 1st 2nd 3rd Last 3rd 2nd 1st
+2145 1st 2nd 3rd Last 3rd 2nd 1st
+2146 1st 2nd 3rd Last 3rd 2nd 1st
+2147 1st 2nd 3rd Last 3rd 2nd 1st
+2148 1st 2nd 3rd Last 3rd 2nd 1st
+2149 1st 2nd 3rd Last 3rd 2nd 1st
+2150 1st 2nd 3rd Last 3rd 2nd 1st
+2151 1st 2nd 3rd Last 3rd 2nd 1st
+2152 1st 2nd 3rd Last 3rd 2nd 1st
+2153 1st 2nd 3rd Last 3rd 2nd 1st
+2154 1st 2nd 3rd Last 3rd 2nd 1st
+2155 1st 2nd 3rd Last 3rd 2nd 1st
+2156 1st 2nd 3rd Last 3rd 2nd 1st
+2157 1st 2nd 3rd Last 3rd 2nd 1st
+2158 1st 2nd 3rd Last 3rd 2nd 1st
+2159 1st 2nd 3rd Last 3rd 2nd 1st
+2160 1st 2nd 3rd Last 3rd 2nd 1st
+2161 1st 2nd 3rd Last 3rd 2nd 1st
+2162 1st 2nd 3rd Last 3rd 2nd 1st
+2163 1st 2nd 3rd Last 3rd 2nd 1st
+2164 1st 2nd 3rd Last 3rd 2nd 1st
+2165 1st 2nd 3rd Last 3rd 2nd 1st
+2166 1st 2nd 3rd Last 3rd 2nd 1st
+2167 1st 2nd 3rd Last 3rd 2nd 1st
+2168 1st 2nd 3rd Last 3rd 2nd 1st
+2169 1st 2nd 3rd Last 3rd 2nd 1st
+2170 1st 2nd 3rd Last 3rd 2nd 1st
+2171 1st 2nd 3rd Last 3rd 2nd 1st
+2172 1st 2nd 3rd Last 3rd 2nd 1st
+2173 1st 2nd 3rd Last 3rd 2nd 1st
+2174 1st 2nd 3rd Last 3rd 2nd 1st
+2175 1st 2nd 3rd Last 3rd 2nd 1st
+2176 1st 2nd 3rd Last 3rd 2nd 1st
+2177 1st 2nd 3rd Last 3rd 2nd 1st
+2178 1st 2nd 3rd Last 3rd 2nd 1st
+2179 1st 2nd 3rd Last 3rd 2nd 1st
+2180 1st 2nd 3rd Last 3rd 2nd 1st
+2181 1st 2nd 3rd Last 3rd 2nd 1st
+2182 1st 2nd 3rd Last 3rd 2nd 1st
+2183 1st 2nd 3rd Last 3rd 2nd 1st
+2184 1st 2nd 3rd Last 3rd 2nd 1st
+2185 1st 2nd 3rd Last 3rd 2nd 1st
+2186 1st 2nd 3rd Last 3rd 2nd 1st
+2187 1st 2nd 3rd Last 3rd 2nd 1st
+2188 1st 2nd 3rd Last 3rd 2nd 1st
+2189 1st 2nd 3rd Last 3rd 2nd 1st
+2190 1st 2nd 3rd Last 3rd 2nd 1st
+2191 1st 2nd 3rd Last 3rd 2nd 1st
+2192 1st 2nd 3rd Last 3rd 2nd 1st
+2193 1st 2nd 3rd Last 3rd 2nd 1st
+2194 1st 2nd 3rd Last 3rd 2nd 1st
+2195 1st 2nd 3rd Last 3rd 2nd 1st
+2196 1st 2nd 3rd Last 3rd 2nd 1st
+2197 1st 2nd 3rd Last 3rd 2nd 1st
+2198 1st 2nd 3rd Last 3rd 2nd 1st
+2199 1st 2nd 3rd Last 3rd 2nd 1st
+2200 1st 2nd 3rd Last 3rd 2nd 1st
+2201 1st 2nd 3rd Last 3rd 2nd 1st
+2202 1st 2nd 3rd Last 3rd 2nd 1st
+2203 1st 2nd 3rd Last 3rd 2nd 1st
+2204 1st 2nd 3rd Last 3rd 2nd 1st
+2205 1st 2nd 3rd Last 3rd 2nd 1st
+2206 1st 2nd 3rd Last 3rd 2nd 1st
+2207 1st 2nd 3rd Last 3rd 2nd 1st
+2208 1st 2nd 3rd Last 3rd 2nd 1st
+2209 1st 2nd 3rd Last 3rd 2nd 1st
+2210 1st 2nd 3rd Last 3rd 2nd 1st
+2211 1st 2nd 3rd Last 3rd 2nd 1st
+2212 1st 2nd 3rd Last 3rd 2nd 1st
+2213 1st 2nd 3rd Last 3rd 2nd 1st
+2214 1st 2nd 3rd Last 3rd 2nd 1st
+2215 1st 2nd 3rd Last 3rd 2nd 1st
+2216 1st 2nd 3rd Last 3rd 2nd 1st
+2217 1st 2nd 3rd Last 3rd 2nd 1st
+2218 1st 2nd 3rd Last 3rd 2nd 1st
+2219 1st 2nd 3rd Last 3rd 2nd 1st
+2220 1st 2nd 3rd Last 3rd 2nd 1st
+2221 1st 2nd 3rd Last 3rd 2nd 1st
+2222 1st 2nd 3rd Last 3rd 2nd 1st
+2223 1st 2nd 3rd Last 3rd 2nd 1st
+2224 1st 2nd 3rd Last 3rd 2nd 1st
+2225 1st 2nd 3rd Last 3rd 2nd 1st
+2226 1st 2nd 3rd Last 3rd 2nd 1st
+2227 1st 2nd 3rd Last 3rd 2nd 1st
+2228 1st 2nd 3rd Last 3rd 2nd 1st
+2229 1st 2nd 3rd Last 3rd 2nd 1st
+2230 1st 2nd 3rd Last 3rd 2nd 1st
+2231 1st 2nd 3rd Last 3rd 2nd 1st
+2232 1st 2nd 3rd Last 3rd 2nd 1st
+2233 1st 2nd 3rd Last 3rd 2nd 1st
+2234 1st 2nd 3rd Last 3rd 2nd 1st
+2235 1st 2nd 3rd Last 3rd 2nd 1st
+2236 1st 2nd 3rd Last 3rd 2nd 1st
+2237 1st 2nd 3rd Last 3rd 2nd 1st
+2238 1st 2nd 3rd Last 3rd 2nd 1st
+2239 1st 2nd 3rd Last 3rd 2nd 1st
+2240 1st 2nd 3rd Last 3rd 2nd 1st
+2241 1st 2nd 3rd Last 3rd 2nd 1st
+2242 1st 2nd 3rd Last 3rd 2nd 1st
+2243 1st 2nd 3rd Last 3rd 2nd 1st
+2244 1st 2nd 3rd Last 3rd 2nd 1st
+2245 1st 2nd 3rd Last 3rd 2nd 1st
+2246 1st 2nd 3rd Last 3rd 2nd 1st
+2247 1st 2nd 3rd Last 3rd 2nd 1st
+2248 1st 2nd 3rd Last 3rd 2nd 1st
+2249 1st 2nd 3rd Last 3rd 2nd 1st
+2250 1st 2nd 3rd Last 3rd 2nd 1st
+2251 1st 2nd 3rd Last 3rd 2nd 1st
+2252 1st 2nd 3rd Last 3rd 2nd 1st
+2253 1st 2nd 3rd Last 3rd 2nd 1st
+2254 1st 2nd 3rd Last 3rd 2nd 1st
+2255 1st 2nd 3rd Last 3rd 2nd 1st
+2256 1st 2nd 3rd Last 3rd 2nd 1st
+2257 1st 2nd 3rd Last 3rd 2nd 1st
+2258 1st 2nd 3rd Last 3rd 2nd 1st
+2259 1st 2nd 3rd Last 3rd 2nd 1st
+2260 1st 2nd 3rd Last 3rd 2nd 1st
+2261 1st 2nd 3rd Last 3rd 2nd 1st
+2262 1st 2nd 3rd Last 3rd 2nd 1st
+2263 1st 2nd 3rd Last 3rd 2nd 1st
+2264 1st 2nd 3rd Last 3rd 2nd 1st
+2265 1st 2nd 3rd Last 3rd 2nd 1st
+2266 1st 2nd 3rd Last 3rd 2nd 1st
+2267 1st 2nd 3rd Last 3rd 2nd 1st
+2268 1st 2nd 3rd Last 3rd 2nd 1st
+2269 1st 2nd 3rd Last 3rd 2nd 1st
+2270 1st 2nd 3rd Last 3rd 2nd 1st
+2271 1st 2nd 3rd Last 3rd 2nd 1st
+2272 1st 2nd 3rd Last 3rd 2nd 1st
+2273 1st 2nd 3rd Last 3rd 2nd 1st
+2274 1st 2nd 3rd Last 3rd 2nd 1st
+2275 1st 2nd 3rd Last 3rd 2nd 1st
+2276 1st 2nd 3rd Last 3rd 2nd 1st
+2277 1st 2nd 3rd Last 3rd 2nd 1st
+2278 1st 2nd 3rd Last 3rd 2nd 1st
+2279 1st 2nd 3rd Last 3rd 2nd 1st
+2280 1st 2nd 3rd Last 3rd 2nd 1st
+2281 1st 2nd 3rd Last 3rd 2nd 1st
+2282 1st 2nd 3rd Last 3rd 2nd 1st
+2283 1st 2nd 3rd Last 3rd 2nd 1st
+2284 1st 2nd 3rd Last 3rd 2nd 1st
+2285 1st 2nd 3rd Last 3rd 2nd 1st
+2286 1st 2nd 3rd Last 3rd 2nd 1st
+2287 1st 2nd 3rd Last 3rd 2nd 1st
+2288 1st 2nd 3rd Last 3rd 2nd 1st
+2289 1st 2nd 3rd Last 3rd 2nd 1st
+2290 1st 2nd 3rd Last 3rd 2nd 1st
+2291 1st 2nd 3rd Last 3rd 2nd 1st
+2292 1st 2nd 3rd Last 3rd 2nd 1st
+2293 1st 2nd 3rd Last 3rd 2nd 1st
+2294 1st 2nd 3rd Last 3rd 2nd 1st
+2295 1st 2nd 3rd Last 3rd 2nd 1st
+2296 1st 2nd 3rd Last 3rd 2nd 1st
+2297 1st 2nd 3rd Last 3rd 2nd 1st
+2298 1st 2nd 3rd Last 3rd 2nd 1st
+2299 1st 2nd 3rd Last 3rd 2nd 1st
+2300 1st 2nd 3rd Last 3rd 2nd 1st
+2301 1st 2nd 3rd Last 3rd 2nd 1st
+2302 1st 2nd 3rd Last 3rd 2nd 1st
+2303 1st 2nd 3rd Last 3rd 2nd 1st
+2304 1st 2nd 3rd Last 3rd 2nd 1st
+2305 1st 2nd 3rd Last 3rd 2nd 1st
+2306 1st 2nd 3rd Last 3rd 2nd 1st
+2307 1st 2nd 3rd Last 3rd 2nd 1st
+2308 1st 2nd 3rd Last 3rd 2nd 1st
+2309 1st 2nd 3rd Last 3rd 2nd 1st
+2310 1st 2nd 3rd Last 3rd 2nd 1st
+2311 1st 2nd 3rd Last 3rd 2nd 1st
+2312 1st 2nd 3rd Last 3rd 2nd 1st
+2313 1st 2nd 3rd Last 3rd 2nd 1st
+2314 1st 2nd 3rd Last 3rd 2nd 1st
+2315 1st 2nd 3rd Last 3rd 2nd 1st
+2316 1st 2nd 3rd Last 3rd 2nd 1st
+2317 1st 2nd 3rd Last 3rd 2nd 1st
+2318 1st 2nd 3rd Last 3rd 2nd 1st
+2319 1st 2nd 3rd Last 3rd 2nd 1st
+2320 1st 2nd 3rd Last 3rd 2nd 1st
+2321 1st 2nd 3rd Last 3rd 2nd 1st
+2322 1st 2nd 3rd Last 3rd 2nd 1st
+2323 1st 2nd 3rd Last 3rd 2nd 1st
+2324 1st 2nd 3rd Last 3rd 2nd 1st
+2325 1st 2nd 3rd Last 3rd 2nd 1st
+2326 1st 2nd 3rd Last 3rd 2nd 1st
+2327 1st 2nd 3rd Last 3rd 2nd 1st
+2328 1st 2nd 3rd Last 3rd 2nd 1st
+2329 1st 2nd 3rd Last 3rd 2nd 1st
+2330 1st 2nd 3rd Last 3rd 2nd 1st
+2331 1st 2nd 3rd Last 3rd 2nd 1st
+2332 1st 2nd 3rd Last 3rd 2nd 1st
+2333 1st 2nd 3rd Last 3rd 2nd 1st
+2334 1st 2nd 3rd Last 3rd 2nd 1st
+2335 1st 2nd 3rd Last 3rd 2nd 1st
+2336 1st 2nd 3rd Last 3rd 2nd 1st
+2337 1st 2nd 3rd Last 3rd 2nd 1st
+2338 1st 2nd 3rd Last 3rd 2nd 1st
+2339 1st 2nd 3rd Last 3rd 2nd 1st
+2340 1st 2nd 3rd Last 3rd 2nd 1st
+2341 1st 2nd 3rd Last 3rd 2nd 1st
+2342 1st 2nd 3rd Last 3rd 2nd 1st
+2343 1st 2nd 3rd Last 3rd 2nd 1st
+2344 1st 2nd 3rd Last 3rd 2nd 1st
+2345 1st 2nd 3rd Last 3rd 2nd 1st
+2346 1st 2nd 3rd Last 3rd 2nd 1st
+2347 1st 2nd 3rd Last 3rd 2nd 1st
+2348 1st 2nd 3rd Last 3rd 2nd 1st
+2349 1st 2nd 3rd Last 3rd 2nd 1st
+2350 1st 2nd 3rd Last 3rd 2nd 1st
+2351 1st 2nd 3rd Last 3rd 2nd 1st
+2352 1st 2nd 3rd Last 3rd 2nd 1st
+2353 1st 2nd 3rd Last 3rd 2nd 1st
+2354 1st 2nd 3rd Last 3rd 2nd 1st
+2355 1st 2nd 3rd Last 3rd 2nd 1st
+2356 1st 2nd 3rd Last 3rd 2nd 1st
+2357 1st 2nd 3rd Last 3rd 2nd 1st
+2358 1st 2nd 3rd Last 3rd 2nd 1st
+2359 1st 2nd 3rd Last 3rd 2nd 1st
+2360 1st 2nd 3rd Last 3rd 2nd 1st
+2361 1st 2nd 3rd Last 3rd 2nd 1st
+2362 1st 2nd 3rd Last 3rd 2nd 1st
+2363 1st 2nd 3rd Last 3rd 2nd 1st
+2364 1st 2nd 3rd Last 3rd 2nd 1st
+2365 1st 2nd 3rd Last 3rd 2nd 1st
+2366 1st 2nd 3rd Last 3rd 2nd 1st
+2367 1st 2nd 3rd Last 3rd 2nd 1st
+2368 1st 2nd 3rd Last 3rd 2nd 1st
+2369 1st 2nd 3rd Last 3rd 2nd 1st
+2370 1st 2nd 3rd Last 3rd 2nd 1st
+2371 1st 2nd 3rd Last 3rd 2nd 1st
+2372 1st 2nd 3rd Last 3rd 2nd 1st
+2373 1st 2nd 3rd Last 3rd 2nd 1st
+2374 1st 2nd 3rd Last 3rd 2nd 1st
+2375 1st 2nd 3rd Last 3rd 2nd 1st
+2376 1st 2nd 3rd Last 3rd 2nd 1st
+2377 1st 2nd 3rd Last 3rd 2nd 1st
+2378 1st 2nd 3rd Last 3rd 2nd 1st
+2379 1st 2nd 3rd Last 3rd 2nd 1st
+2380 1st 2nd 3rd Last 3rd 2nd 1st
+2381 1st 2nd 3rd Last 3rd 2nd 1st
+2382 1st 2nd 3rd Last 3rd 2nd 1st
+2383 1st 2nd 3rd Last 3rd 2nd 1st
+2384 1st 2nd 3rd Last 3rd 2nd 1st
+2385 1st 2nd 3rd Last 3rd 2nd 1st
+2386 1st 2nd 3rd Last 3rd 2nd 1st
+2387 1st 2nd 3rd Last 3rd 2nd 1st
+2388 1st 2nd 3rd Last 3rd 2nd 1st
+2389 1st 2nd 3rd Last 3rd 2nd 1st
+2390 1st 2nd 3rd Last 3rd 2nd 1st
+2391 1st 2nd 3rd Last 3rd 2nd 1st
+2392 1st 2nd 3rd Last 3rd 2nd 1st
+2393 1st 2nd 3rd Last 3rd 2nd 1st
+2394 1st 2nd 3rd Last 3rd 2nd 1st
+2395 1st 2nd 3rd Last 3rd 2nd 1st
+2396 1st 2nd 3rd Last 3rd 2nd 1st
+2397 1st 2nd 3rd Last 3rd 2nd 1st
+2398 1st 2nd 3rd Last 3rd 2nd 1st
+2399 1st 2nd 3rd Last 3rd 2nd 1st
+2400 1st 2nd 3rd Last 3rd 2nd 1st
+2401 1st 2nd 3rd Last 3rd 2nd 1st
+2402 1st 2nd 3rd Last 3rd 2nd 1st
+2403 1st 2nd 3rd Last 3rd 2nd 1st
+2404 1st 2nd 3rd Last 3rd 2nd 1st
+2405 1st 2nd 3rd Last 3rd 2nd 1st
+2406 1st 2nd 3rd Last 3rd 2nd 1st
+2407 1st 2nd 3rd Last 3rd 2nd 1st
+2408 1st 2nd 3rd Last 3rd 2nd 1st
+2409 1st 2nd 3rd Last 3rd 2nd 1st
+2410 1st 2nd 3rd Last 3rd 2nd 1st
+2411 1st 2nd 3rd Last 3rd 2nd 1st
+2412 1st 2nd 3rd Last 3rd 2nd 1st
+2413 1st 2nd 3rd Last 3rd 2nd 1st
+2414 1st 2nd 3rd Last 3rd 2nd 1st
+2415 1st 2nd 3rd Last 3rd 2nd 1st
+2416 1st 2nd 3rd Last 3rd 2nd 1st
+2417 1st 2nd 3rd Last 3rd 2nd 1st
+2418 1st 2nd 3rd Last 3rd 2nd 1st
+2419 1st 2nd 3rd Last 3rd 2nd 1st
+2420 1st 2nd 3rd Last 3rd 2nd 1st
+2421 1st 2nd 3rd Last 3rd 2nd 1st
+2422 1st 2nd 3rd Last 3rd 2nd 1st
+2423 1st 2nd 3rd Last 3rd 2nd 1st
+2424 1st 2nd 3rd Last 3rd 2nd 1st
+2425 1st 2nd 3rd Last 3rd 2nd 1st
+2426 1st 2nd 3rd Last 3rd 2nd 1st
+2427 1st 2nd 3rd Last 3rd 2nd 1st
+2428 1st 2nd 3rd Last 3rd 2nd 1st
+2429 1st 2nd 3rd Last 3rd 2nd 1st
+2430 1st 2nd 3rd Last 3rd 2nd 1st
+2431 1st 2nd 3rd Last 3rd 2nd 1st
+2432 1st 2nd 3rd Last 3rd 2nd 1st
+2433 1st 2nd 3rd Last 3rd 2nd 1st
+2434 1st 2nd 3rd Last 3rd 2nd 1st
+2435 1st 2nd 3rd Last 3rd 2nd 1st
+2436 1st 2nd 3rd Last 3rd 2nd 1st
+2437 1st 2nd 3rd Last 3rd 2nd 1st
+2438 1st 2nd 3rd Last 3rd 2nd 1st
+2439 1st 2nd 3rd Last 3rd 2nd 1st
+2440 1st 2nd 3rd Last 3rd 2nd 1st
+2441 1st 2nd 3rd Last 3rd 2nd 1st
+2442 1st 2nd 3rd Last 3rd 2nd 1st
+2443 1st 2nd 3rd Last 3rd 2nd 1st
+2444 1st 2nd 3rd Last 3rd 2nd 1st
+2445 1st 2nd 3rd Last 3rd 2nd 1st
+2446 1st 2nd 3rd Last 3rd 2nd 1st
+2447 1st 2nd 3rd Last 3rd 2nd 1st
+2448 1st 2nd 3rd Last 3rd 2nd 1st
+2449 1st 2nd 3rd Last 3rd 2nd 1st
+2450 1st 2nd 3rd Last 3rd 2nd 1st
+2451 1st 2nd 3rd Last 3rd 2nd 1st
+2452 1st 2nd 3rd Last 3rd 2nd 1st
+2453 1st 2nd 3rd Last 3rd 2nd 1st
+2454 1st 2nd 3rd Last 3rd 2nd 1st
+2455 1st 2nd 3rd Last 3rd 2nd 1st
+2456 1st 2nd 3rd Last 3rd 2nd 1st
+2457 1st 2nd 3rd Last 3rd 2nd 1st
+2458 1st 2nd 3rd Last 3rd 2nd 1st
+2459 1st 2nd 3rd Last 3rd 2nd 1st
+2460 1st 2nd 3rd Last 3rd 2nd 1st
+2461 1st 2nd 3rd Last 3rd 2nd 1st
+2462 1st 2nd 3rd Last 3rd 2nd 1st
+2463 1st 2nd 3rd Last 3rd 2nd 1st
+2464 1st 2nd 3rd Last 3rd 2nd 1st
+2465 1st 2nd 3rd Last 3rd 2nd 1st
+2466 1st 2nd 3rd Last 3rd 2nd 1st
+2467 1st 2nd 3rd Last 3rd 2nd 1st
+2468 1st 2nd 3rd Last 3rd 2nd 1st
+2469 1st 2nd 3rd Last 3rd 2nd 1st
+2470 1st 2nd 3rd Last 3rd 2nd 1st
+2471 1st 2nd 3rd Last 3rd 2nd 1st
+2472 1st 2nd 3rd Last 3rd 2nd 1st
+2473 1st 2nd 3rd Last 3rd 2nd 1st
+2474 1st 2nd 3rd Last 3rd 2nd 1st
+2475 1st 2nd 3rd Last 3rd 2nd 1st
+2476 1st 2nd 3rd Last 3rd 2nd 1st
+2477 1st 2nd 3rd Last 3rd 2nd 1st
+2478 1st 2nd 3rd Last 3rd 2nd 1st
+2479 1st 2nd 3rd Last 3rd 2nd 1st
+2480 1st 2nd 3rd Last 3rd 2nd 1st
+2481 1st 2nd 3rd Last 3rd 2nd 1st
+2482 1st 2nd 3rd Last 3rd 2nd 1st
+2483 1st 2nd 3rd Last 3rd 2nd 1st
+2484 1st 2nd 3rd Last 3rd 2nd 1st
+2485 1st 2nd 3rd Last 3rd 2nd 1st
+2486 1st 2nd 3rd Last 3rd 2nd 1st
+2487 1st 2nd 3rd Last 3rd 2nd 1st
+2488 1st 2nd 3rd Last 3rd 2nd 1st
+2489 1st 2nd 3rd Last 3rd 2nd 1st
+2490 1st 2nd 3rd Last 3rd 2nd 1st
+2491 1st 2nd 3rd Last 3rd 2nd 1st
+2492 1st 2nd 3rd Last 3rd 2nd 1st
+2493 1st 2nd 3rd Last 3rd 2nd 1st
+2494 1st 2nd 3rd Last 3rd 2nd 1st
+2495 1st 2nd 3rd Last 3rd 2nd 1st
+2496 1st 2nd 3rd Last 3rd 2nd 1st
+2497 1st 2nd 3rd Last 3rd 2nd 1st
+2498 1st 2nd 3rd Last 3rd 2nd 1st
+2499 1st 2nd 3rd Last 3rd 2nd 1st
+2500 1st 2nd 3rd Last 3rd 2nd 1st
+2501 1st 2nd 3rd Last 3rd 2nd 1st
+2502 1st 2nd 3rd Last 3rd 2nd 1st
+2503 1st 2nd 3rd Last 3rd 2nd 1st
+2504 1st 2nd 3rd Last 3rd 2nd 1st
+2505 1st 2nd 3rd Last 3rd 2nd 1st
+2506 1st 2nd 3rd Last 3rd 2nd 1st
+2507 1st 2nd 3rd Last 3rd 2nd 1st
+2508 1st 2nd 3rd Last 3rd 2nd 1st
+2509 1st 2nd 3rd Last 3rd 2nd 1st
+2510 1st 2nd 3rd Last 3rd 2nd 1st
+2511 1st 2nd 3rd Last 3rd 2nd 1st
+2512 1st 2nd 3rd Last 3rd 2nd 1st
+2513 1st 2nd 3rd Last 3rd 2nd 1st
+2514 1st 2nd 3rd Last 3rd 2nd 1st
+2515 1st 2nd 3rd Last 3rd 2nd 1st
+2516 1st 2nd 3rd Last 3rd 2nd 1st
+2517 1st 2nd 3rd Last 3rd 2nd 1st
+2518 1st 2nd 3rd Last 3rd 2nd 1st
+2519 1st 2nd 3rd Last 3rd 2nd 1st
+2520 1st 2nd 3rd Last 3rd 2nd 1st
+2521 1st 2nd 3rd Last 3rd 2nd 1st
+2522 1st 2nd 3rd Last 3rd 2nd 1st
+2523 1st 2nd 3rd Last 3rd 2nd 1st
+2524 1st 2nd 3rd Last 3rd 2nd 1st
+2525 1st 2nd 3rd Last 3rd 2nd 1st
+2526 1st 2nd 3rd Last 3rd 2nd 1st
+2527 1st 2nd 3rd Last 3rd 2nd 1st
+2528 1st 2nd 3rd Last 3rd 2nd 1st
+2529 1st 2nd 3rd Last 3rd 2nd 1st
+2530 1st 2nd 3rd Last 3rd 2nd 1st
+2531 1st 2nd 3rd Last 3rd 2nd 1st
+2532 1st 2nd 3rd Last 3rd 2nd 1st
+2533 1st 2nd 3rd Last 3rd 2nd 1st
+2534 1st 2nd 3rd Last 3rd 2nd 1st
+2535 1st 2nd 3rd Last 3rd 2nd 1st
+2536 1st 2nd 3rd Last 3rd 2nd 1st
+2537 1st 2nd 3rd Last 3rd 2nd 1st
+2538 1st 2nd 3rd Last 3rd 2nd 1st
+2539 1st 2nd 3rd Last 3rd 2nd 1st
+2540 1st 2nd 3rd Last 3rd 2nd 1st
+2541 1st 2nd 3rd Last 3rd 2nd 1st
+2542 1st 2nd 3rd Last 3rd 2nd 1st
+2543 1st 2nd 3rd Last 3rd 2nd 1st
+2544 1st 2nd 3rd Last 3rd 2nd 1st
+2545 1st 2nd 3rd Last 3rd 2nd 1st
+2546 1st 2nd 3rd Last 3rd 2nd 1st
+2547 1st 2nd 3rd Last 3rd 2nd 1st
+2548 1st 2nd 3rd Last 3rd 2nd 1st
+2549 1st 2nd 3rd Last 3rd 2nd 1st
+2550 1st 2nd 3rd Last 3rd 2nd 1st
+2551 1st 2nd 3rd Last 3rd 2nd 1st
+2552 1st 2nd 3rd Last 3rd 2nd 1st
+2553 1st 2nd 3rd Last 3rd 2nd 1st
+2554 1st 2nd 3rd Last 3rd 2nd 1st
+2555 1st 2nd 3rd Last 3rd 2nd 1st
+2556 1st 2nd 3rd Last 3rd 2nd 1st
+2557 1st 2nd 3rd Last 3rd 2nd 1st
+2558 1st 2nd 3rd Last 3rd 2nd 1st
+2559 1st 2nd 3rd Last 3rd 2nd 1st
+2560 1st 2nd 3rd Last 3rd 2nd 1st
+2561 1st 2nd 3rd Last 3rd 2nd 1st
+2562 1st 2nd 3rd Last 3rd 2nd 1st
+2563 1st 2nd 3rd Last 3rd 2nd 1st
+2564 1st 2nd 3rd Last 3rd 2nd 1st
+2565 1st 2nd 3rd Last 3rd 2nd 1st
+2566 1st 2nd 3rd Last 3rd 2nd 1st
+2567 1st 2nd 3rd Last 3rd 2nd 1st
+2568 1st 2nd 3rd Last 3rd 2nd 1st
+2569 1st 2nd 3rd Last 3rd 2nd 1st
+2570 1st 2nd 3rd Last 3rd 2nd 1st
+2571 1st 2nd 3rd Last 3rd 2nd 1st
+2572 1st 2nd 3rd Last 3rd 2nd 1st
+2573 1st 2nd 3rd Last 3rd 2nd 1st
+2574 1st 2nd 3rd Last 3rd 2nd 1st
+2575 1st 2nd 3rd Last 3rd 2nd 1st
+2576 1st 2nd 3rd Last 3rd 2nd 1st
+2577 1st 2nd 3rd Last 3rd 2nd 1st
+2578 1st 2nd 3rd Last 3rd 2nd 1st
+2579 1st 2nd 3rd Last 3rd 2nd 1st
+2580 1st 2nd 3rd Last 3rd 2nd 1st
+2581 1st 2nd 3rd Last 3rd 2nd 1st
+2582 1st 2nd 3rd Last 3rd 2nd 1st
+2583 1st 2nd 3rd Last 3rd 2nd 1st
+2584 1st 2nd 3rd Last 3rd 2nd 1st
+2585 1st 2nd 3rd Last 3rd 2nd 1st
+2586 1st 2nd 3rd Last 3rd 2nd 1st
+2587 1st 2nd 3rd Last 3rd 2nd 1st
+2588 1st 2nd 3rd Last 3rd 2nd 1st
+2589 1st 2nd 3rd Last 3rd 2nd 1st
+2590 1st 2nd 3rd Last 3rd 2nd 1st
+2591 1st 2nd 3rd Last 3rd 2nd 1st
+2592 1st 2nd 3rd Last 3rd 2nd 1st
+2593 1st 2nd 3rd Last 3rd 2nd 1st
+2594 1st 2nd 3rd Last 3rd 2nd 1st
+2595 1st 2nd 3rd Last 3rd 2nd 1st
+2596 1st 2nd 3rd Last 3rd 2nd 1st
+2597 1st 2nd 3rd Last 3rd 2nd 1st
+2598 1st 2nd 3rd Last 3rd 2nd 1st
+2599 1st 2nd 3rd Last 3rd 2nd 1st
+2600 1st 2nd 3rd Last 3rd 2nd 1st
+2601 1st 2nd 3rd Last 3rd 2nd 1st
+2602 1st 2nd 3rd Last 3rd 2nd 1st
+2603 1st 2nd 3rd Last 3rd 2nd 1st
+2604 1st 2nd 3rd Last 3rd 2nd 1st
+2605 1st 2nd 3rd Last 3rd 2nd 1st
+2606 1st 2nd 3rd Last 3rd 2nd 1st
+2607 1st 2nd 3rd Last 3rd 2nd 1st
+2608 1st 2nd 3rd Last 3rd 2nd 1st
+2609 1st 2nd 3rd Last 3rd 2nd 1st
+2610 1st 2nd 3rd Last 3rd 2nd 1st
+2611 1st 2nd 3rd Last 3rd 2nd 1st
+2612 1st 2nd 3rd Last 3rd 2nd 1st
+2613 1st 2nd 3rd Last 3rd 2nd 1st
+2614 1st 2nd 3rd Last 3rd 2nd 1st
+2615 1st 2nd 3rd Last 3rd 2nd 1st
+2616 1st 2nd 3rd Last 3rd 2nd 1st
+2617 1st 2nd 3rd Last 3rd 2nd 1st
+2618 1st 2nd 3rd Last 3rd 2nd 1st
+2619 1st 2nd 3rd Last 3rd 2nd 1st
+2620 1st 2nd 3rd Last 3rd 2nd 1st
+2621 1st 2nd 3rd Last 3rd 2nd 1st
+2622 1st 2nd 3rd Last 3rd 2nd 1st
+2623 1st 2nd 3rd Last 3rd 2nd 1st
+2624 1st 2nd 3rd Last 3rd 2nd 1st
+2625 1st 2nd 3rd Last 3rd 2nd 1st
+2626 1st 2nd 3rd Last 3rd 2nd 1st
+2627 1st 2nd 3rd Last 3rd 2nd 1st
+2628 1st 2nd 3rd Last 3rd 2nd 1st
+2629 1st 2nd 3rd Last 3rd 2nd 1st
+2630 1st 2nd 3rd Last 3rd 2nd 1st
+2631 1st 2nd 3rd Last 3rd 2nd 1st
+2632 1st 2nd 3rd Last 3rd 2nd 1st
+2633 1st 2nd 3rd Last 3rd 2nd 1st
+2634 1st 2nd 3rd Last 3rd 2nd 1st
+2635 1st 2nd 3rd Last 3rd 2nd 1st
+2636 1st 2nd 3rd Last 3rd 2nd 1st
+2637 1st 2nd 3rd Last 3rd 2nd 1st
+2638 1st 2nd 3rd Last 3rd 2nd 1st
+2639 1st 2nd 3rd Last 3rd 2nd 1st
+2640 1st 2nd 3rd Last 3rd 2nd 1st
+2641 1st 2nd 3rd Last 3rd 2nd 1st
+2642 1st 2nd 3rd Last 3rd 2nd 1st
+2643 1st 2nd 3rd Last 3rd 2nd 1st
+2644 1st 2nd 3rd Last 3rd 2nd 1st
+2645 1st 2nd 3rd Last 3rd 2nd 1st
+2646 1st 2nd 3rd Last 3rd 2nd 1st
+2647 1st 2nd 3rd Last 3rd 2nd 1st
+2648 1st 2nd 3rd Last 3rd 2nd 1st
+2649 1st 2nd 3rd Last 3rd 2nd 1st
+2650 1st 2nd 3rd Last 3rd 2nd 1st
+2651 1st 2nd 3rd Last 3rd 2nd 1st
+2652 1st 2nd 3rd Last 3rd 2nd 1st
+2653 1st 2nd 3rd Last 3rd 2nd 1st
+2654 1st 2nd 3rd Last 3rd 2nd 1st
+2655 1st 2nd 3rd Last 3rd 2nd 1st
+2656 1st 2nd 3rd Last 3rd 2nd 1st
+2657 1st 2nd 3rd Last 3rd 2nd 1st
+2658 1st 2nd 3rd Last 3rd 2nd 1st
+2659 1st 2nd 3rd Last 3rd 2nd 1st
+2660 1st 2nd 3rd Last 3rd 2nd 1st
+2661 1st 2nd 3rd Last 3rd 2nd 1st
+2662 1st 2nd 3rd Last 3rd 2nd 1st
+2663 1st 2nd 3rd Last 3rd 2nd 1st
+2664 1st 2nd 3rd Last 3rd 2nd 1st
+2665 1st 2nd 3rd Last 3rd 2nd 1st
+2666 1st 2nd 3rd Last 3rd 2nd 1st
+2667 1st 2nd 3rd Last 3rd 2nd 1st
+2668 1st 2nd 3rd Last 3rd 2nd 1st
+2669 1st 2nd 3rd Last 3rd 2nd 1st
+2670 1st 2nd 3rd Last 3rd 2nd 1st
+2671 1st 2nd 3rd Last 3rd 2nd 1st
+2672 1st 2nd 3rd Last 3rd 2nd 1st
+2673 1st 2nd 3rd Last 3rd 2nd 1st
+2674 1st 2nd 3rd Last 3rd 2nd 1st
+2675 1st 2nd 3rd Last 3rd 2nd 1st
+2676 1st 2nd 3rd Last 3rd 2nd 1st
+2677 1st 2nd 3rd Last 3rd 2nd 1st
+2678 1st 2nd 3rd Last 3rd 2nd 1st
+2679 1st 2nd 3rd Last 3rd 2nd 1st
+2680 1st 2nd 3rd Last 3rd 2nd 1st
+2681 1st 2nd 3rd Last 3rd 2nd 1st
+2682 1st 2nd 3rd Last 3rd 2nd 1st
+2683 1st 2nd 3rd Last 3rd 2nd 1st
+2684 1st 2nd 3rd Last 3rd 2nd 1st
+2685 1st 2nd 3rd Last 3rd 2nd 1st
+2686 1st 2nd 3rd Last 3rd 2nd 1st
+2687 1st 2nd 3rd Last 3rd 2nd 1st
+2688 1st 2nd 3rd Last 3rd 2nd 1st
+2689 1st 2nd 3rd Last 3rd 2nd 1st
+2690 1st 2nd 3rd Last 3rd 2nd 1st
+2691 1st 2nd 3rd Last 3rd 2nd 1st
+2692 1st 2nd 3rd Last 3rd 2nd 1st
+2693 1st 2nd 3rd Last 3rd 2nd 1st
+2694 1st 2nd 3rd Last 3rd 2nd 1st
+2695 1st 2nd 3rd Last 3rd 2nd 1st
+2696 1st 2nd 3rd Last 3rd 2nd 1st
+2697 1st 2nd 3rd Last 3rd 2nd 1st
+2698 1st 2nd 3rd Last 3rd 2nd 1st
+2699 1st 2nd 3rd Last 3rd 2nd 1st
+2700 1st 2nd 3rd Last 3rd 2nd 1st
+2701 1st 2nd 3rd Last 3rd 2nd 1st
+2702 1st 2nd 3rd Last 3rd 2nd 1st
+2703 1st 2nd 3rd Last 3rd 2nd 1st
+2704 1st 2nd 3rd Last 3rd 2nd 1st
+2705 1st 2nd 3rd Last 3rd 2nd 1st
+2706 1st 2nd 3rd Last 3rd 2nd 1st
+2707 1st 2nd 3rd Last 3rd 2nd 1st
+2708 1st 2nd 3rd Last 3rd 2nd 1st
+2709 1st 2nd 3rd Last 3rd 2nd 1st
+2710 1st 2nd 3rd Last 3rd 2nd 1st
+2711 1st 2nd 3rd Last 3rd 2nd 1st
+2712 1st 2nd 3rd Last 3rd 2nd 1st
+2713 1st 2nd 3rd Last 3rd 2nd 1st
+2714 1st 2nd 3rd Last 3rd 2nd 1st
+2715 1st 2nd 3rd Last 3rd 2nd 1st
+2716 1st 2nd 3rd Last 3rd 2nd 1st
+2717 1st 2nd 3rd Last 3rd 2nd 1st
+2718 1st 2nd 3rd Last 3rd 2nd 1st
+2719 1st 2nd 3rd Last 3rd 2nd 1st
+2720 1st 2nd 3rd Last 3rd 2nd 1st
+2721 1st 2nd 3rd Last 3rd 2nd 1st
+2722 1st 2nd 3rd Last 3rd 2nd 1st
+2723 1st 2nd 3rd Last 3rd 2nd 1st
+2724 1st 2nd 3rd Last 3rd 2nd 1st
+2725 1st 2nd 3rd Last 3rd 2nd 1st
+2726 1st 2nd 3rd Last 3rd 2nd 1st
+2727 1st 2nd 3rd Last 3rd 2nd 1st
+2728 1st 2nd 3rd Last 3rd 2nd 1st
+2729 1st 2nd 3rd Last 3rd 2nd 1st
+2730 1st 2nd 3rd Last 3rd 2nd 1st
+2731 1st 2nd 3rd Last 3rd 2nd 1st
+2732 1st 2nd 3rd Last 3rd 2nd 1st
+2733 1st 2nd 3rd Last 3rd 2nd 1st
+2734 1st 2nd 3rd Last 3rd 2nd 1st
+2735 1st 2nd 3rd Last 3rd 2nd 1st
+2736 1st 2nd 3rd Last 3rd 2nd 1st
+2737 1st 2nd 3rd Last 3rd 2nd 1st
+2738 1st 2nd 3rd Last 3rd 2nd 1st
+2739 1st 2nd 3rd Last 3rd 2nd 1st
+2740 1st 2nd 3rd Last 3rd 2nd 1st
+2741 1st 2nd 3rd Last 3rd 2nd 1st
+2742 1st 2nd 3rd Last 3rd 2nd 1st
+2743 1st 2nd 3rd Last 3rd 2nd 1st
+2744 1st 2nd 3rd Last 3rd 2nd 1st
+2745 1st 2nd 3rd Last 3rd 2nd 1st
+2746 1st 2nd 3rd Last 3rd 2nd 1st
+2747 1st 2nd 3rd Last 3rd 2nd 1st
+2748 1st 2nd 3rd Last 3rd 2nd 1st
+2749 1st 2nd 3rd Last 3rd 2nd 1st
+2750 1st 2nd 3rd Last 3rd 2nd 1st
+2751 1st 2nd 3rd Last 3rd 2nd 1st
+2752 1st 2nd 3rd Last 3rd 2nd 1st
+2753 1st 2nd 3rd Last 3rd 2nd 1st
+2754 1st 2nd 3rd Last 3rd 2nd 1st
+2755 1st 2nd 3rd Last 3rd 2nd 1st
+2756 1st 2nd 3rd Last 3rd 2nd 1st
+2757 1st 2nd 3rd Last 3rd 2nd 1st
+2758 1st 2nd 3rd Last 3rd 2nd 1st
+2759 1st 2nd 3rd Last 3rd 2nd 1st
+2760 1st 2nd 3rd Last 3rd 2nd 1st
+2761 1st 2nd 3rd Last 3rd 2nd 1st
+2762 1st 2nd 3rd Last 3rd 2nd 1st
+2763 1st 2nd 3rd Last 3rd 2nd 1st
+2764 1st 2nd 3rd Last 3rd 2nd 1st
+2765 1st 2nd 3rd Last 3rd 2nd 1st
+2766 1st 2nd 3rd Last 3rd 2nd 1st
+2767 1st 2nd 3rd Last 3rd 2nd 1st
+2768 1st 2nd 3rd Last 3rd 2nd 1st
+2769 1st 2nd 3rd Last 3rd 2nd 1st
+2770 1st 2nd 3rd Last 3rd 2nd 1st
+2771 1st 2nd 3rd Last 3rd 2nd 1st
+2772 1st 2nd 3rd Last 3rd 2nd 1st
+2773 1st 2nd 3rd Last 3rd 2nd 1st
+2774 1st 2nd 3rd Last 3rd 2nd 1st
+2775 1st 2nd 3rd Last 3rd 2nd 1st
+2776 1st 2nd 3rd Last 3rd 2nd 1st
+2777 1st 2nd 3rd Last 3rd 2nd 1st
+2778 1st 2nd 3rd Last 3rd 2nd 1st
+2779 1st 2nd 3rd Last 3rd 2nd 1st
+2780 1st 2nd 3rd Last 3rd 2nd 1st
+2781 1st 2nd 3rd Last 3rd 2nd 1st
+2782 1st 2nd 3rd Last 3rd 2nd 1st
+2783 1st 2nd 3rd Last 3rd 2nd 1st
+2784 1st 2nd 3rd Last 3rd 2nd 1st
+2785 1st 2nd 3rd Last 3rd 2nd 1st
+2786 1st 2nd 3rd Last 3rd 2nd 1st
+2787 1st 2nd 3rd Last 3rd 2nd 1st
+2788 1st 2nd 3rd Last 3rd 2nd 1st
+2789 1st 2nd 3rd Last 3rd 2nd 1st
+2790 1st 2nd 3rd Last 3rd 2nd 1st
+2791 1st 2nd 3rd Last 3rd 2nd 1st
+2792 1st 2nd 3rd Last 3rd 2nd 1st
+2793 1st 2nd 3rd Last 3rd 2nd 1st
+2794 1st 2nd 3rd Last 3rd 2nd 1st
+2795 1st 2nd 3rd Last 3rd 2nd 1st
+2796 1st 2nd 3rd Last 3rd 2nd 1st
+2797 1st 2nd 3rd Last 3rd 2nd 1st
+2798 1st 2nd 3rd Last 3rd 2nd 1st
+2799 1st 2nd 3rd Last 3rd 2nd 1st
+2800 1st 2nd 3rd Last 3rd 2nd 1st
+2801 1st 2nd 3rd Last 3rd 2nd 1st
+2802 1st 2nd 3rd Last 3rd 2nd 1st
+2803 1st 2nd 3rd Last 3rd 2nd 1st
+2804 1st 2nd 3rd Last 3rd 2nd 1st
+2805 1st 2nd 3rd Last 3rd 2nd 1st
+2806 1st 2nd 3rd Last 3rd 2nd 1st
+2807 1st 2nd 3rd Last 3rd 2nd 1st
+2808 1st 2nd 3rd Last 3rd 2nd 1st
+2809 1st 2nd 3rd Last 3rd 2nd 1st
+2810 1st 2nd 3rd Last 3rd 2nd 1st
+2811 1st 2nd 3rd Last 3rd 2nd 1st
+2812 1st 2nd 3rd Last 3rd 2nd 1st
+2813 1st 2nd 3rd Last 3rd 2nd 1st
+2814 1st 2nd 3rd Last 3rd 2nd 1st
+2815 1st 2nd 3rd Last 3rd 2nd 1st
+2816 1st 2nd 3rd Last 3rd 2nd 1st
+2817 1st 2nd 3rd Last 3rd 2nd 1st
+2818 1st 2nd 3rd Last 3rd 2nd 1st
+2819 1st 2nd 3rd Last 3rd 2nd 1st
+2820 1st 2nd 3rd Last 3rd 2nd 1st
+2821 1st 2nd 3rd Last 3rd 2nd 1st
+2822 1st 2nd 3rd Last 3rd 2nd 1st
+2823 1st 2nd 3rd Last 3rd 2nd 1st
+2824 1st 2nd 3rd Last 3rd 2nd 1st
+2825 1st 2nd 3rd Last 3rd 2nd 1st
+2826 1st 2nd 3rd Last 3rd 2nd 1st
+2827 1st 2nd 3rd Last 3rd 2nd 1st
+2828 1st 2nd 3rd Last 3rd 2nd 1st
+2829 1st 2nd 3rd Last 3rd 2nd 1st
+2830 1st 2nd 3rd Last 3rd 2nd 1st
+2831 1st 2nd 3rd Last 3rd 2nd 1st
+2832 1st 2nd 3rd Last 3rd 2nd 1st
+2833 1st 2nd 3rd Last 3rd 2nd 1st
+2834 1st 2nd 3rd Last 3rd 2nd 1st
+2835 1st 2nd 3rd Last 3rd 2nd 1st
+2836 1st 2nd 3rd Last 3rd 2nd 1st
+2837 1st 2nd 3rd Last 3rd 2nd 1st
+2838 1st 2nd 3rd Last 3rd 2nd 1st
+2839 1st 2nd 3rd Last 3rd 2nd 1st
+2840 1st 2nd 3rd Last 3rd 2nd 1st
+2841 1st 2nd 3rd Last 3rd 2nd 1st
+2842 1st 2nd 3rd Last 3rd 2nd 1st
+2843 1st 2nd 3rd Last 3rd 2nd 1st
+2844 1st 2nd 3rd Last 3rd 2nd 1st
+2845 1st 2nd 3rd Last 3rd 2nd 1st
+2846 1st 2nd 3rd Last 3rd 2nd 1st
+2847 1st 2nd 3rd Last 3rd 2nd 1st
+2848 1st 2nd 3rd Last 3rd 2nd 1st
+2849 1st 2nd 3rd Last 3rd 2nd 1st
+2850 1st 2nd 3rd Last 3rd 2nd 1st
+2851 1st 2nd 3rd Last 3rd 2nd 1st
+2852 1st 2nd 3rd Last 3rd 2nd 1st
+2853 1st 2nd 3rd Last 3rd 2nd 1st
+2854 1st 2nd 3rd Last 3rd 2nd 1st
+2855 1st 2nd 3rd Last 3rd 2nd 1st
+2856 1st 2nd 3rd Last 3rd 2nd 1st
+2857 1st 2nd 3rd Last 3rd 2nd 1st
+2858 1st 2nd 3rd Last 3rd 2nd 1st
+2859 1st 2nd 3rd Last 3rd 2nd 1st
+2860 1st 2nd 3rd Last 3rd 2nd 1st
+2861 1st 2nd 3rd Last 3rd 2nd 1st
+2862 1st 2nd 3rd Last 3rd 2nd 1st
+2863 1st 2nd 3rd Last 3rd 2nd 1st
+2864 1st 2nd 3rd Last 3rd 2nd 1st
+2865 1st 2nd 3rd Last 3rd 2nd 1st
+2866 1st 2nd 3rd Last 3rd 2nd 1st
+2867 1st 2nd 3rd Last 3rd 2nd 1st
+2868 1st 2nd 3rd Last 3rd 2nd 1st
+2869 1st 2nd 3rd Last 3rd 2nd 1st
+2870 1st 2nd 3rd Last 3rd 2nd 1st
+2871 1st 2nd 3rd Last 3rd 2nd 1st
+2872 1st 2nd 3rd Last 3rd 2nd 1st
+2873 1st 2nd 3rd Last 3rd 2nd 1st
+2874 1st 2nd 3rd Last 3rd 2nd 1st
+2875 1st 2nd 3rd Last 3rd 2nd 1st
+2876 1st 2nd 3rd Last 3rd 2nd 1st
+2877 1st 2nd 3rd Last 3rd 2nd 1st
+2878 1st 2nd 3rd Last 3rd 2nd 1st
+2879 1st 2nd 3rd Last 3rd 2nd 1st
+2880 1st 2nd 3rd Last 3rd 2nd 1st
+2881 1st 2nd 3rd Last 3rd 2nd 1st
+2882 1st 2nd 3rd Last 3rd 2nd 1st
+2883 1st 2nd 3rd Last 3rd 2nd 1st
+2884 1st 2nd 3rd Last 3rd 2nd 1st
+2885 1st 2nd 3rd Last 3rd 2nd 1st
+2886 1st 2nd 3rd Last 3rd 2nd 1st
+2887 1st 2nd 3rd Last 3rd 2nd 1st
+2888 1st 2nd 3rd Last 3rd 2nd 1st
+2889 1st 2nd 3rd Last 3rd 2nd 1st
+2890 1st 2nd 3rd Last 3rd 2nd 1st
+2891 1st 2nd 3rd Last 3rd 2nd 1st
+2892 1st 2nd 3rd Last 3rd 2nd 1st
+2893 1st 2nd 3rd Last 3rd 2nd 1st
+2894 1st 2nd 3rd Last 3rd 2nd 1st
+2895 1st 2nd 3rd Last 3rd 2nd 1st
+2896 1st 2nd 3rd Last 3rd 2nd 1st
+2897 1st 2nd 3rd Last 3rd 2nd 1st
+2898 1st 2nd 3rd Last 3rd 2nd 1st
+2899 1st 2nd 3rd Last 3rd 2nd 1st
+2900 1st 2nd 3rd Last 3rd 2nd 1st
+2901 1st 2nd 3rd Last 3rd 2nd 1st
+2902 1st 2nd 3rd Last 3rd 2nd 1st
+2903 1st 2nd 3rd Last 3rd 2nd 1st
+2904 1st 2nd 3rd Last 3rd 2nd 1st
+2905 1st 2nd 3rd Last 3rd 2nd 1st
+2906 1st 2nd 3rd Last 3rd 2nd 1st
+2907 1st 2nd 3rd Last 3rd 2nd 1st
+2908 1st 2nd 3rd Last 3rd 2nd 1st
+2909 1st 2nd 3rd Last 3rd 2nd 1st
+2910 1st 2nd 3rd Last 3rd 2nd 1st
+2911 1st 2nd 3rd Last 3rd 2nd 1st
+2912 1st 2nd 3rd Last 3rd 2nd 1st
+2913 1st 2nd 3rd Last 3rd 2nd 1st
+2914 1st 2nd 3rd Last 3rd 2nd 1st
+2915 1st 2nd 3rd Last 3rd 2nd 1st
+2916 1st 2nd 3rd Last 3rd 2nd 1st
+2917 1st 2nd 3rd Last 3rd 2nd 1st
+2918 1st 2nd 3rd Last 3rd 2nd 1st
+2919 1st 2nd 3rd Last 3rd 2nd 1st
+2920 1st 2nd 3rd Last 3rd 2nd 1st
+2921 1st 2nd 3rd Last 3rd 2nd 1st
+2922 1st 2nd 3rd Last 3rd 2nd 1st
+2923 1st 2nd 3rd Last 3rd 2nd 1st
+2924 1st 2nd 3rd Last 3rd 2nd 1st
+2925 1st 2nd 3rd Last 3rd 2nd 1st
+2926 1st 2nd 3rd Last 3rd 2nd 1st
+2927 1st 2nd 3rd Last 3rd 2nd 1st
+2928 1st 2nd 3rd Last 3rd 2nd 1st
+2929 1st 2nd 3rd Last 3rd 2nd 1st
+2930 1st 2nd 3rd Last 3rd 2nd 1st
+2931 1st 2nd 3rd Last 3rd 2nd 1st
+2932 1st 2nd 3rd Last 3rd 2nd 1st
+2933 1st 2nd 3rd Last 3rd 2nd 1st
+2934 1st 2nd 3rd Last 3rd 2nd 1st
+2935 1st 2nd 3rd Last 3rd 2nd 1st
+2936 1st 2nd 3rd Last 3rd 2nd 1st
+2937 1st 2nd 3rd Last 3rd 2nd 1st
+2938 1st 2nd 3rd Last 3rd 2nd 1st
+2939 1st 2nd 3rd Last 3rd 2nd 1st
+2940 1st 2nd 3rd Last 3rd 2nd 1st
+2941 1st 2nd 3rd Last 3rd 2nd 1st
+2942 1st 2nd 3rd Last 3rd 2nd 1st
+2943 1st 2nd 3rd Last 3rd 2nd 1st
+2944 1st 2nd 3rd Last 3rd 2nd 1st
+2945 1st 2nd 3rd Last 3rd 2nd 1st
+2946 1st 2nd 3rd Last 3rd 2nd 1st
+2947 1st 2nd 3rd Last 3rd 2nd 1st
+2948 1st 2nd 3rd Last 3rd 2nd 1st
+2949 1st 2nd 3rd Last 3rd 2nd 1st
+2950 1st 2nd 3rd Last 3rd 2nd 1st
+2951 1st 2nd 3rd Last 3rd 2nd 1st
+2952 1st 2nd 3rd Last 3rd 2nd 1st
+2953 1st 2nd 3rd Last 3rd 2nd 1st
+2954 1st 2nd 3rd Last 3rd 2nd 1st
+2955 1st 2nd 3rd Last 3rd 2nd 1st
+2956 1st 2nd 3rd Last 3rd 2nd 1st
+2957 1st 2nd 3rd Last 3rd 2nd 1st
+2958 1st 2nd 3rd Last 3rd 2nd 1st
+2959 1st 2nd 3rd Last 3rd 2nd 1st
+2960 1st 2nd 3rd Last 3rd 2nd 1st
+2961 1st 2nd 3rd Last 3rd 2nd 1st
+2962 1st 2nd 3rd Last 3rd 2nd 1st
+2963 1st 2nd 3rd Last 3rd 2nd 1st
+2964 1st 2nd 3rd Last 3rd 2nd 1st
+2965 1st 2nd 3rd Last 3rd 2nd 1st
+2966 1st 2nd 3rd Last 3rd 2nd 1st
+2967 1st 2nd 3rd Last 3rd 2nd 1st
+2968 1st 2nd 3rd Last 3rd 2nd 1st
+2969 1st 2nd 3rd Last 3rd 2nd 1st
+2970 1st 2nd 3rd Last 3rd 2nd 1st
+2971 1st 2nd 3rd Last 3rd 2nd 1st
+2972 1st 2nd 3rd Last 3rd 2nd 1st
+2973 1st 2nd 3rd Last 3rd 2nd 1st
+2974 1st 2nd 3rd Last 3rd 2nd 1st
+2975 1st 2nd 3rd Last 3rd 2nd 1st
+2976 1st 2nd 3rd Last 3rd 2nd 1st
+2977 1st 2nd 3rd Last 3rd 2nd 1st
+2978 1st 2nd 3rd Last 3rd 2nd 1st
+2979 1st 2nd 3rd Last 3rd 2nd 1st
+2980 1st 2nd 3rd Last 3rd 2nd 1st
+2981 1st 2nd 3rd Last 3rd 2nd 1st
+2982 1st 2nd 3rd Last 3rd 2nd 1st
+2983 1st 2nd 3rd Last 3rd 2nd 1st
+2984 1st 2nd 3rd Last 3rd 2nd 1st
+2985 1st 2nd 3rd Last 3rd 2nd 1st
+2986 1st 2nd 3rd Last 3rd 2nd 1st
+2987 1st 2nd 3rd Last 3rd 2nd 1st
+2988 1st 2nd 3rd Last 3rd 2nd 1st
+2989 1st 2nd 3rd Last 3rd 2nd 1st
+2990 1st 2nd 3rd Last 3rd 2nd 1st
+2991 1st 2nd 3rd Last 3rd 2nd 1st
+2992 1st 2nd 3rd Last 3rd 2nd 1st
+2993 1st 2nd 3rd Last 3rd 2nd 1st
+2994 1st 2nd 3rd Last 3rd 2nd 1st
+2995 1st 2nd 3rd Last 3rd 2nd 1st
+2996 1st 2nd 3rd Last 3rd 2nd 1st
+2997 1st 2nd 3rd Last 3rd 2nd 1st
+2998 1st 2nd 3rd Last 3rd 2nd 1st
+2999 1st 2nd 3rd Last 3rd 2nd 1st
+3000 1st 2nd 3rd Last 3rd 2nd 1st
+3001 1st 2nd 3rd Last 3rd 2nd 1st
+3002 1st 2nd 3rd Last 3rd 2nd 1st
+3003 1st 2nd 3rd Last 3rd 2nd 1st
+3004 1st 2nd 3rd Last 3rd 2nd 1st
+3005 1st 2nd 3rd Last 3rd 2nd 1st
+3006 1st 2nd 3rd Last 3rd 2nd 1st
+3007 1st 2nd 3rd Last 3rd 2nd 1st
+3008 1st 2nd 3rd Last 3rd 2nd 1st
+3009 1st 2nd 3rd Last 3rd 2nd 1st
+3010 1st 2nd 3rd Last 3rd 2nd 1st
+3011 1st 2nd 3rd Last 3rd 2nd 1st
+3012 1st 2nd 3rd Last 3rd 2nd 1st
+3013 1st 2nd 3rd Last 3rd 2nd 1st
+3014 1st 2nd 3rd Last 3rd 2nd 1st
+3015 1st 2nd 3rd Last 3rd 2nd 1st
+3016 1st 2nd 3rd Last 3rd 2nd 1st
+3017 1st 2nd 3rd Last 3rd 2nd 1st
+3018 1st 2nd 3rd Last 3rd 2nd 1st
+3019 1st 2nd 3rd Last 3rd 2nd 1st
+3020 1st 2nd 3rd Last 3rd 2nd 1st
+3021 1st 2nd 3rd Last 3rd 2nd 1st
+3022 1st 2nd 3rd Last 3rd 2nd 1st
+3023 1st 2nd 3rd Last 3rd 2nd 1st
+3024 1st 2nd 3rd Last 3rd 2nd 1st
+3025 1st 2nd 3rd Last 3rd 2nd 1st
+3026 1st 2nd 3rd Last 3rd 2nd 1st
+3027 1st 2nd 3rd Last 3rd 2nd 1st
+3028 1st 2nd 3rd Last 3rd 2nd 1st
+3029 1st 2nd 3rd Last 3rd 2nd 1st
+3030 1st 2nd 3rd Last 3rd 2nd 1st
+3031 1st 2nd 3rd Last 3rd 2nd 1st
+3032 1st 2nd 3rd Last 3rd 2nd 1st
+3033 1st 2nd 3rd Last 3rd 2nd 1st
+3034 1st 2nd 3rd Last 3rd 2nd 1st
+3035 1st 2nd 3rd Last 3rd 2nd 1st
+3036 1st 2nd 3rd Last 3rd 2nd 1st
+3037 1st 2nd 3rd Last 3rd 2nd 1st
+3038 1st 2nd 3rd Last 3rd 2nd 1st
+3039 1st 2nd 3rd Last 3rd 2nd 1st
+3040 1st 2nd 3rd Last 3rd 2nd 1st
+3041 1st 2nd 3rd Last 3rd 2nd 1st
+3042 1st 2nd 3rd Last 3rd 2nd 1st
+3043 1st 2nd 3rd Last 3rd 2nd 1st
+3044 1st 2nd 3rd Last 3rd 2nd 1st
+3045 1st 2nd 3rd Last 3rd 2nd 1st
+3046 1st 2nd 3rd Last 3rd 2nd 1st
+3047 1st 2nd 3rd Last 3rd 2nd 1st
+3048 1st 2nd 3rd Last 3rd 2nd 1st
+3049 1st 2nd 3rd Last 3rd 2nd 1st
+3050 1st 2nd 3rd Last 3rd 2nd 1st
+3051 1st 2nd 3rd Last 3rd 2nd 1st
+3052 1st 2nd 3rd Last 3rd 2nd 1st
+3053 1st 2nd 3rd Last 3rd 2nd 1st
+3054 1st 2nd 3rd Last 3rd 2nd 1st
+3055 1st 2nd 3rd Last 3rd 2nd 1st
+3056 1st 2nd 3rd Last 3rd 2nd 1st
+3057 1st 2nd 3rd Last 3rd 2nd 1st
+3058 1st 2nd 3rd Last 3rd 2nd 1st
+3059 1st 2nd 3rd Last 3rd 2nd 1st
+3060 1st 2nd 3rd Last 3rd 2nd 1st
+3061 1st 2nd 3rd Last 3rd 2nd 1st
+3062 1st 2nd 3rd Last 3rd 2nd 1st
+3063 1st 2nd 3rd Last 3rd 2nd 1st
+3064 1st 2nd 3rd Last 3rd 2nd 1st
+3065 1st 2nd 3rd Last 3rd 2nd 1st
+3066 1st 2nd 3rd Last 3rd 2nd 1st
+3067 1st 2nd 3rd Last 3rd 2nd 1st
+3068 1st 2nd 3rd Last 3rd 2nd 1st
+3069 1st 2nd 3rd Last 3rd 2nd 1st
+3070 1st 2nd 3rd Last 3rd 2nd 1st
+3071 1st 2nd 3rd Last 3rd 2nd 1st
+3072 1st 2nd 3rd Last 3rd 2nd 1st
+3073 1st 2nd 3rd Last 3rd 2nd 1st
+3074 1st 2nd 3rd Last 3rd 2nd 1st
+3075 1st 2nd 3rd Last 3rd 2nd 1st
+3076 1st 2nd 3rd Last 3rd 2nd 1st
+3077 1st 2nd 3rd Last 3rd 2nd 1st
+3078 1st 2nd 3rd Last 3rd 2nd 1st
+3079 1st 2nd 3rd Last 3rd 2nd 1st
+3080 1st 2nd 3rd Last 3rd 2nd 1st
+3081 1st 2nd 3rd Last 3rd 2nd 1st
+3082 1st 2nd 3rd Last 3rd 2nd 1st
+3083 1st 2nd 3rd Last 3rd 2nd 1st
+3084 1st 2nd 3rd Last 3rd 2nd 1st
+3085 1st 2nd 3rd Last 3rd 2nd 1st
+3086 1st 2nd 3rd Last 3rd 2nd 1st
+3087 1st 2nd 3rd Last 3rd 2nd 1st
+3088 1st 2nd 3rd Last 3rd 2nd 1st
+3089 1st 2nd 3rd Last 3rd 2nd 1st
+3090 1st 2nd 3rd Last 3rd 2nd 1st
+3091 1st 2nd 3rd Last 3rd 2nd 1st
+3092 1st 2nd 3rd Last 3rd 2nd 1st
+3093 1st 2nd 3rd Last 3rd 2nd 1st
+3094 1st 2nd 3rd Last 3rd 2nd 1st
+3095 1st 2nd 3rd Last 3rd 2nd 1st
+3096 1st 2nd 3rd Last 3rd 2nd 1st
+3097 1st 2nd 3rd Last 3rd 2nd 1st
+3098 1st 2nd 3rd Last 3rd 2nd 1st
+3099 1st 2nd 3rd Last 3rd 2nd 1st
+3100 1st 2nd 3rd Last 3rd 2nd 1st
+3101 1st 2nd 3rd Last 3rd 2nd 1st
+3102 1st 2nd 3rd Last 3rd 2nd 1st
+3103 1st 2nd 3rd Last 3rd 2nd 1st
+3104 1st 2nd 3rd Last 3rd 2nd 1st
+3105 1st 2nd 3rd Last 3rd 2nd 1st
+3106 1st 2nd 3rd Last 3rd 2nd 1st
+3107 1st 2nd 3rd Last 3rd 2nd 1st
+3108 1st 2nd 3rd Last 3rd 2nd 1st
+3109 1st 2nd 3rd Last 3rd 2nd 1st
+3110 1st 2nd 3rd Last 3rd 2nd 1st
+3111 1st 2nd 3rd Last 3rd 2nd 1st
+3112 1st 2nd 3rd Last 3rd 2nd 1st
+3113 1st 2nd 3rd Last 3rd 2nd 1st
+3114 1st 2nd 3rd Last 3rd 2nd 1st
+3115 1st 2nd 3rd Last 3rd 2nd 1st
+3116 1st 2nd 3rd Last 3rd 2nd 1st
+3117 1st 2nd 3rd Last 3rd 2nd 1st
+3118 1st 2nd 3rd Last 3rd 2nd 1st
+3119 1st 2nd 3rd Last 3rd 2nd 1st
+3120 1st 2nd 3rd Last 3rd 2nd 1st
+3121 1st 2nd 3rd Last 3rd 2nd 1st
+3122 1st 2nd 3rd Last 3rd 2nd 1st
+3123 1st 2nd 3rd Last 3rd 2nd 1st
+3124 1st 2nd 3rd Last 3rd 2nd 1st
+3125 1st 2nd 3rd Last 3rd 2nd 1st
+3126 1st 2nd 3rd Last 3rd 2nd 1st
+3127 1st 2nd 3rd Last 3rd 2nd 1st
+3128 1st 2nd 3rd Last 3rd 2nd 1st
+3129 1st 2nd 3rd Last 3rd 2nd 1st
+3130 1st 2nd 3rd Last 3rd 2nd 1st
+3131 1st 2nd 3rd Last 3rd 2nd 1st
+3132 1st 2nd 3rd Last 3rd 2nd 1st
+3133 1st 2nd 3rd Last 3rd 2nd 1st
+3134 1st 2nd 3rd Last 3rd 2nd 1st
+3135 1st 2nd 3rd Last 3rd 2nd 1st
+3136 1st 2nd 3rd Last 3rd 2nd 1st
+3137 1st 2nd 3rd Last 3rd 2nd 1st
+3138 1st 2nd 3rd Last 3rd 2nd 1st
+3139 1st 2nd 3rd Last 3rd 2nd 1st
+3140 1st 2nd 3rd Last 3rd 2nd 1st
+3141 1st 2nd 3rd Last 3rd 2nd 1st
+3142 1st 2nd 3rd Last 3rd 2nd 1st
+3143 1st 2nd 3rd Last 3rd 2nd 1st
+3144 1st 2nd 3rd Last 3rd 2nd 1st
+3145 1st 2nd 3rd Last 3rd 2nd 1st
+3146 1st 2nd 3rd Last 3rd 2nd 1st
+3147 1st 2nd 3rd Last 3rd 2nd 1st
+3148 1st 2nd 3rd Last 3rd 2nd 1st
+3149 1st 2nd 3rd Last 3rd 2nd 1st
+3150 1st 2nd 3rd Last 3rd 2nd 1st
+3151 1st 2nd 3rd Last 3rd 2nd 1st
+3152 1st 2nd 3rd Last 3rd 2nd 1st
+3153 1st 2nd 3rd Last 3rd 2nd 1st
+3154 1st 2nd 3rd Last 3rd 2nd 1st
+3155 1st 2nd 3rd Last 3rd 2nd 1st
+3156 1st 2nd 3rd Last 3rd 2nd 1st
+3157 1st 2nd 3rd Last 3rd 2nd 1st
+3158 1st 2nd 3rd Last 3rd 2nd 1st
+3159 1st 2nd 3rd Last 3rd 2nd 1st
+3160 1st 2nd 3rd Last 3rd 2nd 1st
+3161 1st 2nd 3rd Last 3rd 2nd 1st
+3162 1st 2nd 3rd Last 3rd 2nd 1st
+3163 1st 2nd 3rd Last 3rd 2nd 1st
+3164 1st 2nd 3rd Last 3rd 2nd 1st
+3165 1st 2nd 3rd Last 3rd 2nd 1st
+3166 1st 2nd 3rd Last 3rd 2nd 1st
+3167 1st 2nd 3rd Last 3rd 2nd 1st
+3168 1st 2nd 3rd Last 3rd 2nd 1st
+3169 1st 2nd 3rd Last 3rd 2nd 1st
+3170 1st 2nd 3rd Last 3rd 2nd 1st
+3171 1st 2nd 3rd Last 3rd 2nd 1st
+3172 1st 2nd 3rd Last 3rd 2nd 1st
+3173 1st 2nd 3rd Last 3rd 2nd 1st
+3174 1st 2nd 3rd Last 3rd 2nd 1st
+3175 1st 2nd 3rd Last 3rd 2nd 1st
+3176 1st 2nd 3rd Last 3rd 2nd 1st
+3177 1st 2nd 3rd Last 3rd 2nd 1st
+3178 1st 2nd 3rd Last 3rd 2nd 1st
+3179 1st 2nd 3rd Last 3rd 2nd 1st
+3180 1st 2nd 3rd Last 3rd 2nd 1st
+3181 1st 2nd 3rd Last 3rd 2nd 1st
+3182 1st 2nd 3rd Last 3rd 2nd 1st
+3183 1st 2nd 3rd Last 3rd 2nd 1st
+3184 1st 2nd 3rd Last 3rd 2nd 1st
+3185 1st 2nd 3rd Last 3rd 2nd 1st
+3186 1st 2nd 3rd Last 3rd 2nd 1st
+3187 1st 2nd 3rd Last 3rd 2nd 1st
+3188 1st 2nd 3rd Last 3rd 2nd 1st
+3189 1st 2nd 3rd Last 3rd 2nd 1st
+3190 1st 2nd 3rd Last 3rd 2nd 1st
+3191 1st 2nd 3rd Last 3rd 2nd 1st
+3192 1st 2nd 3rd Last 3rd 2nd 1st
+3193 1st 2nd 3rd Last 3rd 2nd 1st
+3194 1st 2nd 3rd Last 3rd 2nd 1st
+3195 1st 2nd 3rd Last 3rd 2nd 1st
+3196 1st 2nd 3rd Last 3rd 2nd 1st
+3197 1st 2nd 3rd Last 3rd 2nd 1st
+3198 1st 2nd 3rd Last 3rd 2nd 1st
+3199 1st 2nd 3rd Last 3rd 2nd 1st
+3200 1st 2nd 3rd Last 3rd 2nd 1st
+3201 1st 2nd 3rd Last 3rd 2nd 1st
+3202 1st 2nd 3rd Last 3rd 2nd 1st
+3203 1st 2nd 3rd Last 3rd 2nd 1st
+3204 1st 2nd 3rd Last 3rd 2nd 1st
+3205 1st 2nd 3rd Last 3rd 2nd 1st
+3206 1st 2nd 3rd Last 3rd 2nd 1st
+3207 1st 2nd 3rd Last 3rd 2nd 1st
+3208 1st 2nd 3rd Last 3rd 2nd 1st
+3209 1st 2nd 3rd Last 3rd 2nd 1st
+3210 1st 2nd 3rd Last 3rd 2nd 1st
+3211 1st 2nd 3rd Last 3rd 2nd 1st
+3212 1st 2nd 3rd Last 3rd 2nd 1st
+3213 1st 2nd 3rd Last 3rd 2nd 1st
+3214 1st 2nd 3rd Last 3rd 2nd 1st
+3215 1st 2nd 3rd Last 3rd 2nd 1st
+3216 1st 2nd 3rd Last 3rd 2nd 1st
+3217 1st 2nd 3rd Last 3rd 2nd 1st
+3218 1st 2nd 3rd Last 3rd 2nd 1st
+3219 1st 2nd 3rd Last 3rd 2nd 1st
+3220 1st 2nd 3rd Last 3rd 2nd 1st
+3221 1st 2nd 3rd Last 3rd 2nd 1st
+3222 1st 2nd 3rd Last 3rd 2nd 1st
+3223 1st 2nd 3rd Last 3rd 2nd 1st
+3224 1st 2nd 3rd Last 3rd 2nd 1st
+3225 1st 2nd 3rd Last 3rd 2nd 1st
+3226 1st 2nd 3rd Last 3rd 2nd 1st
+3227 1st 2nd 3rd Last 3rd 2nd 1st
+3228 1st 2nd 3rd Last 3rd 2nd 1st
+3229 1st 2nd 3rd Last 3rd 2nd 1st
+3230 1st 2nd 3rd Last 3rd 2nd 1st
+3231 1st 2nd 3rd Last 3rd 2nd 1st
+3232 1st 2nd 3rd Last 3rd 2nd 1st
+3233 1st 2nd 3rd Last 3rd 2nd 1st
+3234 1st 2nd 3rd Last 3rd 2nd 1st
+3235 1st 2nd 3rd Last 3rd 2nd 1st
+3236 1st 2nd 3rd Last 3rd 2nd 1st
+3237 1st 2nd 3rd Last 3rd 2nd 1st
+3238 1st 2nd 3rd Last 3rd 2nd 1st
+3239 1st 2nd 3rd Last 3rd 2nd 1st
+3240 1st 2nd 3rd Last 3rd 2nd 1st
+3241 1st 2nd 3rd Last 3rd 2nd 1st
+3242 1st 2nd 3rd Last 3rd 2nd 1st
+3243 1st 2nd 3rd Last 3rd 2nd 1st
+3244 1st 2nd 3rd Last 3rd 2nd 1st
+3245 1st 2nd 3rd Last 3rd 2nd 1st
+3246 1st 2nd 3rd Last 3rd 2nd 1st
+3247 1st 2nd 3rd Last 3rd 2nd 1st
+3248 1st 2nd 3rd Last 3rd 2nd 1st
+3249 1st 2nd 3rd Last 3rd 2nd 1st
+3250 1st 2nd 3rd Last 3rd 2nd 1st
+3251 1st 2nd 3rd Last 3rd 2nd 1st
+3252 1st 2nd 3rd Last 3rd 2nd 1st
+3253 1st 2nd 3rd Last 3rd 2nd 1st
+3254 1st 2nd 3rd Last 3rd 2nd 1st
+3255 1st 2nd 3rd Last 3rd 2nd 1st
+3256 1st 2nd 3rd Last 3rd 2nd 1st
+3257 1st 2nd 3rd Last 3rd 2nd 1st
+3258 1st 2nd 3rd Last 3rd 2nd 1st
+3259 1st 2nd 3rd Last 3rd 2nd 1st
+3260 1st 2nd 3rd Last 3rd 2nd 1st
+3261 1st 2nd 3rd Last 3rd 2nd 1st
+3262 1st 2nd 3rd Last 3rd 2nd 1st
+3263 1st 2nd 3rd Last 3rd 2nd 1st
+3264 1st 2nd 3rd Last 3rd 2nd 1st
+3265 1st 2nd 3rd Last 3rd 2nd 1st
+3266 1st 2nd 3rd Last 3rd 2nd 1st
+3267 1st 2nd 3rd Last 3rd 2nd 1st
+3268 1st 2nd 3rd Last 3rd 2nd 1st
+3269 1st 2nd 3rd Last 3rd 2nd 1st
+3270 1st 2nd 3rd Last 3rd 2nd 1st
+3271 1st 2nd 3rd Last 3rd 2nd 1st
+3272 1st 2nd 3rd Last 3rd 2nd 1st
+3273 1st 2nd 3rd Last 3rd 2nd 1st
+3274 1st 2nd 3rd Last 3rd 2nd 1st
+3275 1st 2nd 3rd Last 3rd 2nd 1st
+3276 1st 2nd 3rd Last 3rd 2nd 1st
+3277 1st 2nd 3rd Last 3rd 2nd 1st
+3278 1st 2nd 3rd Last 3rd 2nd 1st
+3279 1st 2nd 3rd Last 3rd 2nd 1st
+3280 1st 2nd 3rd Last 3rd 2nd 1st
+3281 1st 2nd 3rd Last 3rd 2nd 1st
+3282 1st 2nd 3rd Last 3rd 2nd 1st
+3283 1st 2nd 3rd Last 3rd 2nd 1st
+3284 1st 2nd 3rd Last 3rd 2nd 1st
+3285 1st 2nd 3rd Last 3rd 2nd 1st
+3286 1st 2nd 3rd Last 3rd 2nd 1st
+3287 1st 2nd 3rd Last 3rd 2nd 1st
+3288 1st 2nd 3rd Last 3rd 2nd 1st
+3289 1st 2nd 3rd Last 3rd 2nd 1st
+3290 1st 2nd 3rd Last 3rd 2nd 1st
+3291 1st 2nd 3rd Last 3rd 2nd 1st
+3292 1st 2nd 3rd Last 3rd 2nd 1st
+3293 1st 2nd 3rd Last 3rd 2nd 1st
+3294 1st 2nd 3rd Last 3rd 2nd 1st
+3295 1st 2nd 3rd Last 3rd 2nd 1st
+3296 1st 2nd 3rd Last 3rd 2nd 1st
+3297 1st 2nd 3rd Last 3rd 2nd 1st
+3298 1st 2nd 3rd Last 3rd 2nd 1st
+3299 1st 2nd 3rd Last 3rd 2nd 1st
+3300 1st 2nd 3rd Last 3rd 2nd 1st
+3301 1st 2nd 3rd Last 3rd 2nd 1st
+3302 1st 2nd 3rd Last 3rd 2nd 1st
+3303 1st 2nd 3rd Last 3rd 2nd 1st
+3304 1st 2nd 3rd Last 3rd 2nd 1st
+3305 1st 2nd 3rd Last 3rd 2nd 1st
+3306 1st 2nd 3rd Last 3rd 2nd 1st
+3307 1st 2nd 3rd Last 3rd 2nd 1st
+3308 1st 2nd 3rd Last 3rd 2nd 1st
+3309 1st 2nd 3rd Last 3rd 2nd 1st
+3310 1st 2nd 3rd Last 3rd 2nd 1st
+3311 1st 2nd 3rd Last 3rd 2nd 1st
+3312 1st 2nd 3rd Last 3rd 2nd 1st
+3313 1st 2nd 3rd Last 3rd 2nd 1st
+3314 1st 2nd 3rd Last 3rd 2nd 1st
+3315 1st 2nd 3rd Last 3rd 2nd 1st
+3316 1st 2nd 3rd Last 3rd 2nd 1st
+3317 1st 2nd 3rd Last 3rd 2nd 1st
+3318 1st 2nd 3rd Last 3rd 2nd 1st
+3319 1st 2nd 3rd Last 3rd 2nd 1st
+3320 1st 2nd 3rd Last 3rd 2nd 1st
+3321 1st 2nd 3rd Last 3rd 2nd 1st
+3322 1st 2nd 3rd Last 3rd 2nd 1st
+3323 1st 2nd 3rd Last 3rd 2nd 1st
+3324 1st 2nd 3rd Last 3rd 2nd 1st
+3325 1st 2nd 3rd Last 3rd 2nd 1st
+3326 1st 2nd 3rd Last 3rd 2nd 1st
+3327 1st 2nd 3rd Last 3rd 2nd 1st
+3328 1st 2nd 3rd Last 3rd 2nd 1st
+3329 1st 2nd 3rd Last 3rd 2nd 1st
+3330 1st 2nd 3rd Last 3rd 2nd 1st
+3331 1st 2nd 3rd Last 3rd 2nd 1st
+3332 1st 2nd 3rd Last 3rd 2nd 1st
+3333 1st 2nd 3rd Last 3rd 2nd 1st
+3334 1st 2nd 3rd Last 3rd 2nd 1st
+3335 1st 2nd 3rd Last 3rd 2nd 1st
+3336 1st 2nd 3rd Last 3rd 2nd 1st
+3337 1st 2nd 3rd Last 3rd 2nd 1st
+3338 1st 2nd 3rd Last 3rd 2nd 1st
+3339 1st 2nd 3rd Last 3rd 2nd 1st
+3340 1st 2nd 3rd Last 3rd 2nd 1st
+3341 1st 2nd 3rd Last 3rd 2nd 1st
+3342 1st 2nd 3rd Last 3rd 2nd 1st
+3343 1st 2nd 3rd Last 3rd 2nd 1st
+3344 1st 2nd 3rd Last 3rd 2nd 1st
+3345 1st 2nd 3rd Last 3rd 2nd 1st
+3346 1st 2nd 3rd Last 3rd 2nd 1st
+3347 1st 2nd 3rd Last 3rd 2nd 1st
+3348 1st 2nd 3rd Last 3rd 2nd 1st
+3349 1st 2nd 3rd Last 3rd 2nd 1st
+3350 1st 2nd 3rd Last 3rd 2nd 1st
+3351 1st 2nd 3rd Last 3rd 2nd 1st
+3352 1st 2nd 3rd Last 3rd 2nd 1st
+3353 1st 2nd 3rd Last 3rd 2nd 1st
+3354 1st 2nd 3rd Last 3rd 2nd 1st
+3355 1st 2nd 3rd Last 3rd 2nd 1st
+3356 1st 2nd 3rd Last 3rd 2nd 1st
+3357 1st 2nd 3rd Last 3rd 2nd 1st
+3358 1st 2nd 3rd Last 3rd 2nd 1st
+3359 1st 2nd 3rd Last 3rd 2nd 1st
+3360 1st 2nd 3rd Last 3rd 2nd 1st
+3361 1st 2nd 3rd Last 3rd 2nd 1st
+3362 1st 2nd 3rd Last 3rd 2nd 1st
+3363 1st 2nd 3rd Last 3rd 2nd 1st
+3364 1st 2nd 3rd Last 3rd 2nd 1st
+3365 1st 2nd 3rd Last 3rd 2nd 1st
+3366 1st 2nd 3rd Last 3rd 2nd 1st
+3367 1st 2nd 3rd Last 3rd 2nd 1st
+3368 1st 2nd 3rd Last 3rd 2nd 1st
+3369 1st 2nd 3rd Last 3rd 2nd 1st
+3370 1st 2nd 3rd Last 3rd 2nd 1st
+3371 1st 2nd 3rd Last 3rd 2nd 1st
+3372 1st 2nd 3rd Last 3rd 2nd 1st
+3373 1st 2nd 3rd Last 3rd 2nd 1st
+3374 1st 2nd 3rd Last 3rd 2nd 1st
+3375 1st 2nd 3rd Last 3rd 2nd 1st
+3376 1st 2nd 3rd Last 3rd 2nd 1st
+3377 1st 2nd 3rd Last 3rd 2nd 1st
+3378 1st 2nd 3rd Last 3rd 2nd 1st
+3379 1st 2nd 3rd Last 3rd 2nd 1st
+3380 1st 2nd 3rd Last 3rd 2nd 1st
+3381 1st 2nd 3rd Last 3rd 2nd 1st
+3382 1st 2nd 3rd Last 3rd 2nd 1st
+3383 1st 2nd 3rd Last 3rd 2nd 1st
+3384 1st 2nd 3rd Last 3rd 2nd 1st
+3385 1st 2nd 3rd Last 3rd 2nd 1st
+3386 1st 2nd 3rd Last 3rd 2nd 1st
+3387 1st 2nd 3rd Last 3rd 2nd 1st
+3388 1st 2nd 3rd Last 3rd 2nd 1st
+3389 1st 2nd 3rd Last 3rd 2nd 1st
+3390 1st 2nd 3rd Last 3rd 2nd 1st
+3391 1st 2nd 3rd Last 3rd 2nd 1st
+3392 1st 2nd 3rd Last 3rd 2nd 1st
+3393 1st 2nd 3rd Last 3rd 2nd 1st
+3394 1st 2nd 3rd Last 3rd 2nd 1st
+3395 1st 2nd 3rd Last 3rd 2nd 1st
+3396 1st 2nd 3rd Last 3rd 2nd 1st
+3397 1st 2nd 3rd Last 3rd 2nd 1st
+3398 1st 2nd 3rd Last 3rd 2nd 1st
+3399 1st 2nd 3rd Last 3rd 2nd 1st
+3400 1st 2nd 3rd Last 3rd 2nd 1st
+3401 1st 2nd 3rd Last 3rd 2nd 1st
+3402 1st 2nd 3rd Last 3rd 2nd 1st
+3403 1st 2nd 3rd Last 3rd 2nd 1st
+3404 1st 2nd 3rd Last 3rd 2nd 1st
+3405 1st 2nd 3rd Last 3rd 2nd 1st
+3406 1st 2nd 3rd Last 3rd 2nd 1st
+3407 1st 2nd 3rd Last 3rd 2nd 1st
+3408 1st 2nd 3rd Last 3rd 2nd 1st
+3409 1st 2nd 3rd Last 3rd 2nd 1st
+3410 1st 2nd 3rd Last 3rd 2nd 1st
+3411 1st 2nd 3rd Last 3rd 2nd 1st
+3412 1st 2nd 3rd Last 3rd 2nd 1st
+3413 1st 2nd 3rd Last 3rd 2nd 1st
+3414 1st 2nd 3rd Last 3rd 2nd 1st
+3415 1st 2nd 3rd Last 3rd 2nd 1st
+3416 1st 2nd 3rd Last 3rd 2nd 1st
+3417 1st 2nd 3rd Last 3rd 2nd 1st
+3418 1st 2nd 3rd Last 3rd 2nd 1st
+3419 1st 2nd 3rd Last 3rd 2nd 1st
+3420 1st 2nd 3rd Last 3rd 2nd 1st
+3421 1st 2nd 3rd Last 3rd 2nd 1st
+3422 1st 2nd 3rd Last 3rd 2nd 1st
+3423 1st 2nd 3rd Last 3rd 2nd 1st
+3424 1st 2nd 3rd Last 3rd 2nd 1st
+3425 1st 2nd 3rd Last 3rd 2nd 1st
+3426 1st 2nd 3rd Last 3rd 2nd 1st
+3427 1st 2nd 3rd Last 3rd 2nd 1st
+3428 1st 2nd 3rd Last 3rd 2nd 1st
+3429 1st 2nd 3rd Last 3rd 2nd 1st
+3430 1st 2nd 3rd Last 3rd 2nd 1st
+3431 1st 2nd 3rd Last 3rd 2nd 1st
+3432 1st 2nd 3rd Last 3rd 2nd 1st
+3433 1st 2nd 3rd Last 3rd 2nd 1st
+3434 1st 2nd 3rd Last 3rd 2nd 1st
+3435 1st 2nd 3rd Last 3rd 2nd 1st
+3436 1st 2nd 3rd Last 3rd 2nd 1st
+3437 1st 2nd 3rd Last 3rd 2nd 1st
+3438 1st 2nd 3rd Last 3rd 2nd 1st
+3439 1st 2nd 3rd Last 3rd 2nd 1st
+3440 1st 2nd 3rd Last 3rd 2nd 1st
+3441 1st 2nd 3rd Last 3rd 2nd 1st
+3442 1st 2nd 3rd Last 3rd 2nd 1st
+3443 1st 2nd 3rd Last 3rd 2nd 1st
+3444 1st 2nd 3rd Last 3rd 2nd 1st
+3445 1st 2nd 3rd Last 3rd 2nd 1st
+3446 1st 2nd 3rd Last 3rd 2nd 1st
+3447 1st 2nd 3rd Last 3rd 2nd 1st
+3448 1st 2nd 3rd Last 3rd 2nd 1st
+3449 1st 2nd 3rd Last 3rd 2nd 1st
+3450 1st 2nd 3rd Last 3rd 2nd 1st
+3451 1st 2nd 3rd Last 3rd 2nd 1st
+3452 1st 2nd 3rd Last 3rd 2nd 1st
+3453 1st 2nd 3rd Last 3rd 2nd 1st
+3454 1st 2nd 3rd Last 3rd 2nd 1st
+3455 1st 2nd 3rd Last 3rd 2nd 1st
+3456 1st 2nd 3rd Last 3rd 2nd 1st
+3457 1st 2nd 3rd Last 3rd 2nd 1st
+3458 1st 2nd 3rd Last 3rd 2nd 1st
+3459 1st 2nd 3rd Last 3rd 2nd 1st
+3460 1st 2nd 3rd Last 3rd 2nd 1st
+3461 1st 2nd 3rd Last 3rd 2nd 1st
+3462 1st 2nd 3rd Last 3rd 2nd 1st
+3463 1st 2nd 3rd Last 3rd 2nd 1st
+3464 1st 2nd 3rd Last 3rd 2nd 1st
+3465 1st 2nd 3rd Last 3rd 2nd 1st
+3466 1st 2nd 3rd Last 3rd 2nd 1st
+3467 1st 2nd 3rd Last 3rd 2nd 1st
+3468 1st 2nd 3rd Last 3rd 2nd 1st
+3469 1st 2nd 3rd Last 3rd 2nd 1st
+3470 1st 2nd 3rd Last 3rd 2nd 1st
+3471 1st 2nd 3rd Last 3rd 2nd 1st
+3472 1st 2nd 3rd Last 3rd 2nd 1st
+3473 1st 2nd 3rd Last 3rd 2nd 1st
+3474 1st 2nd 3rd Last 3rd 2nd 1st
+3475 1st 2nd 3rd Last 3rd 2nd 1st
+3476 1st 2nd 3rd Last 3rd 2nd 1st
+3477 1st 2nd 3rd Last 3rd 2nd 1st
+3478 1st 2nd 3rd Last 3rd 2nd 1st
+3479 1st 2nd 3rd Last 3rd 2nd 1st
+3480 1st 2nd 3rd Last 3rd 2nd 1st
+3481 1st 2nd 3rd Last 3rd 2nd 1st
+3482 1st 2nd 3rd Last 3rd 2nd 1st
+3483 1st 2nd 3rd Last 3rd 2nd 1st
+3484 1st 2nd 3rd Last 3rd 2nd 1st
+3485 1st 2nd 3rd Last 3rd 2nd 1st
+3486 1st 2nd 3rd Last 3rd 2nd 1st
+3487 1st 2nd 3rd Last 3rd 2nd 1st
+3488 1st 2nd 3rd Last 3rd 2nd 1st
+3489 1st 2nd 3rd Last 3rd 2nd 1st
+3490 1st 2nd 3rd Last 3rd 2nd 1st
+3491 1st 2nd 3rd Last 3rd 2nd 1st
+3492 1st 2nd 3rd Last 3rd 2nd 1st
+3493 1st 2nd 3rd Last 3rd 2nd 1st
+3494 1st 2nd 3rd Last 3rd 2nd 1st
+3495 1st 2nd 3rd Last 3rd 2nd 1st
+3496 1st 2nd 3rd Last 3rd 2nd 1st
+3497 1st 2nd 3rd Last 3rd 2nd 1st
+3498 1st 2nd 3rd Last 3rd 2nd 1st
+3499 1st 2nd 3rd Last 3rd 2nd 1st
+3500 1st 2nd 3rd Last 3rd 2nd 1st
+3501 1st 2nd 3rd Last 3rd 2nd 1st
+3502 1st 2nd 3rd Last 3rd 2nd 1st
+3503 1st 2nd 3rd Last 3rd 2nd 1st
+3504 1st 2nd 3rd Last 3rd 2nd 1st
+3505 1st 2nd 3rd Last 3rd 2nd 1st
+3506 1st 2nd 3rd Last 3rd 2nd 1st
+3507 1st 2nd 3rd Last 3rd 2nd 1st
+3508 1st 2nd 3rd Last 3rd 2nd 1st
+3509 1st 2nd 3rd Last 3rd 2nd 1st
+3510 1st 2nd 3rd Last 3rd 2nd 1st
+3511 1st 2nd 3rd Last 3rd 2nd 1st
+3512 1st 2nd 3rd Last 3rd 2nd 1st
+3513 1st 2nd 3rd Last 3rd 2nd 1st
+3514 1st 2nd 3rd Last 3rd 2nd 1st
+3515 1st 2nd 3rd Last 3rd 2nd 1st
+3516 1st 2nd 3rd Last 3rd 2nd 1st
+3517 1st 2nd 3rd Last 3rd 2nd 1st
+3518 1st 2nd 3rd Last 3rd 2nd 1st
+3519 1st 2nd 3rd Last 3rd 2nd 1st
+3520 1st 2nd 3rd Last 3rd 2nd 1st
+3521 1st 2nd 3rd Last 3rd 2nd 1st
+3522 1st 2nd 3rd Last 3rd 2nd 1st
+3523 1st 2nd 3rd Last 3rd 2nd 1st
+3524 1st 2nd 3rd Last 3rd 2nd 1st
+3525 1st 2nd 3rd Last 3rd 2nd 1st
+3526 1st 2nd 3rd Last 3rd 2nd 1st
+3527 1st 2nd 3rd Last 3rd 2nd 1st
+3528 1st 2nd 3rd Last 3rd 2nd 1st
+3529 1st 2nd 3rd Last 3rd 2nd 1st
+3530 1st 2nd 3rd Last 3rd 2nd 1st
+3531 1st 2nd 3rd Last 3rd 2nd 1st
+3532 1st 2nd 3rd Last 3rd 2nd 1st
+3533 1st 2nd 3rd Last 3rd 2nd 1st
+3534 1st 2nd 3rd Last 3rd 2nd 1st
+3535 1st 2nd 3rd Last 3rd 2nd 1st
+3536 1st 2nd 3rd Last 3rd 2nd 1st
+3537 1st 2nd 3rd Last 3rd 2nd 1st
+3538 1st 2nd 3rd Last 3rd 2nd 1st
+3539 1st 2nd 3rd Last 3rd 2nd 1st
+3540 1st 2nd 3rd Last 3rd 2nd 1st
+3541 1st 2nd 3rd Last 3rd 2nd 1st
+3542 1st 2nd 3rd Last 3rd 2nd 1st
+3543 1st 2nd 3rd Last 3rd 2nd 1st
+3544 1st 2nd 3rd Last 3rd 2nd 1st
+3545 1st 2nd 3rd Last 3rd 2nd 1st
+3546 1st 2nd 3rd Last 3rd 2nd 1st
+3547 1st 2nd 3rd Last 3rd 2nd 1st
+3548 1st 2nd 3rd Last 3rd 2nd 1st
+3549 1st 2nd 3rd Last 3rd 2nd 1st
+3550 1st 2nd 3rd Last 3rd 2nd 1st
+3551 1st 2nd 3rd Last 3rd 2nd 1st
+3552 1st 2nd 3rd Last 3rd 2nd 1st
+3553 1st 2nd 3rd Last 3rd 2nd 1st
+3554 1st 2nd 3rd Last 3rd 2nd 1st
+3555 1st 2nd 3rd Last 3rd 2nd 1st
+3556 1st 2nd 3rd Last 3rd 2nd 1st
+3557 1st 2nd 3rd Last 3rd 2nd 1st
+3558 1st 2nd 3rd Last 3rd 2nd 1st
+3559 1st 2nd 3rd Last 3rd 2nd 1st
+3560 1st 2nd 3rd Last 3rd 2nd 1st
+3561 1st 2nd 3rd Last 3rd 2nd 1st
+3562 1st 2nd 3rd Last 3rd 2nd 1st
+3563 1st 2nd 3rd Last 3rd 2nd 1st
+3564 1st 2nd 3rd Last 3rd 2nd 1st
+3565 1st 2nd 3rd Last 3rd 2nd 1st
+3566 1st 2nd 3rd Last 3rd 2nd 1st
+3567 1st 2nd 3rd Last 3rd 2nd 1st
+3568 1st 2nd 3rd Last 3rd 2nd 1st
+3569 1st 2nd 3rd Last 3rd 2nd 1st
+3570 1st 2nd 3rd Last 3rd 2nd 1st
+3571 1st 2nd 3rd Last 3rd 2nd 1st
+3572 1st 2nd 3rd Last 3rd 2nd 1st
+3573 1st 2nd 3rd Last 3rd 2nd 1st
+3574 1st 2nd 3rd Last 3rd 2nd 1st
+3575 1st 2nd 3rd Last 3rd 2nd 1st
+3576 1st 2nd 3rd Last 3rd 2nd 1st
+3577 1st 2nd 3rd Last 3rd 2nd 1st
+3578 1st 2nd 3rd Last 3rd 2nd 1st
+3579 1st 2nd 3rd Last 3rd 2nd 1st
+3580 1st 2nd 3rd Last 3rd 2nd 1st
+3581 1st 2nd 3rd Last 3rd 2nd 1st
+3582 1st 2nd 3rd Last 3rd 2nd 1st
+3583 1st 2nd 3rd Last 3rd 2nd 1st
+3584 1st 2nd 3rd Last 3rd 2nd 1st
+3585 1st 2nd 3rd Last 3rd 2nd 1st
+3586 1st 2nd 3rd Last 3rd 2nd 1st
+3587 1st 2nd 3rd Last 3rd 2nd 1st
+3588 1st 2nd 3rd Last 3rd 2nd 1st
+3589 1st 2nd 3rd Last 3rd 2nd 1st
+3590 1st 2nd 3rd Last 3rd 2nd 1st
+3591 1st 2nd 3rd Last 3rd 2nd 1st
+3592 1st 2nd 3rd Last 3rd 2nd 1st
+3593 1st 2nd 3rd Last 3rd 2nd 1st
+3594 1st 2nd 3rd Last 3rd 2nd 1st
+3595 1st 2nd 3rd Last 3rd 2nd 1st
+3596 1st 2nd 3rd Last 3rd 2nd 1st
+3597 1st 2nd 3rd Last 3rd 2nd 1st
+3598 1st 2nd 3rd Last 3rd 2nd 1st
+3599 1st 2nd 3rd Last 3rd 2nd 1st
+3600 1st 2nd 3rd Last 3rd 2nd 1st
+3601 1st 2nd 3rd Last 3rd 2nd 1st
+3602 1st 2nd 3rd Last 3rd 2nd 1st
+3603 1st 2nd 3rd Last 3rd 2nd 1st
+3604 1st 2nd 3rd Last 3rd 2nd 1st
+3605 1st 2nd 3rd Last 3rd 2nd 1st
+3606 1st 2nd 3rd Last 3rd 2nd 1st
+3607 1st 2nd 3rd Last 3rd 2nd 1st
+3608 1st 2nd 3rd Last 3rd 2nd 1st
+3609 1st 2nd 3rd Last 3rd 2nd 1st
+3610 1st 2nd 3rd Last 3rd 2nd 1st
+3611 1st 2nd 3rd Last 3rd 2nd 1st
+3612 1st 2nd 3rd Last 3rd 2nd 1st
+3613 1st 2nd 3rd Last 3rd 2nd 1st
+3614 1st 2nd 3rd Last 3rd 2nd 1st
+3615 1st 2nd 3rd Last 3rd 2nd 1st
+3616 1st 2nd 3rd Last 3rd 2nd 1st
+3617 1st 2nd 3rd Last 3rd 2nd 1st
+3618 1st 2nd 3rd Last 3rd 2nd 1st
+3619 1st 2nd 3rd Last 3rd 2nd 1st
+3620 1st 2nd 3rd Last 3rd 2nd 1st
+3621 1st 2nd 3rd Last 3rd 2nd 1st
+3622 1st 2nd 3rd Last 3rd 2nd 1st
+3623 1st 2nd 3rd Last 3rd 2nd 1st
+3624 1st 2nd 3rd Last 3rd 2nd 1st
+3625 1st 2nd 3rd Last 3rd 2nd 1st
+3626 1st 2nd 3rd Last 3rd 2nd 1st
+3627 1st 2nd 3rd Last 3rd 2nd 1st
+3628 1st 2nd 3rd Last 3rd 2nd 1st
+3629 1st 2nd 3rd Last 3rd 2nd 1st
+3630 1st 2nd 3rd Last 3rd 2nd 1st
+3631 1st 2nd 3rd Last 3rd 2nd 1st
+3632 1st 2nd 3rd Last 3rd 2nd 1st
+3633 1st 2nd 3rd Last 3rd 2nd 1st
+3634 1st 2nd 3rd Last 3rd 2nd 1st
+3635 1st 2nd 3rd Last 3rd 2nd 1st
+3636 1st 2nd 3rd Last 3rd 2nd 1st
+3637 1st 2nd 3rd Last 3rd 2nd 1st
+3638 1st 2nd 3rd Last 3rd 2nd 1st
+3639 1st 2nd 3rd Last 3rd 2nd 1st
+3640 1st 2nd 3rd Last 3rd 2nd 1st
+3641 1st 2nd 3rd Last 3rd 2nd 1st
+3642 1st 2nd 3rd Last 3rd 2nd 1st
+3643 1st 2nd 3rd Last 3rd 2nd 1st
+3644 1st 2nd 3rd Last 3rd 2nd 1st
+3645 1st 2nd 3rd Last 3rd 2nd 1st
+3646 1st 2nd 3rd Last 3rd 2nd 1st
+3647 1st 2nd 3rd Last 3rd 2nd 1st
+3648 1st 2nd 3rd Last 3rd 2nd 1st
+3649 1st 2nd 3rd Last 3rd 2nd 1st
+3650 1st 2nd 3rd Last 3rd 2nd 1st
+3651 1st 2nd 3rd Last 3rd 2nd 1st
+3652 1st 2nd 3rd Last 3rd 2nd 1st
+3653 1st 2nd 3rd Last 3rd 2nd 1st
+3654 1st 2nd 3rd Last 3rd 2nd 1st
+3655 1st 2nd 3rd Last 3rd 2nd 1st
+3656 1st 2nd 3rd Last 3rd 2nd 1st
+3657 1st 2nd 3rd Last 3rd 2nd 1st
+3658 1st 2nd 3rd Last 3rd 2nd 1st
+3659 1st 2nd 3rd Last 3rd 2nd 1st
+3660 1st 2nd 3rd Last 3rd 2nd 1st
+3661 1st 2nd 3rd Last 3rd 2nd 1st
+3662 1st 2nd 3rd Last 3rd 2nd 1st
+3663 1st 2nd 3rd Last 3rd 2nd 1st
+3664 1st 2nd 3rd Last 3rd 2nd 1st
+3665 1st 2nd 3rd Last 3rd 2nd 1st
+3666 1st 2nd 3rd Last 3rd 2nd 1st
+3667 1st 2nd 3rd Last 3rd 2nd 1st
+3668 1st 2nd 3rd Last 3rd 2nd 1st
+3669 1st 2nd 3rd Last 3rd 2nd 1st
+3670 1st 2nd 3rd Last 3rd 2nd 1st
+3671 1st 2nd 3rd Last 3rd 2nd 1st
+3672 1st 2nd 3rd Last 3rd 2nd 1st
+3673 1st 2nd 3rd Last 3rd 2nd 1st
+3674 1st 2nd 3rd Last 3rd 2nd 1st
+3675 1st 2nd 3rd Last 3rd 2nd 1st
+3676 1st 2nd 3rd Last 3rd 2nd 1st
+3677 1st 2nd 3rd Last 3rd 2nd 1st
+3678 1st 2nd 3rd Last 3rd 2nd 1st
+3679 1st 2nd 3rd Last 3rd 2nd 1st
+3680 1st 2nd 3rd Last 3rd 2nd 1st
+3681 1st 2nd 3rd Last 3rd 2nd 1st
+3682 1st 2nd 3rd Last 3rd 2nd 1st
+3683 1st 2nd 3rd Last 3rd 2nd 1st
+3684 1st 2nd 3rd Last 3rd 2nd 1st
+3685 1st 2nd 3rd Last 3rd 2nd 1st
+3686 1st 2nd 3rd Last 3rd 2nd 1st
+3687 1st 2nd 3rd Last 3rd 2nd 1st
+3688 1st 2nd 3rd Last 3rd 2nd 1st
+3689 1st 2nd 3rd Last 3rd 2nd 1st
+3690 1st 2nd 3rd Last 3rd 2nd 1st
+3691 1st 2nd 3rd Last 3rd 2nd 1st
+3692 1st 2nd 3rd Last 3rd 2nd 1st
+3693 1st 2nd 3rd Last 3rd 2nd 1st
+3694 1st 2nd 3rd Last 3rd 2nd 1st
+3695 1st 2nd 3rd Last 3rd 2nd 1st
+3696 1st 2nd 3rd Last 3rd 2nd 1st
+3697 1st 2nd 3rd Last 3rd 2nd 1st
+3698 1st 2nd 3rd Last 3rd 2nd 1st
+3699 1st 2nd 3rd Last 3rd 2nd 1st
+3700 1st 2nd 3rd Last 3rd 2nd 1st
+3701 1st 2nd 3rd Last 3rd 2nd 1st
+3702 1st 2nd 3rd Last 3rd 2nd 1st
+3703 1st 2nd 3rd Last 3rd 2nd 1st
+3704 1st 2nd 3rd Last 3rd 2nd 1st
+3705 1st 2nd 3rd Last 3rd 2nd 1st
+3706 1st 2nd 3rd Last 3rd 2nd 1st
+3707 1st 2nd 3rd Last 3rd 2nd 1st
+3708 1st 2nd 3rd Last 3rd 2nd 1st
+3709 1st 2nd 3rd Last 3rd 2nd 1st
+3710 1st 2nd 3rd Last 3rd 2nd 1st
+3711 1st 2nd 3rd Last 3rd 2nd 1st
+3712 1st 2nd 3rd Last 3rd 2nd 1st
+3713 1st 2nd 3rd Last 3rd 2nd 1st
+3714 1st 2nd 3rd Last 3rd 2nd 1st
+3715 1st 2nd 3rd Last 3rd 2nd 1st
+3716 1st 2nd 3rd Last 3rd 2nd 1st
+3717 1st 2nd 3rd Last 3rd 2nd 1st
+3718 1st 2nd 3rd Last 3rd 2nd 1st
+3719 1st 2nd 3rd Last 3rd 2nd 1st
+3720 1st 2nd 3rd Last 3rd 2nd 1st
+3721 1st 2nd 3rd Last 3rd 2nd 1st
+3722 1st 2nd 3rd Last 3rd 2nd 1st
+3723 1st 2nd 3rd Last 3rd 2nd 1st
+3724 1st 2nd 3rd Last 3rd 2nd 1st
+3725 1st 2nd 3rd Last 3rd 2nd 1st
+3726 1st 2nd 3rd Last 3rd 2nd 1st
+3727 1st 2nd 3rd Last 3rd 2nd 1st
+3728 1st 2nd 3rd Last 3rd 2nd 1st
+3729 1st 2nd 3rd Last 3rd 2nd 1st
+3730 1st 2nd 3rd Last 3rd 2nd 1st
+3731 1st 2nd 3rd Last 3rd 2nd 1st
+3732 1st 2nd 3rd Last 3rd 2nd 1st
+3733 1st 2nd 3rd Last 3rd 2nd 1st
+3734 1st 2nd 3rd Last 3rd 2nd 1st
+3735 1st 2nd 3rd Last 3rd 2nd 1st
+3736 1st 2nd 3rd Last 3rd 2nd 1st
+3737 1st 2nd 3rd Last 3rd 2nd 1st
+3738 1st 2nd 3rd Last 3rd 2nd 1st
+3739 1st 2nd 3rd Last 3rd 2nd 1st
+3740 1st 2nd 3rd Last 3rd 2nd 1st
+3741 1st 2nd 3rd Last 3rd 2nd 1st
+3742 1st 2nd 3rd Last 3rd 2nd 1st
+3743 1st 2nd 3rd Last 3rd 2nd 1st
+3744 1st 2nd 3rd Last 3rd 2nd 1st
+3745 1st 2nd 3rd Last 3rd 2nd 1st
+3746 1st 2nd 3rd Last 3rd 2nd 1st
+3747 1st 2nd 3rd Last 3rd 2nd 1st
+3748 1st 2nd 3rd Last 3rd 2nd 1st
+3749 1st 2nd 3rd Last 3rd 2nd 1st
+3750 1st 2nd 3rd Last 3rd 2nd 1st
+3751 1st 2nd 3rd Last 3rd 2nd 1st
+3752 1st 2nd 3rd Last 3rd 2nd 1st
+3753 1st 2nd 3rd Last 3rd 2nd 1st
+3754 1st 2nd 3rd Last 3rd 2nd 1st
+3755 1st 2nd 3rd Last 3rd 2nd 1st
+3756 1st 2nd 3rd Last 3rd 2nd 1st
+3757 1st 2nd 3rd Last 3rd 2nd 1st
+3758 1st 2nd 3rd Last 3rd 2nd 1st
+3759 1st 2nd 3rd Last 3rd 2nd 1st
+3760 1st 2nd 3rd Last 3rd 2nd 1st
+3761 1st 2nd 3rd Last 3rd 2nd 1st
+3762 1st 2nd 3rd Last 3rd 2nd 1st
+3763 1st 2nd 3rd Last 3rd 2nd 1st
+3764 1st 2nd 3rd Last 3rd 2nd 1st
+3765 1st 2nd 3rd Last 3rd 2nd 1st
+3766 1st 2nd 3rd Last 3rd 2nd 1st
+3767 1st 2nd 3rd Last 3rd 2nd 1st
+3768 1st 2nd 3rd Last 3rd 2nd 1st
+3769 1st 2nd 3rd Last 3rd 2nd 1st
+3770 1st 2nd 3rd Last 3rd 2nd 1st
+3771 1st 2nd 3rd Last 3rd 2nd 1st
+3772 1st 2nd 3rd Last 3rd 2nd 1st
+3773 1st 2nd 3rd Last 3rd 2nd 1st
+3774 1st 2nd 3rd Last 3rd 2nd 1st
+3775 1st 2nd 3rd Last 3rd 2nd 1st
+3776 1st 2nd 3rd Last 3rd 2nd 1st
+3777 1st 2nd 3rd Last 3rd 2nd 1st
+3778 1st 2nd 3rd Last 3rd 2nd 1st
+3779 1st 2nd 3rd Last 3rd 2nd 1st
+3780 1st 2nd 3rd Last 3rd 2nd 1st
+3781 1st 2nd 3rd Last 3rd 2nd 1st
+3782 1st 2nd 3rd Last 3rd 2nd 1st
+3783 1st 2nd 3rd Last 3rd 2nd 1st
+3784 1st 2nd 3rd Last 3rd 2nd 1st
+3785 1st 2nd 3rd Last 3rd 2nd 1st
+3786 1st 2nd 3rd Last 3rd 2nd 1st
+3787 1st 2nd 3rd Last 3rd 2nd 1st
+3788 1st 2nd 3rd Last 3rd 2nd 1st
+3789 1st 2nd 3rd Last 3rd 2nd 1st
+3790 1st 2nd 3rd Last 3rd 2nd 1st
+3791 1st 2nd 3rd Last 3rd 2nd 1st
+3792 1st 2nd 3rd Last 3rd 2nd 1st
+3793 1st 2nd 3rd Last 3rd 2nd 1st
+3794 1st 2nd 3rd Last 3rd 2nd 1st
+3795 1st 2nd 3rd Last 3rd 2nd 1st
+3796 1st 2nd 3rd Last 3rd 2nd 1st
+3797 1st 2nd 3rd Last 3rd 2nd 1st
+3798 1st 2nd 3rd Last 3rd 2nd 1st
+3799 1st 2nd 3rd Last 3rd 2nd 1st
+3800 1st 2nd 3rd Last 3rd 2nd 1st
+3801 1st 2nd 3rd Last 3rd 2nd 1st
+3802 1st 2nd 3rd Last 3rd 2nd 1st
+3803 1st 2nd 3rd Last 3rd 2nd 1st
+3804 1st 2nd 3rd Last 3rd 2nd 1st
+3805 1st 2nd 3rd Last 3rd 2nd 1st
+3806 1st 2nd 3rd Last 3rd 2nd 1st
+3807 1st 2nd 3rd Last 3rd 2nd 1st
+3808 1st 2nd 3rd Last 3rd 2nd 1st
+3809 1st 2nd 3rd Last 3rd 2nd 1st
+3810 1st 2nd 3rd Last 3rd 2nd 1st
+3811 1st 2nd 3rd Last 3rd 2nd 1st
+3812 1st 2nd 3rd Last 3rd 2nd 1st
+3813 1st 2nd 3rd Last 3rd 2nd 1st
+3814 1st 2nd 3rd Last 3rd 2nd 1st
+3815 1st 2nd 3rd Last 3rd 2nd 1st
+3816 1st 2nd 3rd Last 3rd 2nd 1st
+3817 1st 2nd 3rd Last 3rd 2nd 1st
+3818 1st 2nd 3rd Last 3rd 2nd 1st
+3819 1st 2nd 3rd Last 3rd 2nd 1st
+3820 1st 2nd 3rd Last 3rd 2nd 1st
+3821 1st 2nd 3rd Last 3rd 2nd 1st
+3822 1st 2nd 3rd Last 3rd 2nd 1st
+3823 1st 2nd 3rd Last 3rd 2nd 1st
+3824 1st 2nd 3rd Last 3rd 2nd 1st
+3825 1st 2nd 3rd Last 3rd 2nd 1st
+3826 1st 2nd 3rd Last 3rd 2nd 1st
+3827 1st 2nd 3rd Last 3rd 2nd 1st
+3828 1st 2nd 3rd Last 3rd 2nd 1st
+3829 1st 2nd 3rd Last 3rd 2nd 1st
+3830 1st 2nd 3rd Last 3rd 2nd 1st
+3831 1st 2nd 3rd Last 3rd 2nd 1st
+3832 1st 2nd 3rd Last 3rd 2nd 1st
+3833 1st 2nd 3rd Last 3rd 2nd 1st
+3834 1st 2nd 3rd Last 3rd 2nd 1st
+3835 1st 2nd 3rd Last 3rd 2nd 1st
+3836 1st 2nd 3rd Last 3rd 2nd 1st
+3837 1st 2nd 3rd Last 3rd 2nd 1st
+3838 1st 2nd 3rd Last 3rd 2nd 1st
+3839 1st 2nd 3rd Last 3rd 2nd 1st
+3840 1st 2nd 3rd Last 3rd 2nd 1st
+3841 1st 2nd 3rd Last 3rd 2nd 1st
+3842 1st 2nd 3rd Last 3rd 2nd 1st
+3843 1st 2nd 3rd Last 3rd 2nd 1st
+3844 1st 2nd 3rd Last 3rd 2nd 1st
+3845 1st 2nd 3rd Last 3rd 2nd 1st
+3846 1st 2nd 3rd Last 3rd 2nd 1st
+3847 1st 2nd 3rd Last 3rd 2nd 1st
+3848 1st 2nd 3rd Last 3rd 2nd 1st
+3849 1st 2nd 3rd Last 3rd 2nd 1st
+3850 1st 2nd 3rd Last 3rd 2nd 1st
+3851 1st 2nd 3rd Last 3rd 2nd 1st
+3852 1st 2nd 3rd Last 3rd 2nd 1st
+3853 1st 2nd 3rd Last 3rd 2nd 1st
+3854 1st 2nd 3rd Last 3rd 2nd 1st
+3855 1st 2nd 3rd Last 3rd 2nd 1st
+3856 1st 2nd 3rd Last 3rd 2nd 1st
+3857 1st 2nd 3rd Last 3rd 2nd 1st
+3858 1st 2nd 3rd Last 3rd 2nd 1st
+3859 1st 2nd 3rd Last 3rd 2nd 1st
+3860 1st 2nd 3rd Last 3rd 2nd 1st
+3861 1st 2nd 3rd Last 3rd 2nd 1st
+3862 1st 2nd 3rd Last 3rd 2nd 1st
+3863 1st 2nd 3rd Last 3rd 2nd 1st
+3864 1st 2nd 3rd Last 3rd 2nd 1st
+3865 1st 2nd 3rd Last 3rd 2nd 1st
+3866 1st 2nd 3rd Last 3rd 2nd 1st
+3867 1st 2nd 3rd Last 3rd 2nd 1st
+3868 1st 2nd 3rd Last 3rd 2nd 1st
+3869 1st 2nd 3rd Last 3rd 2nd 1st
+3870 1st 2nd 3rd Last 3rd 2nd 1st
+3871 1st 2nd 3rd Last 3rd 2nd 1st
+3872 1st 2nd 3rd Last 3rd 2nd 1st
+3873 1st 2nd 3rd Last 3rd 2nd 1st
+3874 1st 2nd 3rd Last 3rd 2nd 1st
+3875 1st 2nd 3rd Last 3rd 2nd 1st
+3876 1st 2nd 3rd Last 3rd 2nd 1st
+3877 1st 2nd 3rd Last 3rd 2nd 1st
+3878 1st 2nd 3rd Last 3rd 2nd 1st
+3879 1st 2nd 3rd Last 3rd 2nd 1st
+3880 1st 2nd 3rd Last 3rd 2nd 1st
+3881 1st 2nd 3rd Last 3rd 2nd 1st
+3882 1st 2nd 3rd Last 3rd 2nd 1st
+3883 1st 2nd 3rd Last 3rd 2nd 1st
+3884 1st 2nd 3rd Last 3rd 2nd 1st
+3885 1st 2nd 3rd Last 3rd 2nd 1st
+3886 1st 2nd 3rd Last 3rd 2nd 1st
+3887 1st 2nd 3rd Last 3rd 2nd 1st
+3888 1st 2nd 3rd Last 3rd 2nd 1st
+3889 1st 2nd 3rd Last 3rd 2nd 1st
+3890 1st 2nd 3rd Last 3rd 2nd 1st
+3891 1st 2nd 3rd Last 3rd 2nd 1st
+3892 1st 2nd 3rd Last 3rd 2nd 1st
+3893 1st 2nd 3rd Last 3rd 2nd 1st
+3894 1st 2nd 3rd Last 3rd 2nd 1st
+3895 1st 2nd 3rd Last 3rd 2nd 1st
+3896 1st 2nd 3rd Last 3rd 2nd 1st
+3897 1st 2nd 3rd Last 3rd 2nd 1st
+3898 1st 2nd 3rd Last 3rd 2nd 1st
+3899 1st 2nd 3rd Last 3rd 2nd 1st
+3900 1st 2nd 3rd Last 3rd 2nd 1st
+3901 1st 2nd 3rd Last 3rd 2nd 1st
+3902 1st 2nd 3rd Last 3rd 2nd 1st
+3903 1st 2nd 3rd Last 3rd 2nd 1st
+3904 1st 2nd 3rd Last 3rd 2nd 1st
+3905 1st 2nd 3rd Last 3rd 2nd 1st
+3906 1st 2nd 3rd Last 3rd 2nd 1st
+3907 1st 2nd 3rd Last 3rd 2nd 1st
+3908 1st 2nd 3rd Last 3rd 2nd 1st
+3909 1st 2nd 3rd Last 3rd 2nd 1st
+3910 1st 2nd 3rd Last 3rd 2nd 1st
+3911 1st 2nd 3rd Last 3rd 2nd 1st
+3912 1st 2nd 3rd Last 3rd 2nd 1st
+3913 1st 2nd 3rd Last 3rd 2nd 1st
+3914 1st 2nd 3rd Last 3rd 2nd 1st
+3915 1st 2nd 3rd Last 3rd 2nd 1st
+3916 1st 2nd 3rd Last 3rd 2nd 1st
+3917 1st 2nd 3rd Last 3rd 2nd 1st
+3918 1st 2nd 3rd Last 3rd 2nd 1st
+3919 1st 2nd 3rd Last 3rd 2nd 1st
+3920 1st 2nd 3rd Last 3rd 2nd 1st
+3921 1st 2nd 3rd Last 3rd 2nd 1st
+3922 1st 2nd 3rd Last 3rd 2nd 1st
+3923 1st 2nd 3rd Last 3rd 2nd 1st
+3924 1st 2nd 3rd Last 3rd 2nd 1st
+3925 1st 2nd 3rd Last 3rd 2nd 1st
+3926 1st 2nd 3rd Last 3rd 2nd 1st
+3927 1st 2nd 3rd Last 3rd 2nd 1st
+3928 1st 2nd 3rd Last 3rd 2nd 1st
+3929 1st 2nd 3rd Last 3rd 2nd 1st
+3930 1st 2nd 3rd Last 3rd 2nd 1st
+3931 1st 2nd 3rd Last 3rd 2nd 1st
+3932 1st 2nd 3rd Last 3rd 2nd 1st
+3933 1st 2nd 3rd Last 3rd 2nd 1st
+3934 1st 2nd 3rd Last 3rd 2nd 1st
+3935 1st 2nd 3rd Last 3rd 2nd 1st
+3936 1st 2nd 3rd Last 3rd 2nd 1st
+3937 1st 2nd 3rd Last 3rd 2nd 1st
+3938 1st 2nd 3rd Last 3rd 2nd 1st
+3939 1st 2nd 3rd Last 3rd 2nd 1st
+3940 1st 2nd 3rd Last 3rd 2nd 1st
+3941 1st 2nd 3rd Last 3rd 2nd 1st
+3942 1st 2nd 3rd Last 3rd 2nd 1st
+3943 1st 2nd 3rd Last 3rd 2nd 1st
+3944 1st 2nd 3rd Last 3rd 2nd 1st
+3945 1st 2nd 3rd Last 3rd 2nd 1st
+3946 1st 2nd 3rd Last 3rd 2nd 1st
+3947 1st 2nd 3rd Last 3rd 2nd 1st
+3948 1st 2nd 3rd Last 3rd 2nd 1st
+3949 1st 2nd 3rd Last 3rd 2nd 1st
+3950 1st 2nd 3rd Last 3rd 2nd 1st
+3951 1st 2nd 3rd Last 3rd 2nd 1st
+3952 1st 2nd 3rd Last 3rd 2nd 1st
+3953 1st 2nd 3rd Last 3rd 2nd 1st
+3954 1st 2nd 3rd Last 3rd 2nd 1st
+3955 1st 2nd 3rd Last 3rd 2nd 1st
+3956 1st 2nd 3rd Last 3rd 2nd 1st
+3957 1st 2nd 3rd Last 3rd 2nd 1st
+3958 1st 2nd 3rd Last 3rd 2nd 1st
+3959 1st 2nd 3rd Last 3rd 2nd 1st
+3960 1st 2nd 3rd Last 3rd 2nd 1st
+3961 1st 2nd 3rd Last 3rd 2nd 1st
+3962 1st 2nd 3rd Last 3rd 2nd 1st
+3963 1st 2nd 3rd Last 3rd 2nd 1st
+3964 1st 2nd 3rd Last 3rd 2nd 1st
+3965 1st 2nd 3rd Last 3rd 2nd 1st
+3966 1st 2nd 3rd Last 3rd 2nd 1st
+3967 1st 2nd 3rd Last 3rd 2nd 1st
+3968 1st 2nd 3rd Last 3rd 2nd 1st
+3969 1st 2nd 3rd Last 3rd 2nd 1st
+3970 1st 2nd 3rd Last 3rd 2nd 1st
+3971 1st 2nd 3rd Last 3rd 2nd 1st
+3972 1st 2nd 3rd Last 3rd 2nd 1st
+3973 1st 2nd 3rd Last 3rd 2nd 1st
+3974 1st 2nd 3rd Last 3rd 2nd 1st
+3975 1st 2nd 3rd Last 3rd 2nd 1st
+3976 1st 2nd 3rd Last 3rd 2nd 1st
+3977 1st 2nd 3rd Last 3rd 2nd 1st
+3978 1st 2nd 3rd Last 3rd 2nd 1st
+3979 1st 2nd 3rd Last 3rd 2nd 1st
+3980 1st 2nd 3rd Last 3rd 2nd 1st
+3981 1st 2nd 3rd Last 3rd 2nd 1st
+3982 1st 2nd 3rd Last 3rd 2nd 1st
+3983 1st 2nd 3rd Last 3rd 2nd 1st
+3984 1st 2nd 3rd Last 3rd 2nd 1st
+3985 1st 2nd 3rd Last 3rd 2nd 1st
+3986 1st 2nd 3rd Last 3rd 2nd 1st
+3987 1st 2nd 3rd Last 3rd 2nd 1st
+3988 1st 2nd 3rd Last 3rd 2nd 1st
+3989 1st 2nd 3rd Last 3rd 2nd 1st
+3990 1st 2nd 3rd Last 3rd 2nd 1st
+3991 1st 2nd 3rd Last 3rd 2nd 1st
+3992 1st 2nd 3rd Last 3rd 2nd 1st
+3993 1st 2nd 3rd Last 3rd 2nd 1st
+3994 1st 2nd 3rd Last 3rd 2nd 1st
+3995 1st 2nd 3rd Last 3rd 2nd 1st
+3996 1st 2nd 3rd Last 3rd 2nd 1st
+3997 1st 2nd 3rd Last 3rd 2nd 1st
+3998 1st 2nd 3rd Last 3rd 2nd 1st
+3999 1st 2nd 3rd Last 3rd 2nd 1st
+4000 1st 2nd 3rd Last 3rd 2nd 1st
+4001 1st 2nd 3rd Last 3rd 2nd 1st
+4002 1st 2nd 3rd Last 3rd 2nd 1st
+4003 1st 2nd 3rd Last 3rd 2nd 1st
+4004 1st 2nd 3rd Last 3rd 2nd 1st
+4005 1st 2nd 3rd Last 3rd 2nd 1st
+4006 1st 2nd 3rd Last 3rd 2nd 1st
+4007 1st 2nd 3rd Last 3rd 2nd 1st
+4008 1st 2nd 3rd Last 3rd 2nd 1st
+4009 1st 2nd 3rd Last 3rd 2nd 1st
+4010 1st 2nd 3rd Last 3rd 2nd 1st
+4011 1st 2nd 3rd Last 3rd 2nd 1st
+4012 1st 2nd 3rd Last 3rd 2nd 1st
+4013 1st 2nd 3rd Last 3rd 2nd 1st
+4014 1st 2nd 3rd Last 3rd 2nd 1st
+4015 1st 2nd 3rd Last 3rd 2nd 1st
+4016 1st 2nd 3rd Last 3rd 2nd 1st
+4017 1st 2nd 3rd Last 3rd 2nd 1st
+4018 1st 2nd 3rd Last 3rd 2nd 1st
+4019 1st 2nd 3rd Last 3rd 2nd 1st
+4020 1st 2nd 3rd Last 3rd 2nd 1st
+4021 1st 2nd 3rd Last 3rd 2nd 1st
+4022 1st 2nd 3rd Last 3rd 2nd 1st
+4023 1st 2nd 3rd Last 3rd 2nd 1st
+4024 1st 2nd 3rd Last 3rd 2nd 1st
+4025 1st 2nd 3rd Last 3rd 2nd 1st
+4026 1st 2nd 3rd Last 3rd 2nd 1st
+4027 1st 2nd 3rd Last 3rd 2nd 1st
+4028 1st 2nd 3rd Last 3rd 2nd 1st
+4029 1st 2nd 3rd Last 3rd 2nd 1st
+4030 1st 2nd 3rd Last 3rd 2nd 1st
+4031 1st 2nd 3rd Last 3rd 2nd 1st
+4032 1st 2nd 3rd Last 3rd 2nd 1st
+4033 1st 2nd 3rd Last 3rd 2nd 1st
+4034 1st 2nd 3rd Last 3rd 2nd 1st
+4035 1st 2nd 3rd Last 3rd 2nd 1st
+4036 1st 2nd 3rd Last 3rd 2nd 1st
+4037 1st 2nd 3rd Last 3rd 2nd 1st
+4038 1st 2nd 3rd Last 3rd 2nd 1st
+4039 1st 2nd 3rd Last 3rd 2nd 1st
+4040 1st 2nd 3rd Last 3rd 2nd 1st
+4041 1st 2nd 3rd Last 3rd 2nd 1st
+4042 1st 2nd 3rd Last 3rd 2nd 1st
+4043 1st 2nd 3rd Last 3rd 2nd 1st
+4044 1st 2nd 3rd Last 3rd 2nd 1st
+4045 1st 2nd 3rd Last 3rd 2nd 1st
+4046 1st 2nd 3rd Last 3rd 2nd 1st
+4047 1st 2nd 3rd Last 3rd 2nd 1st
+4048 1st 2nd 3rd Last 3rd 2nd 1st
+4049 1st 2nd 3rd Last 3rd 2nd 1st
+4050 1st 2nd 3rd Last 3rd 2nd 1st
+4051 1st 2nd 3rd Last 3rd 2nd 1st
+4052 1st 2nd 3rd Last 3rd 2nd 1st
+4053 1st 2nd 3rd Last 3rd 2nd 1st
+4054 1st 2nd 3rd Last 3rd 2nd 1st
+4055 1st 2nd 3rd Last 3rd 2nd 1st
+4056 1st 2nd 3rd Last 3rd 2nd 1st
+4057 1st 2nd 3rd Last 3rd 2nd 1st
+4058 1st 2nd 3rd Last 3rd 2nd 1st
+4059 1st 2nd 3rd Last 3rd 2nd 1st
+4060 1st 2nd 3rd Last 3rd 2nd 1st
+4061 1st 2nd 3rd Last 3rd 2nd 1st
+4062 1st 2nd 3rd Last 3rd 2nd 1st
+4063 1st 2nd 3rd Last 3rd 2nd 1st
+4064 1st 2nd 3rd Last 3rd 2nd 1st
+4065 1st 2nd 3rd Last 3rd 2nd 1st
+4066 1st 2nd 3rd Last 3rd 2nd 1st
+4067 1st 2nd 3rd Last 3rd 2nd 1st
+4068 1st 2nd 3rd Last 3rd 2nd 1st
+4069 1st 2nd 3rd Last 3rd 2nd 1st
+4070 1st 2nd 3rd Last 3rd 2nd 1st
+4071 1st 2nd 3rd Last 3rd 2nd 1st
+4072 1st 2nd 3rd Last 3rd 2nd 1st
+4073 1st 2nd 3rd Last 3rd 2nd 1st
+4074 1st 2nd 3rd Last 3rd 2nd 1st
+4075 1st 2nd 3rd Last 3rd 2nd 1st
+4076 1st 2nd 3rd Last 3rd 2nd 1st
+4077 1st 2nd 3rd Last 3rd 2nd 1st
+4078 1st 2nd 3rd Last 3rd 2nd 1st
+4079 1st 2nd 3rd Last 3rd 2nd 1st
+4080 1st 2nd 3rd Last 3rd 2nd 1st
+4081 1st 2nd 3rd Last 3rd 2nd 1st
+4082 1st 2nd 3rd Last 3rd 2nd 1st
+4083 1st 2nd 3rd Last 3rd 2nd 1st
+4084 1st 2nd 3rd Last 3rd 2nd 1st
+4085 1st 2nd 3rd Last 3rd 2nd 1st
+4086 1st 2nd 3rd Last 3rd 2nd 1st
+4087 1st 2nd 3rd Last 3rd 2nd 1st
+4088 1st 2nd 3rd Last 3rd 2nd 1st
+4089 1st 2nd 3rd Last 3rd 2nd 1st
+4090 1st 2nd 3rd Last 3rd 2nd 1st
+4091 1st 2nd 3rd Last 3rd 2nd 1st
+4092 1st 2nd 3rd Last 3rd 2nd 1st
+4093 1st 2nd 3rd Last 3rd 2nd 1st
+4094 1st 2nd 3rd Last 3rd 2nd 1st
+4095 1st 2nd 3rd Last 3rd 2nd 1st
+4096 1st 2nd 3rd Last 3rd 2nd 1st
+4097 1st 2nd 3rd Last 3rd 2nd 1st
+4098 1st 2nd 3rd Last 3rd 2nd 1st
+4099 1st 2nd 3rd Last 3rd 2nd 1st
+4100 1st 2nd 3rd Last 3rd 2nd 1st
+4101 1st 2nd 3rd Last 3rd 2nd 1st
+4102 1st 2nd 3rd Last 3rd 2nd 1st
+4103 1st 2nd 3rd Last 3rd 2nd 1st
+4104 1st 2nd 3rd Last 3rd 2nd 1st
+4105 1st 2nd 3rd Last 3rd 2nd 1st
+4106 1st 2nd 3rd Last 3rd 2nd 1st
+4107 1st 2nd 3rd Last 3rd 2nd 1st
+4108 1st 2nd 3rd Last 3rd 2nd 1st
+4109 1st 2nd 3rd Last 3rd 2nd 1st
+4110 1st 2nd 3rd Last 3rd 2nd 1st
+4111 1st 2nd 3rd Last 3rd 2nd 1st
+4112 1st 2nd 3rd Last 3rd 2nd 1st
+4113 1st 2nd 3rd Last 3rd 2nd 1st
+4114 1st 2nd 3rd Last 3rd 2nd 1st
+4115 1st 2nd 3rd Last 3rd 2nd 1st
+4116 1st 2nd 3rd Last 3rd 2nd 1st
+4117 1st 2nd 3rd Last 3rd 2nd 1st
+4118 1st 2nd 3rd Last 3rd 2nd 1st
+4119 1st 2nd 3rd Last 3rd 2nd 1st
+4120 1st 2nd 3rd Last 3rd 2nd 1st
+4121 1st 2nd 3rd Last 3rd 2nd 1st
+4122 1st 2nd 3rd Last 3rd 2nd 1st
+4123 1st 2nd 3rd Last 3rd 2nd 1st
+4124 1st 2nd 3rd Last 3rd 2nd 1st
+4125 1st 2nd 3rd Last 3rd 2nd 1st
+4126 1st 2nd 3rd Last 3rd 2nd 1st
+4127 1st 2nd 3rd Last 3rd 2nd 1st
+4128 1st 2nd 3rd Last 3rd 2nd 1st
+4129 1st 2nd 3rd Last 3rd 2nd 1st
+4130 1st 2nd 3rd Last 3rd 2nd 1st
+4131 1st 2nd 3rd Last 3rd 2nd 1st
+4132 1st 2nd 3rd Last 3rd 2nd 1st
+4133 1st 2nd 3rd Last 3rd 2nd 1st
+4134 1st 2nd 3rd Last 3rd 2nd 1st
+4135 1st 2nd 3rd Last 3rd 2nd 1st
+4136 1st 2nd 3rd Last 3rd 2nd 1st
+4137 1st 2nd 3rd Last 3rd 2nd 1st
+4138 1st 2nd 3rd Last 3rd 2nd 1st
+4139 1st 2nd 3rd Last 3rd 2nd 1st
+4140 1st 2nd 3rd Last 3rd 2nd 1st
+4141 1st 2nd 3rd Last 3rd 2nd 1st
+4142 1st 2nd 3rd Last 3rd 2nd 1st
+4143 1st 2nd 3rd Last 3rd 2nd 1st
+4144 1st 2nd 3rd Last 3rd 2nd 1st
+4145 1st 2nd 3rd Last 3rd 2nd 1st
+4146 1st 2nd 3rd Last 3rd 2nd 1st
+4147 1st 2nd 3rd Last 3rd 2nd 1st
+4148 1st 2nd 3rd Last 3rd 2nd 1st
+4149 1st 2nd 3rd Last 3rd 2nd 1st
+4150 1st 2nd 3rd Last 3rd 2nd 1st
+4151 1st 2nd 3rd Last 3rd 2nd 1st
+4152 1st 2nd 3rd Last 3rd 2nd 1st
+4153 1st 2nd 3rd Last 3rd 2nd 1st
+4154 1st 2nd 3rd Last 3rd 2nd 1st
+4155 1st 2nd 3rd Last 3rd 2nd 1st
+4156 1st 2nd 3rd Last 3rd 2nd 1st
+4157 1st 2nd 3rd Last 3rd 2nd 1st
+4158 1st 2nd 3rd Last 3rd 2nd 1st
+4159 1st 2nd 3rd Last 3rd 2nd 1st
+4160 1st 2nd 3rd Last 3rd 2nd 1st
+4161 1st 2nd 3rd Last 3rd 2nd 1st
+4162 1st 2nd 3rd Last 3rd 2nd 1st
+4163 1st 2nd 3rd Last 3rd 2nd 1st
+4164 1st 2nd 3rd Last 3rd 2nd 1st
+4165 1st 2nd 3rd Last 3rd 2nd 1st
+4166 1st 2nd 3rd Last 3rd 2nd 1st
+4167 1st 2nd 3rd Last 3rd 2nd 1st
+4168 1st 2nd 3rd Last 3rd 2nd 1st
+4169 1st 2nd 3rd Last 3rd 2nd 1st
+4170 1st 2nd 3rd Last 3rd 2nd 1st
+4171 1st 2nd 3rd Last 3rd 2nd 1st
+4172 1st 2nd 3rd Last 3rd 2nd 1st
+4173 1st 2nd 3rd Last 3rd 2nd 1st
+4174 1st 2nd 3rd Last 3rd 2nd 1st
+4175 1st 2nd 3rd Last 3rd 2nd 1st
+4176 1st 2nd 3rd Last 3rd 2nd 1st
+4177 1st 2nd 3rd Last 3rd 2nd 1st
+4178 1st 2nd 3rd Last 3rd 2nd 1st
+4179 1st 2nd 3rd Last 3rd 2nd 1st
+4180 1st 2nd 3rd Last 3rd 2nd 1st
+4181 1st 2nd 3rd Last 3rd 2nd 1st
+4182 1st 2nd 3rd Last 3rd 2nd 1st
+4183 1st 2nd 3rd Last 3rd 2nd 1st
+4184 1st 2nd 3rd Last 3rd 2nd 1st
+4185 1st 2nd 3rd Last 3rd 2nd 1st
+4186 1st 2nd 3rd Last 3rd 2nd 1st
+4187 1st 2nd 3rd Last 3rd 2nd 1st
+4188 1st 2nd 3rd Last 3rd 2nd 1st
+4189 1st 2nd 3rd Last 3rd 2nd 1st
+4190 1st 2nd 3rd Last 3rd 2nd 1st
+4191 1st 2nd 3rd Last 3rd 2nd 1st
+4192 1st 2nd 3rd Last 3rd 2nd 1st
+4193 1st 2nd 3rd Last 3rd 2nd 1st
+4194 1st 2nd 3rd Last 3rd 2nd 1st
+4195 1st 2nd 3rd Last 3rd 2nd 1st
+4196 1st 2nd 3rd Last 3rd 2nd 1st
+4197 1st 2nd 3rd Last 3rd 2nd 1st
+4198 1st 2nd 3rd Last 3rd 2nd 1st
+4199 1st 2nd 3rd Last 3rd 2nd 1st
+4200 1st 2nd 3rd Last 3rd 2nd 1st
+4201 1st 2nd 3rd Last 3rd 2nd 1st
+4202 1st 2nd 3rd Last 3rd 2nd 1st
+4203 1st 2nd 3rd Last 3rd 2nd 1st
+4204 1st 2nd 3rd Last 3rd 2nd 1st
+4205 1st 2nd 3rd Last 3rd 2nd 1st
+4206 1st 2nd 3rd Last 3rd 2nd 1st
+4207 1st 2nd 3rd Last 3rd 2nd 1st
+4208 1st 2nd 3rd Last 3rd 2nd 1st
+4209 1st 2nd 3rd Last 3rd 2nd 1st
+4210 1st 2nd 3rd Last 3rd 2nd 1st
+4211 1st 2nd 3rd Last 3rd 2nd 1st
+4212 1st 2nd 3rd Last 3rd 2nd 1st
+4213 1st 2nd 3rd Last 3rd 2nd 1st
+4214 1st 2nd 3rd Last 3rd 2nd 1st
+4215 1st 2nd 3rd Last 3rd 2nd 1st
+4216 1st 2nd 3rd Last 3rd 2nd 1st
+4217 1st 2nd 3rd Last 3rd 2nd 1st
+4218 1st 2nd 3rd Last 3rd 2nd 1st
+4219 1st 2nd 3rd Last 3rd 2nd 1st
+4220 1st 2nd 3rd Last 3rd 2nd 1st
+4221 1st 2nd 3rd Last 3rd 2nd 1st
+4222 1st 2nd 3rd Last 3rd 2nd 1st
+4223 1st 2nd 3rd Last 3rd 2nd 1st
+4224 1st 2nd 3rd Last 3rd 2nd 1st
+4225 1st 2nd 3rd Last 3rd 2nd 1st
+4226 1st 2nd 3rd Last 3rd 2nd 1st
+4227 1st 2nd 3rd Last 3rd 2nd 1st
+4228 1st 2nd 3rd Last 3rd 2nd 1st
+4229 1st 2nd 3rd Last 3rd 2nd 1st
+4230 1st 2nd 3rd Last 3rd 2nd 1st
+4231 1st 2nd 3rd Last 3rd 2nd 1st
+4232 1st 2nd 3rd Last 3rd 2nd 1st
+4233 1st 2nd 3rd Last 3rd 2nd 1st
+4234 1st 2nd 3rd Last 3rd 2nd 1st
+4235 1st 2nd 3rd Last 3rd 2nd 1st
+4236 1st 2nd 3rd Last 3rd 2nd 1st
+4237 1st 2nd 3rd Last 3rd 2nd 1st
+4238 1st 2nd 3rd Last 3rd 2nd 1st
+4239 1st 2nd 3rd Last 3rd 2nd 1st
+4240 1st 2nd 3rd Last 3rd 2nd 1st
+4241 1st 2nd 3rd Last 3rd 2nd 1st
+4242 1st 2nd 3rd Last 3rd 2nd 1st
+4243 1st 2nd 3rd Last 3rd 2nd 1st
+4244 1st 2nd 3rd Last 3rd 2nd 1st
+4245 1st 2nd 3rd Last 3rd 2nd 1st
+4246 1st 2nd 3rd Last 3rd 2nd 1st
+4247 1st 2nd 3rd Last 3rd 2nd 1st
+4248 1st 2nd 3rd Last 3rd 2nd 1st
+4249 1st 2nd 3rd Last 3rd 2nd 1st
+4250 1st 2nd 3rd Last 3rd 2nd 1st
+4251 1st 2nd 3rd Last 3rd 2nd 1st
+4252 1st 2nd 3rd Last 3rd 2nd 1st
+4253 1st 2nd 3rd Last 3rd 2nd 1st
+4254 1st 2nd 3rd Last 3rd 2nd 1st
+4255 1st 2nd 3rd Last 3rd 2nd 1st
+4256 1st 2nd 3rd Last 3rd 2nd 1st
+4257 1st 2nd 3rd Last 3rd 2nd 1st
+4258 1st 2nd 3rd Last 3rd 2nd 1st
+4259 1st 2nd 3rd Last 3rd 2nd 1st
+4260 1st 2nd 3rd Last 3rd 2nd 1st
+4261 1st 2nd 3rd Last 3rd 2nd 1st
+4262 1st 2nd 3rd Last 3rd 2nd 1st
+4263 1st 2nd 3rd Last 3rd 2nd 1st
+4264 1st 2nd 3rd Last 3rd 2nd 1st
+4265 1st 2nd 3rd Last 3rd 2nd 1st
+4266 1st 2nd 3rd Last 3rd 2nd 1st
+4267 1st 2nd 3rd Last 3rd 2nd 1st
+4268 1st 2nd 3rd Last 3rd 2nd 1st
+4269 1st 2nd 3rd Last 3rd 2nd 1st
+4270 1st 2nd 3rd Last 3rd 2nd 1st
+4271 1st 2nd 3rd Last 3rd 2nd 1st
+4272 1st 2nd 3rd Last 3rd 2nd 1st
+4273 1st 2nd 3rd Last 3rd 2nd 1st
+4274 1st 2nd 3rd Last 3rd 2nd 1st
+4275 1st 2nd 3rd Last 3rd 2nd 1st
+4276 1st 2nd 3rd Last 3rd 2nd 1st
+4277 1st 2nd 3rd Last 3rd 2nd 1st
+4278 1st 2nd 3rd Last 3rd 2nd 1st
+4279 1st 2nd 3rd Last 3rd 2nd 1st
+4280 1st 2nd 3rd Last 3rd 2nd 1st
+4281 1st 2nd 3rd Last 3rd 2nd 1st
+4282 1st 2nd 3rd Last 3rd 2nd 1st
+4283 1st 2nd 3rd Last 3rd 2nd 1st
+4284 1st 2nd 3rd Last 3rd 2nd 1st
+4285 1st 2nd 3rd Last 3rd 2nd 1st
+4286 1st 2nd 3rd Last 3rd 2nd 1st
+4287 1st 2nd 3rd Last 3rd 2nd 1st
+4288 1st 2nd 3rd Last 3rd 2nd 1st
+4289 1st 2nd 3rd Last 3rd 2nd 1st
+4290 1st 2nd 3rd Last 3rd 2nd 1st
+4291 1st 2nd 3rd Last 3rd 2nd 1st
+4292 1st 2nd 3rd Last 3rd 2nd 1st
+4293 1st 2nd 3rd Last 3rd 2nd 1st
+4294 1st 2nd 3rd Last 3rd 2nd 1st
+4295 1st 2nd 3rd Last 3rd 2nd 1st
+4296 1st 2nd 3rd Last 3rd 2nd 1st
+4297 1st 2nd 3rd Last 3rd 2nd 1st
+4298 1st 2nd 3rd Last 3rd 2nd 1st
+4299 1st 2nd 3rd Last 3rd 2nd 1st
+4300 1st 2nd 3rd Last 3rd 2nd 1st
+4301 1st 2nd 3rd Last 3rd 2nd 1st
+4302 1st 2nd 3rd Last 3rd 2nd 1st
+4303 1st 2nd 3rd Last 3rd 2nd 1st
+4304 1st 2nd 3rd Last 3rd 2nd 1st
+4305 1st 2nd 3rd Last 3rd 2nd 1st
+4306 1st 2nd 3rd Last 3rd 2nd 1st
+4307 1st 2nd 3rd Last 3rd 2nd 1st
+4308 1st 2nd 3rd Last 3rd 2nd 1st
+4309 1st 2nd 3rd Last 3rd 2nd 1st
+4310 1st 2nd 3rd Last 3rd 2nd 1st
+4311 1st 2nd 3rd Last 3rd 2nd 1st
+4312 1st 2nd 3rd Last 3rd 2nd 1st
+4313 1st 2nd 3rd Last 3rd 2nd 1st
+4314 1st 2nd 3rd Last 3rd 2nd 1st
+4315 1st 2nd 3rd Last 3rd 2nd 1st
+4316 1st 2nd 3rd Last 3rd 2nd 1st
+4317 1st 2nd 3rd Last 3rd 2nd 1st
+4318 1st 2nd 3rd Last 3rd 2nd 1st
+4319 1st 2nd 3rd Last 3rd 2nd 1st
+4320 1st 2nd 3rd Last 3rd 2nd 1st
+4321 1st 2nd 3rd Last 3rd 2nd 1st
+4322 1st 2nd 3rd Last 3rd 2nd 1st
+4323 1st 2nd 3rd Last 3rd 2nd 1st
+4324 1st 2nd 3rd Last 3rd 2nd 1st
+4325 1st 2nd 3rd Last 3rd 2nd 1st
+4326 1st 2nd 3rd Last 3rd 2nd 1st
+4327 1st 2nd 3rd Last 3rd 2nd 1st
+4328 1st 2nd 3rd Last 3rd 2nd 1st
+4329 1st 2nd 3rd Last 3rd 2nd 1st
+4330 1st 2nd 3rd Last 3rd 2nd 1st
+4331 1st 2nd 3rd Last 3rd 2nd 1st
+4332 1st 2nd 3rd Last 3rd 2nd 1st
+4333 1st 2nd 3rd Last 3rd 2nd 1st
+4334 1st 2nd 3rd Last 3rd 2nd 1st
+4335 1st 2nd 3rd Last 3rd 2nd 1st
+4336 1st 2nd 3rd Last 3rd 2nd 1st
+4337 1st 2nd 3rd Last 3rd 2nd 1st
+4338 1st 2nd 3rd Last 3rd 2nd 1st
+4339 1st 2nd 3rd Last 3rd 2nd 1st
+4340 1st 2nd 3rd Last 3rd 2nd 1st
+4341 1st 2nd 3rd Last 3rd 2nd 1st
+4342 1st 2nd 3rd Last 3rd 2nd 1st
+4343 1st 2nd 3rd Last 3rd 2nd 1st
+4344 1st 2nd 3rd Last 3rd 2nd 1st
+4345 1st 2nd 3rd Last 3rd 2nd 1st
+4346 1st 2nd 3rd Last 3rd 2nd 1st
+4347 1st 2nd 3rd Last 3rd 2nd 1st
+4348 1st 2nd 3rd Last 3rd 2nd 1st
+4349 1st 2nd 3rd Last 3rd 2nd 1st
+4350 1st 2nd 3rd Last 3rd 2nd 1st
+4351 1st 2nd 3rd Last 3rd 2nd 1st
+4352 1st 2nd 3rd Last 3rd 2nd 1st
+4353 1st 2nd 3rd Last 3rd 2nd 1st
+4354 1st 2nd 3rd Last 3rd 2nd 1st
+4355 1st 2nd 3rd Last 3rd 2nd 1st
+4356 1st 2nd 3rd Last 3rd 2nd 1st
+4357 1st 2nd 3rd Last 3rd 2nd 1st
+4358 1st 2nd 3rd Last 3rd 2nd 1st
+4359 1st 2nd 3rd Last 3rd 2nd 1st
+4360 1st 2nd 3rd Last 3rd 2nd 1st
+4361 1st 2nd 3rd Last 3rd 2nd 1st
+4362 1st 2nd 3rd Last 3rd 2nd 1st
+4363 1st 2nd 3rd Last 3rd 2nd 1st
+4364 1st 2nd 3rd Last 3rd 2nd 1st
+4365 1st 2nd 3rd Last 3rd 2nd 1st
+4366 1st 2nd 3rd Last 3rd 2nd 1st
+4367 1st 2nd 3rd Last 3rd 2nd 1st
+4368 1st 2nd 3rd Last 3rd 2nd 1st
+4369 1st 2nd 3rd Last 3rd 2nd 1st
+4370 1st 2nd 3rd Last 3rd 2nd 1st
+4371 1st 2nd 3rd Last 3rd 2nd 1st
+4372 1st 2nd 3rd Last 3rd 2nd 1st
+4373 1st 2nd 3rd Last 3rd 2nd 1st
+4374 1st 2nd 3rd Last 3rd 2nd 1st
+4375 1st 2nd 3rd Last 3rd 2nd 1st
+4376 1st 2nd 3rd Last 3rd 2nd 1st
+4377 1st 2nd 3rd Last 3rd 2nd 1st
+4378 1st 2nd 3rd Last 3rd 2nd 1st
+4379 1st 2nd 3rd Last 3rd 2nd 1st
+4380 1st 2nd 3rd Last 3rd 2nd 1st
+4381 1st 2nd 3rd Last 3rd 2nd 1st
+4382 1st 2nd 3rd Last 3rd 2nd 1st
+4383 1st 2nd 3rd Last 3rd 2nd 1st
+4384 1st 2nd 3rd Last 3rd 2nd 1st
+4385 1st 2nd 3rd Last 3rd 2nd 1st
+4386 1st 2nd 3rd Last 3rd 2nd 1st
+4387 1st 2nd 3rd Last 3rd 2nd 1st
+4388 1st 2nd 3rd Last 3rd 2nd 1st
+4389 1st 2nd 3rd Last 3rd 2nd 1st
+4390 1st 2nd 3rd Last 3rd 2nd 1st
+4391 1st 2nd 3rd Last 3rd 2nd 1st
+4392 1st 2nd 3rd Last 3rd 2nd 1st
+4393 1st 2nd 3rd Last 3rd 2nd 1st
+4394 1st 2nd 3rd Last 3rd 2nd 1st
+4395 1st 2nd 3rd Last 3rd 2nd 1st
+4396 1st 2nd 3rd Last 3rd 2nd 1st
+4397 1st 2nd 3rd Last 3rd 2nd 1st
+4398 1st 2nd 3rd Last 3rd 2nd 1st
+4399 1st 2nd 3rd Last 3rd 2nd 1st
+4400 1st 2nd 3rd Last 3rd 2nd 1st
+4401 1st 2nd 3rd Last 3rd 2nd 1st
+4402 1st 2nd 3rd Last 3rd 2nd 1st
+4403 1st 2nd 3rd Last 3rd 2nd 1st
+4404 1st 2nd 3rd Last 3rd 2nd 1st
+4405 1st 2nd 3rd Last 3rd 2nd 1st
+4406 1st 2nd 3rd Last 3rd 2nd 1st
+4407 1st 2nd 3rd Last 3rd 2nd 1st
+4408 1st 2nd 3rd Last 3rd 2nd 1st
+4409 1st 2nd 3rd Last 3rd 2nd 1st
+4410 1st 2nd 3rd Last 3rd 2nd 1st
+4411 1st 2nd 3rd Last 3rd 2nd 1st
+4412 1st 2nd 3rd Last 3rd 2nd 1st
+4413 1st 2nd 3rd Last 3rd 2nd 1st
+4414 1st 2nd 3rd Last 3rd 2nd 1st
+4415 1st 2nd 3rd Last 3rd 2nd 1st
+4416 1st 2nd 3rd Last 3rd 2nd 1st
+4417 1st 2nd 3rd Last 3rd 2nd 1st
+4418 1st 2nd 3rd Last 3rd 2nd 1st
+4419 1st 2nd 3rd Last 3rd 2nd 1st
+4420 1st 2nd 3rd Last 3rd 2nd 1st
+4421 1st 2nd 3rd Last 3rd 2nd 1st
+4422 1st 2nd 3rd Last 3rd 2nd 1st
+4423 1st 2nd 3rd Last 3rd 2nd 1st
+4424 1st 2nd 3rd Last 3rd 2nd 1st
+4425 1st 2nd 3rd Last 3rd 2nd 1st
+4426 1st 2nd 3rd Last 3rd 2nd 1st
+4427 1st 2nd 3rd Last 3rd 2nd 1st
+4428 1st 2nd 3rd Last 3rd 2nd 1st
+4429 1st 2nd 3rd Last 3rd 2nd 1st
+4430 1st 2nd 3rd Last 3rd 2nd 1st
+4431 1st 2nd 3rd Last 3rd 2nd 1st
+4432 1st 2nd 3rd Last 3rd 2nd 1st
+4433 1st 2nd 3rd Last 3rd 2nd 1st
+4434 1st 2nd 3rd Last 3rd 2nd 1st
+4435 1st 2nd 3rd Last 3rd 2nd 1st
+4436 1st 2nd 3rd Last 3rd 2nd 1st
+4437 1st 2nd 3rd Last 3rd 2nd 1st
+4438 1st 2nd 3rd Last 3rd 2nd 1st
+4439 1st 2nd 3rd Last 3rd 2nd 1st
+4440 1st 2nd 3rd Last 3rd 2nd 1st
+4441 1st 2nd 3rd Last 3rd 2nd 1st
+4442 1st 2nd 3rd Last 3rd 2nd 1st
+4443 1st 2nd 3rd Last 3rd 2nd 1st
+4444 1st 2nd 3rd Last 3rd 2nd 1st
+4445 1st 2nd 3rd Last 3rd 2nd 1st
+4446 1st 2nd 3rd Last 3rd 2nd 1st
+4447 1st 2nd 3rd Last 3rd 2nd 1st
+4448 1st 2nd 3rd Last 3rd 2nd 1st
+4449 1st 2nd 3rd Last 3rd 2nd 1st
+4450 1st 2nd 3rd Last 3rd 2nd 1st
+4451 1st 2nd 3rd Last 3rd 2nd 1st
+4452 1st 2nd 3rd Last 3rd 2nd 1st
+4453 1st 2nd 3rd Last 3rd 2nd 1st
+4454 1st 2nd 3rd Last 3rd 2nd 1st
+4455 1st 2nd 3rd Last 3rd 2nd 1st
+4456 1st 2nd 3rd Last 3rd 2nd 1st
+4457 1st 2nd 3rd Last 3rd 2nd 1st
+4458 1st 2nd 3rd Last 3rd 2nd 1st
+4459 1st 2nd 3rd Last 3rd 2nd 1st
+4460 1st 2nd 3rd Last 3rd 2nd 1st
+4461 1st 2nd 3rd Last 3rd 2nd 1st
+4462 1st 2nd 3rd Last 3rd 2nd 1st
+4463 1st 2nd 3rd Last 3rd 2nd 1st
+4464 1st 2nd 3rd Last 3rd 2nd 1st
+4465 1st 2nd 3rd Last 3rd 2nd 1st
+4466 1st 2nd 3rd Last 3rd 2nd 1st
+4467 1st 2nd 3rd Last 3rd 2nd 1st
+4468 1st 2nd 3rd Last 3rd 2nd 1st
+4469 1st 2nd 3rd Last 3rd 2nd 1st
+4470 1st 2nd 3rd Last 3rd 2nd 1st
+4471 1st 2nd 3rd Last 3rd 2nd 1st
+4472 1st 2nd 3rd Last 3rd 2nd 1st
+4473 1st 2nd 3rd Last 3rd 2nd 1st
+4474 1st 2nd 3rd Last 3rd 2nd 1st
+4475 1st 2nd 3rd Last 3rd 2nd 1st
+4476 1st 2nd 3rd Last 3rd 2nd 1st
+4477 1st 2nd 3rd Last 3rd 2nd 1st
+4478 1st 2nd 3rd Last 3rd 2nd 1st
+4479 1st 2nd 3rd Last 3rd 2nd 1st
+4480 1st 2nd 3rd Last 3rd 2nd 1st
+4481 1st 2nd 3rd Last 3rd 2nd 1st
+4482 1st 2nd 3rd Last 3rd 2nd 1st
+4483 1st 2nd 3rd Last 3rd 2nd 1st
+4484 1st 2nd 3rd Last 3rd 2nd 1st
+4485 1st 2nd 3rd Last 3rd 2nd 1st
+4486 1st 2nd 3rd Last 3rd 2nd 1st
+4487 1st 2nd 3rd Last 3rd 2nd 1st
+4488 1st 2nd 3rd Last 3rd 2nd 1st
+4489 1st 2nd 3rd Last 3rd 2nd 1st
+4490 1st 2nd 3rd Last 3rd 2nd 1st
+4491 1st 2nd 3rd Last 3rd 2nd 1st
+4492 1st 2nd 3rd Last 3rd 2nd 1st
+4493 1st 2nd 3rd Last 3rd 2nd 1st
+4494 1st 2nd 3rd Last 3rd 2nd 1st
+4495 1st 2nd 3rd Last 3rd 2nd 1st
+4496 1st 2nd 3rd Last 3rd 2nd 1st
+4497 1st 2nd 3rd Last 3rd 2nd 1st
+4498 1st 2nd 3rd Last 3rd 2nd 1st
+4499 1st 2nd 3rd Last 3rd 2nd 1st
+4500 1st 2nd 3rd Last 3rd 2nd 1st
+4501 1st 2nd 3rd Last 3rd 2nd 1st
+4502 1st 2nd 3rd Last 3rd 2nd 1st
+4503 1st 2nd 3rd Last 3rd 2nd 1st
+4504 1st 2nd 3rd Last 3rd 2nd 1st
+4505 1st 2nd 3rd Last 3rd 2nd 1st
+4506 1st 2nd 3rd Last 3rd 2nd 1st
+4507 1st 2nd 3rd Last 3rd 2nd 1st
+4508 1st 2nd 3rd Last 3rd 2nd 1st
+4509 1st 2nd 3rd Last 3rd 2nd 1st
+4510 1st 2nd 3rd Last 3rd 2nd 1st
+4511 1st 2nd 3rd Last 3rd 2nd 1st
+4512 1st 2nd 3rd Last 3rd 2nd 1st
+4513 1st 2nd 3rd Last 3rd 2nd 1st
+4514 1st 2nd 3rd Last 3rd 2nd 1st
+4515 1st 2nd 3rd Last 3rd 2nd 1st
+4516 1st 2nd 3rd Last 3rd 2nd 1st
+4517 1st 2nd 3rd Last 3rd 2nd 1st
+4518 1st 2nd 3rd Last 3rd 2nd 1st
+4519 1st 2nd 3rd Last 3rd 2nd 1st
+4520 1st 2nd 3rd Last 3rd 2nd 1st
+4521 1st 2nd 3rd Last 3rd 2nd 1st
+4522 1st 2nd 3rd Last 3rd 2nd 1st
+4523 1st 2nd 3rd Last 3rd 2nd 1st
+4524 1st 2nd 3rd Last 3rd 2nd 1st
+4525 1st 2nd 3rd Last 3rd 2nd 1st
+4526 1st 2nd 3rd Last 3rd 2nd 1st
+4527 1st 2nd 3rd Last 3rd 2nd 1st
+4528 1st 2nd 3rd Last 3rd 2nd 1st
+4529 1st 2nd 3rd Last 3rd 2nd 1st
+4530 1st 2nd 3rd Last 3rd 2nd 1st
+4531 1st 2nd 3rd Last 3rd 2nd 1st
+4532 1st 2nd 3rd Last 3rd 2nd 1st
+4533 1st 2nd 3rd Last 3rd 2nd 1st
+4534 1st 2nd 3rd Last 3rd 2nd 1st
+4535 1st 2nd 3rd Last 3rd 2nd 1st
+4536 1st 2nd 3rd Last 3rd 2nd 1st
+4537 1st 2nd 3rd Last 3rd 2nd 1st
+4538 1st 2nd 3rd Last 3rd 2nd 1st
+4539 1st 2nd 3rd Last 3rd 2nd 1st
+4540 1st 2nd 3rd Last 3rd 2nd 1st
+4541 1st 2nd 3rd Last 3rd 2nd 1st
+4542 1st 2nd 3rd Last 3rd 2nd 1st
+4543 1st 2nd 3rd Last 3rd 2nd 1st
+4544 1st 2nd 3rd Last 3rd 2nd 1st
+4545 1st 2nd 3rd Last 3rd 2nd 1st
+4546 1st 2nd 3rd Last 3rd 2nd 1st
+4547 1st 2nd 3rd Last 3rd 2nd 1st
+4548 1st 2nd 3rd Last 3rd 2nd 1st
+4549 1st 2nd 3rd Last 3rd 2nd 1st
+4550 1st 2nd 3rd Last 3rd 2nd 1st
+4551 1st 2nd 3rd Last 3rd 2nd 1st
+4552 1st 2nd 3rd Last 3rd 2nd 1st
+4553 1st 2nd 3rd Last 3rd 2nd 1st
+4554 1st 2nd 3rd Last 3rd 2nd 1st
+4555 1st 2nd 3rd Last 3rd 2nd 1st
+4556 1st 2nd 3rd Last 3rd 2nd 1st
+4557 1st 2nd 3rd Last 3rd 2nd 1st
+4558 1st 2nd 3rd Last 3rd 2nd 1st
+4559 1st 2nd 3rd Last 3rd 2nd 1st
+4560 1st 2nd 3rd Last 3rd 2nd 1st
+4561 1st 2nd 3rd Last 3rd 2nd 1st
+4562 1st 2nd 3rd Last 3rd 2nd 1st
+4563 1st 2nd 3rd Last 3rd 2nd 1st
+4564 1st 2nd 3rd Last 3rd 2nd 1st
+4565 1st 2nd 3rd Last 3rd 2nd 1st
+4566 1st 2nd 3rd Last 3rd 2nd 1st
+4567 1st 2nd 3rd Last 3rd 2nd 1st
+4568 1st 2nd 3rd Last 3rd 2nd 1st
+4569 1st 2nd 3rd Last 3rd 2nd 1st
+4570 1st 2nd 3rd Last 3rd 2nd 1st
+4571 1st 2nd 3rd Last 3rd 2nd 1st
+4572 1st 2nd 3rd Last 3rd 2nd 1st
+4573 1st 2nd 3rd Last 3rd 2nd 1st
+4574 1st 2nd 3rd Last 3rd 2nd 1st
+4575 1st 2nd 3rd Last 3rd 2nd 1st
+4576 1st 2nd 3rd Last 3rd 2nd 1st
+4577 1st 2nd 3rd Last 3rd 2nd 1st
+4578 1st 2nd 3rd Last 3rd 2nd 1st
+4579 1st 2nd 3rd Last 3rd 2nd 1st
+4580 1st 2nd 3rd Last 3rd 2nd 1st
+4581 1st 2nd 3rd Last 3rd 2nd 1st
+4582 1st 2nd 3rd Last 3rd 2nd 1st
+4583 1st 2nd 3rd Last 3rd 2nd 1st
+4584 1st 2nd 3rd Last 3rd 2nd 1st
+4585 1st 2nd 3rd Last 3rd 2nd 1st
+4586 1st 2nd 3rd Last 3rd 2nd 1st
+4587 1st 2nd 3rd Last 3rd 2nd 1st
+4588 1st 2nd 3rd Last 3rd 2nd 1st
+4589 1st 2nd 3rd Last 3rd 2nd 1st
+4590 1st 2nd 3rd Last 3rd 2nd 1st
+4591 1st 2nd 3rd Last 3rd 2nd 1st
+4592 1st 2nd 3rd Last 3rd 2nd 1st
+4593 1st 2nd 3rd Last 3rd 2nd 1st
+4594 1st 2nd 3rd Last 3rd 2nd 1st
+4595 1st 2nd 3rd Last 3rd 2nd 1st
+4596 1st 2nd 3rd Last 3rd 2nd 1st
+4597 1st 2nd 3rd Last 3rd 2nd 1st
+4598 1st 2nd 3rd Last 3rd 2nd 1st
+4599 1st 2nd 3rd Last 3rd 2nd 1st
+4600 1st 2nd 3rd Last 3rd 2nd 1st
+4601 1st 2nd 3rd Last 3rd 2nd 1st
+4602 1st 2nd 3rd Last 3rd 2nd 1st
+4603 1st 2nd 3rd Last 3rd 2nd 1st
+4604 1st 2nd 3rd Last 3rd 2nd 1st
+4605 1st 2nd 3rd Last 3rd 2nd 1st
+4606 1st 2nd 3rd Last 3rd 2nd 1st
+4607 1st 2nd 3rd Last 3rd 2nd 1st
+4608 1st 2nd 3rd Last 3rd 2nd 1st
+4609 1st 2nd 3rd Last 3rd 2nd 1st
+4610 1st 2nd 3rd Last 3rd 2nd 1st
+4611 1st 2nd 3rd Last 3rd 2nd 1st
+4612 1st 2nd 3rd Last 3rd 2nd 1st
+4613 1st 2nd 3rd Last 3rd 2nd 1st
+4614 1st 2nd 3rd Last 3rd 2nd 1st
+4615 1st 2nd 3rd Last 3rd 2nd 1st
+4616 1st 2nd 3rd Last 3rd 2nd 1st
+4617 1st 2nd 3rd Last 3rd 2nd 1st
+4618 1st 2nd 3rd Last 3rd 2nd 1st
+4619 1st 2nd 3rd Last 3rd 2nd 1st
+4620 1st 2nd 3rd Last 3rd 2nd 1st
+4621 1st 2nd 3rd Last 3rd 2nd 1st
+4622 1st 2nd 3rd Last 3rd 2nd 1st
+4623 1st 2nd 3rd Last 3rd 2nd 1st
+4624 1st 2nd 3rd Last 3rd 2nd 1st
+4625 1st 2nd 3rd Last 3rd 2nd 1st
+4626 1st 2nd 3rd Last 3rd 2nd 1st
+4627 1st 2nd 3rd Last 3rd 2nd 1st
+4628 1st 2nd 3rd Last 3rd 2nd 1st
+4629 1st 2nd 3rd Last 3rd 2nd 1st
+4630 1st 2nd 3rd Last 3rd 2nd 1st
+4631 1st 2nd 3rd Last 3rd 2nd 1st
+4632 1st 2nd 3rd Last 3rd 2nd 1st
+4633 1st 2nd 3rd Last 3rd 2nd 1st
+4634 1st 2nd 3rd Last 3rd 2nd 1st
+4635 1st 2nd 3rd Last 3rd 2nd 1st
+4636 1st 2nd 3rd Last 3rd 2nd 1st
+4637 1st 2nd 3rd Last 3rd 2nd 1st
+4638 1st 2nd 3rd Last 3rd 2nd 1st
+4639 1st 2nd 3rd Last 3rd 2nd 1st
+4640 1st 2nd 3rd Last 3rd 2nd 1st
+4641 1st 2nd 3rd Last 3rd 2nd 1st
+4642 1st 2nd 3rd Last 3rd 2nd 1st
+4643 1st 2nd 3rd Last 3rd 2nd 1st
+4644 1st 2nd 3rd Last 3rd 2nd 1st
+4645 1st 2nd 3rd Last 3rd 2nd 1st
+4646 1st 2nd 3rd Last 3rd 2nd 1st
+4647 1st 2nd 3rd Last 3rd 2nd 1st
+4648 1st 2nd 3rd Last 3rd 2nd 1st
+4649 1st 2nd 3rd Last 3rd 2nd 1st
+4650 1st 2nd 3rd Last 3rd 2nd 1st
+4651 1st 2nd 3rd Last 3rd 2nd 1st
+4652 1st 2nd 3rd Last 3rd 2nd 1st
+4653 1st 2nd 3rd Last 3rd 2nd 1st
+4654 1st 2nd 3rd Last 3rd 2nd 1st
+4655 1st 2nd 3rd Last 3rd 2nd 1st
+4656 1st 2nd 3rd Last 3rd 2nd 1st
+4657 1st 2nd 3rd Last 3rd 2nd 1st
+4658 1st 2nd 3rd Last 3rd 2nd 1st
+4659 1st 2nd 3rd Last 3rd 2nd 1st
+4660 1st 2nd 3rd Last 3rd 2nd 1st
+4661 1st 2nd 3rd Last 3rd 2nd 1st
+4662 1st 2nd 3rd Last 3rd 2nd 1st
+4663 1st 2nd 3rd Last 3rd 2nd 1st
+4664 1st 2nd 3rd Last 3rd 2nd 1st
+4665 1st 2nd 3rd Last 3rd 2nd 1st
+4666 1st 2nd 3rd Last 3rd 2nd 1st
+4667 1st 2nd 3rd Last 3rd 2nd 1st
+4668 1st 2nd 3rd Last 3rd 2nd 1st
+4669 1st 2nd 3rd Last 3rd 2nd 1st
+4670 1st 2nd 3rd Last 3rd 2nd 1st
+4671 1st 2nd 3rd Last 3rd 2nd 1st
+4672 1st 2nd 3rd Last 3rd 2nd 1st
+4673 1st 2nd 3rd Last 3rd 2nd 1st
+4674 1st 2nd 3rd Last 3rd 2nd 1st
+4675 1st 2nd 3rd Last 3rd 2nd 1st
+4676 1st 2nd 3rd Last 3rd 2nd 1st
+4677 1st 2nd 3rd Last 3rd 2nd 1st
+4678 1st 2nd 3rd Last 3rd 2nd 1st
+4679 1st 2nd 3rd Last 3rd 2nd 1st
+4680 1st 2nd 3rd Last 3rd 2nd 1st
+4681 1st 2nd 3rd Last 3rd 2nd 1st
+4682 1st 2nd 3rd Last 3rd 2nd 1st
+4683 1st 2nd 3rd Last 3rd 2nd 1st
+4684 1st 2nd 3rd Last 3rd 2nd 1st
+4685 1st 2nd 3rd Last 3rd 2nd 1st
+4686 1st 2nd 3rd Last 3rd 2nd 1st
+4687 1st 2nd 3rd Last 3rd 2nd 1st
+4688 1st 2nd 3rd Last 3rd 2nd 1st
+4689 1st 2nd 3rd Last 3rd 2nd 1st
+4690 1st 2nd 3rd Last 3rd 2nd 1st
+4691 1st 2nd 3rd Last 3rd 2nd 1st
+4692 1st 2nd 3rd Last 3rd 2nd 1st
+4693 1st 2nd 3rd Last 3rd 2nd 1st
+4694 1st 2nd 3rd Last 3rd 2nd 1st
+4695 1st 2nd 3rd Last 3rd 2nd 1st
+4696 1st 2nd 3rd Last 3rd 2nd 1st
+4697 1st 2nd 3rd Last 3rd 2nd 1st
+4698 1st 2nd 3rd Last 3rd 2nd 1st
+4699 1st 2nd 3rd Last 3rd 2nd 1st
+4700 1st 2nd 3rd Last 3rd 2nd 1st
+4701 1st 2nd 3rd Last 3rd 2nd 1st
+4702 1st 2nd 3rd Last 3rd 2nd 1st
+4703 1st 2nd 3rd Last 3rd 2nd 1st
+4704 1st 2nd 3rd Last 3rd 2nd 1st
+4705 1st 2nd 3rd Last 3rd 2nd 1st
+4706 1st 2nd 3rd Last 3rd 2nd 1st
+4707 1st 2nd 3rd Last 3rd 2nd 1st
+4708 1st 2nd 3rd Last 3rd 2nd 1st
+4709 1st 2nd 3rd Last 3rd 2nd 1st
+4710 1st 2nd 3rd Last 3rd 2nd 1st
+4711 1st 2nd 3rd Last 3rd 2nd 1st
+4712 1st 2nd 3rd Last 3rd 2nd 1st
+4713 1st 2nd 3rd Last 3rd 2nd 1st
+4714 1st 2nd 3rd Last 3rd 2nd 1st
+4715 1st 2nd 3rd Last 3rd 2nd 1st
+4716 1st 2nd 3rd Last 3rd 2nd 1st
+4717 1st 2nd 3rd Last 3rd 2nd 1st
+4718 1st 2nd 3rd Last 3rd 2nd 1st
+4719 1st 2nd 3rd Last 3rd 2nd 1st
+4720 1st 2nd 3rd Last 3rd 2nd 1st
+4721 1st 2nd 3rd Last 3rd 2nd 1st
+4722 1st 2nd 3rd Last 3rd 2nd 1st
+4723 1st 2nd 3rd Last 3rd 2nd 1st
+4724 1st 2nd 3rd Last 3rd 2nd 1st
+4725 1st 2nd 3rd Last 3rd 2nd 1st
+4726 1st 2nd 3rd Last 3rd 2nd 1st
+4727 1st 2nd 3rd Last 3rd 2nd 1st
+4728 1st 2nd 3rd Last 3rd 2nd 1st
+4729 1st 2nd 3rd Last 3rd 2nd 1st
+4730 1st 2nd 3rd Last 3rd 2nd 1st
+4731 1st 2nd 3rd Last 3rd 2nd 1st
+4732 1st 2nd 3rd Last 3rd 2nd 1st
+4733 1st 2nd 3rd Last 3rd 2nd 1st
+4734 1st 2nd 3rd Last 3rd 2nd 1st
+4735 1st 2nd 3rd Last 3rd 2nd 1st
+4736 1st 2nd 3rd Last 3rd 2nd 1st
+4737 1st 2nd 3rd Last 3rd 2nd 1st
+4738 1st 2nd 3rd Last 3rd 2nd 1st
+4739 1st 2nd 3rd Last 3rd 2nd 1st
+4740 1st 2nd 3rd Last 3rd 2nd 1st
+4741 1st 2nd 3rd Last 3rd 2nd 1st
+4742 1st 2nd 3rd Last 3rd 2nd 1st
+4743 1st 2nd 3rd Last 3rd 2nd 1st
+4744 1st 2nd 3rd Last 3rd 2nd 1st
+4745 1st 2nd 3rd Last 3rd 2nd 1st
+4746 1st 2nd 3rd Last 3rd 2nd 1st
+4747 1st 2nd 3rd Last 3rd 2nd 1st
+4748 1st 2nd 3rd Last 3rd 2nd 1st
+4749 1st 2nd 3rd Last 3rd 2nd 1st
+4750 1st 2nd 3rd Last 3rd 2nd 1st
+4751 1st 2nd 3rd Last 3rd 2nd 1st
+4752 1st 2nd 3rd Last 3rd 2nd 1st
+4753 1st 2nd 3rd Last 3rd 2nd 1st
+4754 1st 2nd 3rd Last 3rd 2nd 1st
+4755 1st 2nd 3rd Last 3rd 2nd 1st
+4756 1st 2nd 3rd Last 3rd 2nd 1st
+4757 1st 2nd 3rd Last 3rd 2nd 1st
+4758 1st 2nd 3rd Last 3rd 2nd 1st
+4759 1st 2nd 3rd Last 3rd 2nd 1st
+4760 1st 2nd 3rd Last 3rd 2nd 1st
+4761 1st 2nd 3rd Last 3rd 2nd 1st
+4762 1st 2nd 3rd Last 3rd 2nd 1st
+4763 1st 2nd 3rd Last 3rd 2nd 1st
+4764 1st 2nd 3rd Last 3rd 2nd 1st
+4765 1st 2nd 3rd Last 3rd 2nd 1st
+4766 1st 2nd 3rd Last 3rd 2nd 1st
+4767 1st 2nd 3rd Last 3rd 2nd 1st
+4768 1st 2nd 3rd Last 3rd 2nd 1st
+4769 1st 2nd 3rd Last 3rd 2nd 1st
+4770 1st 2nd 3rd Last 3rd 2nd 1st
+4771 1st 2nd 3rd Last 3rd 2nd 1st
+4772 1st 2nd 3rd Last 3rd 2nd 1st
+4773 1st 2nd 3rd Last 3rd 2nd 1st
+4774 1st 2nd 3rd Last 3rd 2nd 1st
+4775 1st 2nd 3rd Last 3rd 2nd 1st
+4776 1st 2nd 3rd Last 3rd 2nd 1st
+4777 1st 2nd 3rd Last 3rd 2nd 1st
+4778 1st 2nd 3rd Last 3rd 2nd 1st
+4779 1st 2nd 3rd Last 3rd 2nd 1st
+4780 1st 2nd 3rd Last 3rd 2nd 1st
+4781 1st 2nd 3rd Last 3rd 2nd 1st
+4782 1st 2nd 3rd Last 3rd 2nd 1st
+4783 1st 2nd 3rd Last 3rd 2nd 1st
+4784 1st 2nd 3rd Last 3rd 2nd 1st
+4785 1st 2nd 3rd Last 3rd 2nd 1st
+4786 1st 2nd 3rd Last 3rd 2nd 1st
+4787 1st 2nd 3rd Last 3rd 2nd 1st
+4788 1st 2nd 3rd Last 3rd 2nd 1st
+4789 1st 2nd 3rd Last 3rd 2nd 1st
+4790 1st 2nd 3rd Last 3rd 2nd 1st
+4791 1st 2nd 3rd Last 3rd 2nd 1st
+4792 1st 2nd 3rd Last 3rd 2nd 1st
+4793 1st 2nd 3rd Last 3rd 2nd 1st
+4794 1st 2nd 3rd Last 3rd 2nd 1st
+4795 1st 2nd 3rd Last 3rd 2nd 1st
+4796 1st 2nd 3rd Last 3rd 2nd 1st
+4797 1st 2nd 3rd Last 3rd 2nd 1st
+4798 1st 2nd 3rd Last 3rd 2nd 1st
+4799 1st 2nd 3rd Last 3rd 2nd 1st
+4800 1st 2nd 3rd Last 3rd 2nd 1st
+4801 1st 2nd 3rd Last 3rd 2nd 1st
+4802 1st 2nd 3rd Last 3rd 2nd 1st
+4803 1st 2nd 3rd Last 3rd 2nd 1st
+4804 1st 2nd 3rd Last 3rd 2nd 1st
+4805 1st 2nd 3rd Last 3rd 2nd 1st
+4806 1st 2nd 3rd Last 3rd 2nd 1st
+4807 1st 2nd 3rd Last 3rd 2nd 1st
+4808 1st 2nd 3rd Last 3rd 2nd 1st
+4809 1st 2nd 3rd Last 3rd 2nd 1st
+4810 1st 2nd 3rd Last 3rd 2nd 1st
+4811 1st 2nd 3rd Last 3rd 2nd 1st
+4812 1st 2nd 3rd Last 3rd 2nd 1st
+4813 1st 2nd 3rd Last 3rd 2nd 1st
+4814 1st 2nd 3rd Last 3rd 2nd 1st
+4815 1st 2nd 3rd Last 3rd 2nd 1st
+4816 1st 2nd 3rd Last 3rd 2nd 1st
+4817 1st 2nd 3rd Last 3rd 2nd 1st
+4818 1st 2nd 3rd Last 3rd 2nd 1st
+4819 1st 2nd 3rd Last 3rd 2nd 1st
+4820 1st 2nd 3rd Last 3rd 2nd 1st
+4821 1st 2nd 3rd Last 3rd 2nd 1st
+4822 1st 2nd 3rd Last 3rd 2nd 1st
+4823 1st 2nd 3rd Last 3rd 2nd 1st
+4824 1st 2nd 3rd Last 3rd 2nd 1st
+4825 1st 2nd 3rd Last 3rd 2nd 1st
+4826 1st 2nd 3rd Last 3rd 2nd 1st
+4827 1st 2nd 3rd Last 3rd 2nd 1st
+4828 1st 2nd 3rd Last 3rd 2nd 1st
+4829 1st 2nd 3rd Last 3rd 2nd 1st
+4830 1st 2nd 3rd Last 3rd 2nd 1st
+4831 1st 2nd 3rd Last 3rd 2nd 1st
+4832 1st 2nd 3rd Last 3rd 2nd 1st
+4833 1st 2nd 3rd Last 3rd 2nd 1st
+4834 1st 2nd 3rd Last 3rd 2nd 1st
+4835 1st 2nd 3rd Last 3rd 2nd 1st
+4836 1st 2nd 3rd Last 3rd 2nd 1st
+4837 1st 2nd 3rd Last 3rd 2nd 1st
+4838 1st 2nd 3rd Last 3rd 2nd 1st
+4839 1st 2nd 3rd Last 3rd 2nd 1st
+4840 1st 2nd 3rd Last 3rd 2nd 1st
+4841 1st 2nd 3rd Last 3rd 2nd 1st
+4842 1st 2nd 3rd Last 3rd 2nd 1st
+4843 1st 2nd 3rd Last 3rd 2nd 1st
+4844 1st 2nd 3rd Last 3rd 2nd 1st
+4845 1st 2nd 3rd Last 3rd 2nd 1st
+4846 1st 2nd 3rd Last 3rd 2nd 1st
+4847 1st 2nd 3rd Last 3rd 2nd 1st
+4848 1st 2nd 3rd Last 3rd 2nd 1st
+4849 1st 2nd 3rd Last 3rd 2nd 1st
+4850 1st 2nd 3rd Last 3rd 2nd 1st
+4851 1st 2nd 3rd Last 3rd 2nd 1st
+4852 1st 2nd 3rd Last 3rd 2nd 1st
+4853 1st 2nd 3rd Last 3rd 2nd 1st
+4854 1st 2nd 3rd Last 3rd 2nd 1st
+4855 1st 2nd 3rd Last 3rd 2nd 1st
+4856 1st 2nd 3rd Last 3rd 2nd 1st
+4857 1st 2nd 3rd Last 3rd 2nd 1st
+4858 1st 2nd 3rd Last 3rd 2nd 1st
+4859 1st 2nd 3rd Last 3rd 2nd 1st
+4860 1st 2nd 3rd Last 3rd 2nd 1st
+4861 1st 2nd 3rd Last 3rd 2nd 1st
+4862 1st 2nd 3rd Last 3rd 2nd 1st
+4863 1st 2nd 3rd Last 3rd 2nd 1st
+4864 1st 2nd 3rd Last 3rd 2nd 1st
+4865 1st 2nd 3rd Last 3rd 2nd 1st
+4866 1st 2nd 3rd Last 3rd 2nd 1st
+4867 1st 2nd 3rd Last 3rd 2nd 1st
+4868 1st 2nd 3rd Last 3rd 2nd 1st
+4869 1st 2nd 3rd Last 3rd 2nd 1st
+4870 1st 2nd 3rd Last 3rd 2nd 1st
+4871 1st 2nd 3rd Last 3rd 2nd 1st
+4872 1st 2nd 3rd Last 3rd 2nd 1st
+4873 1st 2nd 3rd Last 3rd 2nd 1st
+4874 1st 2nd 3rd Last 3rd 2nd 1st
+4875 1st 2nd 3rd Last 3rd 2nd 1st
+4876 1st 2nd 3rd Last 3rd 2nd 1st
+4877 1st 2nd 3rd Last 3rd 2nd 1st
+4878 1st 2nd 3rd Last 3rd 2nd 1st
+4879 1st 2nd 3rd Last 3rd 2nd 1st
+4880 1st 2nd 3rd Last 3rd 2nd 1st
+4881 1st 2nd 3rd Last 3rd 2nd 1st
+4882 1st 2nd 3rd Last 3rd 2nd 1st
+4883 1st 2nd 3rd Last 3rd 2nd 1st
+4884 1st 2nd 3rd Last 3rd 2nd 1st
+4885 1st 2nd 3rd Last 3rd 2nd 1st
+4886 1st 2nd 3rd Last 3rd 2nd 1st
+4887 1st 2nd 3rd Last 3rd 2nd 1st
+4888 1st 2nd 3rd Last 3rd 2nd 1st
+4889 1st 2nd 3rd Last 3rd 2nd 1st
+4890 1st 2nd 3rd Last 3rd 2nd 1st
+4891 1st 2nd 3rd Last 3rd 2nd 1st
+4892 1st 2nd 3rd Last 3rd 2nd 1st
+4893 1st 2nd 3rd Last 3rd 2nd 1st
+4894 1st 2nd 3rd Last 3rd 2nd 1st
+4895 1st 2nd 3rd Last 3rd 2nd 1st
+4896 1st 2nd 3rd Last 3rd 2nd 1st
+4897 1st 2nd 3rd Last 3rd 2nd 1st
+4898 1st 2nd 3rd Last 3rd 2nd 1st
+4899 1st 2nd 3rd Last 3rd 2nd 1st
+4900 1st 2nd 3rd Last 3rd 2nd 1st
+4901 1st 2nd 3rd Last 3rd 2nd 1st
+4902 1st 2nd 3rd Last 3rd 2nd 1st
+4903 1st 2nd 3rd Last 3rd 2nd 1st
+4904 1st 2nd 3rd Last 3rd 2nd 1st
+4905 1st 2nd 3rd Last 3rd 2nd 1st
+4906 1st 2nd 3rd Last 3rd 2nd 1st
+4907 1st 2nd 3rd Last 3rd 2nd 1st
+4908 1st 2nd 3rd Last 3rd 2nd 1st
+4909 1st 2nd 3rd Last 3rd 2nd 1st
+4910 1st 2nd 3rd Last 3rd 2nd 1st
+4911 1st 2nd 3rd Last 3rd 2nd 1st
+4912 1st 2nd 3rd Last 3rd 2nd 1st
+4913 1st 2nd 3rd Last 3rd 2nd 1st
+4914 1st 2nd 3rd Last 3rd 2nd 1st
+4915 1st 2nd 3rd Last 3rd 2nd 1st
+4916 1st 2nd 3rd Last 3rd 2nd 1st
+4917 1st 2nd 3rd Last 3rd 2nd 1st
+4918 1st 2nd 3rd Last 3rd 2nd 1st
+4919 1st 2nd 3rd Last 3rd 2nd 1st
+4920 1st 2nd 3rd Last 3rd 2nd 1st
+4921 1st 2nd 3rd Last 3rd 2nd 1st
+4922 1st 2nd 3rd Last 3rd 2nd 1st
+4923 1st 2nd 3rd Last 3rd 2nd 1st
+4924 1st 2nd 3rd Last 3rd 2nd 1st
+4925 1st 2nd 3rd Last 3rd 2nd 1st
+4926 1st 2nd 3rd Last 3rd 2nd 1st
+4927 1st 2nd 3rd Last 3rd 2nd 1st
+4928 1st 2nd 3rd Last 3rd 2nd 1st
+4929 1st 2nd 3rd Last 3rd 2nd 1st
+4930 1st 2nd 3rd Last 3rd 2nd 1st
+4931 1st 2nd 3rd Last 3rd 2nd 1st
+4932 1st 2nd 3rd Last 3rd 2nd 1st
+4933 1st 2nd 3rd Last 3rd 2nd 1st
+4934 1st 2nd 3rd Last 3rd 2nd 1st
+4935 1st 2nd 3rd Last 3rd 2nd 1st
+4936 1st 2nd 3rd Last 3rd 2nd 1st
+4937 1st 2nd 3rd Last 3rd 2nd 1st
+4938 1st 2nd 3rd Last 3rd 2nd 1st
+4939 1st 2nd 3rd Last 3rd 2nd 1st
+4940 1st 2nd 3rd Last 3rd 2nd 1st
+4941 1st 2nd 3rd Last 3rd 2nd 1st
+4942 1st 2nd 3rd Last 3rd 2nd 1st
+4943 1st 2nd 3rd Last 3rd 2nd 1st
+4944 1st 2nd 3rd Last 3rd 2nd 1st
+4945 1st 2nd 3rd Last 3rd 2nd 1st
+4946 1st 2nd 3rd Last 3rd 2nd 1st
+4947 1st 2nd 3rd Last 3rd 2nd 1st
+4948 1st 2nd 3rd Last 3rd 2nd 1st
+4949 1st 2nd 3rd Last 3rd 2nd 1st
+4950 1st 2nd 3rd Last 3rd 2nd 1st
+4951 1st 2nd 3rd Last 3rd 2nd 1st
+4952 1st 2nd 3rd Last 3rd 2nd 1st
+4953 1st 2nd 3rd Last 3rd 2nd 1st
+4954 1st 2nd 3rd Last 3rd 2nd 1st
+4955 1st 2nd 3rd Last 3rd 2nd 1st
+4956 1st 2nd 3rd Last 3rd 2nd 1st
+4957 1st 2nd 3rd Last 3rd 2nd 1st
+4958 1st 2nd 3rd Last 3rd 2nd 1st
+4959 1st 2nd 3rd Last 3rd 2nd 1st
+4960 1st 2nd 3rd Last 3rd 2nd 1st
+4961 1st 2nd 3rd Last 3rd 2nd 1st
+4962 1st 2nd 3rd Last 3rd 2nd 1st
+4963 1st 2nd 3rd Last 3rd 2nd 1st
+4964 1st 2nd 3rd Last 3rd 2nd 1st
+4965 1st 2nd 3rd Last 3rd 2nd 1st
+4966 1st 2nd 3rd Last 3rd 2nd 1st
+4967 1st 2nd 3rd Last 3rd 2nd 1st
+4968 1st 2nd 3rd Last 3rd 2nd 1st
+4969 1st 2nd 3rd Last 3rd 2nd 1st
+4970 1st 2nd 3rd Last 3rd 2nd 1st
+4971 1st 2nd 3rd Last 3rd 2nd 1st
+4972 1st 2nd 3rd Last 3rd 2nd 1st
+4973 1st 2nd 3rd Last 3rd 2nd 1st
+4974 1st 2nd 3rd Last 3rd 2nd 1st
+4975 1st 2nd 3rd Last 3rd 2nd 1st
+4976 1st 2nd 3rd Last 3rd 2nd 1st
+4977 1st 2nd 3rd Last 3rd 2nd 1st
+4978 1st 2nd 3rd Last 3rd 2nd 1st
+4979 1st 2nd 3rd Last 3rd 2nd 1st
+4980 1st 2nd 3rd Last 3rd 2nd 1st
+4981 1st 2nd 3rd Last 3rd 2nd 1st
+4982 1st 2nd 3rd Last 3rd 2nd 1st
+4983 1st 2nd 3rd Last 3rd 2nd 1st
+4984 1st 2nd 3rd Last 3rd 2nd 1st
+4985 1st 2nd 3rd Last 3rd 2nd 1st
+4986 1st 2nd 3rd Last 3rd 2nd 1st
+4987 1st 2nd 3rd Last 3rd 2nd 1st
+4988 1st 2nd 3rd Last 3rd 2nd 1st
+4989 1st 2nd 3rd Last 3rd 2nd 1st
+4990 1st 2nd 3rd Last 3rd 2nd 1st
+4991 1st 2nd 3rd Last 3rd 2nd 1st
+4992 1st 2nd 3rd Last 3rd 2nd 1st
+4993 1st 2nd 3rd Last 3rd 2nd 1st
+4994 1st 2nd 3rd Last 3rd 2nd 1st
+4995 1st 2nd 3rd Last 3rd 2nd 1st
+4996 1st 2nd 3rd Last 3rd 2nd 1st
+4997 1st 2nd 3rd Last 3rd 2nd 1st
+4998 1st 2nd 3rd Last 3rd 2nd 1st
+4999 1st 2nd 3rd Last 3rd 2nd 1st
+Stopping
Index: tests/concurrency/waitfor/.expect/statment.txt
===================================================================
--- tests/concurrency/waitfor/.expect/statment.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/.expect/statment.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,702 @@
+Starting
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Statement
+Stopping
Index: tests/concurrency/waitfor/.expect/when.txt
===================================================================
--- tests/concurrency/waitfor/.expect/when.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/.expect/when.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5000 @@
+Starting
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+1
+2
+3
+4
+5
+6
+Stopping
Index: tests/concurrency/waitfor/barge.cfa
===================================================================
--- tests/concurrency/waitfor/barge.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/barge.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,92 @@
+//---------------------------------------------------------
+// Barging test
+// Ensures that no barging can occur between :
+//   - the frontend of the waitfor and the waited call
+//   - the waited call and the backend of the waitfor
+//---------------------------------------------------------
+
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+
+#include <stdbool.h>
+
+static const unsigned long N = 5_000ul;
+
+enum state_t { WAITFOR, CALL, BARGE };
+
+monitor global_t {
+	bool done;
+	bool started;
+	state_t state;
+};
+
+void ?{} ( global_t & this ) {
+	this.done = false;
+	this.started = false;
+	this.state = BARGE;
+}
+
+void ^?{} ( global_t & mutex this ) {}
+
+global_t global;
+
+bool barge( global_t & mutex this ) {
+	this.state = BARGE;
+	return !this.done;
+}
+
+thread barger_t {};
+void main( barger_t & this ) {
+	yield();
+	while( barge( global ) ) { yield(random( 10 )); }
+}
+
+bool do_call( global_t & mutex this ) {
+	yield(random( 10 ));
+	if( this.state != WAITFOR && !this.done && this.started ) {
+		serr | "Barging before caller detected";
+	}
+
+	this.state = CALL;
+	return !this.done;
+}
+
+thread caller_t {};
+void main( caller_t & this ) {
+	while( do_call(global) ) { yield(random( 10 )); }
+}
+
+void do_wait( global_t & mutex this ) {
+	this.started = true;
+	for( int i = 0; i < N; i++) {
+		yield(random( 10 ));
+		this.state = WAITFOR;
+		waitfor(do_call : this) {
+			sout | i;
+		}
+
+		if( this.state != CALL ) {
+			serr | "Barging after caller detected";
+		}
+	}
+
+	this.done = true;
+}
+
+thread waiter_t{};
+void main( waiter_t & this ) {
+	do_wait(global);
+}
+
+int main() {
+	sout | "Starting";
+	{
+		barger_t bargers[17];
+		caller_t callers[7];
+		waiter_t waiters;
+	}
+	sout | "Stopping";
+}
Index: tests/concurrency/waitfor/dtor.cfa
===================================================================
--- tests/concurrency/waitfor/dtor.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/dtor.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,63 @@
+//---------------------------------------------------------
+// Barging test
+// Ensures the statement order is reverse when using waitfor ^?{}
+//---------------------------------------------------------
+
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+
+#include <stdbool.h>
+
+static const unsigned long N = 5_000ul;
+
+enum state_t {
+	CTOR,
+	MAIN,
+	AFTER,
+	END,
+	DTOR
+};
+
+thread dummy_t {
+	state_t state;
+};
+
+static inline void set_state( dummy_t & this, state_t state) {
+	switch(state) {
+		case CTOR  : break;
+		case MAIN  : if( this.state != CTOR  ) { serr | "ERROR Expected state to be CTOR" ; abort(); } this.state = state; break;
+		case AFTER : if( this.state != MAIN  ) { serr | "ERROR Expected state to be MAIN" ; abort(); } this.state = state; break;
+		case END   : if( this.state != AFTER ) { serr | "ERROR Expected state to be AFTER"; abort(); } this.state = state; break;
+		case DTOR  : if( this.state != END   ) { serr | "ERROR Expected state to be END"  ; abort(); } this.state = state; break;
+	}
+}
+
+void ^?{}( dummy_t & mutex this ) {
+	set_state( this, DTOR );
+}
+
+void ?{}( dummy_t & this ) {
+	this.state = CTOR;
+}
+
+void main( dummy_t & this ) {
+	yield(random( 10 ));
+	set_state( this, MAIN );
+	waitfor( ^?{} : this ) {
+		set_state( this, AFTER );
+	}
+	set_state( this, END );
+}
+
+int main() {
+	sout | "Starting";
+	processor p;
+	for( int i = 0; i < N; i++ ){
+		dummy_t dummy[4];
+		yield( random( 100 ) );
+	}
+	sout | "Stopping";
+}
Index: tests/concurrency/waitfor/else.cfa
===================================================================
--- tests/concurrency/waitfor/else.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/else.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,48 @@
+#include <fstream.hfa>
+#include <monitor.hfa>
+
+#include <stdbool.h>
+
+monitor M {};
+
+void notcalled( M & mutex m ) {
+	abort();
+}
+
+void test( M & mutex m ) {
+	int i = 0;
+	sout | "Starting";
+
+	when( false ) waitfor( notcalled : m );
+
+	sout | "Step" | i++;
+
+	waitfor( notcalled : m ); or else {
+		sout | "else called";
+	}
+
+	sout | "Step" | i++;
+
+	when( true ) waitfor( notcalled : m ); or when( true ) else {
+		sout | "else called";
+	}
+
+	sout | "Step" | i++;
+
+	when( false ) waitfor( notcalled : m ); or when( true ) else {
+		sout | "else called";
+	}
+
+	sout | "Step" | i++;
+
+	when( false ) waitfor( notcalled : m ); or when( false ) else {
+		sout | "else called";
+	}
+
+	sout | "Done";
+}
+
+int main() {
+	M m;
+	test(m);
+}
Index: tests/concurrency/waitfor/parse.cfa
===================================================================
--- tests/concurrency/waitfor/parse.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/parse.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,261 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// waitfor.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Aug 30 17:53:29 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Mon Apr 10 22:52:18 2023
+// Update Count     : 64
+// 
+
+#include <monitor.hfa>
+
+monitor M {};
+
+void notcalled( M & mutex m1, M & mutex m2 ) {
+	abort();
+}
+void or( M & mutex m ) {
+	abort();
+}
+void timeout( M & mutex m ) {
+	abort();
+}
+
+void fred( M & mutex m, M & mutex or, M & mutex timeout ) {
+	// test waitfor and when
+
+	waitfor( notcalled : m, m );
+
+	waitfor( notcalled : m, m ) {
+	}
+
+	waitfor( notcalled : m, m ) {
+	}
+
+	when( true ) waitfor( notcalled : m, m );
+
+	when( true ) waitfor( notcalled : m, m ) {
+	}
+
+	waitfor( notcalled : m, m );
+	or waitfor( notcalled : m, m );
+
+	when( true ) waitfor( notcalled : m, m );
+	or when( true ) waitfor( notcalled : m, m );
+
+	waitfor( notcalled : m, m ) {
+	} or waitfor( notcalled : m, m ) {
+	}
+
+	waitfor( notcalled : m, m ) {
+	} or waitfor( notcalled : m, m ) {
+	}
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or when( true ) waitfor( notcalled : m, m ) {
+	}
+
+	waitfor( notcalled : m, m );
+	or waitfor( notcalled : m, m ) {
+	}
+
+	when( true ) waitfor( notcalled : m, m );
+	or when( true ) waitfor( notcalled : m, m ) {
+	}
+
+	waitfor( notcalled : m, m ) {
+	} or waitfor( notcalled : m, m );
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or when( true ) waitfor( notcalled : m, m );
+
+	// test when, waitfor and else
+
+	waitfor( notcalled : m, m );
+	or else;
+
+	when( true ) waitfor( notcalled : m, m );
+	or else;
+
+	when( true ) waitfor( notcalled : m, m );
+	or else;
+
+	waitfor( notcalled : m, m ) {
+	} or else {
+	}
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or else {
+	}
+
+	waitfor( notcalled : m, m );
+	or else {
+	}
+
+	when( true ) waitfor( notcalled : m, m );
+	or else {
+	}
+
+	when( true ) waitfor( notcalled : m, m );
+	or else {
+	}
+
+	waitfor( notcalled : m, m ) {
+	} or else;
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or else;
+
+	waitfor( notcalled : m, m );
+	or when( true ) else;
+
+	when( true ) waitfor( notcalled : m, m );
+	or when( true ) else;
+
+	when( true ) waitfor( notcalled : m, m );
+	or when( true ) else;
+
+	waitfor( notcalled : m, m ) {
+	} or when( true ) else {
+	}
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or when( true ) else {
+	}
+
+	waitfor( notcalled : m, m );
+	or when( true ) else {
+	}
+
+	when( true ) waitfor( notcalled : m, m );
+	or when( true ) else {
+	}
+
+	when( true ) waitfor( notcalled : m, m );
+	or when( true ) else {
+	}
+
+	waitfor( notcalled : m, m ) {
+	} or when( true ) else;
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or when( true ) else;
+
+	// test when, waitfor and timeout
+
+	waitfor( notcalled : m, m );
+	or timeout( 3 );
+
+	waitfor( notcalled : m, m );
+	or timeout( 3 );
+
+	when( true ) waitfor( notcalled : m, m );
+	or timeout( 3 );
+
+	waitfor( notcalled : m, m ) {
+	} or timeout( 3 ) {
+	}
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or timeout( 3 ) {
+	}
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or timeout( 3 ) {
+	}
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or when ( true ) timeout( 3 ) {
+	}
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or when ( true ) timeout( 3 ) {
+	}
+
+	waitfor( notcalled : m, m );
+	or timeout( 3 ) {
+	}
+
+	when( true ) waitfor( notcalled : m, m );
+	or timeout( 3 ) {
+	}
+
+	when( true ) waitfor( notcalled : m, m );
+	or when( true ) timeout( 3 ) {
+	}
+
+	waitfor( notcalled : m, m ) {
+	} or timeout( 3 );
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or timeout( 3 );
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or when( true ) timeout( 3 );
+
+	// test when, waitfor, timeout and else
+
+	waitfor( notcalled : m, m ) {
+	} or timeout( 3 ) {
+	} or when( true ) else {}
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or timeout( 3 ) {
+	} or when( true ) else {}
+
+	waitfor( notcalled : m, m ) {
+	} or timeout( 3 ) {
+	} or when( true ) else {}
+
+	waitfor( notcalled : m, m ) {
+	} or when( true ) timeout( 3 ) {
+	} or when( true ) else {}
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or timeout( 3 ) {
+	} or when( true ) else {}
+
+	waitfor( notcalled : m, m ) {
+	} or when( true ) timeout( 3 ) {
+	} or when( true ) else {}
+
+	when( true ) waitfor( notcalled : m, m ) {
+	} or when( true ) timeout( 3 ) {
+	} or when( true ) else {}
+
+	// test quasi-keywords "or" and "timeout"
+
+	int or = 0, timeout = 0;
+	waitfor( timeout : timeout ) timeout += 1; or timeout( timeout );
+	waitfor( notcalled : or, or ) or += 1; or timeout( or ) 3;
+	when( or ) waitfor( or : m ) { 4; } or timeout( or ) or += 1;
+	when( timeout ) waitfor( notcalled : timeout, timeout ) or += 1; or else timeout += 1;
+	when( or + timeout ) waitfor( or : m ) 4; or when( or ) timeout( or ) 4; or when( or ) else timeout += 1;
+	when( 3 ) waitfor( or : or ) 3; or when( or ) waitfor( notcalled : or, or ) 4; or else 4;
+	when( timeout ) waitfor( or : timeout ) 3; or waitfor( notcalled : timeout, or ) 4; or when( or ) timeout( timeout ) 4;
+	when( 3 ) waitfor( or : timeout ) or += 1;
+	or waitfor( or : or ) timeout += 1;
+	or timeout( timeout ) or += 1;
+	or when( 3 ) else or += 1;
+
+	// test else selection
+
+	if ( or > timeout ) waitfor( or : or ) 3;
+	else waitfor( timeout : timeout ) 4;
+}
+
+//Dummy main
+int main( int argc, char const * argv[] ) {
+    #pragma GCC warning "Compiled"                      // force non-empty .expect file, NO TABS!!!
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa waitfor.cfa" //
+// End: //
Index: tests/concurrency/waitfor/recurse.cfa
===================================================================
--- tests/concurrency/waitfor/recurse.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/recurse.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,146 @@
+//----------------------------------------------------------------
+// Recursion test
+// Ensures that proper ordering occurs between the nested waitfors
+//-----------------------------------------------------------------
+
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+
+#include <stdbool.h>
+#include <time.h>
+
+static const unsigned long N = 5_000ul;
+
+static inline void rand_yield() { yield(random( 10 )); }
+
+enum state_t { FIRST, SECOND, THIRD, LAST, STOP };
+void shuffle(enum state_t * array)
+{
+	int i;
+	for (i = 0; i < 4; i++)
+	{
+		int j = random( 4 );
+		enum state_t t = array[j];
+		array[j] = array[i];
+		array[i] = t;
+	}
+}
+
+
+monitor global_t {
+	int counter;
+	volatile bool ready;
+	state_t actions[4];
+};
+
+void ?{} ( global_t & this ) {
+	this.counter = 0;
+	this.ready = false;
+	this.actions[0] = FIRST;
+	this.actions[1] = SECOND;
+	this.actions[2] = THIRD;
+	this.actions[3] = LAST;
+	shuffle( this.actions );
+}
+
+void ^?{} ( global_t & mutex this ) {}
+
+global_t global;
+
+state_t call4( global_t & mutex this, int idx ) {
+	sout | "Last";
+
+	rand_yield();
+	this.counter++;
+	this.ready = false;
+	shuffle( this.actions );
+
+	return this.counter < N ? (state_t)this.actions[idx] : (state_t)STOP;
+}
+
+state_t call3( global_t & mutex this, int idx ) {
+	sout | "3rd";
+
+	rand_yield();
+	waitfor( call4 : this );
+	rand_yield();
+
+	sout | "3rd";
+
+	return this.counter < N ? (state_t)this.actions[idx] : (state_t)STOP;
+}
+
+state_t call2( global_t & mutex this, int idx ) {
+	sout | "2nd";
+
+	rand_yield();
+	waitfor( call3 : this );
+	rand_yield();
+
+	sout | "2nd";
+
+	return this.counter < N ? (state_t)this.actions[idx] : (state_t)STOP;
+}
+
+state_t call1( global_t & mutex this, int idx ) {
+	this.ready = true;
+
+	sout | this.counter | "1st";
+
+	rand_yield();
+	waitfor( call2 : this );
+	rand_yield();
+
+	sout | "1st" | nl;
+
+	return this.counter < N ? (state_t)this.actions[idx] : (state_t)STOP;
+}
+
+thread waiter_t{
+	int     idx;
+	state_t state;
+};
+
+void ^?{} ( waiter_t & mutex this ) {}
+void ?{} ( waiter_t & this ) {}
+
+void ?{}( waiter_t & this, int idx, state_t state ) {
+	this.idx   = idx;
+	this.state = state;
+}
+
+
+void main( waiter_t & this ) {
+	while( this.state != STOP ) {
+		rand_yield();
+
+		switch( this.state ) {
+			case FIRST  :                                     this.state = call1( global, this.idx ); break;
+			case SECOND : while( !global.ready ) { yield(); } this.state = call2( global, this.idx ); break;
+			case THIRD  : while( !global.ready ) { yield(); } this.state = call3( global, this.idx ); break;
+			case LAST   : while( !global.ready ) { yield(); } this.state = call4( global, this.idx ); break;
+			case STOP   : serr | "This should not happen" | nl;
+		}
+	}
+}
+
+static waiter_t * volatile the_threads;
+
+int main() {
+	srandom( time(NULL) );
+	sout | nlOff;					// turn off auto newline
+	sout | "Starting" | nl;
+	{
+		waiter_t waiters[4] = {
+			{ 0, FIRST  },
+			{ 1, SECOND },
+			{ 2, THIRD  },
+			{ 3, LAST   }
+		};
+		the_threads = waiters;
+	}
+	sout | "Stopping" | nl;
+}
Index: tests/concurrency/waitfor/simple.cfa
===================================================================
--- tests/concurrency/waitfor/simple.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/simple.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,85 @@
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+
+#include <time.h>
+
+static const unsigned long N = 500ul;
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10`ms
+#endif
+
+Duration default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+monitor global_t {};
+
+global_t globalA;
+
+thread Acceptor {};
+thread Acceptee {};
+
+volatile bool done;
+
+//----------------------------------------------------------------------------------------------------
+// Acceptor
+void do_notify( global_t * mutex a );
+
+void do_wait( global_t * mutex a ) {
+	sout | "Waiting to accept";
+	yield( random( 10 ) );
+
+	sout | "Accepting";
+
+	__acceptable_t acceptable;
+	acceptable.func          = (fptr_t)do_notify;
+	acceptable.count         = 1;
+	acceptable.monitors      = &a;
+
+	__waitfor_internal( 1, &acceptable );
+
+	sout | "Accepted";
+	yield( random( 10 ) );
+}
+
+void main( Acceptor* this ) {
+	for( int i = 0; i < N; i++ ) {
+		do_wait( &globalA );
+		sout | i;
+	}
+
+	done = true;
+}
+
+//----------------------------------------------------------------------------------------------------
+// Acceptee
+void do_notify( global_t * mutex a ) {
+
+}
+
+void main( Acceptee* this ) {
+	while( !done ) {
+		yield( random( 10 ) );
+		do_notify( &globalA );
+		yield( random( 10 ) );
+	}
+}
+
+//----------------------------------------------------------------------------------------------------
+// Main
+int main(int argc, char* argv[]) {
+	done = false;
+	srandom( time( NULL ) );
+	printf("%p\n", &globalA);
+	sout | "Starting";
+	{
+		Acceptor r;
+		Acceptee e[13];
+
+	}
+	sout | "Done";
+}
Index: tests/concurrency/waitfor/statment.cfa
===================================================================
--- tests/concurrency/waitfor/statment.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/statment.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,136 @@
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <thread.hfa>
+
+#include <stdbool.h>
+
+monitor M {
+	int index;
+	int last_val;
+	int calls[7];
+};
+
+volatile bool start = false;
+
+void ?{}( M & this ) {
+	this.index = 0;
+	this.last_val = 0;
+	for( int i = 0; i < 7; i++ ) {
+		this.calls[i] = 100; //10_000;
+	}
+}
+
+void ^?{} ( M &  mutex this ) {}
+
+int get_index( M & mutex this ) {
+	this.index += 1;
+	return this.index;
+}
+
+bool call1( M & mutex this ) {
+	this.last_val = 1;
+	this.calls[0] -= 1;
+	return this.calls[0] > 0;
+}
+
+bool call2( M & mutex this ) {
+	this.last_val = 2;
+	this.calls[1] -= 1;
+	return this.calls[1] > 0;
+}
+
+bool call3( M & mutex this ) {
+	this.last_val = 3;
+	this.calls[2] -= 1;
+	return this.calls[2] > 0;
+}
+
+bool call4( M & mutex this ) {
+	this.last_val = 4;
+	this.calls[3] -= 1;
+	return this.calls[3] > 0;
+}
+
+bool call5( M & mutex this ) {
+	this.last_val = 5;
+	this.calls[4] -= 1;
+	return this.calls[4] > 0;
+}
+
+bool call6( M & mutex this ) {
+	this.last_val = 6;
+	this.calls[5] -= 1;
+	return this.calls[5] > 0;
+}
+
+bool call7( M & mutex this ) {
+	this.last_val = 7;
+	this.calls[6] -= 1;
+	return this.calls[6] > 0;
+}
+
+M m;
+thread caller{};
+
+bool call( int index ) {
+	switch( index ) {
+		case 1: return call1( m );
+		case 2: return call2( m );
+		case 3: return call3( m );
+		case 4: return call4( m );
+		case 5: return call5( m );
+		case 6: return call6( m );
+		case 7: return call7( m );
+		default :
+			serr | "Incorrect index" | index;
+			abort();
+	}
+}
+
+void main( caller & this ) {
+	int index = get_index( m );
+	while( !start ) yield();
+	while( call( index ) );
+}
+
+void do_wait( M & mutex this ) {
+	bool done = false;
+
+	start = true;
+
+	while( !done ) {
+		   waitfor( get_index : this );
+		or waitfor( call1 : this ) { sout | "Statement"; if( this.last_val != 1 ) { serr | "Incorrect index: expected" | 1 | "got" | this.last_val; } }
+		or waitfor( call2 : this ) { sout | "Statement"; if( this.last_val != 2 ) { serr | "Incorrect index: expected" | 2 | "got" | this.last_val; } }
+		or waitfor( call3 : this ) { sout | "Statement"; if( this.last_val != 3 ) { serr | "Incorrect index: expected" | 3 | "got" | this.last_val; } }
+		or waitfor( call4 : this ) { sout | "Statement"; if( this.last_val != 4 ) { serr | "Incorrect index: expected" | 4 | "got" | this.last_val; } }
+		or waitfor( call5 : this ) { sout | "Statement"; if( this.last_val != 5 ) { serr | "Incorrect index: expected" | 5 | "got" | this.last_val; } }
+		or waitfor( call6 : this ) { sout | "Statement"; if( this.last_val != 6 ) { serr | "Incorrect index: expected" | 6 | "got" | this.last_val; } }
+		or waitfor( call7 : this ) { sout | "Statement"; if( this.last_val != 7 ) { serr | "Incorrect index: expected" | 7 | "got" | this.last_val; } }
+
+		done = true;
+		for( int i = 0; i < 7; i++ ) {
+			if( this.calls[i] > 0 ) {
+				done = false;
+				break;
+			}
+		}
+	}
+}
+
+thread waiter{};
+
+void main( waiter & this ) {
+	do_wait( m );
+}
+
+int main() {
+	processor p[2];
+	sout | "Starting";
+	{
+		caller c[7];
+		waiter w;
+	}
+	sout | "Stopping";
+}
Index: tests/concurrency/waitfor/when.cfa
===================================================================
--- tests/concurrency/waitfor/when.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waitfor/when.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,91 @@
+//----------------------------------------------------------------
+// When test
+// Ensures that when clauses on waitfor are respected
+//-----------------------------------------------------------------
+
+#include <fstream.hfa>
+#include <kernel.hfa>
+#include <monitor.hfa>
+#include <stdlib.hfa>
+#include <thread.hfa>
+
+#include <stdbool.h>
+#include <time.h>
+
+static const unsigned long N = 4_998ul;
+
+static inline void rand_yield() { yield(random( 10 )); }
+
+monitor global_t {
+	int last_call;
+	bool done;
+};
+
+void ?{} ( global_t & this ) {
+	this.last_call = 6;
+	this.done = false;
+}
+
+void ^?{} ( global_t & mutex this ) {}
+
+global_t global;
+
+bool call1( global_t & mutex this ) { this.last_call = 1; return this.done; }
+bool call2( global_t & mutex this ) { this.last_call = 2; return this.done; }
+bool call3( global_t & mutex this ) { this.last_call = 3; return this.done; }
+bool call4( global_t & mutex this ) { this.last_call = 4; return this.done; }
+bool call5( global_t & mutex this ) { this.last_call = 5; return this.done; }
+bool call6( global_t & mutex this ) { this.last_call = 6; return this.done; }
+
+thread caller_t{};
+void main( caller_t & this ) {
+	while( true ) {
+		rand_yield();
+		if( call1( global ) ) return;
+		rand_yield();
+		if( call2( global ) ) return;
+		rand_yield();
+		if( call3( global ) ) return;
+		rand_yield();
+		if( call4( global ) ) return;
+		rand_yield();
+		if( call5( global ) ) return;
+		rand_yield();
+		if( call6( global ) ) return;
+	}
+}
+
+void arbiter( global_t & mutex this ) {
+	// There is a race at start where callers can get in before the arbiter.
+	// It doesn't really matter here so just restart the loop correctly and move on
+	this.last_call = 6;
+
+	for( int i = 0; i < N; i++ ) {
+		   when( this.last_call == 6 ) waitfor( call1 : this ) { if( this.last_call != 1) { serr | "Expected last_call to be 1 got" | this.last_call; } }
+		or when( this.last_call == 1 ) waitfor( call2 : this ) { if( this.last_call != 2) { serr | "Expected last_call to be 2 got" | this.last_call; } }
+		or when( this.last_call == 2 ) waitfor( call3 : this ) { if( this.last_call != 3) { serr | "Expected last_call to be 3 got" | this.last_call; } }
+		or when( this.last_call == 3 ) waitfor( call4 : this ) { if( this.last_call != 4) { serr | "Expected last_call to be 4 got" | this.last_call; } }
+		or when( this.last_call == 4 ) waitfor( call5 : this ) { if( this.last_call != 5) { serr | "Expected last_call to be 5 got" | this.last_call; } }
+		or when( this.last_call == 5 ) waitfor( call6 : this ) { if( this.last_call != 6) { serr | "Expected last_call to be 6 got" | this.last_call; } }
+
+		sout | this.last_call;
+	}
+
+	this.done = true;
+}
+
+thread arbiter_t{};
+void main( arbiter_t & this ) {
+	arbiter( global );
+}
+
+int main() {
+	srandom( time(NULL) );
+	sout | "Starting";
+	{
+		arbiter_t arbiter;
+		caller_t callers[7];
+
+	}
+	sout | "Stopping";
+}
Index: tests/concurrency/waituntil/.expect/all_types.txt
===================================================================
--- tests/concurrency/waituntil/.expect/all_types.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/.expect/all_types.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+start
+terminating churner
+waiting for empty channels
+sending sentinels
+joining servers
+done
Index: tests/concurrency/waituntil/.expect/basic_else.txt
===================================================================
--- tests/concurrency/waituntil/.expect/basic_else.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/.expect/basic_else.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5 @@
+else1
+A2
+else3
+A4
+A5
Index: tests/concurrency/waituntil/.expect/channel_close.txt
===================================================================
--- tests/concurrency/waituntil/.expect/channel_close.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/.expect/channel_close.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,10 @@
+start OR
+done sleep
+closing A
+closing B
+done
+start AND
+done sleep
+closing A
+closing B
+done
Index: tests/concurrency/waituntil/.expect/channel_zero_size.txt
===================================================================
--- tests/concurrency/waituntil/.expect/channel_zero_size.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/.expect/channel_zero_size.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,4 @@
+start
+sending sentinels
+joining servers
+done
Index: tests/concurrency/waituntil/.expect/channels.txt
===================================================================
--- tests/concurrency/waituntil/.expect/channels.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/.expect/channels.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+start
+terminating churner
+waiting for empty channels
+sending sentinels
+joining servers
+done
Index: tests/concurrency/waituntil/.expect/futures.txt
===================================================================
--- tests/concurrency/waituntil/.expect/futures.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/.expect/futures.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,2 @@
+start
+end
Index: tests/concurrency/waituntil/.expect/locks.txt
===================================================================
--- tests/concurrency/waituntil/.expect/locks.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/.expect/locks.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+start
+DONE
+DONE
+DONE
+start recursive acq test
+done
Index: tests/concurrency/waituntil/.expect/one_chan.txt
===================================================================
--- tests/concurrency/waituntil/.expect/one_chan.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/.expect/one_chan.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,5 @@
+start
+waiting for empty channels
+sending sentinels
+joining servers
+done
Index: tests/concurrency/waituntil/.expect/timeout.txt
===================================================================
--- tests/concurrency/waituntil/.expect/timeout.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/.expect/timeout.txt	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,6 @@
+timeout
+timeout
+else
+timeout
+timeout
+done
Index: tests/concurrency/waituntil/all_types.cfa
===================================================================
--- tests/concurrency/waituntil/all_types.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/all_types.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,119 @@
+#include <select.hfa>
+#include <thread.hfa>
+#include <channel.hfa>
+#include <locks.hfa>
+#include <future.hfa>
+#include <mutex_stmt.hfa>
+
+future( long long int ) F;
+const long long int val_to_deliver = 42;
+
+channel(long long int) A, C;
+
+multiple_acquisition_lock B;
+volatile long long int b_val = 0;
+volatile long long int old_b_val = -1;
+
+volatile bool done = false;
+long long int globalTotal = 0;
+
+void consume_b_val( long long int & myTotal ) {
+    if ( b_val != old_b_val ) {
+        myTotal += b_val;
+        old_b_val++;
+    }
+}
+
+void produce_b_val( long long int & myTotal ) {
+    if ( b_val == old_b_val ) {
+        myTotal += b_val;
+        b_val++;
+    }
+}
+
+thread Server1 {};
+void main( Server1 & this ) {
+    long long int a, b, c, i = 0, myTotal = 0;
+    for( ;;i++ ) {
+        when( i % 2 == 0 ) waituntil( a << A ) { myTotal += a; }
+        or when( i % 4 < 2 ) waituntil( B ) { consume_b_val( myTotal ); }
+        or waituntil( c << C ) { if ( c == -1 ) break; myTotal += c; }
+        or when( i % 3 ) waituntil( timeout( 1`ms ) ) {}
+        or when( i % 8 < 4 ) else {}
+    }
+    __atomic_fetch_add( &globalTotal, myTotal, __ATOMIC_SEQ_CST );
+}
+
+thread Drainer {}; // ensures that the changing when states of Server1 don't result in a deadlock
+void main( Drainer & this ) {
+    long long int a, b, c, myTotal = 0;
+    for( ;; ) {
+        waituntil( F ) { myTotal += get(F); reset( F ); }
+        or waituntil( a << A ) { myTotal += a; }
+        or waituntil( c << C ) { if ( c == -1 ) break; myTotal += c; }
+        or waituntil( B ) { consume_b_val( myTotal ); }
+        or waituntil( timeout( 100`ns ) ) { }
+    }
+    __atomic_fetch_add( &globalTotal, myTotal, __ATOMIC_SEQ_CST );
+}
+
+thread Churner {}; // performs non-waituntil try insert/remove operations to add churn/interference
+void main( Churner & this ) {
+    long long int out, myTotal = 0;
+    bool success;
+    while( !done ) {
+        try_insert( A, 0 );
+        if ( try_lock( B ) ) {
+            consume_b_val( myTotal );
+            unlock( B );
+        }
+        mutex( B ) { consume_b_val( myTotal ); }
+        try_insert( C, 0 );
+        [out, success] = try_remove( A );
+        if ( success ) myTotal += out;
+        [out, success] = try_remove( C );
+        if ( success ) myTotal += out;
+    }
+    __atomic_fetch_add( &globalTotal, myTotal, __ATOMIC_SEQ_CST );
+}
+
+size_t numtimes = 5000;
+size_t numServers = 3;
+int main( int argc, char * argv[] ) {
+    if ( argc == 2 )
+        numtimes = atoi( argv[1] );
+
+    processor p[numServers + 2];
+    A{5};
+    C{5};
+
+    long long int total = 0;
+    printf("start\n");
+    {
+        Server1 s[numServers];
+        Drainer d;
+        {
+            Churner c;
+            for( long long int j = 0; j < numtimes; j++ ) {
+                when( j % 2 == 0 ) waituntil( j >> A ) { total += j; }
+                or when( j % 4 < 2 ) waituntil( B ) { produce_b_val( total ); }
+                and when( j % 8 < 4 ) waituntil( j >> C ) { total += j; }
+                and waituntil( timeout( 1`ns ) ) {}
+                if ( j == numtimes / 2 )
+                    fulfil( F, val_to_deliver );
+            }
+            done = true;
+            printf("terminating churner\n");
+        }
+        printf("waiting for empty channels\n");
+        while( get_count( A ) > 0 || get_count( C ) > 0 ) { }
+        printf("sending sentinels\n");
+        for ( i; numServers + 1 ) insert( C, -1 );
+        printf("joining servers\n");
+    }
+    if ( b_val == old_b_val ) total += b_val;       // handle if last value wasn't produced
+    if ( !available( F ) ) total += val_to_deliver; // handle if future was consumed
+    if ( total != globalTotal ) 
+        printf("CHECKSUM MISMATCH!! Main thread got %lld, server sum is %lld\n", total, globalTotal);
+    printf("done\n");
+}
Index: tests/concurrency/waituntil/basic_else.cfa
===================================================================
--- tests/concurrency/waituntil/basic_else.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/basic_else.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,17 @@
+#include <select.hfa>
+#include <future.hfa>
+
+future(int) A, B, C;
+
+int main() {
+    waituntil( A ) { printf("A1\n"); } or else { printf("else1\n"); }
+    fulfil( A, 1 );
+    waituntil( A ) { printf("A2\n"); } or else { printf("else2\n"); }
+    reset( A );
+    waituntil( A ) { printf("A3\n"); } or when(true) else { printf("else3\n"); }
+    fulfil( A, 1 );
+    waituntil( A ) { printf("A4\n"); } or when(false) else { printf("else4\n"); }
+    reset( A );
+    fulfil( A, 1 );
+    waituntil( A ) { printf("A5\n"); }
+}
Index: tests/concurrency/waituntil/channel_close.cfa
===================================================================
--- tests/concurrency/waituntil/channel_close.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/channel_close.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,94 @@
+#include <select.hfa>
+#include <thread.hfa>
+#include <channel.hfa>
+#include <time.hfa>
+
+channel(long long int) A, B;
+
+volatile long long int inserts = 0;
+volatile long long int removes = 0;
+
+thread Producer {};
+void main( Producer & this ) {
+    try {
+        for( long long int i = 0;;i++ ) {
+            waituntil( (i >> A) ) { inserts++; }
+            and waituntil( (i >> B) ) { inserts++; }
+        }
+    } catch ( channel_closed * e ) {} 
+}
+
+bool useAnd = false;
+thread Consumer {}; // ensures that the changing when states of Server1 don't result in a deadlock
+void main( Consumer & this ) {
+    long long int in, in2, A_removes = 0, B_removes = 0;
+    try {
+        for( ;; ) {
+            if ( useAnd ) {
+                waituntil( (in << A) ) { assert( A_removes == in ); A_removes++; removes++; }
+                and waituntil( (in2 << B) ) { assert( B_removes == in2 ); B_removes++; removes++; }
+                continue;
+            }
+            waituntil( (in << A) ) { assert( A_removes == in ); A_removes++; removes++; }
+            or waituntil( (in2 << B) ) { assert( B_removes == in2 ); B_removes++; removes++; }
+        }
+    } catchResume ( channel_closed * e ) {} // continue to remove until would block
+    catch ( channel_closed * e ) {} 
+    try {
+        for( ;; )
+            waituntil( (in << A) ) { assert( A_removes == in ); A_removes++; removes++; }
+    } catchResume ( channel_closed * e ) {} // continue to remove until would block
+    catch ( channel_closed * e ) {} 
+    try {
+        for( ;; )
+            waituntil( (in << B) ) { assert( B_removes == in ); B_removes++; removes++; }
+    } catchResume ( channel_closed * e ) {} // continue to remove until would block
+    catch ( channel_closed * e ) {} 
+}
+
+
+size_t time = 5;
+int main( int argc, char * argv[] ) {
+    if ( argc == 2 )
+        time = atoi( argv[1] );
+
+    processor p[2];
+    A{5};
+    B{5};
+
+    printf("start OR\n");
+    {
+        Producer p;
+        Consumer c;
+        sleep(time`s);
+        printf("done sleep\n");
+        printf("closing A\n");
+        close(A);
+        printf("closing B\n");
+        close(B);
+    }
+    if ( inserts != removes ) 
+        printf("CHECKSUM MISMATCH!! Producer got: %lld, Consumer got: %lld\n", inserts, removes);
+    printf("done\n");
+    ^A{};
+    ^B{};
+
+    inserts = 0;
+    removes = 0;
+    A{5};
+    B{5};
+    printf("start AND\n");
+    {
+        Producer p;
+        Consumer c;
+        sleep(time`s);
+        printf("done sleep\n");
+        printf("closing A\n");
+        close(A);
+        printf("closing B\n");
+        close(B);
+    }
+    if ( inserts != removes ) 
+        printf("CHECKSUM MISMATCH!! Producer got: %lld, Consumer got: %lld\n", inserts, removes);
+    printf("done\n");
+}
Index: tests/concurrency/waituntil/channel_zero_size.cfa
===================================================================
--- tests/concurrency/waituntil/channel_zero_size.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/channel_zero_size.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,50 @@
+#include <select.hfa>
+#include <thread.hfa>
+#include <channel.hfa>
+
+channel(long long int) A, B, C;
+
+volatile bool done = false;
+long long int globalTotal = 0;
+
+thread Server1 {};
+void main( Server1 & this ) {
+    long long int a, b, c, i = 0, myTotal = 0;
+    for( ;;i++ ) {
+        // printf("loop S\n");
+        waituntil( a << A ) { myTotal += a; }
+        or waituntil( b << B ) { myTotal += b; }
+        or waituntil( c << C ) { if ( c == -1 ) break; myTotal += c; }
+    }
+    __atomic_fetch_add( &globalTotal, myTotal, __ATOMIC_SEQ_CST );
+}
+
+size_t numtimes = 100000;
+size_t numServers = 1;
+int main( int argc, char * argv[] ) {
+    if ( argc == 2 )
+        numtimes = atoi( argv[1] );
+
+    processor p[numServers];
+    A{0};
+    B{0};
+    C{0};
+
+    long long int total = 0;
+    printf("start\n");
+    {
+        Server1 s[numServers];
+        for( long long int j = 0; j < numtimes; j++ ) {
+            // printf("loop\n");
+            waituntil( j >> A ) { total += j; }
+            or waituntil( j >> B ) { total += j; }
+            or waituntil( j >> C ) { total += j; }
+        }
+        printf("sending sentinels\n");
+        for ( i; numServers ) insert( C, -1 );
+        printf("joining servers\n");
+    }
+    if ( total != globalTotal ) 
+        printf("CHECKSUM MISMATCH!! Main thread got %lld, server sum is %lld\n", total, globalTotal);
+    printf("done\n");
+}
Index: tests/concurrency/waituntil/channels.cfa
===================================================================
--- tests/concurrency/waituntil/channels.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/channels.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,87 @@
+#include <select.hfa>
+#include <thread.hfa>
+#include <channel.hfa>
+
+channel(long long int) A, B, C;
+
+volatile bool done = false;
+long long int globalTotal = 0;
+
+thread Server1 {};
+void main( Server1 & this ) {
+    long long int a, b, c, i = 0, myTotal = 0;
+    for( ;;i++ ) {
+        when( i % 2 == 0 ) waituntil( a << A ) { myTotal += a; }
+        or when( i % 4 < 2 ) waituntil( b << B ) { myTotal += b; }
+        or waituntil( c << C ) { if ( c == -1 ) break; myTotal += c; }
+        or when( i % 8 < 4 ) else {}
+    }
+    __atomic_fetch_add( &globalTotal, myTotal, __ATOMIC_SEQ_CST );
+}
+
+thread Drainer {}; // ensures that the changing when states of Server1 don't result in a deadlock
+void main( Drainer & this ) {
+    long long int a, b, c, myTotal = 0;
+    for( ;; ) {
+        waituntil( a << A ) { myTotal += a; }
+        or waituntil( b << B ) { myTotal += b; }
+        or waituntil( c << C ) { if ( c == -1 ) break; myTotal += c; }
+        or else {}
+    }
+    __atomic_fetch_add( &globalTotal, myTotal, __ATOMIC_SEQ_CST );
+}
+
+thread Churner {}; // performs non-waituntil try insert/remove operations to add churn/interference
+void main( Churner & this ) {
+    long long int out, myTotal = 0;
+    bool success;
+    while( !done ) {
+        try_insert( A, 0 );
+        try_insert( B, 0 );
+        try_insert( C, 0 );
+        [out, success] = try_remove( A );
+        if ( success ) myTotal += out;
+        [out, success] = try_remove( B );
+        if ( success ) myTotal += out;
+        [out, success] = try_remove( C );
+        if ( success ) myTotal += out;
+    }
+    __atomic_fetch_add( &globalTotal, myTotal, __ATOMIC_SEQ_CST );
+}
+
+size_t numtimes = 100000;
+size_t numServers = 3;
+int main( int argc, char * argv[] ) {
+    if ( argc == 2 )
+        numtimes = atoi( argv[1] );
+
+    processor p[numServers + 2];
+    A{5};
+    B{5};
+    C{5};
+
+    long long int total = 0;
+    printf("start\n");
+    {
+        Server1 s[numServers];
+        Drainer d;
+        {
+            Churner c;
+            for( long long int j = 0; j < numtimes; j++ ) {
+                when( j % 2 == 0 ) waituntil( j >> A ) { total += j; }
+                or when( j % 4 < 2 ) waituntil( j >> B ) { total += j; }
+                and when( j % 8 < 4 ) waituntil( j >> C ) { total += j; }
+            }
+            done = true;
+            printf("terminating churner\n");
+        }
+        printf("waiting for empty channels\n");
+        while( get_count( A ) > 0 || get_count( B ) > 0 || get_count( C ) > 0 ) { }
+        printf("sending sentinels\n");
+        for ( i; numServers + 1 ) insert( C, -1 );
+        printf("joining servers\n");
+    }
+    if ( total != globalTotal ) 
+        printf("CHECKSUM MISMATCH!! Main thread got %lld, server sum is %lld\n", total, globalTotal);
+    printf("done\n");
+}
Index: tests/concurrency/waituntil/futures.cfa
===================================================================
--- tests/concurrency/waituntil/futures.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/futures.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,61 @@
+#include <select.hfa>
+#include <future.hfa>
+#include <thread.hfa>
+
+future(int) A, B, C;
+
+semaphore s{0};
+
+thread Server1 {};
+void main( Server1 & this ) {
+    fulfil(B, 3);
+    P( s );
+    fulfil(A, 2);
+    fulfil(C, 4);
+}
+
+thread Server2 {};
+void main( Server2 & this ) {
+    fulfil(B, 6);
+    fulfil(A, 5);
+    fulfil(C, 7);
+}
+
+int main() {
+    processor proc[1];
+    printf("start\n"); // currently not working
+    {
+        Server1 s1;
+        waituntil( A ) { get(A); }
+        or waituntil( B ) { get(B); V( s ); }
+        and waituntil( C ) { get(C); }
+    }
+    reset(A);
+    reset(B);
+    reset(C);
+    for ( int i = 0; i < 8; i++ ) {
+        {
+            Server2 s2;
+            when( i % 2 == 0 ) waituntil( A ) { get(A); }
+            or when( i % 4 < 2 ) waituntil( B ) { get(B); }
+            and when( i < 4 ) waituntil( C ) { get(C); }
+        }
+        reset(A);
+        reset(B);
+        reset(C);
+        {
+            Server2 s2;
+            (
+                when( i % 2 == 0 ) waituntil( A ) { get(A); }
+                or when( i % 4 < 2 ) waituntil( B ) { get(B); }
+            )
+            and when( i < 4 ) waituntil( C ) { get(C); }
+        }
+        reset(A);
+        reset(B);
+        reset(C);
+    }
+
+    printf("end\n");
+    return 0;
+}
Index: tests/concurrency/waituntil/locks.cfa
===================================================================
--- tests/concurrency/waituntil/locks.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/locks.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,73 @@
+#include <select.hfa>
+#include <thread.hfa>
+#include <locks.hfa>
+#include <mutex_stmt.hfa>
+
+multiple_acquisition_lock A;
+simple_owner_lock B;
+simple_owner_lock C;
+
+volatile bool done = false;
+
+thread Server1 {};
+void main( Server1 & this ) {
+    while( !done ) {
+        lock(A);
+        unlock(A);
+        lock(B);
+        unlock(B);
+        lock(C);
+        unlock(C);
+        mutex(A,B,C) {};
+    }
+    mutex(sout) sout | "DONE";
+}
+
+size_t numtimes = 10000;
+int main() {
+    processor p[3];
+    int a = 0, b = 0, c = 0;
+    printf("start\n");
+    {
+        Server1 s[3];
+        for( j; numtimes ) {
+            for ( int i = 0; i < 8; i++ ) {
+
+                when( i % 2 == 0 ) waituntil( A ) { a++; }
+                or when( i % 4 < 2 ) waituntil( B ) { b++; }
+                and when( i < 4 ) waituntil( C ) { c++; }
+
+                (
+                    when( i % 2 == 0 ) waituntil( A ) { a++; }
+                    or when( i % 4 < 2 ) waituntil( B ) { b++; }
+                )
+                and when( i < 4 ) waituntil( C ) { c++; }
+                
+                when( i % 2 == 0 ) waituntil( A ) { a++; }
+                and when( i % 4 < 2 ) waituntil( B ) { b++; }
+                and when( i < 4 ) waituntil( C ) { c++; }
+
+                when( i % 2 == 0 ) waituntil( A ) { a++; }
+                or when( i % 4 < 2 ) waituntil( B ) { b++; }
+                or when( i < 4 ) waituntil( C ) { c++; }
+            }
+        }
+        done = true;
+    }
+    printf("start recursive acq test\n");
+    {
+        for( j; 10 ) {
+            lock( A );
+            lock( B );
+        }
+        for ( j; 10 ) {
+            waituntil( A ) { a++; } or waituntil( B ) { b++; }
+            waituntil( B ) { b++; } or waituntil( A ) { a++; }
+        }
+        for( j; 10 ) {
+            unlock( A );
+            unlock( B );
+        }
+    }
+    printf("done\n");
+}
Index: tests/concurrency/waituntil/one_chan.cfa
===================================================================
--- tests/concurrency/waituntil/one_chan.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/one_chan.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,44 @@
+#include <select.hfa>
+#include <thread.hfa>
+#include <channel.hfa>
+
+channel(long long int) C;
+
+volatile bool done = false;
+long long int globalTotal = 0;
+
+thread Server1 {};
+void main( Server1 & this ) {
+    long long int c, i = 0, myTotal = 0;
+    for( ;;i++ ) {
+        waituntil( c << C ) { if ( c == -1 ) break; myTotal += c; }
+    }
+    __atomic_fetch_add( &globalTotal, myTotal, __ATOMIC_SEQ_CST );
+}
+
+size_t numtimes = 100000;
+size_t numServers = 1;
+int main( int argc, char * argv[] ) {
+    if ( argc == 2 )
+        numtimes = atoi( argv[1] );
+
+    processor p[numServers];
+    C{5};
+
+    long long int total = 0;
+    printf("start\n");
+    {
+        Server1 s[numServers];
+        for( long long int j = 0; j < numtimes; j++ ) {
+            waituntil( j >> C ) { total += j; }
+        }
+        printf("waiting for empty channels\n");
+        printf("sending sentinels\n");
+        for ( i; numServers ) insert( C, -1 );
+        printf("joining servers\n");
+    }
+    assert(get_count( C ) == 0);
+    if ( total != globalTotal ) 
+        printf("CHECKSUM MISMATCH!! Main thread got %lld, server sum is %lld\n", total, globalTotal);
+    printf("done\n");
+}
Index: tests/concurrency/waituntil/timeout.cfa
===================================================================
--- tests/concurrency/waituntil/timeout.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
+++ tests/concurrency/waituntil/timeout.cfa	(revision c26bea2aa0f87b4b070349c5801adc32fb0d4cf9)
@@ -0,0 +1,18 @@
+#include <time.hfa>
+#include <alarm.hfa>
+#include <select.hfa>
+#include <stdbool.h>
+#include <stdio.h>
+
+int main() {
+    waituntil( sleep( 1`ms ) ) { printf("timeout\n"); }
+    waituntil( timeout( 1`s ) ) { printf("timeout\n"); } or waituntil( timeout( 2`s ) ) { printf("timeout\n"); }
+    waituntil( timeout( 100`s ) ) { printf("timeout 1\n"); } or else { printf("else\n"); }
+    waituntil( timeout( 1`ns ) ) { printf("timeout\n"); } and waituntil( timeout( 2`s ) ) { printf("timeout\n"); }
+    int count = 0;
+    for ( i; 1000 )
+        waituntil( timeout( 1`ns ) ) { count++; } or else { count++; }
+
+    assert( count == 1000 );
+    printf("done\n");
+}
