This code may be duplicated in whole or in part provided that [1] there is no commercial gain involved in the duplication, and [2] that this copyright notice is preserved on all copies. Any other duplication requires written notice of the author.