106 lines
23 KiB
HTML
106 lines
23 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.8.15"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>SSLClient: C:/Users/Noah/Documents/Arduino/libraries/SSLClient/src/time_macros.h Source File</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="resize.js"></script>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(initResizable);
|
|
/* @license-end */</script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">SSLClient
|
|
 <span id="projectnumber">v1.3.0</span>
|
|
</div>
|
|
<div id="projectbrief">Add TLS 1.2 functionality to any network library.</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.8.15 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(function() {
|
|
initMenu('',true,false,'search.php','Search');
|
|
$(document).ready(function() { init_search(); });
|
|
});
|
|
/* @license-end */</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
|
$(document).ready(function(){initNavTree('time__macros_8h_source.html','');});
|
|
/* @license-end */
|
|
</script>
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<iframe src="javascript:void(0)" frameborder="0"
|
|
name="MSearchResults" id="MSearchResults">
|
|
</iframe>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="headertitle">
|
|
<div class="title">time_macros.h</div> </div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<a href="time__macros_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/* </span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> *</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Created: 29.03.2018</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Authors:</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * </span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * Assembled from the code released on Stackoverflow by:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * Dennis (instructable.com/member/nqtronix) | https://stackoverflow.com/questions/23032002/c-c-how-to-get-integer-unix-timestamp-of-build-time-not-string</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * and</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Alexis Wilke | https://stackoverflow.com/questions/10538444/do-you-know-of-a-c-macro-to-compute-unix-time-and-date</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * Assembled by Jean Rabault</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * </span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * UNIX_TIMESTAMP gives the UNIX timestamp (unsigned long integer of seconds since 1st Jan 1970) of compilation from macros using the compiler defined __TIME__ macro.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * This should include Gregorian calendar leap days, in particular the 29ths of February, 100 and 400 years modulo leaps.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * </span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * Careful: __TIME__ is the local time of the computer, NOT the UTC time in general!</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * </span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> */</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#ifndef COMPILE_TIME_H_</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#define COMPILE_TIME_H_</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// add offset for pacific standard time</span></div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a243cf438274412bbecf4b8d5eeb02ccb"> 25</a></span> <span class="preprocessor">#define PST_OFFSET (8UL)</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">// Some definitions for calculation</span></div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="time__macros_8h.html#ac47b302f1b8d2a7a9c035c417247be76"> 28</a></span> <span class="preprocessor">#define SEC_PER_MIN (60UL)</span></div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a2d540510d5860d7f190d13124956bc57"> 29</a></span> <span class="preprocessor">#define SEC_PER_HOUR (3600UL)</span></div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a3aaee30ddedb3f6675aac341a66e39e2"> 30</a></span> <span class="preprocessor">#define SEC_PER_DAY (86400UL)</span></div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a8cd8e04105fec7cd442d078c303e46b9"> 31</a></span> <span class="preprocessor">#define SEC_PER_YEAR (SEC_PER_DAY*365)</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// extracts 1..4 characters from a string and interprets it as a decimal value</span></div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="time__macros_8h.html#ae0574ced3f997b97d357c1cb68000e3a"> 34</a></span> <span class="preprocessor">#define CONV_STR2DEC_1(str, i) (str[i]>'0'?str[i]-'0':0)</span></div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="time__macros_8h.html#ae90924c33a05839b3eb1426472f40eb3"> 35</a></span> <span class="preprocessor">#define CONV_STR2DEC_2(str, i) (CONV_STR2DEC_1(str, i)*10 + str[i+1]-'0')</span></div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="time__macros_8h.html#aad01b5fb233c0091aff2a837a8de32f4"> 36</a></span> <span class="preprocessor">#define CONV_STR2DEC_3(str, i) (CONV_STR2DEC_2(str, i)*10 + str[i+2]-'0')</span></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a9da779a8ca64782ea49babce14122d34"> 37</a></span> <span class="preprocessor">#define CONV_STR2DEC_4(str, i) (CONV_STR2DEC_3(str, i)*10 + str[i+3]-'0')</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// Custom "glue logic" to convert the month name to a usable number</span></div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a4dbe4cf7c879a2cdac386ce72c5e5994"> 40</a></span> <span class="preprocessor">#define GET_MONTH(str, i) (str[i]=='J' && str[i+1]=='a' && str[i+2]=='n' ? 1 : \</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor"> str[i]=='F' && str[i+1]=='e' && str[i+2]=='b' ? 2 : \</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor"> str[i]=='M' && str[i+1]=='a' && str[i+2]=='r' ? 3 : \</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor"> str[i]=='A' && str[i+1]=='p' && str[i+2]=='r' ? 4 : \</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor"> str[i]=='M' && str[i+1]=='a' && str[i+2]=='y' ? 5 : \</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"> str[i]=='J' && str[i+1]=='u' && str[i+2]=='n' ? 6 : \</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"> str[i]=='J' && str[i+1]=='u' && str[i+2]=='l' ? 7 : \</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor"> str[i]=='A' && str[i+1]=='u' && str[i+2]=='g' ? 8 : \</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor"> str[i]=='S' && str[i+1]=='e' && str[i+2]=='p' ? 9 : \</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"> str[i]=='O' && str[i+1]=='c' && str[i+2]=='t' ? 10 : \</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"> str[i]=='N' && str[i+1]=='o' && str[i+2]=='v' ? 11 : \</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"> str[i]=='D' && str[i+1]=='e' && str[i+2]=='c' ? 12 : 0)</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment">// extract the information from the time string given by __TIME__ and __DATE__</span></div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a38ac93dd8bfe385ff915a82c92bbfc97"> 54</a></span> <span class="preprocessor">#define __TIME_SECONDS__ CONV_STR2DEC_2(__TIME__, 6)</span></div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="time__macros_8h.html#ab3592442029a102b388fafeadc4a6ab8"> 55</a></span> <span class="preprocessor">#define __TIME_MINUTES__ CONV_STR2DEC_2(__TIME__, 3)</span></div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a2488d1ddab7e5fa119da3421462231c4"> 56</a></span> <span class="preprocessor">#define __TIME_HOURS__ CONV_STR2DEC_2(__TIME__, 0)</span></div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a7f2cdee2eebbccd45c179a50a0bbabcf"> 57</a></span> <span class="preprocessor">#define __TIME_DAYS__ CONV_STR2DEC_2(__DATE__, 4)</span></div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="time__macros_8h.html#ac8f6b75d9e04634818984ba400d0dee1"> 58</a></span> <span class="preprocessor">#define __TIME_MONTH__ GET_MONTH(__DATE__, 0)</span></div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a56482fcc86a55713dee595c2092ed376"> 59</a></span> <span class="preprocessor">#define __TIME_YEARS__ CONV_STR2DEC_4(__DATE__, 7)</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment">// Days in February</span></div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="time__macros_8h.html#ab6c76862964ff7e543fd9d5807b2fa79"> 62</a></span> <span class="preprocessor">#define _UNIX_TIMESTAMP_FDAY(year) \</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"> (((year) % 400) == 0UL ? 29UL : \</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"> (((year) % 100) == 0UL ? 28UL : \</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"> (((year) % 4) == 0UL ? 29UL : \</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"> 28UL)))</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// Days in the year</span></div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a5ab60a7e3e1b6e0a919b3a37bc0d4b97"> 69</a></span> <span class="preprocessor">#define _UNIX_TIMESTAMP_YDAY(year, month, day) \</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"> ( \</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"> </span><span class="comment">/* January */</span><span class="preprocessor"> day \</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"> </span><span class="comment">/* February */</span><span class="preprocessor"> + (month >= 2 ? 31UL : 0UL) \</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"> </span><span class="comment">/* March */</span><span class="preprocessor"> + (month >= 3 ? _UNIX_TIMESTAMP_FDAY(year) : 0UL) \</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor"> </span><span class="comment">/* April */</span><span class="preprocessor"> + (month >= 4 ? 31UL : 0UL) \</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"> </span><span class="comment">/* May */</span><span class="preprocessor"> + (month >= 5 ? 30UL : 0UL) \</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"> </span><span class="comment">/* June */</span><span class="preprocessor"> + (month >= 6 ? 31UL : 0UL) \</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor"> </span><span class="comment">/* July */</span><span class="preprocessor"> + (month >= 7 ? 30UL : 0UL) \</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor"> </span><span class="comment">/* August */</span><span class="preprocessor"> + (month >= 8 ? 31UL : 0UL) \</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor"> </span><span class="comment">/* September */</span><span class="preprocessor">+ (month >= 9 ? 31UL : 0UL) \</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor"> </span><span class="comment">/* October */</span><span class="preprocessor"> + (month >= 10 ? 30UL : 0UL) \</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor"> </span><span class="comment">/* November */</span><span class="preprocessor"> + (month >= 11 ? 31UL : 0UL) \</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor"> </span><span class="comment">/* December */</span><span class="preprocessor"> + (month >= 12 ? 30UL : 0UL) \</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor"> )</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">// get the UNIX timestamp from a digits representation</span></div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a868143e0521daf07b25a2f3947cf54a3"> 86</a></span> <span class="preprocessor">#define _UNIX_TIMESTAMP(year, month, day, hour, minute, second) \</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor"> ( </span><span class="comment">/* time */</span><span class="preprocessor"> second \</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor"> + minute * SEC_PER_MIN \</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"> + hour * SEC_PER_HOUR \</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"> + </span><span class="comment">/* year day (month + day) */</span><span class="preprocessor"> (_UNIX_TIMESTAMP_YDAY(year, month, day) - 1) * SEC_PER_DAY \</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"> + </span><span class="comment">/* year */</span><span class="preprocessor"> (year - 1970UL) * SEC_PER_YEAR \</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor"> + ((year - 1969UL) / 4UL) * SEC_PER_DAY \</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor"> - ((year - 1901UL) / 100UL) * SEC_PER_DAY \</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor"> + ((year - 1601UL) / 400UL) * SEC_PER_DAY \</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"> )</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">// the UNIX timestamp</span></div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a04e76e262f0920441e5f0c5552e83487"> 98</a></span> <span class="preprocessor">#define UNIX_TIMESTAMP _UNIX_TIMESTAMP(__TIME_YEARS__, __TIME_MONTH__, __TIME_DAYS__, __TIME_HOURS__, __TIME_MINUTES__, __TIME_SECONDS__)</span></div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="time__macros_8h.html#a2af3d1d741ae2b49627adf56bbc95dc3"> 99</a></span> <span class="preprocessor">#define UNIX_TIMESTAMP_UTC (UNIX_TIMESTAMP + (PST_OFFSET*SEC_PER_HOUR))</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor">#endif</span></div></div><!-- fragment --></div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="time__macros_8h.html">time_macros.h</a></li>
|
|
<li class="footer">Generated by
|
|
<a href="http://www.doxygen.org/index.html">
|
|
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|