????
| Current Path : /opt/ant/manual/api/org/apache/tools/tar/ |
| Current File : //opt/ant/manual/api/org/apache/tools/tar/TarBuffer.html |
<!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 (version 1.7.0_03) on Tue May 22 06:24:55 CEST 2012 -->
<title>TarBuffer (Apache Ant API)</title>
<meta name="date" content="2012-05-22">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="TarBuffer (Apache Ant API)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><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="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>Prev Class</li>
<li><a href="../../../../org/apache/tools/tar/TarConstants.html" title="interface in org.apache.tools.tar"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/tools/tar/TarBuffer.html" target="_top">Frames</a></li>
<li><a href="TarBuffer.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All 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: </li>
<li>Nested | </li>
<li><a href="#field_summary">Field</a> | </li>
<li><a href="#constructor_summary">Constr</a> | </li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li><a href="#field_detail">Field</a> | </li>
<li><a href="#constructor_detail">Constr</a> | </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.tools.tar</div>
<h2 title="Class TarBuffer" class="title">Class TarBuffer</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.tools.tar.TarBuffer</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="strong">TarBuffer</span>
extends java.lang.Object</pre>
<div class="block">The TarBuffer class implements the tar archive concept
of a buffered input stream. This concept goes back to the
days of blocked tape drives and special io devices. In the
Java universe, the only real function that this class
performs is to ensure that files have the correct "block"
size, or other tars will complain.
<p>
You should never have a need to access this class directly.
TarBuffers are created by Tar IO Streams.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#DEFAULT_BLKSIZE">DEFAULT_BLKSIZE</a></strong></code>
<div class="block">Default block size</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#DEFAULT_RCDSIZE">DEFAULT_RCDSIZE</a></strong></code>
<div class="block">Default record size</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#TarBuffer(java.io.InputStream)">TarBuffer</a></strong>(java.io.InputStream inStream)</code>
<div class="block">Constructor for a TarBuffer on an input stream.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#TarBuffer(java.io.InputStream, int)">TarBuffer</a></strong>(java.io.InputStream inStream,
int blockSize)</code>
<div class="block">Constructor for a TarBuffer on an input stream.</div>
</td>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#TarBuffer(java.io.InputStream, int, int)">TarBuffer</a></strong>(java.io.InputStream inStream,
int blockSize,
int recordSize)</code>
<div class="block">Constructor for a TarBuffer on an input stream.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#TarBuffer(java.io.OutputStream)">TarBuffer</a></strong>(java.io.OutputStream outStream)</code>
<div class="block">Constructor for a TarBuffer on an output stream.</div>
</td>
</tr>
<tr class="altColor">
<td class="colOne"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#TarBuffer(java.io.OutputStream, int)">TarBuffer</a></strong>(java.io.OutputStream outStream,
int blockSize)</code>
<div class="block">Constructor for a TarBuffer on an output stream.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#TarBuffer(java.io.OutputStream, int, int)">TarBuffer</a></strong>(java.io.OutputStream outStream,
int blockSize,
int recordSize)</code>
<div class="block">Constructor for a TarBuffer on an output stream.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#close()">close</a></strong>()</code>
<div class="block">Close the TarBuffer.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#getBlockSize()">getBlockSize</a></strong>()</code>
<div class="block">Get the TAR Buffer's block size.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#getCurrentBlockNum()">getCurrentBlockNum</a></strong>()</code>
<div class="block">Get the current block number, zero based.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#getCurrentRecordNum()">getCurrentRecordNum</a></strong>()</code>
<div class="block">Get the current record number, within the current block, zero based.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#getRecordSize()">getRecordSize</a></strong>()</code>
<div class="block">Get the TAR Buffer's record size.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#isEOFRecord(byte[])">isEOFRecord</a></strong>(byte[] record)</code>
<div class="block">Determine if an archive record indicate End of Archive.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>byte[]</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#readRecord()">readRecord</a></strong>()</code>
<div class="block">Read a record from the input stream and return the data.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#setDebug(boolean)">setDebug</a></strong>(boolean debug)</code>
<div class="block">Set the debugging flag for the buffer.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#skipRecord()">skipRecord</a></strong>()</code>
<div class="block">Skip over a record on the input stream.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#writeRecord(byte[])">writeRecord</a></strong>(byte[] record)</code>
<div class="block">Write an archive record to the archive.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><strong><a href="../../../../org/apache/tools/tar/TarBuffer.html#writeRecord(byte[], int)">writeRecord</a></strong>(byte[] buf,
int offset)</code>
<div class="block">Write an archive record to the archive, where the record may be
inside of a larger array buffer.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field_detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="DEFAULT_RCDSIZE">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_RCDSIZE</h4>
<pre>public static final int DEFAULT_RCDSIZE</pre>
<div class="block">Default record size</div>
<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../constant-values.html#org.apache.tools.tar.TarBuffer.DEFAULT_RCDSIZE">Constant Field Values</a></dd></dl>
</li>
</ul>
<a name="DEFAULT_BLKSIZE">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>DEFAULT_BLKSIZE</h4>
<pre>public static final int DEFAULT_BLKSIZE</pre>
<div class="block">Default block size</div>
<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../constant-values.html#org.apache.tools.tar.TarBuffer.DEFAULT_BLKSIZE">Constant Field Values</a></dd></dl>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="TarBuffer(java.io.InputStream)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>TarBuffer</h4>
<pre>public TarBuffer(java.io.InputStream inStream)</pre>
<div class="block">Constructor for a TarBuffer on an input stream.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>inStream</code> - the input stream to use</dd></dl>
</li>
</ul>
<a name="TarBuffer(java.io.InputStream, int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>TarBuffer</h4>
<pre>public TarBuffer(java.io.InputStream inStream,
int blockSize)</pre>
<div class="block">Constructor for a TarBuffer on an input stream.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>inStream</code> - the input stream to use</dd><dd><code>blockSize</code> - the block size to use</dd></dl>
</li>
</ul>
<a name="TarBuffer(java.io.InputStream, int, int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>TarBuffer</h4>
<pre>public TarBuffer(java.io.InputStream inStream,
int blockSize,
int recordSize)</pre>
<div class="block">Constructor for a TarBuffer on an input stream.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>inStream</code> - the input stream to use</dd><dd><code>blockSize</code> - the block size to use</dd><dd><code>recordSize</code> - the record size to use</dd></dl>
</li>
</ul>
<a name="TarBuffer(java.io.OutputStream)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>TarBuffer</h4>
<pre>public TarBuffer(java.io.OutputStream outStream)</pre>
<div class="block">Constructor for a TarBuffer on an output stream.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>outStream</code> - the output stream to use</dd></dl>
</li>
</ul>
<a name="TarBuffer(java.io.OutputStream, int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>TarBuffer</h4>
<pre>public TarBuffer(java.io.OutputStream outStream,
int blockSize)</pre>
<div class="block">Constructor for a TarBuffer on an output stream.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>outStream</code> - the output stream to use</dd><dd><code>blockSize</code> - the block size to use</dd></dl>
</li>
</ul>
<a name="TarBuffer(java.io.OutputStream, int, int)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>TarBuffer</h4>
<pre>public TarBuffer(java.io.OutputStream outStream,
int blockSize,
int recordSize)</pre>
<div class="block">Constructor for a TarBuffer on an output stream.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>outStream</code> - the output stream to use</dd><dd><code>blockSize</code> - the block size to use</dd><dd><code>recordSize</code> - the record size to use</dd></dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getBlockSize()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getBlockSize</h4>
<pre>public int getBlockSize()</pre>
<div class="block">Get the TAR Buffer's block size. Blocks consist of multiple records.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>the block size</dd></dl>
</li>
</ul>
<a name="getRecordSize()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRecordSize</h4>
<pre>public int getRecordSize()</pre>
<div class="block">Get the TAR Buffer's record size.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>the record size</dd></dl>
</li>
</ul>
<a name="setDebug(boolean)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>setDebug</h4>
<pre>public void setDebug(boolean debug)</pre>
<div class="block">Set the debugging flag for the buffer.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>debug</code> - If true, print debugging output.</dd></dl>
</li>
</ul>
<a name="isEOFRecord(byte[])">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>isEOFRecord</h4>
<pre>public boolean isEOFRecord(byte[] record)</pre>
<div class="block">Determine if an archive record indicate End of Archive. End of
archive is indicated by a record that consists entirely of null bytes.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>record</code> - The record data to check.</dd>
<dt><span class="strong">Returns:</span></dt><dd>true if the record data is an End of Archive</dd></dl>
</li>
</ul>
<a name="skipRecord()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>skipRecord</h4>
<pre>public void skipRecord()
throws java.io.IOException</pre>
<div class="block">Skip over a record on the input stream.</div>
<dl><dt><span class="strong">Throws:</span></dt>
<dd><code>java.io.IOException</code> - on error</dd></dl>
</li>
</ul>
<a name="readRecord()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>readRecord</h4>
<pre>public byte[] readRecord()
throws java.io.IOException</pre>
<div class="block">Read a record from the input stream and return the data.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>The record data.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code>java.io.IOException</code> - on error</dd></dl>
</li>
</ul>
<a name="getCurrentBlockNum()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentBlockNum</h4>
<pre>public int getCurrentBlockNum()</pre>
<div class="block">Get the current block number, zero based.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>The current zero based block number.</dd></dl>
</li>
</ul>
<a name="getCurrentRecordNum()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getCurrentRecordNum</h4>
<pre>public int getCurrentRecordNum()</pre>
<div class="block">Get the current record number, within the current block, zero based.
Thus, current offset = (currentBlockNum * recsPerBlk) + currentRecNum.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>The current zero based record number.</dd></dl>
</li>
</ul>
<a name="writeRecord(byte[])">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>writeRecord</h4>
<pre>public void writeRecord(byte[] record)
throws java.io.IOException</pre>
<div class="block">Write an archive record to the archive.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>record</code> - The record data to write to the archive.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code>java.io.IOException</code> - on error</dd></dl>
</li>
</ul>
<a name="writeRecord(byte[], int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>writeRecord</h4>
<pre>public void writeRecord(byte[] buf,
int offset)
throws java.io.IOException</pre>
<div class="block">Write an archive record to the archive, where the record may be
inside of a larger array buffer. The buffer must be "offset plus
record size" long.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>buf</code> - The buffer containing the record data to write.</dd><dd><code>offset</code> - The offset of the record data within buf.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code>java.io.IOException</code> - on error</dd></dl>
</li>
</ul>
<a name="close()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>close</h4>
<pre>public void close()
throws java.io.IOException</pre>
<div class="block">Close the TarBuffer. If this is an output buffer, also flush the
current block before closing.</div>
<dl><dt><span class="strong">Throws:</span></dt>
<dd><code>java.io.IOException</code> - on error</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><a href="#skip-navbar_bottom" title="Skip navigation links"></a><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="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>Prev Class</li>
<li><a href="../../../../org/apache/tools/tar/TarConstants.html" title="interface in org.apache.tools.tar"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/tools/tar/TarBuffer.html" target="_top">Frames</a></li>
<li><a href="TarBuffer.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All 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: </li>
<li>Nested | </li>
<li><a href="#field_summary">Field</a> | </li>
<li><a href="#constructor_summary">Constr</a> | </li>
<li><a href="#method_summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
<li><a href="#field_detail">Field</a> | </li>
<li><a href="#constructor_detail">Constr</a> | </li>
<li><a href="#method_detail">Method</a></li>
</ul>
</div>
<a name="skip-navbar_bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>