=========================================================================
==  NOTICE file corresponding to section 4(d) of the Apache License,   ==
==  Version 2.0, in this case for the Apache Abdera distribution.      ==
=========================================================================

Apache Abdera
Copyright 2006-2007 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

Portions of Abdera were orginally developed by
International Business Machines Corporation and are
licensed to the Apache Software Foundation under the
"Software Grant and Corporate Contribution License Agreement",
informally known as the "Abdera CLA".

This software's test suite contains data files derived from the
Universal Feed Parser, Copyright (c) 2002-2005, Mark Pilgrim.

This software's extensions module contains a JSON writer for Atom XML
that utilizes a JSON parser, Copyright (c) 2002, json.org. The code was 
licensed using Apache License by the author Douglas Crockford and made 
available at http://json.org/java/apache.zip We have included portions 
of the code in the extensions module.

=========================================================================
== Incubation Disclaimer                                               ==
=========================================================================

Abdera is an effort undergoing incubation at the Apache Software
Foundation (ASF), sponsored by the Apache Incubator PMC. Incubation is
required of all newly accepted projects until a further review
indicates that the infrastructure, communications, and decision making
process have stabilized in a manner consistent with other successful
ASF projects.  While incubation status is not necessarily a reflection
of the completeness or stability of the code, it does indicate that
the project has yet to be fully endorsed by the ASF.
