<?xml version="1.0" encoding="UTF-8"?>

<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<document>
  <properties>
    <author email="dims@apache.org">Davanum Srinivas</author>
    <title>Special Thanks!</title>
  </properties> 
  
  <body>

    <section name="Special Thanks to ...">
        <table>
          <tr>
            <th>Company</th>
            <th>Donation Type</th>
          </tr>
          <tr>
            <td><A href="http://www.jetbrains.com/"><img height="51" width="200" src="http://www.jetbrains.com/img/logos/logo_intellij_idea.gif"/></A></td>
            <td>Licenses for IDEA</td>
          </tr>
          <tr>
            <td><A href="http://www.yourkit.com/"><img height="51" width="200" src="http://db.apache.org/ojb/images/yjp.gif"/></A></td>
            <td>Licenses for YourKit</td>
          </tr>
          <tr>
            <td><A href="http://www.ej-technologies.com/products/jprofiler/overview.html"><img height="51" width="200" src="http://www.ej-technologies.com/images/products/logo_jprofiler01.gif"/></A></td>
            <td>Licenses for JProfiler</td>
          </tr>
<tr>
            <td><A href="http://www.altova.com/"><img height="51" width="200" src="http://www.altova.com/images/logos/Altova_Logo_CMYK.gif"/></A></td>
            <td>Licenses for Altova XMLSpy</td>
          </tr>
        </table>
    </section>
  </body>
</document>
