refactored the sieve example to use a new function source()