The following volunteers have contributed code, documentation, testing and/or
support to Apache Flex Squiggly.

Apache Flex Squiggly 1.1
------------------------
Alex Harui, Chris Martin, Christofer Dutz, Eliezer Reis, Justin Mclean,
Kevin Atkinson, Mark Kessler, Piotr Zarzycki

Apache Flex Squiggly 1.0
------------------------
Alex Harui, Justin Mclean, Kevin Atkinson, Mark Kessler, OmPrakash Muppirala,
Peter Ent

If you've missing from this list please get in touch and you'll appear in future
versions of this document.
