Apache Sling MIME type mapping support
Copyright 2008-2009 The Apache Software Foundation

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

This product includes software developed by
Ludo van den Boom (http://blog.cubicphuse.nl/)
Copyright (c) 2009 Ludo van den Boom
Licensed under the MIT License

Apache Sling is based on source code originally developed 
by Day Software (http://www.day.com/).