Rev 6784 | Rev 6874 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@LANGUAGE="VBSCRIPT"%><%'====================================================='' Build Status Information''=====================================================%><%Option explicit' Good idea to set when using redirectResponse.Expires = 0 ' always load the page, dont store%><!--#include file="common/conf.asp"--><!--#include file="common/globals.asp"--><!--#include file="common/formating.asp"--><!--#include file="common/qstr.asp"--><!--#include file="common/common_subs.asp"--><!--#include file="common/_form_window_common.asp"--><!--#include file="_action_buttons.asp"--><!--#include file="class/classActionButtonControl.asp"--><!--#include file="common/daemon_instructions.asp"--><!--#include file="common/common_daemon.asp"--><% '------------ ACCESS CONTROL ------------------ %><!--#include file="_access_control_login_optional.asp"--><!--#include file="_access_control_general.asp"--><!--#include file="_access_control_action_project.asp"--><% '------------ Scripts -------------------------- %><%'------------ Variable Definition -------------Dim rsQryDim parRtagIdDim query_stringDim rcon_idDim shref_baseDim canControl'------------ Constants Declaration -----------'------------ Variable Init -------------------parRtagId = Request("rtag_id")objPMod.PersistInQryString("rtag_id")canControl = canActionControlInProject("BuildControl")'----------------------------------------------Sub IncludePackages()On Error Resume NextobjEH.ErrorRedirect = TRUEOraDatabase.Parameters.Add "PV_ID_LIST", Request("pv_id_list"), ORAPARM_INPUT, ORATYPE_VARCHAR2OraDatabase.Parameters.Add "RTAG_ID", parRtag_id, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBERobjEH.TryORA ( OraSession )OraDatabase.ExecuteSQL "BEGIN Ripple_Package( :PV_ID_LIST, :RTAG_ID, :USER_ID ); END;"objEH.CatchORA ( OraSession )OraDatabase.Parameters.Remove "PV_ID_LIST"OraDatabase.Parameters.Remove "RTAG_ID"OraDatabase.Parameters.Remove "USER_ID"End Sub'--------------------------------------------------------------------------------------------------------------------------'------------ RUN BEFORE PAGE RENDER ----------shref_base = "http://" & archive_server & "/devl/abtlog/"'----------------------------------------------------' --- RUN onPostBack ---If Request("action") <> "" AND objAccessControl.UserLogedIn ThenIf objEH.Finally ThenIf Request("action") = "include" ThenCall IncludePackages ()' Redirect to the current page so that a refesh will not' cause a form re-submit.Call Destroy_All_ObjectsResponse.Redirect(ScriptName & "?rtag_id=" & parRtagId)ElseCall OpenInWindow ( "dependencies.asp?rtag_id="& parRtagId )End IfEnd IfEnd If'----------------------------------------------Sub ShowBuildStatus<!-- FORM START -->objFormComponent.FormName = "FormName"objFormComponent.Action = ScriptName &"?rtag_id="& parRtagIdCall objFormComponent.FormStart()%><table class="embedded_table" style="margin-bottom:20px"><tr><td><tr><td><table class="rounded_box embedded_table"><caption nowrap class="form_ttl tleft">BUILD STATUS INFORMATION</caption><tr><td><div class='round_box_pad'><!-- MESSAGE +++++++++++++++++++++++++++++++++++++++++++++++++++ --><!--#include file="messages/_msg_inline.asp"--><!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --><table width="100%" border="0" cellspacing="2" cellpadding="0"><tr><td colspan=4 class='err_alert'><font size='2'><b>Packages Excluded From Build</b></font></td></tr><tr><td></td><td colspan=3 class="body_row"><fieldset class="fset" align="right" style=" border: 1px groove;">Show<input type="checkbox" checked value=0 name="showManual" id="manualCause" onClick="toggleDispClass('manualCause',1);">Manual Exclusions<input type="checkbox" checked value=0 name="showCause" id="rootCause" onClick="toggleDispClass('rootCause',1);">Config Errors<input type="checkbox" checked value=0 name="showNoEnv" id="rootNoEnv" onClick="toggleDispClass('rootNoEnv',1);">Env Errors<input type="checkbox" checked value=0 name="showFile" id="rootFile" onClick="toggleDispClass('rootFile',1);">Build Errors<input type="checkbox" checked value=0 name="showIndirect" id="rootIndirect" onClick="toggleDispClass('rootIndirect',1);">Indirect Exclusions</fieldset></td></tr><tr><td class="err_alert body_lcol"><b>Directly</b></td><td valign="top" nowrap class="body_lcol">Package</td><td valign="top" nowrap class="body_lcol">Version</td><td valign="top" nowrap class="body_lcol">Root Cause</td></tr><tr><%query_string = " select pkg.pkg_name, pv.pkg_version, pv.pv_id, dnr.rtag_id, dnr.root_cause, dnr.root_file, pv.pv_description, dnr.root_pv_id"&_" from do_not_ripple dnr, package_versions pv, packages pkg"&_" where dnr.rtag_id = "& parRtagId &_" and pv.pv_id = dnr.pv_id"&_" and pkg.pkg_id = pv.pkg_id"&_" and nvl(dnr.root_pv_id, -1) < 0 " &_" order by pkg_name"Set rsQry = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )'--- Render rows ---Do While (NOT rsQry.BOF) AND (NOT rsQry.EOF)Dim rowClassDim rowData'' Manually excluded packages have no root_cause or root_file or root_pv_id'' root_file, if supplied, indicates a build failure log file exists' this should always prevail over the textual root_cause'If (IsNull(rsQry("root_file")) AND IsNull(rsQry("root_cause"))) ThenrowData = "Manually Excluded"rowClass = "manualCause"ElseIf IsNull(rsQry("root_file")) ThenrowData = rsQry("root_cause")If InStr(rowData, "no build env") ThenrowClass = "rootNoEnv"ElserowClass = "rootCause"End IfElserowClass = "rootFile"rowData = "<a class=""txt_linked"" title=""" & rsQry("root_file") &_" Log file may have expired."" " &_"href=""" & shref_base & rsQry("root_file") & """>" &_"Build Failure Log File</a>"End IfDim checkBoxData, checkBoxClassIf NiceInt(rsQry("root_pv_id"), -1) = -1 ThencheckBoxData = ""checkBoxClass = "directInclude"ElsecheckBoxData = "disabled"checkBoxClass = ""End If%><tr class="<%=rowClass%>"><td colspan="5" class=body_line></td></tr><tr class="<%=rowClass%>"><td nowrap width="1%"><a name="PkgName_<%=rsQry("pkg_name")%>"><input class="<%=checkBoxClass%>" type="checkbox" value="<%=rsQry("pv_id")%>" name="pv_id_list" <%=checkBoxData%>></a></td><td nowrap class="body_rowg"><a class="txt_linked" href="dependencies.asp?pv_id=<%=rsQry("pv_id")%>&rtag_id=<%=rsQry("rtag_id")%>" title="<%=rsQry("pv_description")%>"><%=rsQry("pkg_name")%></a></td><td nowrap class="body_rowg"><%=rsQry("pkg_version")%></td><td nowrap class="body_rowg"><%=rowData%></td></tr><%rsQry.MoveNextLoopquery_string = " select pv.pv_id, pkg.pkg_name, pv.pkg_version, qkg.pkg_name, dnr.rtag_id, pv.pv_description"&_" from do_not_ripple dnr, package_versions pv, package_versions qv, packages pkg, packages qkg"&_" where dnr.rtag_id = "& parRtagId &_" and pv.pv_id = dnr.pv_id"&_" and pkg.pkg_id = pv.pkg_id"&_" and qv.pv_id = dnr.root_pv_id"&_" and qkg.pkg_id = qv.pkg_id"&_" and nvl(dnr.root_pv_id, -1) > 0"&_" order by pkg.pkg_name"Dim rsQry2Set rsQry2 = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )' -- DISPLAY INDIRECTLY EXCLUDED PACKAGES'--- Render rows ---If rsQry2.recordCount > 0 Then%><tr><td class="body_lcol err_alert"><b>Indirectly</b></td><td valign="top" nowrap class="body_lcol">Package</td><td valign="top" nowrap class="body_lcol">Version</td><td valign="top" nowrap class="body_lcol">Root Cause Package</td></tr><%End IfDo While (NOT rsQry2.BOF) AND (NOT rsQry2.EOF)%><tr class="rootIndirect"><td colspan="5" class=body_line></td></tr><tr class="rootIndirect"><td nowrap><input type="checkbox" value=0 disabled=true name="notused"></td><td nowrap class="body_rowg"><a class="txt_linked" href="dependencies.asp?pv_id=<%=rsQry2(0)%>&rtag_id=<%=rsQry2(4)%>" title="<%=rsQry2(5)%>"><%=rsQry2(1)%></a></td><td nowrap class="body_rowg"><%=rsQry2(2)%></td><td nowrap class="body_rowg"><a href="#PkgName_<%=rsQry2(3)%>" style="text-decoration: none;">» <%=rsQry2(3)%></a></td></tr><%rsQry2.MoveNextLoop%></table><table class="full_table form_bg_light"><tr><td><input id="toggleDirect"<%=Iif(rsQry.RecordCount > 0, "", " disabled ")%>type="checkbox" title="Toggle all visible directly excluded packages"></td><td align="right"><%Response.Write(objFormComponent.SubmitButton ( "Include", "name='IncludeSubmit' id='IncludeSubmit' class='form_btn' disabled style='color:silver' onClick=""return vixConfirm('Are you sure you want to include these packages for building?',{title:'Include Packages', post : 'FormName'})""" ))Response.Write(objPMod.ComposeHiddenTags())%></td></tr></table></div></td></tr></table></td></tr></table><!-- ACTION BUTTONS ----------------------------------------------><input type="hidden" name="action" value="include"><!-- ACTION BUTTONS END ------------------------------------------><%Call objFormComponent.FormEnd()%><!-- FORM END -----------------------------------------------------><%rsQry.Close()Set rsQry = nothingrsQry2.Close()Set rsQry2 = nothingEnd Sub'-------------------------------------------------'Sub ShowDaemonStatus%><table class="embedded_table" style="margin-bottom:20px"><tr><td><table class="rounded_box embedded_table"><caption><table align="center" class="full_table"><tr><td nowrap class="form_ttl"><p>DAEMON STATUS INFORMATION</p></td><td valign="bottom" class="body_rowg">Last Build: <%=GetLastBuildAge(parRtagId)%> [<%=GetModifiedSeqNo(parRtagId)%>]</td><td align="right" valign="bottom"><a class="txt_linked" href="<%=scriptName%>?rtag_id=<%=parRtagId%>" title="Refresh Page">[Refresh]</a></td></tr></table></caption><tr><td><div class='round_box_pad'><!-- MESSAGE +++++++++++++++++++++++++++++++++++++++++++++++++++ --><!--#include file="messages/_msg_inline.asp"--><!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --><br><table width="100%" border="0" cellspacing="2" cellpadding="0"><%Dim bInactiveMachine : bInactiveMachine = falseDim indefinitelyPaused : indefinitelyPaused = Indefinitely_Paused()' Insert a warning into the page if the build daemons are indefintely paused.If indefinitelyPaused Then %><tr><span class='err_alert'><font size='2'><b>WARNING: Build Daemons are all stopped - please contact an administrator</b></font></span></tr><%End If%><td width="9%" valign="top"></td><tr><td valign="top" nowrap class="body_lcol">Daemon Host</td><td valign="top" nowrap class="body_lcol">Machine Type</td><td valign="top" nowrap class="body_lcol">Mode</td><td valign="top" nowrap class="body_lcol">Run Level</td><td valign="top" nowrap class="body_lcol">Current Package</td><td valign="top" nowrap class="body_lcol">Est Duration<%=Quick_Help("h_buildtime")%></td><td valign="top" nowrap class="body_lcol">Last Change<%=Quick_Help("h_lastchange")%></td><td valign="top" nowrap class="body_lcol">Control State</td></tr><%' Get Build Information for this Releasequery_string = _"SELECT rc.rcon_id, display_name, gbe_value, daemon_mode, NVL(ACTIVE, 'U') AS ACTIVE," &_" rl.pause, rl.current_run_level, rl.current_pkg_id_being_built, TRUNC (86400*(SYSDATE - rl.KEEP_ALIVE)) AS delta," &_" pk.pkg_name, rl.current_pv_id, pv.build_time, TRUNC (86400*(SYSDATE - rl.LAST_BUILD)) AS build_delta" &_" FROM release_config rc," &_" gbe_machtype gm," &_" build_machine_config bm," &_" run_level rl," &_" packages pk," &_" package_versions pv" &_" WHERE rc.rtag_id = " & parRtagId &_" AND gm.gbe_id = rc.gbe_id" &_" AND rl.rcon_id = rc.rcon_id" &_" AND rc.bmcon_id =bm.bmcon_id(+)" &_" AND pk.pkg_id(+) = rl.current_pkg_id_being_built" &_" AND rl.current_pv_id = pv.pv_id(+)" &_" ORDER BY bm.display_name, rc.rcon_id"Set rsQry = OraDatabase.DbCreateDynaset( query_string, ORADYN_DEFAULT )Do While (NOT rsQry.BOF) AND (NOT rsQry.EOF)Dim pkgNameDim pkgPvidDim pkgBuildTimeDim currentRunLevelDim daemonStateDim deltaDim PkgBuildDeltaDim pkgIdDim bActiveDim estDurationDim daemonModeDim lastChangercon_id = rsQry("rcon_id")' = rsQry("display_name")' = rsQry("gbe_value")daemonMode = rsQry("daemon_mode")bActive = rsQry("ACTIVE")daemonState = rsQry("pause")currentRunLevel = rsQry("current_run_level")pkgId = rsQry("current_pkg_id_being_built")delta = rsQry("delta")pkgName = rsQry("pkg_name")pkgPvid = rsQry("current_pv_id")pkgBuildTime = rsQry("build_time")PkgBuildDelta = rsQry("build_delta")lastChange = NULLbInactiveMachine = FALSEestDuration = NULLIf bActive = "N" Then bInactiveMachine = trueIf IsNull(daemonState) Then daemonState = 0If daemonState = "2" Then pkgId = NullIf IsNull(currentRunLevel) Then currentRunLevel = -1If daemonMode = "M" AND not IsNull(pkgName) Then estDuration = pkgBuildTime & "[" & PkgBuildDelta & "]"If bActive <> "U" Then lastChange = PrettyDelta(delta, daemonState,pkgName )' --- Now render HTML for this release configuration ---%><tr><td colspan="8" class=body_line></td></tr><tr><td nowrap class="body_rowg"><%=rsQry("display_name")%></td><td nowrap class="body_rowg"><%=rsQry("gbe_value")%></td><td nowrap class="body_rowg"><%=Get_Daemon_Mode(daemonMode)%></td><td nowrap class="body_rowg"><%=Get_Run_Level(currentRunLevel, indefinitelyPaused, daemonState, bActive)%></td><td nowrap class="body_rowg"><%=Get_Package_Name(pkgName,parRtagId,pkgPvid, daemonState, bActive)%></td><td nowrap class="body_rowg"><%=estDuration%></td><td nowrap class="body_rowg"><%=lastChange%></td><td nowrap class="body_rowg"><%If NOT indefinitelyPaused ThenIf bActive = "U" ThenElseIf bActive = "N" ThenCall Action_Buttons ( "Daemon Unavailable" )ElseIf daemonState = 0 ThenCall Action_Buttons_State ( "Daemon Pause", canControl )ElseIf daemonState = 1 ThenCall Action_Buttons_State ( "Daemon Resume", canControl )ElseIf daemonState = 2 ThenCall Action_Buttons_State ( "Daemon Start", canControl )ElseCall Action_Buttons_State ( "Daemon Resume", canControl )End IfElse%>Unavailable<%End If%></td></tr><%rsQry.MoveNextLoop%><tr class=form_bg_light><td nowrap class="body_col" colspan=7><%If CheckConfigErrors(parRtagId) OR bInactiveMachine Then%><span class="err_alert"> Daemon configuration errors detected</span><a class="txt_linked" href="release_config.asp?rtag_id=<%=parRtagId%>"><img src="images/i_link.gif" hspace="2" border="0" align="absmiddle" title="Goto Configuration"></a><%End If%></td><td valign="bottom" nowrap class="body_col"><%If (rsQry.RecordCount > 0) AND NOT indefinitelyPaused ThenCall Action_Buttons_State ( "Daemon Control All", objAccessControl.UserLogedIn AND canControl )Else%> <%End If%></td></tr><%rsQry.Close()Set rsQry = nothing%></table></div></td></tr></table></td></table><%End Sub'-------------------------------------------------'Sub ShowDaemonInstructions%><!-- Daemon Instructions Display --><table class="embedded_table" style="margin-bottom:10px"><tr><td><table class="rounded_box embedded_table"><caption nowrap class="form_ttl tleft">DAEMON INSTRUCTIONS FOR THIS RELEASE</caption><tr><td><div class='round_box_pad'><table width="100%" border="0" cellspacing="2" cellpadding="0"><tr><td align="left" nowrap class="body_lcol">Operation</td><td align="left" nowrap class="body_lcol">Package</td><td align="left" nowrap class="body_lcol">Version</td><td align="left" nowrap class="body_lcol">Scheduled Time<%=Quick_Help("SchedTime")%><td align="left" nowrap class="body_lcol">Repeat</td><td align="left" nowrap class="body_lcol">In Progress</td></tr><%Dim PkgVersionDim UserNameDim UserEmailDim bInProgressDim bIsOverdueDim bIsReadySet rsQry = OraDatabase.DbCreateDynaset( "SELECT DAEMON_INSTRUCTIONS_ID,"&_" OP_CODE,"&_" RTAG_ID,"&_" PV_ID,"&_" SCHEDULED_DATETIME,"&_" REPEAT_SECS,"&_" ADDED_DATETIME,"&_" USER_ID,"&_" IN_PROGRESS,"&_" (CASE WHEN SCHEDULED_DATETIME <= SYSDATE THEN 1 ELSE 0 END) AS READY,"&_" (CASE WHEN (SCHEDULED_DATETIME + (1/144)) < SYSDATE THEN 1 ELSE 0 END) AS OVERDUE"&_" FROM DAEMON_INSTRUCTIONS "&_" WHERE RTAG_ID = "& parRtagId &_" ORDER BY PV_ID, SCHEDULED_DATETIME, DAEMON_INSTRUCTIONS_ID", ORADYN_DEFAULT )While (NOT rsQry.BOF) AND (NOT rsQry.EOF)If IsNull(rsQry("IN_PROGRESS")) OR rsQry("IN_PROGRESS") = "0" ThenbInProgress = FalseElsebInProgress = TrueEnd If' only flag as overdue if time threshold has been met but the daemon has not marked the instruction as being in progress.If rsQry("OVERDUE") AND NOT bInProgress ThenbIsOverdue = TrueElsebIsOverdue = FalseEnd IfIf rsQry("READY") ThenbIsReady = TrueElsebIsReady = FalseEnd If' Get as much info about the package as we canDim PkgId: PkgId = 0Dim PkgName : PkgName = "N/A"If (NOT IsNull(rsQry("PV_ID"))) AND (rsQry("PV_ID") <> "") ThenCall Get_Pkg_Short_Info(rsQry("PV_ID"), PkgId, PkgName, PkgVersion, NULL, NULL, NULL)End If%><tr><td colspan="6" class=body_line></td></tr><tr><td align="left" valign="top" class="body_rowg nowrap"><%=DaemonInstructionOperationName(rsQry("OP_CODE"))%></td><td align="left" valign="top" class="body_rowg"><%If (NOT IsNull(rsQry("PV_ID"))) AND (rsQry("PV_ID") <> "") Then%><a href='fixed_issues.asp?rtag_id=<%=rsQry("RTAG_ID")%>&pv_id=<%=rsQry("PV_ID")%>'><%=PkgName%><%Else%><%=PkgName%><%End If%></td><td align="left" valign="top" class="body_rowg"><%=PkgVersion%></td><td align="left" valign="top" class="body_rowg" <%If bIsOverdue Then%>style=color:Red<%Elseif bIsReady Then%>style=color:Green<%End If%>><%=DisplayDateTime(rsQry("SCHEDULED_DATETIME"))%></td><td align="left" valign="top" class="body_rowg"><%=DaemonInstructionRepeatString(rsQry("OP_CODE"), rsQry("REPEAT_SECS"))%></td><td align="left" valign="top" class="body_rowg"><%If bInProgress Then%>YES<%Else%>NO<%End If%></td></tr><%rsQry.MoveNext()WendrsQry.Close()Set rsQry = nothing%></table></div></td></tr></table></td></tr></table><%End Sub%><html><head><title>Release Manager</title><link rel="shortcut icon" href="<%=FavIcon%>"/><meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link rel="stylesheet" href="images/release_manager_style.css?ver=<%=VixVerNum%>" type="text/css"><link rel="stylesheet" href="images/navigation.css?ver=<%=VixVerNum%>" type="text/css"><script language="JavaScript" src="images/common.js?ver=<%=VixVerNum%>"></script><!--#include file="_jquery_includes.asp"--><!-- TIPS --><script type="text/javascript" src="scripts/json2.js?ver=<%=VixVerNum%>"></script><script language="JavaScript" src="images/tipster.js?ver=<%=VixVerNum%>"></script><script language="JavaScript" src="images/_help_tips.js?ver=<%=VixVerNum%>"></script><script language="JavaScript" type="text/JavaScript">formTips.tips.h_buildtime = stdTip(300, 'Est. Build Duration', 'Estimated build duration in seconds. Based simply on the last build duration for this package');formTips.tips.h_lastchange = stdTip(300, 'Last Change', 'This is an indication of the time since the daemon interogated the database.' +'<p>Short times will be shown as seconds. Longer times will be shown as a time within ' +'the last 24 hours. Longer times will be shown as a date.');</script><script language="JavaScript" type="text/JavaScript">$(document).ready(function() {//// Init the check boxesInitShow();isChecked('pv_id_list','IncludeSubmit');<% If objAccessControl.UserLogedIn Then %>// Attach function to toggle checkbox// toggle all visible checkboxes$('#toggleDirect').click(function(){var state = this.checked;var list = $('.directInclude:visible:enabled');list.prop('checked', state);isChecked('pv_id_list','IncludeSubmit');});$('.directInclude').click(function(){isChecked('pv_id_list','IncludeSubmit');});<%Else%>{// Not logged in - disable boxesvar list = $('.directInclude');list.prop('disabled', true);$('#toggleDirect').prop('disabled', true);}<%End If%>});function InitShow(e){toggleDispClass('rootCause',0);toggleDispClass('rootNoEnv',0);toggleDispClass('rootFile',0);toggleDispClass('rootIndirect',0);toggleDispClass('manualCause',0);}function toggleDispClass(cname,flip){var cookieName = 'RELMGR_BUILDSTATUS';var cv = JSON.parse(getCookie(cookieName));if (!cv)cv = new Object;if (!cv.BuildStatus)cv.BuildStatus = new Object;var state = cv.BuildStatus[cname];if (state === undefined)state = true;if (flip>0)state = !state;cv.BuildStatus[cname] = state;// Reflect the current state in the checkboxvar de = document.getElementById(cname);if (de)de.checked = state;var elements = new Array();elements = getElementsByClassName(cname);for(i in elements ){if (state) {elements[i].style.display = "";}else {elements[i].style.display = "none";}}setCookie(cookieName, JSON.stringify(cv), 365 );}</script><!-- DROPDOWN MENUS --><!--#include file="_menu_def.asp"--><script language="JavaScript1.2" src="images/popup_menu.js?ver=<%=VixVerNum%>"></script></head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0"><!-- HEADER --><!--#include file="_header.asp"--><!-- BODY ----><table class="full_table"><tr><td width="146px" class="panel_bg" valign="top"><%Call BuildMenuPane%></td><td width="100%" rowspan="2" align="center" valign="top" bgcolor="#EEEFEF"><%Call ShowBuildStatus%><%Call ShowDaemonStatus%><%Call ShowDaemonInstructions%></td></tr><tr><td class="panel_bg" valign="bottom" align="center" height="350"><img src="images/img_gears.png" vspace="20" hspace="30"></td></tr></table><!-- FOOTER --><!--#include file="_footer.asp"--></body></html>