<?xml version="1.0" encoding="iso-8859-1"?>
<!-- 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 xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
	<properties>
	    <title>Mailing Lists</title>
	</properties>
	<body>
		<section name="Mailing Lists">
			<subsection name="Bigtop User List"></subsection>
			<p>
				If you use Bigtop, please subscribe to the Bigtop user mailing list.
				<br />
				The Bigtop user mailing list is:
				<a href="mailto:user@bigtop.apache.org">user@bigtop.apache.org</a>
				.
			</p>
			<ul>
				<li>
					<a href="mailto:user-subscribe@bigtop.apache.org">Subscribe to List</a>
				</li>
				<li>
					<a href="mailto:user-unsubscribe@bigtop.apache.org">Unsubscribe from List</a>
				</li>
				<li>
					<a href="http://mail-archives.apache.org/mod_mbox/bigtop-user/">Browse archives</a>
				</li>
			</ul>

			<subsection name="Bigtop Developer List"></subsection>
			<p>
				If you'd like to contribute to Bigtop, please subscribe to the Bigtop developer mailing list.
				<br />
				The Bigtop developer mailing list is:
				<a href="mailto:dev@bigtop.apache.org">dev@bigtop.apache.org</a>
				.
			</p>
			<ul>
				<li>
					<a href="mailto:dev-subscribe@bigtop.apache.org">Subscribe to List</a>
				</li>
				<li>
					<a href="mailto:dev-unsubscribe@bigtop.apache.org">Unsubscribe from List</a>
				</li>
				<li>
					<a href="http://mail-archives.apache.org/mod_mbox/bigtop-dev/">Browse archives</a>
				</li>
			</ul>

			<subsection name="Bigtop Commit List"></subsection>
			<p>
				If you'd like to see changes made in Bigtop's version control system, please subscribe
				to the Bigtop commit mailing list.
				<br />
				The Bigtop commit mailing list is:
				<a href="mailto:commits@bigtop.apache.org">commits@bigtop.apache.org</a>
				.
			</p>
			<ul>
				<li>
					<a href="mailto:commits-subscribe@bigtop.apache.org">Subscribe to List</a>
				</li>
				<li>
					<a href="mailto:commits-unsubscribe@bigtop.apache.org">Unsubscribe from List</a>
				</li>
				<li>
					<a href="http://mail-archives.apache.org/mod_mbox/bigtop-commits/">Browse archives</a>
				</li>
			</ul>

			<subsection name="Bigtop CI List"></subsection>
			<p>
				If you'd like to see notifications from the Bigtop build system (CI), please subscribe
				to the Bigtop CI mailing list.
				<br />
				The Bigtop CI mailing list is:
				<a href="mailto:ci@bigtop.apache.org">ci@bigtop.apache.org</a>
				.
			</p>
			<ul>
				<li>
					<a href="mailto:ci-subscribe@bigtop.apache.org">Subscribe to List</a>
				</li>
				<li>
					<a href="mailto:ci-unsubscribe@bigtop.apache.org">Unsubscribe from List</a>
				</li>
				<li>
					<a href="http://mail-archives.apache.org/mod_mbox/bigtop-ci/">Browse archives</a>
				</li>
			</ul>

			<subsection name="Bigtop Announcements List"></subsection>
			<p>
				If you'd like to receive important announcement notifications (e.g. releases, etc.) from the Bigtop
				community, please subscribe to the Bigtop Announcements mailing list. Low traffic.
				<br />
				The Bigtop announcements mailing list is:
				<a href="mailto:announce@bigtop.apache.org">announce@bigtop.apache.org</a>
				.
			</p>
			<ul>
				<li>
					<a href="mailto:announce-subscribe@bigtop.apache.org">Subscribe to List</a>
				</li>
				<li>
					<a href="mailto:announce-unsubscribe@bigtop.apache.org">Unsubscribe from List</a>
				</li>
				<li>
					<a href="http://mail-archives.apache.org/mod_mbox/bigtop-announce/">Browse archives</a>
				</li>
			</ul>

      <subsection name="Bigtop Issues List"></subsection>
      <p>
        If you'd like to keep track of Bigtop issue updates, please subscribe to the issues list.
        <br />
        The Bigtop issues mailing list is:
        <a href="mailto:issues@bigtop.apache.org">issues@bigtop.apache.org</a>
        .
      </p>
      <ul>
        <li>
          <a href="mailto:issues-subscribe@bigtop.apache.org">Subscribe to List</a>
        </li>
        <li>
          <a href="mailto:issues-unsubscribe@bigtop.apache.org">Unsubscribe from List</a>
        </li>
        <li>
          <a href="http://mail-archives.apache.org/mod_mbox/bigtop-issues/">Browse archives</a>
        </li>
      </ul>
		</section>
	</body>
</document>