## OpenMeetings
## author swagner
## 11.05.2007
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<!--
Copyright 1999-2004 The Apache Software Foundation
Licensed 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.
-->
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' />
</head>
<body>
<H1>$APP_NAME - Installation Complete!</h1>
<h2><a href="/$APP_ROOT/">Enter the Application</a></h2>
<br/>
<br/>
If your Red5-Server runs on a different Port or on a different domain<br/>
<a href="config.xml">alter the config values of the client</a>
<br/><br/><br/>

<b> <span style="font-size:1.4em">Mailing list</span></b><br/><br/>

<span style="font-size:1.3em"><a href="http://incubator.apache.org/openmeetings/mail-lists.html" target="_blank">http://incubator.apache.org/openmeetings/mail-lists.html</a></span><br/><br/>


<b> <span style="font-size:1.4em">There are some companies that also offer commercial support for Apache OpenMeetings:</span></b><br/><br/>

<span style="font-size:1.3em"><a href="http://incubator.apache.org/openmeetings/commercial-support.html" target="_blank">http://incubator.apache.org/openmeetings/commercial-support.html</a></span><br/>


</body>
</html>
