blob: 738b79b7db39e3b5477240f80ab42c131d7a2317 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>OptimizerUtils.OptimizationLevel (SystemDS 2.1.0-SNAPSHOT API)</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="OptimizerUtils.OptimizationLevel (SystemDS 2.1.0-SNAPSHOT API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/OptimizerUtils.OptimizationLevel.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/sysds/hops/OptimizerUtils.html" title="class in org.apache.sysds.hops"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/apache/sysds/hops/ParameterizedBuiltinOp.html" title="class in org.apache.sysds.hops"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" target="_top">Frames</a></li>
<li><a href="OptimizerUtils.OptimizationLevel.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#enum.constant.summary">Enum Constants</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#enum.constant.detail">Enum Constants</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.sysds.hops</div>
<h2 title="Enum OptimizerUtils.OptimizationLevel" class="title">Enum OptimizerUtils.OptimizationLevel</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">java.lang.Enum</a>&lt;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a>&gt;</li>
<li>
<ul class="inheritance">
<li>org.apache.sysds.hops.OptimizerUtils.OptimizationLevel</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a>&gt;</dd>
</dl>
<dl>
<dt>Enclosing class:</dt>
<dd><a href="../../../../org/apache/sysds/hops/OptimizerUtils.html" title="class in org.apache.sysds.hops">OptimizerUtils</a></dd>
</dl>
<hr>
<br>
<pre>public static enum <span class="typeNameLabel">OptimizerUtils.OptimizationLevel</span>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a>&gt;</pre>
<div class="block">Optimization Types for Compilation
O0 STATIC - Decisions for scheduling operations on CP/MR are based on
predefined set of rules, which check if the dimensions are below a
fixed/static threshold (OLD Method of choosing between CP and MR).
The optimization scope is LOCAL, i.e., per statement block.
Advanced rewrites like constant folding, common subexpression elimination,
or inter procedural analysis are NOT applied.
O1 MEMORY_BASED - Every operation is scheduled on CP or MR, solely
based on the amount of memory required to perform that operation.
It does NOT take the execution time into account.
The optimization scope is LOCAL, i.e., per statement block.
Advanced rewrites like constant folding, common subexpression elimination,
or inter procedural analysis are NOT applied.
O2 MEMORY_BASED - Every operation is scheduled on CP or MR, solely
based on the amount of memory required to perform that operation.
It does NOT take the execution time into account.
The optimization scope is LOCAL, i.e., per statement block.
All advanced rewrites are applied. This is the default optimization
level of SystemDS.
O3 GLOBAL TIME_MEMORY_BASED - Operation scheduling on CP or MR as well as
many other rewrites of data flow properties such as block size, partitioning,
replication, vectorization, etc are done with the optimization objective of
minimizing execution time under hard memory constraints per operation and
execution context. The optimization scope if GLOBAL, i.e., program-wide.
All advanced rewrites are applied. This optimization level requires more
optimization time but has higher optimization potential.
O4 DEBUG MODE - All optimizations, global and local, which interfere with
breakpoints are NOT applied. This optimization level is REQUIRED for the
compiler running in debug mode.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== ENUM CONSTANT SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="enum.constant.summary">
<!-- -->
</a>
<h3>Enum Constant Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Enum Constant Summary table, listing enum constants, and an explanation">
<caption><span>Enum Constants</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Enum Constant and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html#O0_LOCAL_STATIC">O0_LOCAL_STATIC</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html#O1_LOCAL_MEMORY_MIN">O1_LOCAL_MEMORY_MIN</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html#O2_LOCAL_MEMORY_DEFAULT">O2_LOCAL_MEMORY_DEFAULT</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html#O3_LOCAL_RESOURCE_TIME_MEMORY">O3_LOCAL_RESOURCE_TIME_MEMORY</a></span></code>&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html#O4_GLOBAL_TIME_MEMORY">O4_GLOBAL_TIME_MEMORY</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html#O5_DEBUG_MODE">O5_DEBUG_MODE</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static <a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html#valueOf-java.lang.String-">valueOf</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
<div class="block">Returns the enum constant of this type with the specified name.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static <a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a>[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html#values--">values</a></span>()</code>
<div class="block">Returns an array containing the constants of this enum type, in
the order they are declared.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Enum">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#compareTo-E-" title="class or interface in java.lang">compareTo</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#getDeclaringClass--" title="class or interface in java.lang">getDeclaringClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#name--" title="class or interface in java.lang">name</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#ordinal--" title="class or interface in java.lang">ordinal</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#valueOf-java.lang.Class-java.lang.String-" title="class or interface in java.lang">valueOf</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ ENUM CONSTANT DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="enum.constant.detail">
<!-- -->
</a>
<h3>Enum Constant Detail</h3>
<a name="O0_LOCAL_STATIC">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>O0_LOCAL_STATIC</h4>
<pre>public static final&nbsp;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a> O0_LOCAL_STATIC</pre>
</li>
</ul>
<a name="O1_LOCAL_MEMORY_MIN">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>O1_LOCAL_MEMORY_MIN</h4>
<pre>public static final&nbsp;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a> O1_LOCAL_MEMORY_MIN</pre>
</li>
</ul>
<a name="O2_LOCAL_MEMORY_DEFAULT">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>O2_LOCAL_MEMORY_DEFAULT</h4>
<pre>public static final&nbsp;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a> O2_LOCAL_MEMORY_DEFAULT</pre>
</li>
</ul>
<a name="O3_LOCAL_RESOURCE_TIME_MEMORY">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>O3_LOCAL_RESOURCE_TIME_MEMORY</h4>
<pre>public static final&nbsp;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a> O3_LOCAL_RESOURCE_TIME_MEMORY</pre>
</li>
</ul>
<a name="O4_GLOBAL_TIME_MEMORY">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>O4_GLOBAL_TIME_MEMORY</h4>
<pre>public static final&nbsp;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a> O4_GLOBAL_TIME_MEMORY</pre>
</li>
</ul>
<a name="O5_DEBUG_MODE">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>O5_DEBUG_MODE</h4>
<pre>public static final&nbsp;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a> O5_DEBUG_MODE</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="values--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>values</h4>
<pre>public static&nbsp;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a>[]&nbsp;values()</pre>
<div class="block">Returns an array containing the constants of this enum type, in
the order they are declared. This method may be used to iterate
over the constants as follows:
<pre>
for (OptimizerUtils.OptimizationLevel c : OptimizerUtils.OptimizationLevel.values())
&nbsp; System.out.println(c);
</pre></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an array containing the constants of this enum type, in the order they are declared</dd>
</dl>
</li>
</ul>
<a name="valueOf-java.lang.String-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>valueOf</h4>
<pre>public static&nbsp;<a href="../../../../org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" title="enum in org.apache.sysds.hops">OptimizerUtils.OptimizationLevel</a>&nbsp;valueOf(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
<div class="block">Returns the enum constant of this type with the specified name.
The string must match <i>exactly</i> an identifier used to declare an
enum constant in this type. (Extraneous whitespace characters are
not permitted.)</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>name</code> - the name of the enum constant to be returned.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the enum constant with the specified name</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if this enum type has no constant with the specified name</dd>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if the argument is null</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/OptimizerUtils.OptimizationLevel.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/sysds/hops/OptimizerUtils.html" title="class in org.apache.sysds.hops"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/apache/sysds/hops/ParameterizedBuiltinOp.html" title="class in org.apache.sysds.hops"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/sysds/hops/OptimizerUtils.OptimizationLevel.html" target="_top">Frames</a></li>
<li><a href="OptimizerUtils.OptimizationLevel.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#enum.constant.summary">Enum Constants</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#enum.constant.detail">Enum Constants</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2021 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>