Switch to unified view

a/doc/upabx.html b/doc/upabx.html
...
...
2
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
3
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
3
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
4
<head>
4
<head>
5
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
5
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
6
<meta name="generator" content="AsciiDoc 8.6.9" />
6
<meta name="generator" content="AsciiDoc 8.6.9" />
7
<title>UPABX: the useless UPnP ABX testing tool</title>
7
<title>UPABX: a UPnP ABX testing tool</title>
8
<style type="text/css">
8
<style type="text/css">
9
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
9
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
10
10
11
/* Default font. */
11
/* Default font. */
12
body {
12
body {
...
...
731
/*]]>*/
731
/*]]>*/
732
</script>
732
</script>
733
</head>
733
</head>
734
<body class="article">
734
<body class="article">
735
<div id="header">
735
<div id="header">
736
<h1>UPABX: the useless UPnP ABX testing tool</h1>
736
<h1>UPABX: a UPnP ABX testing tool</h1>
737
<span id="author">Jean-Francois Dockes</span><br />
737
<span id="author">Jean-Francois Dockes</span><br />
738
<span id="email"><code>&lt;<a href="mailto:jf@dockes.org">jf@dockes.org</a>&gt;</code></span><br />
738
<span id="email"><code>&lt;<a href="mailto:jf@dockes.org">jf@dockes.org</a>&gt;</code></span><br />
739
<span id="revdate">2017-11-16</span>
739
<span id="revdate">2017-11-16</span>
740
</div>
740
</div>
741
<div id="content">
741
<div id="content">
742
<div id="preamble">
742
<div id="preamble">
743
<div class="sectionbody">
743
<div class="sectionbody">
744
<div class="paragraph"><p><strong>upabx</strong> is a tool for performing
744
<div class="paragraph"><p><strong>upabx</strong> is a tool for performing
745
<a href="https://en.wikipedia.org/wiki/ABX_test">ABX listening tests</a> using one
745
<a href="https://en.wikipedia.org/wiki/ABX_test">ABX listening tests</a> using one
746
or several UPnP renderers, and, possibly, a hardware switchbox.</p></div>
746
or several UPnP renderers, and, possibly, a hardware switchbox.</p></div>
747
<div class="paragraph"><p>It is useless because all reasonable hardware sound the same (to me),
748
except for speakers and listening rooms. <strong>upabx</strong> does not support switching
749
the latter (bad bad lazy developper), and there are better tools for
750
comparing encodings and other software factors.</p></div>
751
<div class="paragraph"><p>In other terms: you could use <strong>upabx</strong> to compare your extremely expensive
752
DAC with a Raspberry PI Hifiberry board, but they sound the same. If you
753
want to compare 128 vs 320 Kb/S MP3, use the
754
<a href="http://www.foobar2000.org/components/view/foo_abx">foobar2000 ABX
755
comparator plugin</a> or something like it, it will do a better job.</p></div>
756
<div class="paragraph"><p>See <a href="#dacbattle">at the end</a> for a practical example, comparing two DACs
757
(none of the very expensive kind).</p></div>
758
<div class="paragraph"><p>If you are still with me though&#8230;</p></div>
759
</div>
760
</div>
761
<div class="sect1">
762
<h2 id="_what_the_software_does">What the software does</h2>
763
<div class="sectionbody">
764
<div class="paragraph"><p>The program controls:</p></div>
747
<div class="paragraph"><p>The program controls:</p></div>
765
<div class="ulist"><ul>
748
<div class="ulist"><ul>
766
<li>
749
<li>
767
<p>
750
<p>
768
What is played (maybe different for A/B if comparing e.g. compression
751
What is played (maybe different for A/B if comparing e.g. compression
...
...
791
<div class="paragraph"><p>These are defined in two sets in parameters, which define the test. The
774
<div class="paragraph"><p>These are defined in two sets in parameters, which define the test. The
792
definition file also supports text describing what is connected to what and
775
definition file also supports text describing what is connected to what and
793
what it is we try to test.</p></div>
776
what it is we try to test.</p></div>
794
<div class="paragraph"><p>A <a href="#:ABXMKTEST">companion program</a> provides an easy GUI for creating test
777
<div class="paragraph"><p>A <a href="#:ABXMKTEST">companion program</a> provides an easy GUI for creating test
795
definition files, including retrieving the URL from any renderer on which
778
definition files, including retrieving the URL from any renderer on which
796
it is playing.</p></div>
779
it is playing or paused.</p></div>
797
</div>
780
</div>
798
</div>
781
</div>
799
<div class="sect1">
782
<div class="sect1">
800
<h2 id="_the_abx_test_graphical_user_interface">The ABX test Graphical User Interface</h2>
783
<h2 id="_the_abx_test_graphical_user_interface">The ABX test Graphical User Interface</h2>
801
<div class="sectionbody">
784
<div class="sectionbody">
...
...
821
<div class="paragraph"><p>The A and B samples can be the same URL playing on different renderers
804
<div class="paragraph"><p>The A and B samples can be the same URL playing on different renderers
822
(needs switch or mixer), or different URLs (for comparing encodings or
805
(needs switch or mixer), or different URLs (for comparing encodings or
823
performances), or the same renderer and URL if you are using a hardware
806
performances), or the same renderer and URL if you are using a hardware
824
switch to compare preamplifiers or amplifiers. More on the sample
807
switch to compare preamplifiers or amplifiers. More on the sample
825
parameters <a href="#testparams">further down</a>.</p></div>
808
parameters <a href="#testparams">further down</a>.</p></div>
809
</div>
810
</div>
811
<div class="sect1">
812
<h2 id="ABXMKTEST">The upabxmktest test creation utility</h2>
813
<div class="sectionbody">
814
<div class="imageblock">
815
<div class="content">
816
<img src="upabxmktest-1.png" alt="upabxmktest-1.png" />
817
</div>
818
</div>
819
<div class="paragraph"><p>The utility makes it easy to create test files. Especially, it will find
820
out the list of renderers present on the network, and it will retrieve an
821
URL and the associated metadata from a Renderer, so you can set the track
822
to play for each of the A/B sections just by setting it to play (or pause)
823
somewhere, and fetching it from the GUI.</p></div>
824
<div class="paragraph"><p>Set the parameters to use in the <em>A</em> section, then set the changed parameters
825
in the <em>B</em> section.</p></div>
826
<div class="paragraph"><p>The URL <em>Choose</em> buttons will open a popup, where you will be able to
827
select a renderer from a list. The utility will then fetch the URL and
828
metadata for the track currently playing or paused on the Renderer.</p></div>
829
<div class="paragraph"><p>When you are done, use the <em>File</em> menu to save the test definition. The
830
file format details are described in an <a href="#testconfig">annex</a>.</p></div>
831
</div>
832
</div>
833
<div class="sect1">
834
<h2 id="TESTRESULTS">Test results</h2>
835
<div class="sectionbody">
836
<div class="paragraph"><p>The test results are stored in <em>~/.local/share/upabx</em> and are named like
837
<em>date</em>-<em>time</em>-<code>result</code>. They look like the following:</p></div>
838
<div class="listingblock">
839
<div class="content">
840
<pre><code>[ Contents of the test parameters file included here]
841
842
843
Mon Nov 13 17:45:37 2017 Choice: B : True
844
Mon Nov 13 17:45:59 2017 Choice: A : True
845
Mon Nov 13 17:46:16 2017 Choice: A : True
846
Mon Nov 13 17:46:36 2017 Choice: B : True
847
Mon Nov 13 17:46:55 2017 Choice: A : True
848
Mon Nov 13 17:47:11 2017 Choice: B : True
849
Mon Nov 13 17:47:26 2017 Choice: A : True
850
Mon Nov 13 17:47:42 2017 Choice: A : True
851
Mon Nov 13 17:47:52 2017 Choice: A : True
852
Mon Nov 13 17:48:00 2017 Choice: B : True
853
854
Mon Nov 13 17:48:00 2017 Test completed: 10/10</code></pre>
855
</div></div>
856
</div>
857
</div>
858
<div class="sect1">
859
<h2 id="globalconf">The global configuration</h2>
860
<div class="sectionbody">
861
<div class="paragraph"><p>Most of the program parameters are found in the test parameter files (see
862
next). However, some values are defined in a global configuration file
863
(<em>~/.config/upabx/upabx.conf</em>). The file contains <em>name = value</em> lines.</p></div>
864
<div class="dlist"><dl>
865
<dt class="hdlist1">
866
switchhost
867
</dt>
868
<dd>
869
<p>
870
Host name or IP address for the switch interface.
871
</p>
872
</dd>
873
<dt class="hdlist1">
874
seqlen
875
</dt>
876
<dd>
877
<p>
878
Default test sequence length (which itself has a default:
879
10). This can be redefined in the test configuration for individual tests.
880
</p>
881
</dd>
882
<dt class="hdlist1">
883
switchport
884
</dt>
885
<dd>
886
<p>
887
TCP port for the switch interface (default: 8080).
888
</p>
889
</dd>
890
</dl></div>
891
<div class="paragraph"><p>Only <code>switchhost</code> needs to be defined and only if you are actually using a
892
hardware switch.</p></div>
826
</div>
893
</div>
827
</div>
894
</div>
828
<div class="sect1">
895
<div class="sect1">
829
<h2 id="_building_operating_environment">Building, operating environment</h2>
896
<h2 id="_building_operating_environment">Building, operating environment</h2>
830
<div class="sectionbody">
897
<div class="sectionbody">
...
...
857
amps). <strong>upabx</strong> interfaces with a small <a href="#switchapp">local web
924
amps). <strong>upabx</strong> interfaces with a small <a href="#switchapp">local web
858
application</a>, typically running on a Raspberry Pi, for controlling the
925
application</a>, typically running on a Raspberry Pi, for controlling the
859
switch (the GUI does not need to run on the same host as the switch
926
switch (the GUI does not need to run on the same host as the switch
860
controller). Any kind of relay which can interface more or less directly
927
controller). Any kind of relay which can interface more or less directly
861
with Raspberry Pi GPIO pins should be workable.</p></div>
928
with Raspberry Pi GPIO pins should be workable.</p></div>
862
</div>
863
</div>
864
<div class="sect1">
865
<h2 id="ABXMKTEST">The upabxmktest test creation utility</h2>
866
<div class="sectionbody">
867
<div class="imageblock">
868
<div class="content">
869
<img src="upabxmktest-1.png" alt="upabxmktest-1.png" />
870
</div>
871
</div>
872
<div class="paragraph"><p>The utility makes it easy to create test files. Especially, it will find
873
out the list of renderers present on the network, and it will retrieve an
874
URL and the associated metadata from a Renderer, so you can set the track
875
to play for each of the A/B sections just by setting it to play (or pause)
876
somewhere, and fetching it from the GUI.</p></div>
877
<div class="paragraph"><p>Set the parameters to use in the <em>A</em> section, then set the changed parameters
878
in the <em>B</em> section.</p></div>
879
<div class="paragraph"><p>The URL <em>Choose</em> buttons will open a popup, where you will be able to
880
select a renderer from a list. The utility will then fetch the URL and
881
metadata for the track currently playing or paused on the Renderer.</p></div>
882
<div class="paragraph"><p>When you are done, use the <em>File</em> menu to save the test definition. The
883
file format details are described in an <a href="#testconfig">annex</a>.</p></div>
884
</div>
885
</div>
886
<div class="sect1">
887
<h2 id="_test_results">Test results</h2>
888
<div class="sectionbody">
889
<div class="paragraph"><p>The test results are stored in <em>~/.local/share/upabx</em> and are named like
890
<em>date</em>-<em>time</em>-<code>result</code>. They look like the following:</p></div>
891
<div class="listingblock">
892
<div class="content">
893
<pre><code>[ Contents of the test parameters file included here]
894
895
896
Mon Nov 13 17:45:37 2017 Choice: B : True
897
Mon Nov 13 17:45:59 2017 Choice: A : True
898
Mon Nov 13 17:46:16 2017 Choice: A : True
899
Mon Nov 13 17:46:36 2017 Choice: B : True
900
Mon Nov 13 17:46:55 2017 Choice: A : True
901
Mon Nov 13 17:47:11 2017 Choice: B : True
902
Mon Nov 13 17:47:26 2017 Choice: A : True
903
Mon Nov 13 17:47:42 2017 Choice: A : True
904
Mon Nov 13 17:47:52 2017 Choice: A : True
905
Mon Nov 13 17:48:00 2017 Choice: B : True
906
907
Mon Nov 13 17:48:00 2017 Test completed: 10/10</code></pre>
908
</div></div>
909
</div>
910
</div>
911
<div class="sect1">
912
<h2 id="globalconf">The global configuration</h2>
913
<div class="sectionbody">
914
<div class="paragraph"><p>Most of the program parameters are found in the test parameter files (see
915
next). However, some defaults are defined in a global configuration file
916
(<em>~/.config/upabx/upabx.conf</em>). The file just contains <em>name = value</em> lines.</p></div>
917
<div class="dlist"><dl>
918
<dt class="hdlist1">
919
seqlen
920
</dt>
921
<dd>
922
<p>
923
Default test sequence length.
924
</p>
925
</dd>
926
<dt class="hdlist1">
927
switchhost
928
</dt>
929
<dd>
930
<p>
931
Host name or IP address for the switch interface.
932
</p>
933
</dd>
934
<dt class="hdlist1">
935
switchport
936
</dt>
937
<dd>
938
<p>
939
TCP port for the switch interface.
940
</p>
941
</dd>
942
</dl></div>
943
</div>
929
</div>
944
</div>
930
</div>
945
<div class="sect1">
931
<div class="sect1">
946
<h2 id="switchapp">The hardware switch interface application</h2>
932
<h2 id="switchapp">The hardware switch interface application</h2>
947
<div class="sectionbody">
933
<div class="sectionbody">
...
...
1004
<strong>upabx</strong> <a href="#globalconf">global configuration file</a>.</p></div>
990
<strong>upabx</strong> <a href="#globalconf">global configuration file</a>.</p></div>
1005
</div>
991
</div>
1006
</div>
992
</div>
1007
</div>
993
</div>
1008
<div class="sect1">
994
<div class="sect1">
1009
<h2 id="switchhard">The hardware switch</h2>
1010
<div class="sectionbody">
1011
<div class="paragraph"><p>I am not a hardware engineer, and I&#8217;m sure that there is not much to like
1012
in my switchbox :)</p></div>
1013
<div class="paragraph"><p>The big relays need too much command power to be controlled directly from
1014
the GPIO, so there is a small interface relay between them and the Pi.</p></div>
1015
<div class="paragraph"><p>Also they need 12V, (which is ennoying, it should be possible to arrange to
1016
run everything on 5V), in consequence, the whole thing is powered by a
1017
small external 5/12v PC power supply.</p></div>
1018
<div class="paragraph"><p>I am using pre-integrated modules for the low power relays (line control
1019
and speaker interface relay), they have a transistor for GPIO-compatible
1020
control levels, a flyback diode and maybe an indicator LED, all on a small
1021
circuit board, and DIY them would not save a lot of money&#8230;</p></div>
1022
<div class="paragraph"><p>Most expensive section of the whole thing ? Line and speaker connectors.</p></div>
1023
<div class="paragraph"><p>The box looks complicated because there are many wires. But really, it is
1024
very simple:</p></div>
1025
<div class="ulist"><ul>
1026
<li>
1027
<p>
1028
The chosen GPIO pins are connected to the small relay inputs.
1029
</p>
1030
</li>
1031
<li>
1032
<p>
1033
5V (and possibly 12 V) are distributed where needed (Raspberry PI, relays
1034
  VCC).
1035
</p>
1036
</li>
1037
<li>
1038
<p>
1039
The intermediate relay output goes to the big relay command input.
1040
</p>
1041
</li>
1042
<li>
1043
<p>
1044
The switched lines to the relay contacts.
1045
</p>
1046
</li>
1047
</ul></div>
1048
<hr>
1049
<a href="pictures/switchbox.html">
1050
<img style="margin-right:10px;" src="pictures/switchbox-thumb.jpg"
1051
alt="The switch box" align="left"></a>
1052
<div class="paragraph"><p>The switch box. On the left, the Raspberry PI presents its ethernet port
1053
through the back plate. And the power supply terminal. In the centre, the
1054
big speaker/power amp relays. On the right, the line relay (will be
1055
replaced by a pair so that I can switch both signals and earths):</p></div>
1056
<br clear="all">
1057
<hr>
1058
<a href="pictures/speaker.html">
1059
<img style="margin-right:10px;" src="pictures/speaker-thumb.jpg"
1060
alt="The speaker relays" align="left"></a>
1061
<div class="paragraph"><p>One of the big speaker/power line relays. The small interface relay
1062
controlled by the GPIO piggy-backs on it, fixed by double-sided tape. One
1063
can also see the main relay flyback diode.</p></div>
1064
<div class="paragraph"><p><a href="http://www.conrad.fr/ce/fr/product/507566/Relais-enfichable-Hongfa-HF92F-012D-2C21S-12-VDC-30-A-2-inverseurs-RT-1-pcs/SHOP_AREA_17391">supplier
1065
page for the big relays</a> (in French, sorry, but I&#8217;m sure that you can get
1066
an idea anyway and find an equivalent in your country). Finding one which
1067
can be controlled with 5V will make your life easier.</p></div>
1068
<div class="paragraph"><p><a href="https://www.aliexpress.com/item/DR21B01-DC-5V-DPDT-Signal-Relay-Module-Dual-Channel-selector-switch-Board-for-LED-MCU-Motor/32688085237.html?spm=2114.13010608.0.0.UfLrLm">Example
1069
of relay board for the interface between the GPIO and the big relay</a>.</p></div>
1070
<br clear="all">
1071
<hr>
1072
<a href="pictures/line.html">
1073
<img style="margin-right:10px;" src="pictures/line-thumb.jpg"
1074
alt="The line-level relay" align="left"></a>
1075
<div class="paragraph"><p>The line-level
1076
relay module. <a href="http://www.ebay.fr/itm/201109114068?_trksid=p2057872.m2749.l2649&amp;ssPageName=STRK%3AMEBIDX%3AIT">For
1077
example</a>. I want to replace it with
1078
<a href="https://www.ebay.fr/itm/Two-DPDT-Signal-Relay-Module-Board-DC5V-Version/201138699034?ssPageName=STRK%3AMEBIDX%3AIT&amp;_trksid=p2057872.m2749.l2649">a
1079
double one</a> to avoid having to link all the signal earths.</p></div>
1080
<br clear="all">
1081
</div>
1082
</div>
1083
<div class="sect1">
1084
<h2 id="dacbattle">Battle of the DACs</h2>
1085
<div class="sectionbody">
1086
<a href="pictures/hifiberry-explorer.html">
1087
<img style="margin-right:10px;" src="pictures/hifiberry-explorer-thumb.jpg"
1088
alt="Rpi+hifiberry odroid+explorer" align="left"></a>
1089
<div class="paragraph"><p>And now for a real example. Comparing a HifiBerry DAC+ pro mounted on an
1090
rpi3, with the Meridian Explorer 2, connected to the USB output of an
1091
Odroid C2. Both systems are running mpd + upmpdcli. The Headphone amp is an
1092
O2.</p></div>
1093
<div class="paragraph"><p>I am using a 96/24 FLAC 2L demo track for the comparison: "Vivaldi Cantata Rv
1094
679. Aria Cupido te Vedi"</p></div>
1095
<br clear="all">
1096
<div class="paragraph"><p>The test configuration file:</p></div>
1097
<div class="listingblock">
1098
<div class="content">
1099
<pre><code>description = Comparison of hifiberry dac+pro with Meridian Explorer 2, \
1100
using the 2L Vivaldi 96/24 FLAC sample
1101
1102
# Hifiberry DAC+ pro
1103
renderer = UpMpd-r31
1104
line = A
1105
1106
url = http://192.168.4.4:9790/minimserver/*/mp3/test-tracks/2L/VIVALDI_Cantata_Rv_679__Che_Giova_Il_Sospirar,_Povero_Core_-_Aria__Cupido,_Tu_Vedi-flac-96-24.flac
1107
1108
1109
[test]
1110
1111
# Explorer
1112
renderer = odroid32
1113
line = B</code></pre>
1114
</div></div>
1115
<a href="pictures/level-matching.html">
1116
<img style="margin-right:10px;" src="pictures/level-matching-thumb.jpg"
1117
alt="Rpi+hifiberry odroid+explorer" align="left"></a>
1118
<div class="paragraph"><p>It is very important to match the output levels. Conveniently, my
1119
Sennheiser has pluggable connections with nice bare contacts which I can
1120
easily hook up to the multimeter. Otherwise, a custom mini-jack to banana
1121
plug cable would be handy.</p></div>
1122
<div class="paragraph"><p>Both DACS have hardware volume controls, which I use. The Hifiberry is set
1123
at 100/100, the Explorer 2 at 96/100 (in MPD terms). Testing with a 50 Hz
1124
tone, I could not adjust better than 0.43 V vs 0.45 V, which should be
1125
roughly equivalent to a 0.6 dB difference ? This might need a little more
1126
attention, also measuring at other frequencies (hopefully, these 2
1127
should be flat at 50hz), but it&#8217;s all moot because anyway&#8230;:</p></div>
1128
<br clear="all">
1129
<div class="paragraph"><p>I did not even bother to run the ABX sequence: both DACs sound exactly the
1130
same to me.</p></div>
1131
<div class="paragraph"><p>Useless ABX tool :)</p></div>
1132
<div class="paragraph"><p>I am not claiming any absolute result though: I do have very bad
1133
hearing, and, as you know, we can&#8217;t prove a negative :)</p></div>
1134
<div class="paragraph"><p>And I&#8217;d be quite interested by your comments (see the Disqus section at the
1135
end).</p></div>
1136
</div>
1137
</div>
1138
<div class="sect1">
1139
<h2 id="testconfig">Annex: test definition file details</h2>
995
<h2 id="testconfig">Annex: test definition file details</h2>
1140
<div class="sectionbody">
996
<div class="sectionbody">
1141
<div class="paragraph"><p>Tests are defined in simple configuration files. The configuration file
997
<div class="paragraph"><p>Tests are defined in simple configuration files. The configuration file
1142
name for a test is passed to the GUI on the command line.</p></div>
998
name for a test is passed to the GUI on the command line.</p></div>
1143
<div class="paragraph"><p>This section describes the file contents in detail, but you will usually
999
<div class="paragraph"><p>This section describes the file contents in detail, but you will usually
...
...
1252
</p>
1108
</p>
1253
</dd>
1109
</dd>
1254
</dl></div>
1110
</dl></div>
1255
<div class="paragraph"><p>If neither <em>line</em> nor <em>spk</em> are set, <strong>upabx</strong> will not try to access the
1111
<div class="paragraph"><p>If neither <em>line</em> nor <em>spk</em> are set, <strong>upabx</strong> will not try to access the
1256
hardware switch interface.</p></div>
1112
hardware switch interface.</p></div>
1257
      <div id="disqus_thread"></div>
1258
      <script type="text/javascript">
1259
        var disqus_shortname = 'lesbonscomptes';
1260
        (function() {
1261
            var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
1262
            dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
1263
            (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
1264
        })();
1265
      </script>
1266
      <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
1267
      <a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
1268
</div>
1113
</div>
1269
</div>
1114
</div>
1270
</div>
1115
</div>
1271
</div>
1116
</div>
1272
<div id="footnotes"><hr /></div>
1117
<div id="footnotes"><hr /></div>
1273
<div id="footer">
1118
<div id="footer">
1274
<div id="footer-text">
1119
<div id="footer-text">
1275
Last updated
1120
Last updated
1276
 2018-01-15 10:28:02 CET
1121
 2018-02-03 16:42:14 CET
1277
</div>
1122
</div>
1278
</div>
1123
</div>
1279
</body>
1124
</body>
1280
</html>
1125
</html>