From 151458c3a7cd0cd0efaaa8b6f22174c8c4423129 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Wed, 20 Jan 2016 11:37:42 -0500 Subject: [PATCH 01/65] Fixing path to source settings.sh to use SGE_CELL variable. --- phpqstat.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpqstat.conf b/phpqstat.conf index 25aaa2e..a4f162b 100644 --- a/phpqstat.conf +++ b/phpqstat.conf @@ -7,7 +7,7 @@ export SGE_CELL=default RRD_ROOT=/var/www/PHPQstat/rrd WEB_ROOT=/var/www/PHPQstat -source $SGE_ROOT/default/common/settings.sh +source $SGE_ROOT/$SGE_CELL/common/settings.sh # Find all queues in your Batch Queue System QUEUES=$(qconf -sql | cut -d. -f1) @@ -24,4 +24,4 @@ TCORES=1576 CCPU=( 0 272 296 100 284 124 56 0 148 116 104 20 76 0 24 52 52 ) CLIMIT=( 0 411 460 149 441 200 64 0 228 175 151 28 102 0 53 75 81 ) ngroup=16 -tcputime=0 \ No newline at end of file +tcputime=0 From d7c140e288798e758557f98201f327b647b54175 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Wed, 20 Jan 2016 12:16:11 -0500 Subject: [PATCH 02/65] Add -ncb to qhost call to surpress the processor topology, which fixes the qhost.php (Host status) display page. --- qhostout | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qhostout b/qhostout index 5f9738f..484a220 100755 --- a/qhostout +++ b/qhostout @@ -3,4 +3,4 @@ ######################################### source ./phpqstat.conf ######################################### -qhost -xml > $1 +qhost -xml -ncb > $1 From 5d93141b74d3f258f974486f39ae57ff639197f2 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 13:51:06 -0500 Subject: [PATCH 03/65] Adding qinfo.sh for qstat_reduce mode. --- qinfo.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100755 qinfo.sh diff --git a/qinfo.sh b/qinfo.sh new file mode 100755 index 0000000..db10038 --- /dev/null +++ b/qinfo.sh @@ -0,0 +1,58 @@ +#!/bin/bash +#set -xv +# Exporting Environment Variables +######################################### +source /var/www/PHPQstat/phpqstat.conf +######################################### + +# check to see if another qinfo.sh is already running +if [ -e /tmp/qinfo.run ]; then + # qinfo already running, wait until it completes and exit. + while (true); do + sleep 1 + if [ ! -e /tmp/qinfo.run ]; then + break + fi + done + exit 0 +fi + +# no other qinfo running, touch runfile +touch /tmp/qinfo.run + +# check load average +# get five minute load average and convert to decial +LOAD_FIVE=$(uptime | gawk {' sub(/,$/,"",$11);print $11 '}) +LOAD=$(echo $LOAD_FIVE | awk -F '.' {' print $1$2 '}) + +# Convert LOAD_WAIT variable +LOAD_WAIT=$(echo $LOAD_WAIT | awk -F '.' {' print $1$2 '}) + +if [ -e /tmp/load.xml ]; then + LAST_CHECK=$(gawk -F "date'>" {' sub(/<\/last>.*$/,"",$2);print $2 '} /tmp/load.xml) +else + LAST_CHECK=$(date) + echo "no${LOAD_FIVE}${LAST_CHECK}" > /tmp/load.xml +fi + +# check for load greater than or equal to specified amount +if [ ${LOAD} -ge ${LOAD_WAIT} ]; then + # wait for load to reduce + echo "yes${LOAD_FIVE}${LAST_CHECK}" > /tmp/load.xml + exit 0 +else + # update check time + echo "no${LOAD_FIVE}$(date)" > /tmp/load.xml +fi + +# qhost data +./qhostout /tmp/qhost.xml + +# qstat queue summary +./gexml -u all -R -o /tmp/qstat_queues.xml + +# qstat all +./gexml -u all -o /tmp/qstat_all.xml + +# complete, remove runfile +rm /tmp/qinfo.run From c8db4e299120d1e8d3c2b5195daed4080c0c1b07 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 13:52:12 -0500 Subject: [PATCH 04/65] Adding config.inc.php for qstat_reduce mode php variables. --- config.inc.php | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 config.inc.php diff --git a/config.inc.php b/config.inc.php new file mode 100644 index 0000000..956da09 --- /dev/null +++ b/config.inc.php @@ -0,0 +1,5 @@ + From a20af9d8d78a987951dcc4b181b058918c8206ab Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 13:53:21 -0500 Subject: [PATCH 05/65] Adding header.php for qstat_reduce refresh execution and display. --- header.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 header.php diff --git a/header.php b/header.php new file mode 100644 index 0000000..c8e66a5 --- /dev/null +++ b/header.php @@ -0,0 +1,23 @@ +last) + ($cache_time * 60); + if ($lastepoch < time() ) { + exec("./qinfo.sh"); + $loadcheck = simplexml_load_file("/tmp/load.xml"); + } + if ($loadcheck->check == "yes") { + echo "Refresh waiting due to high load. Last refresh: $loadcheck->last - 5 minute load average: $loadcheck->load"; + } else { + echo "Last refresh: $loadcheck->last - 5 minute load average: $loadcheck->load"; + } + +} + +?> From ec5495dbc28362d086e1d397e436929ff2fbf492 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 13:56:47 -0500 Subject: [PATCH 06/65] Updated phpqstat.conf to include LOAD_WAIT variable, and the descriptions of CACHE_TIME and QSTAT_REDUCE with notifications that they must be set in config.inc.php --- phpqstat.conf | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/phpqstat.conf b/phpqstat.conf index a4f162b..634375f 100644 --- a/phpqstat.conf +++ b/phpqstat.conf @@ -1,21 +1,47 @@ ############################################################## # Variables to edit # ############################################################## -MAIL=jordi.blasco@gmail.com -export SGE_ROOT=/sge -export SGE_CELL=default +MAIL=LSevelt@AIR-Worldwide.com +export SGE_ROOT=/opt/UGE +export SGE_CELL=GE1 RRD_ROOT=/var/www/PHPQstat/rrd WEB_ROOT=/var/www/PHPQstat source $SGE_ROOT/$SGE_CELL/common/settings.sh # Find all queues in your Batch Queue System -QUEUES=$(qconf -sql | cut -d. -f1) +#QUEUES=$(qconf -sql | cut -d. -f1) # You can setup and filter all queues to monitor # QUEUES="fast long priority" # Your Queues have .q extension? +QUEUES="all" QEXT=".q" +# QSTAT_REDUCE +# +# qstat is run on-demand only when cache time is exceeded, writing data to XML files in /tmp that are parsed by the webserver +# This shifts the processing from sge_master to httpd, allowing you to run a separate server for the webserver so as not to impact sge_master* +# - full physical machine separation still in progress +# yes or no +########### +# This value must be set in config.inc.php! + +# CACHE_TIME +# +# This is the number of minutes old a qstat data file must be before incuring a qstat data refresh +# default is three minutes +########### +# This value must be set in config.inc.php! + +# LOAD_WAIT +# +# This is at what load average qstat will stop querying and wait another QSTAT_TIMING cycle before querying again +# This will protect sge_master from getting queried by qstat when already under heavy load +# Currently load average is measured against the last five minutes of system activity as reported by uptime +# Must be in load average format! 0.00, 1.00, 0.50, 10.00, etc +LOAD_WAIT=10.00 + + # Under Development COLOR=( DF0101 FF0000 FF8000 AEB404 F7FE2E 088A08 2EFE2E 088A85 2EFEF7 0404B4 5F04B4 FF00FF B4045F F781BE 0B6138 0B3B39 000000 ) CSHARE=( 0 511 572 185 549 186 80 0 284 218 188 34 127 0 50 93 101 ) From 7729dfe85dc27f0eeb8d0c2b1785391ca1a4796a Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 14:00:58 -0500 Subject: [PATCH 07/65] Adding -ext to qstat to provide additional output into xml file. This is useful for determining which project or department a job belongs to. --- gexml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gexml b/gexml index 42e007e..2e2f246 100755 --- a/gexml +++ b/gexml @@ -54,6 +54,6 @@ do done -qstat -xml -r $stateopt $queueopt $sw_R $sw_f $groupopt $useropt "$user" $erroropt $jobidopt > $out +qstat -xml -ext -r $stateopt $queueopt $sw_R $sw_f $groupopt $useropt "$user" $erroropt $jobidopt > $out exit From 9c5b2b825793386265111c06235ebb5994e84b04 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 14:02:42 -0500 Subject: [PATCH 08/65] Modified qhost to utilize the qstat_reduce header, and to respect qstat_reduce, running the old code if qstat_reduce is not yet, otherwise pulling from the cached xml file. --- qhost.php | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/qhost.php b/qhost.php index 5d210bb..d232dd6 100644 --- a/qhost.php +++ b/qhost.php @@ -11,6 +11,7 @@ "; +include("header.php"); echo ""; ?> @@ -32,25 +33,31 @@ host as $host) { echo ""; @@ -63,8 +70,10 @@ function make_seed() { $i++; } +if ($qstat_reduce != "yes") { + exec("rm /tmp/$token.xml"); +} -exec("rm /tmp/$token.xml"); ?> From bcc241fec20307021103619c4076da0e2b9a981f Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 14:06:17 -0500 Subject: [PATCH 09/65] Adding header to qstat_job, the rest is still as it was, calling qstat ondemand. I might come back for this one, but I doubt users will query individual jobs all that often, and pulling information from just a single job doesn't seem to put much load on sge_master, so I'll let this remain ondemand for now. --- qstat_job.php | 1 + 1 file changed, 1 insertion(+) diff --git a/qstat_job.php b/qstat_job.php index 55e92b0..7184ba2 100644 --- a/qstat_job.php +++ b/qstat_job.php @@ -14,6 +14,7 @@ $jobid = $_GET['jobid']; $jobstat = $_GET['jobstat']; echo "

PHPQstat

Home * Hosts status * Queue status * Jobs status ($owner) * About PHPQstat
swap_used
"; +include("header.php"); echo ""; ?> From 996af734647d488efea860f7a1ddd40d480310dd Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 14:07:43 -0500 Subject: [PATCH 10/65] Adding code to respect qstat_reduce, running the old code if it is not yes, otherwise reading from the single cached xml file. --- qstat.php | 52 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/qstat.php b/qstat.php index 78f1de2..e94135a 100644 --- a/qstat.php +++ b/qstat.php @@ -15,6 +15,7 @@ function changeIt(view){document.getElementById('rta').src= view;}

PHPQstat

Home * Hosts status * Queue status * Jobs status ($owner) * About PHPQstat
"; +include("header.php"); echo ""; ?> @@ -36,27 +37,31 @@ function changeIt(view){document.getElementById('rta').src= view;} xpath('//cluster_queue_summary') as $cluster_queue_summary) { echo " @@ -70,7 +75,9 @@ function make_seed() { "; } -exec("rm /tmp/$token.xml"); +if ($qstat_reduce != "yes" ) { + exec("rm /tmp/$token.xml"); +} echo "

PHPQstat

Home * Hosts status * Queue status * Jobs status ($owner) * About PHPQstat
$cluster_queue_summary->manual_intervention
@@ -86,8 +93,12 @@ function make_seed() { "; -$out2 = exec("./gexml -u all -o /tmp/$token.xml"); -$jobs = simplexml_load_file("/tmp/$token.xml"); +if ($qstat_reduce != "yes" ) { + $out2 = exec("./gexml -u all -o /tmp/$token.xml"); + $jobs = simplexml_load_file("/tmp/$token.xml"); +} else { + $jobs = simplexml_load_file("/tmp/qstat_all.xml"); +} $nrun=0; $srun=0; $npen=0; @@ -126,8 +137,9 @@ function make_seed() { $szom "; - -//exec("rm /tmp/$token.xml"); +if ($qstat_reduce != "yes" ) { + exec("rm /tmp/$token.xml"); +} ?> From 4fe8d72e023cdb5b8c4169257b9ed4ea728e1e65 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 14:09:30 -0500 Subject: [PATCH 11/65] Adding respect for qstat_reduce, running old code if not yes, otherwise pulling from cached xml file. Also included the display of which project a job is assigned to. --- qstat_user.php | 165 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 112 insertions(+), 53 deletions(-) diff --git a/qstat_user.php b/qstat_user.php index 56e529f..1990eae 100644 --- a/qstat_user.php +++ b/qstat_user.php @@ -9,22 +9,35 @@ + "; +include("header.php"); -srand(make_seed()); -$alfa = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; -$token = ""; -for($i = 0; $i < $password_length; $i ++) { - $token .= $alfa[rand(0, strlen($alfa))]; +if ($qstat_reduce != "yes" ) { + + $password_length = 20; + function make_seed() { + list($usec, $sec) = explode(' ', microtime()); + return (float) $sec + ((float) $usec * 100000); + } + + srand(make_seed()); + + $alfa = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; + $token = ""; + for($i = 0; $i < $password_length; $i ++) { + $token .= $alfa[rand(0, strlen($alfa))]; + } } -function show_run($tokenFile,$owner) { +function show_run($qstat,$owner,$queue) { + global $qstat_reduce; + global $token; echo "
@@ -35,33 +48,47 @@ function show_run($tokenFile,$owner) { + "; - $qstat = simplexml_load_file($tokenFile); + if ($qstat_reduce != "yes" ) { + $qstat = simplexml_load_file("/tmp/$token.xml"); + } foreach ($qstat->xpath('//job_list') as $job_list) { - $pe=$job_list->requested_pe['name']; - echo " - - - - - - - - - - "; + if ($job_list->state != 'r') { + continue; + } + if ($owner != "all" && $job_list->JB_owner != $owner) { + continue; + } + if ($queue != "" && $job_list->queue_name != $queue) { + continue; + } + $pe=$job_list->requested_pe['name']; + echo " + + + + + + + + + + + "; } - exec("rm $tokenFile"); echo "
Priority Name StateProject Queue Start Time PE Slots
JB_job_number&owner=$owner>$job_list->JB_job_numberJB_owner>$job_list->JB_owner$job_list->JAT_prio$job_list->JB_name$job_list->statequeue_name&owner=$owner>$job_list->queue_name$job_list->JAT_start_time$pe$job_list->slots
JB_job_number&owner=$owner>$job_list->JB_job_numberJB_owner>$job_list->JB_owner$job_list->JAT_prio$job_list->JB_name$job_list->state$job_list->JB_projectqueue_name&owner=$owner>$job_list->queue_name$job_list->JAT_start_time$pe$job_list->slots


"; } -function show_pend($tokenFile,$owner) { +function show_pend($qstat,$owner,$queue) { + global $qstat_reduce; + global $token; echo " @@ -72,37 +99,44 @@ function show_pend($tokenFile,$owner) { + "; - - $qstat = simplexml_load_file($tokenFile); + if ($qstat_reduce != "yes" ) { + $qstat = simplexml_load_file("/tmp/$token.xml"); + } foreach ($qstat->xpath('//job_list') as $job_list) { - $pe=$job_list->requested_pe['name']; - echo " - - - - - - - - - - "; + if ($job_list->state != 'qw') { + continue; + } + if ($owner != "all" && $job_list->JB_owner != $owner) { + continue; + } + if ($queue != "" && $job_list->queue_name != $queue) { + continue; + } + $pe=$job_list->requested_pe['name']; + echo " + + + + + + + + + + + "; } - exec("rm $tokenFile"); echo "
Priority Name StateProject Queue Submission Time PE Slots
JB_job_number&owner=$owner>$job_list->JB_job_numberJB_owner>$job_list->JB_owner$job_list->JAT_prio$job_list->JB_name$job_list->statequeue_name&owner=$owner>$job_list->queue_name$job_list->JB_submission_time$pe$job_list->slots
JB_job_number&owner=$owner>$job_list->JB_job_numberJB_owner>$job_list->JB_owner$job_list->JAT_prio$job_list->JB_name$job_list->state$job_list->JB_projectqueue_name&owner=$owner>$job_list->queue_name$job_list->JB_submission_time$pe$job_list->slots

"; } -$owner = $_GET['owner']; -$jobstat = $_GET['jobstat']; -$queue = $_GET['queue']; -echo ""; echo ""; + echo "Refresh waiting due to high load. Last refresh: $loadcheck->last - 5 minute load average: $loadcheck->load"; } else { - echo ""; + echo "Last refresh: $loadcheck->last - 5 minute load average: $loadcheck->load"; } } diff --git a/phpqstat.conf b/phpqstat.conf index 01af55f..6410f3c 100644 --- a/phpqstat.conf +++ b/phpqstat.conf @@ -41,6 +41,15 @@ QEXT=".q" # Must be in load average format! 0.00, 1.00, 0.50, 10.00, etc LOAD_WAIT=10.00 +# REMOTE_MASTER +# +# This allows you to check the load average of a remote server so that master and webserver can be separate machines +# webserver needs to have the grid engine utilities installed and be a submit host +# - Future state would be to run all commands remotely, NFS share or something to remove the need for the webserver to be a submit host +# Enter hostname of the server running sge_master - This requires snmpd to be properly configured on the host - see README +# Leave blank if running locally on the sge_master host. +#REMOTE_MASTER=sgemaster.company.com +REMOTE_MASTER="" # Under Development COLOR=( DF0101 FF0000 FF8000 AEB404 F7FE2E 088A08 2EFE2E 088A85 2EFEF7 0404B4 5F04B4 FF00FF B4045F F781BE 0B6138 0B3B39 000000 ) diff --git a/qinfo.sh b/qinfo.sh index db10038..3a2408a 100755 --- a/qinfo.sh +++ b/qinfo.sh @@ -22,7 +22,15 @@ touch /tmp/qinfo.run # check load average # get five minute load average and convert to decial -LOAD_FIVE=$(uptime | gawk {' sub(/,$/,"",$11);print $11 '}) +if [ "${REMOTE_MASTER}" != "" ]; then + LOAD_FIVE=$(snmpwalk -v 1 -r 1 -c public -O e ${REMOTE_MASTER} .1.3.6.1.4.1.2021.10 | gawk '$1 == "UCD-SNMP-MIB::laLoad.2" { print $4 }') + if [ "${LOAD_FIVE}" == "" ]; then + LOAD_FIVE="Not Available" + LOAD="0.00" + fi +else + LOAD_FIVE=$(uptime | gawk {' sub(/,$/,"",$11);print $11 '}) +fi LOAD=$(echo $LOAD_FIVE | awk -F '.' {' print $1$2 '}) # Convert LOAD_WAIT variable From 77c4b2be57d0435595f25d1f3793239e8cd45c05 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Mon, 25 Jan 2016 15:26:02 -0500 Subject: [PATCH 16/65] Updating version number display on pages. --- about.php | 2 +- index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/about.php b/about.php index 69b6228..607db48 100644 --- a/about.php +++ b/about.php @@ -26,7 +26,7 @@ AUTHOR Written by Jordi Blasco Pallarès.
REPORTING BUGS Report bugs to SourceForge Tracker
LICENSE This is free software: you are free to change and redistribute it. GNU General Public License version 3.0 (GPLv3).
-Version : 0.2.0 (February 2012)

+Version : 0.2.3 (Janurary 2016)

http://phpqstat.sourceforge.net

PHPQstat

Home * Hosts status * Queue status * Jobs status ($owner) * About PHPQstat

"; @@ -110,24 +144,49 @@ function show_pend($tokenFile,$owner) { if($jobstat){$jobstatflag="-s $jobstat";}else{$jobstatflag="";} +if ($qstat_reduce == "yes" ) { + $qstat = simplexml_load_file("/tmp/qstat_all.xml"); +} + switch ($jobstat) { case "r": $jobstatflag="-s r"; - $out = exec("./gexml -u $owner $jobstatflag $queueflag -o /tmp/$token.xml"); - show_run("/tmp/$token.xml",$owner); + if ($qstat_reduce != "yes" ) { + $out = exec("./gexml -u $owner $jobstatflag $queueflag -o /tmp/$token.xml"); + show_run("",$owner,$queue); + exec("rm /tmp/$token.xml"); + } else { + show_run($qstat,$owner,$queue); + } break; case "p": $jobstatflag="-s p"; - $out = exec("./gexml -u $owner $jobstatflag $queueflag -o /tmp/$token.xml"); - show_pend("/tmp/$token.xml",$owner); + if ($qstat_reduce != "yes" ) { + $out = exec("./gexml -u $owner $jobstatflag $queueflag -o /tmp/$token.xml"); + show_pend("",$owner,$queue); + exec("rm /tmp/$token.xml"); + } else { + show_pend($qstat,$owner,$queue); + } break; default: $jobstatflag="-s r"; - $out = exec("./gexml -u $owner $jobstatflag $queueflag -o /tmp/$token.xml"); - show_run("/tmp/$token.xml",$owner); + if ($qstat_reduce != "yes" ) { + $out = exec("./gexml -u $owner $jobstatflag $queueflag -o /tmp/$token.xml"); + show_run("",$owner,$queue); + exec("rm /tmp/$token.xml"); + } else { + show_run($qstat,$owner,$queue); + } + $jobstatflag="-s p"; - $out = exec("./gexml -u $owner $jobstatflag $queueflag -o /tmp/$token.xml"); - show_pend("/tmp/$token.xml",$owner); + if ($qstat_reduce != "yes" ) { + $out = exec("./gexml -u $owner $jobstatflag $queueflag -o /tmp/$token.xml"); + show_pend("",$owner,$queue); + exec("rm /tmp/$token.xml"); + } else { + show_pend($qstat,$owner,$queue); + } break; } From c2e9537584012c7087ff3fa82040862150d13c1f Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 14:14:15 -0500 Subject: [PATCH 12/65] Removed personal information. --- phpqstat.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/phpqstat.conf b/phpqstat.conf index 634375f..34b69b0 100644 --- a/phpqstat.conf +++ b/phpqstat.conf @@ -1,9 +1,9 @@ ############################################################## # Variables to edit # ############################################################## -MAIL=LSevelt@AIR-Worldwide.com -export SGE_ROOT=/opt/UGE -export SGE_CELL=GE1 +MAIL=youremail@company.com +export SGE_ROOT=/opt/sge_root +export SGE_CELL=default RRD_ROOT=/var/www/PHPQstat/rrd WEB_ROOT=/var/www/PHPQstat From d4ab00d001d5b4987fb7c8c091a43cbb42e875b8 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Fri, 22 Jan 2016 14:22:15 -0500 Subject: [PATCH 13/65] Updates to README to include basic instructions for qstat_reduce config. Additional changes to working in phpqstat.conf --- README | 8 +++++++- phpqstat.conf | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README b/README index 5218620..0e94daa 100644 --- a/README +++ b/README @@ -24,7 +24,12 @@ INSTALL SGE_ROOT=/sge RRD_ROOT=/var/www/PHPQstat/rrd WEB_ROOT=/var/www/PHPQstat -(3) Add the following line on the crontab : +(3) Setup the following config variables in config.inc.php : + $qstat_reduce="yes"; + $cache_time="3"; +(4) If using qstat_reduce set LOAD_WAIT variable in phpqstat.conf for high load average protection: + LOAD_WAIT=10.00 +(5) Add the following line on the crontab : */3 * * * * /var/www/PHPQstat/accounting.sh > /dev/null 2>&1 ROADMAP @@ -48,3 +53,4 @@ CHANGELOG 0.1.3 Solved problems with Start time and Submission Time 0.2.0 Real-time accounting feature 0.2.1 Migration to HPCNow GitHUB repo +0.2.2 Added qstat_reduce to cache xml files and only refesh based a time interval with high load average protection diff --git a/phpqstat.conf b/phpqstat.conf index 34b69b0..01af55f 100644 --- a/phpqstat.conf +++ b/phpqstat.conf @@ -21,7 +21,7 @@ QEXT=".q" # # qstat is run on-demand only when cache time is exceeded, writing data to XML files in /tmp that are parsed by the webserver # This shifts the processing from sge_master to httpd, allowing you to run a separate server for the webserver so as not to impact sge_master* -# - full physical machine separation still in progress +# - should work if webserver is the submit host, untested at this time # yes or no ########### # This value must be set in config.inc.php! From 4fd8406da6b7e614d0fa1fe6b9ba530396f248a9 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Mon, 25 Jan 2016 11:04:36 -0500 Subject: [PATCH 14/65] Adding -t qstat queries so that it also displays timing information so that submit time/start time can be displayed. --- gexml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gexml b/gexml index 2e2f246..dc74f88 100755 --- a/gexml +++ b/gexml @@ -54,6 +54,6 @@ do done -qstat -xml -ext -r $stateopt $queueopt $sw_R $sw_f $groupopt $useropt "$user" $erroropt $jobidopt > $out +qstat -xml -ext -t -r $stateopt $queueopt $sw_R $sw_f $groupopt $useropt "$user" $erroropt $jobidopt > $out exit From 1078d0c0e7cd6e14dad39c2b9b29fcbea8e23202 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Mon, 25 Jan 2016 14:49:34 -0500 Subject: [PATCH 15/65] Remote master setup now working by running snmpd on sge_master host so that the webserver can pull the load average information. Still requires webserver to be configured as a submit host. --- README | 22 ++++++++++++++++++++-- header.php | 10 ++++++++-- phpqstat.conf | 9 +++++++++ qinfo.sh | 10 +++++++++- 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/README b/README index 0e94daa..3c860f7 100644 --- a/README +++ b/README @@ -4,11 +4,12 @@ PHPQstat is a web interface that allows to connect to the useful commands of the This project is developed and maintained by HPCNow! consulting : http://www.hpcnow.com AUTHOR : Written by Jordi Blasco Pallarès (jordi.blasco@hpcnow.com). + qstat reduce and remote master options added by Lydia Sevelt (LydiaSevelt@gmail.com) REPORTING BUGS : Report bugs to GitHUB issue Tracker https://github.com/HPCNow/PHPQstat/issues LICENSE : This is free software: you are free to change and redistribute it. GNU General Public License version 3.0 (GPLv3). -Version : 0.2.1 (July 2015) +Version : 0.2.3 (January 2016) https://github.com/HPCNow/PHPQstat @@ -16,6 +17,11 @@ DEPENDENCIES ============================================== You will need Apache server, php5, rrdtool and awk. +for remote master setup: + +webserver: apache, php5, rrdtool, awk, snmp-utils +sge_master: snmpd, awk + INSTALL ============================================== (1) Copy all files in your web accesible filesystem or download the project using GIT: @@ -27,11 +33,22 @@ INSTALL (3) Setup the following config variables in config.inc.php : $qstat_reduce="yes"; $cache_time="3"; -(4) If using qstat_reduce set LOAD_WAIT variable in phpqstat.conf for high load average protection: +(4) If using qstat_reduce set LOAD_WAIT variable in phpqstat.conf for high load average protection : LOAD_WAIT=10.00 (5) Add the following line on the crontab : */3 * * * * /var/www/PHPQstat/accounting.sh > /dev/null 2>&1 +SETTING UP A REMOTE MASTER CONFIG +---------------------------------------------- +(6) Set REMOTE_MASTER in phpqstat.conf to the hostname of sge_master server : + REMOTE_MASTER=sgemaster.company.com +(7) Configure snmpd on sge_master host to provide uptime and load information via community public : + + com2sec notConfigUser default public + group notConfigGroup v1 notConfigUser + view systemview included .1.3.6.1.4.1.2021.10 + access notConfigGroup "" any noauth exact systemview none none + ROADMAP ============================================== 0.1 Functional @@ -54,3 +71,4 @@ CHANGELOG 0.2.0 Real-time accounting feature 0.2.1 Migration to HPCNow GitHUB repo 0.2.2 Added qstat_reduce to cache xml files and only refesh based a time interval with high load average protection +0.2.3 Added ability to run phpqstat on a webserver that is a submit host, eliminating the need to run on the sge_master node diff --git a/header.php b/header.php index c8e66a5..06f4111 100644 --- a/header.php +++ b/header.php @@ -12,10 +12,16 @@ exec("./qinfo.sh"); $loadcheck = simplexml_load_file("/tmp/load.xml"); } + if ($loadcheck->load == "Not Available") { + + echo "
Unable to get load from master server, check snmpd server. "; + } else { + echo "
"; + } if ($loadcheck->check == "yes") { - echo "
Refresh waiting due to high load. Last refresh: $loadcheck->last - 5 minute load average: $loadcheck->load
Last refresh: $loadcheck->last - 5 minute load average: $loadcheck->load
diff --git a/index.php b/index.php index c230f9d..4ca8df6 100644 --- a/index.php +++ b/index.php @@ -26,7 +26,7 @@ - version : 0.2.0 (February 2012)
+ version : 0.2.3 (February 2012)
http://phpqstat.sourceforge.net
From bb0190bebaff395098b9251332159958a127a3d0 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Thu, 3 Nov 2016 17:52:13 -0400 Subject: [PATCH 17/65] Starting addition of html5 and visual fixes - index page still missing logo --- index.php | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/index.php b/index.php index 4ca8df6..a69a892 100644 --- a/index.php +++ b/index.php @@ -10,11 +10,12 @@






- +
+ - - - - - -

PHPQstat

@@ -23,15 +24,6 @@
- version : 0.2.3 (February 2012)
- http://phpqstat.sourceforge.net
-
From 9c9fc70a594a08c9623ca7fca50365db6f5cabc2 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Thu, 3 Nov 2016 18:05:55 -0400 Subject: [PATCH 18/65] Most of the qhost changes, some additional changes may be needed --- qhost.php | 51 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/qhost.php b/qhost.php index d232dd6..f9d2645 100644 --- a/qhost.php +++ b/qhost.php @@ -4,34 +4,53 @@ PHPQstat + - + + + + + "; +echo "
"; include("header.php"); -echo " - "; +echo ""; + ?>

PHPQstat

Home * Hosts status * Queue status * Jobs status ($owner) * About PHPQstat
+Home +Hosts status +Queue status +Jobs status ($owner) +About PHPQstat +

- - - - - - - - - - - - +
HostnameArchitectureNCPULoad avgmem_totalmem_usedswap_totalswap_used
+ + + + + + + + + + + Date: Thu, 3 Nov 2016 18:09:04 -0400 Subject: [PATCH 19/65] Header fixes, alignment, wording, adding logo display. --- header.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/header.php b/header.php index 06f4111..1c4bffe 100644 --- a/header.php +++ b/header.php @@ -14,16 +14,17 @@ } if ($loadcheck->load == "Not Available") { - echo ""; + echo "Refresh waiting due to high load. Last refresh: $loadcheck->last - headnode 5 minute load average: $loadcheck->load"; } else { - echo "Last refresh: $loadcheck->last - 5 minute load average: $loadcheck->load"; + echo "Last refresh: $loadcheck->last"; } } +echo ""; ?> From 7605e87f2310bea2e78421c7b8f7fd7344a28901 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Thu, 3 Nov 2016 18:09:51 -0400 Subject: [PATCH 20/65] Pretty much removing footer --- bottom.php | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/bottom.php b/bottom.php index 9ba519f..acaf564 100644 --- a/bottom.php +++ b/bottom.php @@ -1,8 +1,4 @@ - "; -?> \ No newline at end of file +?> From 4eab109bdc10c34c1b7618e5931134550ce175e8 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Thu, 3 Nov 2016 18:12:13 -0400 Subject: [PATCH 21/65] Updated about. Needs more updating, version bump, rewording, etc. --- about.php | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/about.php b/about.php index 607db48..8ffa83b 100644 --- a/about.php +++ b/about.php @@ -5,14 +5,22 @@ - + +
HostnameArchitectureNCPULoad avgmem_totalmem_usedswap_totalswap_used
Unable to get load from master server, check snmpd server. "; + echo "
Unable to get load from master server, check snmpd server. "; } else { - echo "
"; + echo "
"; } if ($loadcheck->check == "yes") { - echo "Refresh waiting due to high load. Last refresh: $loadcheck->last - 5 minute load average: $loadcheck->load
- Version : 0.2.0 (February 2012)
- http://phpqstat.sourceforge.net
-
"; -echo " - "; +echo "

PHPQstat

Home * Hosts status * Queue status * Jobs status ($owner) * About PHPQstat
"; +include("header.php"); +echo ""; + ?> @@ -23,11 +31,11 @@
+Home +Hosts status +Queue status +Jobs status ($owner) +About PHPQstat +
PHPQstat is a web interface that allows to connect to the usefull commands of the Grid Engine (GE) batch queue system. With this interface, you can monitor your job status and your queues health at real time.

-AUTHOR Written by Jordi Blasco Pallarès.
-REPORTING BUGS Report bugs to SourceForge Tracker
-LICENSE This is free software: you are free to change and redistribute it. GNU General Public License version 3.0 (GPLv3).
-Version : 0.2.3 (Janurary 2016)

-http://phpqstat.sourceforge.net
+AUTHORS Originally written by Jordi Blasco Pallarès.
+UGE supprt and additional functionallity and added by Lydia Sevelt

+LICENSE This is free software: you are free to change and redistribute it. GNU General Public License version 3.0 (GPLv3).

+Version : 0.2.5 (September 2016)
+https://github.com/LydiaSevelt/PHPQstat
From e19e3e664d15dd1a1dcc4a181d82153cb421e9e9 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Thu, 3 Nov 2016 18:31:40 -0400 Subject: [PATCH 22/65] datatables changes - no UGE changes made yet, SoG testing needed. --- qstat_job.php | 75 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 51 insertions(+), 24 deletions(-) diff --git a/qstat_job.php b/qstat_job.php index 7184ba2..4c90dae 100644 --- a/qstat_job.php +++ b/qstat_job.php @@ -4,8 +4,26 @@ PHPQstat + - + + + + + "; +echo "
"; include("header.php"); -echo " - "; +echo ""; ?>

PHPQstat

Home * Hosts status * Queue status * Jobs status ($owner) * About PHPQstat
+Home +Hosts status +Queue status +Jobs status ($owner) +About PHPQstat +

@@ -55,18 +78,20 @@ function make_seed() { $job_pe=$qstat->djob_info->element[0]->JB_pe; $job_slots=$qstat->djob_info->element[0]->JB_pe_range->ranges->RN_min; -echo " - - - - - - - - - - +echo "
JobIDNameOwnerGroupSubmitTimeQueuePESlots
+ + + + + + + + + + + + @@ -86,16 +111,18 @@ function make_seed() { $usage_stats[$i++]=$usage->UA_value; } if ($usage_stats[0] > 0){$cputime = time_duration($usage_stats[0], 'dhms');}else{$cputime = 0;} -echo "
JobIDNameOwnerGroupSubmitTimeQueuePESlots
$jobid $job_name
- - - - - - - - +echo "
CPUTime (s)Mem (GB)ioiowVMem (M)MaxVMem (M)
+ + + + + + + + + + From 03b87d38b8043280eeec3f00d1db49b547238daa Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Wed, 21 Dec 2016 13:04:26 -0500 Subject: [PATCH 23/65] Adding terrible logo --- img/logo.png | Bin 0 -> 13603 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/logo.png diff --git a/img/logo.png b/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2edb7537721ef06fc58c4dc6890d506375beb907 GIT binary patch literal 13603 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 literal 0 HcmV?d00001 From caa93754f362a21fe3aa706332b54b1bf4249a81 Mon Sep 17 00:00:00 2001 From: Lydia Sevelt Date: Wed, 21 Dec 2016 13:10:10 -0500 Subject: [PATCH 24/65] Adding datatables and jquery --- datatables.min.css | 18 ++++ datatables.min.js | 215 ++++++++++++++++++++++++++++++++++++++++++++ jquery-1.5.1.min.js | 16 ++++ jquery-2.2.3.min.js | 4 + jquery-ui.min.css | 7 ++ jquery-ui.min.js | 13 +++ 6 files changed, 273 insertions(+) create mode 100644 datatables.min.css create mode 100644 datatables.min.js create mode 100644 jquery-1.5.1.min.js create mode 100644 jquery-2.2.3.min.js create mode 100644 jquery-ui.min.css create mode 100644 jquery-ui.min.js diff --git a/datatables.min.css b/datatables.min.css new file mode 100644 index 0000000..21a920b --- /dev/null +++ b/datatables.min.css @@ -0,0 +1,18 @@ +/* + * This combined file was created by the DataTables downloader builder: + * https://datatables.net/download + * + * To rebuild or modify this file with the latest versions of the included + * software please visit: + * https://datatables.net/download/#dt/jq-2.2.3/dt-1.10.12/cr-1.3.2 + * + * Included libraries: + * jQuery 2.2.3, DataTables 1.10.12, ColReorder 1.3.2 + */ + +table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold;text-align:left}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} + + +table.DTCR_clonedTable.dataTable{position:absolute !important;background-color:rgba(255,255,255,0.7);z-index:202}div.DTCR_pointer{width:1px;background-color:#0259C4;z-index:201} + + diff --git a/datatables.min.js b/datatables.min.js new file mode 100644 index 0000000..0a9ba2a --- /dev/null +++ b/datatables.min.js @@ -0,0 +1,215 @@ +/* + * This combined file was created by the DataTables downloader builder: + * https://datatables.net/download + * + * To rebuild or modify this file with the latest versions of the included + * software please visit: + * https://datatables.net/download/#dt/jq-2.2.3/dt-1.10.12/cr-1.3.2 + * + * Included libraries: + * jQuery 2.2.3, DataTables 1.10.12, ColReorder 1.3.2 + */ + +/*! jQuery v2.2.3 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; +}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"
CPUTime (s)Mem (GB)ioiowVMem (M)MaxVMem (M)
$cputime ".number_format($usage_stats[1], 2, '.', '')."
","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("