<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Coverity error reader: /home/jferlan/libvirt.cov.curr/src/esx/esx_driver.c</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
<body link="#000000" vlink="#000000"><pre>
<b><a name="line891">891  </a></b>    /*
<b><a name="line892">892  </a></b>     * URI format: {vpx|esx|gsx}://[<username>@]<hostname>[:<port>]/[<path>][?<query parameter>...]
<b><a name="line893">893  </a></b>     *             <path> = [<folder>/...]<datacenter>/[<folder>/...]<computeresource>[/<hostsystem>]
<b><a name="line894">894  </a></b>     *
<b><a name="line895">895  </a></b>     * If no port is specified the default port is set dependent on the scheme and
<b><a name="line896">896  </a></b>     * transport parameter:
<b><a name="line897">897  </a></b>     * - vpx+http  80
<b><a name="line898">898  </a></b>     * - vpx+https 443
<b><a name="line899">899  </a></b>     * - esx+http  80
<b><a name="line900">900  </a></b>     * - esx+https 443
<b><a name="line901">901  </a></b>     * - gsx+http  8222
<b><a name="line902">902  </a></b>     * - gsx+https 8333
<b><a name="line903">903  </a></b>     *
<b><a name="line904">904  </a></b>     * For a vpx:// connection <path> references a host managed by the vCenter.
<b><a name="line905">905  </a></b>     * In case the host is part of a cluster then <computeresource> is the cluster
<b><a name="line906">906  </a></b>     * name. Otherwise <computeresource> and <hostsystem> are equal and the later
<b><a name="line907">907  </a></b>     * can be omitted. As datacenters and computeresources can be organized in
<b><a name="line908">908  </a></b>     * folders those have to be included in <path>.
<b><a name="line909">909  </a></b>     *
<b><a name="line910">910  </a></b>     * Optional query parameters:
<b><a name="line911">911  </a></b>     * - transport={http|https}
<b><a name="line912">912  </a></b>     * - vcenter={<vcenter>|*}             only useful for an esx:// connection
<b><a name="line913">913  </a></b>     * - no_verify={0|1}
<b><a name="line914">914  </a></b>     * - auto_answer={0|1}
<b><a name="line915">915  </a></b>     * - proxy=[{http|socks|socks4|socks4a|socks5}://]<hostname>[:<port>]
<b><a name="line916">916  </a></b>     *
<b><a name="line917">917  </a></b>     * If no transport parameter is specified https is used.
<b><a name="line918">918  </a></b>     *
<b><a name="line919">919  </a></b>     * The vcenter parameter is only necessary for migration, because the vCenter
<b><a name="line920">920  </a></b>     * server is in charge to initiate a migration between two ESX hosts. The
<b><a name="line921">921  </a></b>     * vcenter parameter can be set to an explicitly hostname or to *. If set to *,
<b><a name="line922">922  </a></b>     * the driver will check if the ESX host is managed by a vCenter and connect to
<b><a name="line923">923  </a></b>     * it. If the ESX host is not managed by a vCenter an error is reported.
<b><a name="line924">924  </a></b>     *
<b><a name="line925">925  </a></b>     * If the no_verify parameter is set to 1, this disables libcurl client checks
<b><a name="line926">926  </a></b>     * of the server's certificate. The default value it 0.
<b><a name="line927">927  </a></b>     *
<b><a name="line928">928  </a></b>     * If the auto_answer parameter is set to 1, the driver will respond to all
<b><a name="line929">929  </a></b>     * virtual machine questions with the default answer, otherwise virtual machine
<b><a name="line930">930  </a></b>     * questions will be reported as errors. The default value it 0.
<b><a name="line931">931  </a></b>     *
<b><a name="line932">932  </a></b>     * The proxy parameter allows to specify a proxy for to be used by libcurl.
<b><a name="line933">933  </a></b>     * The default for the optional <type> part is http and socks is synonymous for
<b><a name="line934">934  </a></b>     * socks5. The optional <port> part allows to override the default port 1080.
<b><a name="line935">935  </a></b>     */
<b><a name="line936">936  </a></b>    static virDrvOpenStatus
<b><a name="line937">937  </a></b>    esxOpen(virConnectPtr conn, virConnectAuthPtr auth,
<b><a name="line938">938  </a></b>            unsigned int flags)
<b><a name="line939">939  </a></b>    {
<b><a name="line940">940  </a></b>        virDrvOpenStatus result = VIR_DRV_OPEN_ERROR;
<b><a name="line941">941  </a></b>        char *plus;
<b><a name="line942">942  </a></b>        esxPrivate *priv = NULL;
<b><a name="line943">943  </a></b>        char *potentialVCenterIpAddress = NULL;
<b><a name="line944">944  </a></b>        char vCenterIpAddress[NI_MAXHOST] = "";
<b><a name="line945">945  </a></b>    
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:0"></a>
<b>(1) Event cond_false</b>: </font></td>
<td><font color="green">Condition "__unsuppflags", taking false branch</font></td>
</tr>
<tr><td><font color="green">
<a name="error:1"></a>
<b>(2) Event if_end</b>: </font></td>
<td><font color="green">End of if statement</font></td>
</tr>
</table>
<pre><b><a name="line946">946  </a></b>     virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
<b><a name="line947">947  </a></b>    
<b><a name="line948">948  </a></b>        /* Decline if the URI is NULL or the scheme is NULL */
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:2"></a>
<b>(3) Event cond_false</b>: </font></td>
<td><font color="green">Condition "conn->uri == NULL", taking false branch</font></td>
</tr>
<tr><td><font color="green">
<a name="error:3"></a>
<b>(4) Event cond_false</b>: </font></td>
<td><font color="green">Condition "conn->uri->scheme == NULL", taking false branch</font></td>
</tr>
</table>
<pre><b><a name="line949">949  </a></b>     if (conn->uri == NULL || conn->uri->scheme == NULL) {
<b><a name="line950">950  </a></b>            return VIR_DRV_OPEN_DECLINED;
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:4"></a>
<b>(5) Event if_end</b>: </font></td>
<td><font color="green">End of if statement</font></td>
</tr>
</table>
<pre><b><a name="line951">951  </a></b>     }
<b><a name="line952">952  </a></b>    
<b><a name="line953">953  </a></b>        /* Decline if the scheme is not one of {vpx|esx|gsx} */
<b><a name="line954">954  </a></b>        plus = strchr(conn->uri->scheme, '+');
<b><a name="line955">955  </a></b>    
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:5"></a>
<b>(6) Event cond_true</b>: </font></td>
<td><font color="green">Condition "plus == NULL", taking true branch</font></td>
</tr>
</table>
<pre><b><a name="line956">956  </a></b>     if (plus == NULL) {
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:6"></a>
<b>(7) Event cond_false</b>: </font></td>
<td><font color="green">Condition "c_strcasecmp(conn->uri->scheme, "vpx") != 0", taking false branch</font></td>
</tr>
</table>
<pre><b><a name="line957">957  </a></b>         if (STRCASENEQ(conn->uri->scheme, "vpx") &&
<b><a name="line958">958  </a></b>                STRCASENEQ(conn->uri->scheme, "esx") &&
<b><a name="line959">959  </a></b>                STRCASENEQ(conn->uri->scheme, "gsx")) {
<b><a name="line960">960  </a></b>                return VIR_DRV_OPEN_DECLINED;
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:7"></a>
<b>(8) Event if_end</b>: </font></td>
<td><font color="green">End of if statement</font></td>
</tr>
</table>
<pre><b><a name="line961">961  </a></b>         }
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:8"></a>
<b>(9) Event if_fallthrough</b>: </font></td>
<td><font color="green">Falling through to end of if statement</font></td>
</tr>
</table>
<pre><b><a name="line962">962  </a></b>     } else {
<b><a name="line963">963  </a></b>            if (plus - conn->uri->scheme != 3 ||
<b><a name="line964">964  </a></b>                (STRCASENEQLEN(conn->uri->scheme, "vpx", 3) &&
<b><a name="line965">965  </a></b>                 STRCASENEQLEN(conn->uri->scheme, "esx", 3) &&
<b><a name="line966">966  </a></b>                 STRCASENEQLEN(conn->uri->scheme, "gsx", 3))) {
<b><a name="line967">967  </a></b>                return VIR_DRV_OPEN_DECLINED;
<b><a name="line968">968  </a></b>            }
<b><a name="line969">969  </a></b>    
<b><a name="line970">970  </a></b>            virReportError(VIR_ERR_INVALID_ARG,
<b><a name="line971">971  </a></b>                           _("Transport '%s' in URI scheme is not supported, try again "
<b><a name="line972">972  </a></b>                             "without the transport part"), plus + 1);
<b><a name="line973">973  </a></b>            return VIR_DRV_OPEN_ERROR;
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:9"></a>
<b>(10) Event if_end</b>: </font></td>
<td><font color="green">End of if statement</font></td>
</tr>
</table>
<pre><b><a name="line974">974  </a></b>     }
<b><a name="line975">975  </a></b>    
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:10"></a>
<b>(11) Event cond_false</b>: </font></td>
<td><font color="green">Condition "c_strcasecmp(conn->uri->scheme, "vpx") != 0", taking false branch</font></td>
</tr>
</table>
<pre><b><a name="line976">976  </a></b>     if (STRCASENEQ(conn->uri->scheme, "vpx") &&
<b><a name="line977">977  </a></b>            conn->uri->path != NULL && STRNEQ(conn->uri->path, "/")) {
<b><a name="line978">978  </a></b>            VIR_WARN("Ignoring unexpected path '%s' for non-vpx scheme '%s'",
<b><a name="line979">979  </a></b>                     conn->uri->path, conn->uri->scheme);
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:11"></a>
<b>(12) Event if_end</b>: </font></td>
<td><font color="green">End of if statement</font></td>
</tr>
</table>
<pre><b><a name="line980">980  </a></b>     }
<b><a name="line981">981  </a></b>    
<b><a name="line982">982  </a></b>        /* Require server part */
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:12"></a>
<b>(13) Event cond_false</b>: </font></td>
<td><font color="green">Condition "conn->uri->server == NULL", taking false branch</font></td>
</tr>
</table>
<pre><b><a name="line983">983  </a></b>     if (conn->uri->server == NULL) {
<b><a name="line984">984  </a></b>            virReportError(VIR_ERR_INVALID_ARG, "%s",
<b><a name="line985">985  </a></b>                           _("URI is missing the server part"));
<b><a name="line986">986  </a></b>            return VIR_DRV_OPEN_ERROR;
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:13"></a>
<b>(14) Event if_end</b>: </font></td>
<td><font color="green">End of if statement</font></td>
</tr>
</table>
<pre><b><a name="line987">987  </a></b>     }
<b><a name="line988">988  </a></b>    
<b><a name="line989">989  </a></b>        /* Require auth */
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:14"></a>
<b>(15) Event cond_false</b>: </font></td>
<td><font color="green">Condition "auth == NULL", taking false branch</font></td>
</tr>
<tr><td><font color="green">
<a name="error:15"></a>
<b>(16) Event cond_false</b>: </font></td>
<td><font color="green">Condition "auth->cb == NULL", taking false branch</font></td>
</tr>
</table>
<pre><b><a name="line990">990  </a></b>     if (auth == NULL || auth->cb == NULL) {
<b><a name="line991">991  </a></b>            virReportError(VIR_ERR_INVALID_ARG, "%s",
<b><a name="line992">992  </a></b>                           _("Missing or invalid auth pointer"));
<b><a name="line993">993  </a></b>            return VIR_DRV_OPEN_ERROR;
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:16"></a>
<b>(17) Event if_end</b>: </font></td>
<td><font color="green">End of if statement</font></td>
</tr>
</table>
<pre><b><a name="line994">994  </a></b>     }
<b><a name="line995">995  </a></b>    
<b><a name="line996">996  </a></b>        /* Allocate per-connection private data */
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="red">
<a name="error:17"></a>
<b>(18) Event alloc_arg</b>: </font></td>
<td><font color="red">"virAlloc(void *, size_t)" allocates memory that is stored into "priv". [<a href="164viralloc.c.html#model:virAlloc:a602cc7eca89056311937cf01d67144f">details</a>]</font></td>
</tr>
<tr><td><font color="green">
<a name="error:18"></a>
<b>(19) Event cond_false</b>: </font></td>
<td><font color="green">Condition "virAlloc(&priv, 56UL /* sizeof (*priv) */) < 0", taking false branch</font></td>
</tr>
<tr><td><font color="red">Also see events: </font></td>
<td><font color="red">[<a href="#error:24">leaked_storage</a>]</font></td></tr>
</table>
<pre><b><a name="line997">997  </a></b>     if (VIR_ALLOC(priv) < 0) {
<b><a name="line998">998  </a></b>            virReportOOMError();
<b><a name="line999">999  </a></b>            goto cleanup;
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:19"></a>
<b>(20) Event if_end</b>: </font></td>
<td><font color="green">End of if statement</font></td>
</tr>
</table>
<pre><b><a name="line1000">1000 </a></b>            }
<b><a name="line1001">1001 </a></b>   
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:20"></a>
<b>(21) Event cond_true</b>: </font></td>
<td><font color="green">Condition "esxUtil_ParseUri(&priv->parsedUri, conn->uri) < 0", taking true branch</font></td>
</tr>
</table>
<pre><b><a name="line1002">1002 </a></b>            if (esxUtil_ParseUri(&priv->parsedUri, conn->uri) < 0) {
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:21"></a>
<b>(22) Event goto</b>: </font></td>
<td><font color="green">Jumping to label "cleanup"</font></td>
</tr>
</table>
<pre><b><a name="line1003">1003 </a></b>                goto cleanup;
<b><a name="line1004">1004 </a></b>       }
<b><a name="line1005">1005 </a></b>   
<b><a name="line1006">1006 </a></b>       priv->maxVcpus = -1;
<b><a name="line1007">1007 </a></b>       priv->supportsVMotion = esxVI_Boolean_Undefined;
<b><a name="line1008">1008 </a></b>       priv->supportsLongMode = esxVI_Boolean_Undefined;
<b><a name="line1009">1009 </a></b>       priv->usedCpuTimeCounterId = -1;
<b><a name="line1010">1010 </a></b>   
<b><a name="line1011">1011 </a></b>       /*
<b><a name="line1012">1012 </a></b>        * Set the port dependent on the transport protocol if no port is
<b><a name="line1013">1013 </a></b>        * specified. This allows us to rely on the port parameter being
<b><a name="line1014">1014 </a></b>        * correctly set when building URIs later on, without the need to
<b><a name="line1015">1015 </a></b>        * distinguish between the situations port == 0 and port != 0
<b><a name="line1016">1016 </a></b>        */
<b><a name="line1017">1017 </a></b>       if (conn->uri->port == 0) {
<b><a name="line1018">1018 </a></b>           if (STRCASEEQ(conn->uri->scheme, "vpx") ||
<b><a name="line1019">1019 </a></b>               STRCASEEQ(conn->uri->scheme, "esx")) {
<b><a name="line1020">1020 </a></b>               if (STRCASEEQ(priv->parsedUri->transport, "https")) {
<b><a name="line1021">1021 </a></b>                   conn->uri->port = 443;
<b><a name="line1022">1022 </a></b>               } else {
<b><a name="line1023">1023 </a></b>                   conn->uri->port = 80;
<b><a name="line1024">1024 </a></b>               }
<b><a name="line1025">1025 </a></b>           } else { /* GSX */
<b><a name="line1026">1026 </a></b>               if (STRCASEEQ(priv->parsedUri->transport, "https")) {
<b><a name="line1027">1027 </a></b>                   conn->uri->port = 8333;
<b><a name="line1028">1028 </a></b>               } else {
<b><a name="line1029">1029 </a></b>                   conn->uri->port = 8222;
<b><a name="line1030">1030 </a></b>               }
<b><a name="line1031">1031 </a></b>           }
<b><a name="line1032">1032 </a></b>       }
<b><a name="line1033">1033 </a></b>   
<b><a name="line1034">1034 </a></b>       if (STRCASEEQ(conn->uri->scheme, "esx") ||
<b><a name="line1035">1035 </a></b>           STRCASEEQ(conn->uri->scheme, "gsx")) {
<b><a name="line1036">1036 </a></b>           /* Connect to host */
<b><a name="line1037">1037 </a></b>           if (esxConnectToHost(priv, conn, auth,
<b><a name="line1038">1038 </a></b>                                &potentialVCenterIpAddress) < 0) {
<b><a name="line1039">1039 </a></b>               goto cleanup;
<b><a name="line1040">1040 </a></b>           }
<b><a name="line1041">1041 </a></b>   
<b><a name="line1042">1042 </a></b>           /* Connect to vCenter */
<b><a name="line1043">1043 </a></b>           if (priv->parsedUri->vCenter != NULL) {
<b><a name="line1044">1044 </a></b>               if (STREQ(priv->parsedUri->vCenter, "*")) {
<b><a name="line1045">1045 </a></b>                   if (potentialVCenterIpAddress == NULL) {
<b><a name="line1046">1046 </a></b>                       virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
<b><a name="line1047">1047 </a></b>                                      _("This host is not managed by a vCenter"));
<b><a name="line1048">1048 </a></b>                       goto cleanup;
<b><a name="line1049">1049 </a></b>                   }
<b><a name="line1050">1050 </a></b>   
<b><a name="line1051">1051 </a></b>                   if (virStrcpyStatic(vCenterIpAddress,
<b><a name="line1052">1052 </a></b>                                       potentialVCenterIpAddress) == NULL) {
<b><a name="line1053">1053 </a></b>                       virReportError(VIR_ERR_INTERNAL_ERROR,
<b><a name="line1054">1054 </a></b>                                      _("vCenter IP address %s too big for destination"),
<b><a name="line1055">1055 </a></b>                                      potentialVCenterIpAddress);
<b><a name="line1056">1056 </a></b>                       goto cleanup;
<b><a name="line1057">1057 </a></b>                   }
<b><a name="line1058">1058 </a></b>               } else {
<b><a name="line1059">1059 </a></b>                   if (esxUtil_ResolveHostname(priv->parsedUri->vCenter,
<b><a name="line1060">1060 </a></b>                                               vCenterIpAddress, NI_MAXHOST) < 0) {
<b><a name="line1061">1061 </a></b>                       goto cleanup;
<b><a name="line1062">1062 </a></b>                   }
<b><a name="line1063">1063 </a></b>   
<b><a name="line1064">1064 </a></b>                   if (potentialVCenterIpAddress != NULL &&
<b><a name="line1065">1065 </a></b>                       STRNEQ(vCenterIpAddress, potentialVCenterIpAddress)) {
<b><a name="line1066">1066 </a></b>                       virReportError(VIR_ERR_INTERNAL_ERROR,
<b><a name="line1067">1067 </a></b>                                      _("This host is managed by a vCenter with IP "
<b><a name="line1068">1068 </a></b>                                        "address %s, but a mismachting vCenter '%s' "
<b><a name="line1069">1069 </a></b>                                        "(%s) has been specified"),
<b><a name="line1070">1070 </a></b>                                      potentialVCenterIpAddress, priv->parsedUri->vCenter,
<b><a name="line1071">1071 </a></b>                                      vCenterIpAddress);
<b><a name="line1072">1072 </a></b>                       goto cleanup;
<b><a name="line1073">1073 </a></b>                   }
<b><a name="line1074">1074 </a></b>               }
<b><a name="line1075">1075 </a></b>   
<b><a name="line1076">1076 </a></b>               if (esxConnectToVCenter(priv, conn, auth,
<b><a name="line1077">1077 </a></b>                                       vCenterIpAddress,
<b><a name="line1078">1078 </a></b>                                       priv->host->ipAddress) < 0) {
<b><a name="line1079">1079 </a></b>                   goto cleanup;
<b><a name="line1080">1080 </a></b>               }
<b><a name="line1081">1081 </a></b>           }
<b><a name="line1082">1082 </a></b>   
<b><a name="line1083">1083 </a></b>           priv->primary = priv->host;
<b><a name="line1084">1084 </a></b>       } else { /* VPX */
<b><a name="line1085">1085 </a></b>           /* Connect to vCenter */
<b><a name="line1086">1086 </a></b>           if (esxConnectToVCenter(priv, conn, auth,
<b><a name="line1087">1087 </a></b>                                   conn->uri->server,
<b><a name="line1088">1088 </a></b>                                   NULL) < 0) {
<b><a name="line1089">1089 </a></b>               goto cleanup;
<b><a name="line1090">1090 </a></b>           }
<b><a name="line1091">1091 </a></b>   
<b><a name="line1092">1092 </a></b>           priv->primary = priv->vCenter;
<b><a name="line1093">1093 </a></b>       }
<b><a name="line1094">1094 </a></b>   
<b><a name="line1095">1095 </a></b>       /* Setup capabilities */
<b><a name="line1096">1096 </a></b>       priv->caps = esxCapsInit(priv);
<b><a name="line1097">1097 </a></b>   
<b><a name="line1098">1098 </a></b>       if (priv->caps == NULL) {
<b><a name="line1099">1099 </a></b>           goto cleanup;
<b><a name="line1100">1100 </a></b>       }
<b><a name="line1101">1101 </a></b>   
<b><a name="line1102">1102 </a></b>       conn->privateData = priv;
<b><a name="line1103">1103 </a></b>       priv = NULL;
<b><a name="line1104">1104 </a></b>       result = VIR_DRV_OPEN_SUCCESS;
<b><a name="line1105">1105 </a></b>   
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:22"></a>
<b>(23) Event label</b>: </font></td>
<td><font color="green">Reached label "cleanup"</font></td>
</tr>
</table>
<pre><b><a name="line1106">1106 </a></b>          cleanup:
<b><a name="line1107">1107 </a></b>       esxFreePrivate(&priv);
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="green">
<a name="error:23"></a>
<b>(24) Event cond_true</b>: </font></td>
<td><font color="green">Condition "1", taking true branch</font></td>
</tr>
</table>
<pre><b><a name="line1108">1108 </a></b>            VIR_FREE(potentialVCenterIpAddress);
<b><a name="line1109">1109 </a></b>   
</pre>
<table summary="events" bgcolor=#e0e0e0>
<tr><td><font color="red">
<a name="error:24"></a>
<a name="error"></a>
<b>(25) Event leaked_storage</b>: </font></td>
<td><font color="red">Variable "priv" going out of scope leaks the storage it points to.</font></td>
</tr>
<tr><td><font color="red">Also see events: </font></td>
<td><font color="red">[<a href="#error:17">alloc_arg</a>]</font></td></tr>
</table>
<pre><b><a name="line1110">1110 </a></b>            return result;
<b><a name="line1111">1111 </a></b>   }
<b><a name="line1112">1112 </a></b>   
<b><a name="line1113">1113 </a></b>   
<b><a name="line1114">1114 </a></b>   


















































</pre></body>
</html>