From noreply at svn.ci.uchicago.edu Tue Mar 1 16:17:23 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Tue, 1 Mar 2011 16:17:23 -0600 (CST) Subject: [Swift-commit] r4157 - branches/release-0.92/tests/providers/local-sge-coasters Message-ID: <20110301221723.91D439CD19@svn.ci.uchicago.edu> Author: skenny Date: 2011-03-01 16:17:23 -0600 (Tue, 01 Mar 2011) New Revision: 4157 Modified: branches/release-0.92/tests/providers/local-sge-coasters/sites.template.xml Log: adjusted params for ranger testing Modified: branches/release-0.92/tests/providers/local-sge-coasters/sites.template.xml =================================================================== --- branches/release-0.92/tests/providers/local-sge-coasters/sites.template.xml 2011-02-28 23:34:04 UTC (rev 4156) +++ branches/release-0.92/tests/providers/local-sge-coasters/sites.template.xml 2011-03-01 22:17:23 UTC (rev 4157) @@ -6,8 +6,8 @@ 7200 1 1 - 1 - 1 + 16 + 16 _QUEUE_ 5.99 10000 From noreply at svn.ci.uchicago.edu Wed Mar 2 14:48:44 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 2 Mar 2011 14:48:44 -0600 (CST) Subject: [Swift-commit] r4158 - in SwiftApps/SwiftR: . Swift/R Message-ID: <20110302204844.C2E3E9CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-02 14:48:44 -0600 (Wed, 02 Mar 2011) New Revision: 4158 Modified: SwiftApps/SwiftR/IMMEDIATE-TODO SwiftApps/SwiftR/Swift/R/Workers.R Log: Added some initial logic to support determining host list from an environment variable. Modified: SwiftApps/SwiftR/IMMEDIATE-TODO =================================================================== --- SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-01 22:17:23 UTC (rev 4157) +++ SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-02 20:48:44 UTC (rev 4158) @@ -40,12 +40,6 @@ - test on Ranger HIGH: - -Coaster timeout problem: - He (Mihael) will also look at a better fix to the coaster timeout problem, but for now, you should integrate the timeout change from my trunk/cog/modules/provider-coaster/src/* into your test trunk/ - Otherwise, you'll find that your coaster workers quit after a few minutes of inactivity and then start-swift needs to be killed, workers cleanup up, and start-swift restarted. - -HIGH: See email about pbs breaking on UVa cluster MID: @@ -138,3 +132,10 @@ HIGH: Look at all OmxNNN parallel calls - see if any are used that we dont yet handle. - It turns out that they are not currently needed + +HIGH: + +Coaster timeout problem: + He (Mihael) will also look at a better fix to the coaster timeout problem, but for now, you should integrate the timeout change from my trunk/cog/modules/provider-coaster/src/* into your test trunk/ + Otherwise, you'll find that your coaster workers quit after a few minutes of inactivity and then start-swift needs to be killed, workers cleanup up, and start-swift restarted. + Modified: SwiftApps/SwiftR/Swift/R/Workers.R =================================================================== --- SwiftApps/SwiftR/Swift/R/Workers.R 2011-03-01 22:17:23 UTC (rev 4157) +++ SwiftApps/SwiftR/Swift/R/Workers.R 2011-03-02 20:48:44 UTC (rev 4158) @@ -1,5 +1,46 @@ +getNodeList <- function (server=getOption("swift.server")) { + # Run within a job script submitted to a batch scheduler, this + # function works out the nodes allocated. + # It returns a data frame where the first column is the unique host names + # and the second column is the number of processes for that node + # if server is not specified and the swift.server option is unset, + # this will try the different possibilities in sequence. + hostinfo <- NULL + if (!is.null(server) && !server %in% c("pbs", "sge", "cobalt", "pbsf")) { + stop(paste("Invalid server setting for getNodeList:", server)) + } + if (is.null(server) || server == "pbs" || server == "pbsf") { + hostfile <- Sys.getenv("PBS_NODEFILE") + if (hostfile[[1]] != "") { + hostnames <- read.table(hostfile, stringsAsFactors=FALSE)[[1]] + summ <- rle(sort(hostnames)) + hostinfo <- data.frame(hosts=summ[[2]], count=summ[[1]]) + } + } + if (is.null(server) || server == "cobalt") { + hostfile <- Sys.getenv(c("COBALT_NODEFILE")) + if (hostfile[[1]] != "") { + hostnames <- read.table(hostfile, stringsAsFactors=FALSE)[[1]] + summ <- rle(sort(hostnames)) + hostinfo <- data.frame(hosts=summ[[2]], count=summ[[1]]) + } + } + if (is.null(server) || server == "sge") { + hostfile <- Sys.getenv(c("PE_HOSTFILE")) + if (hostfile[[1]] != "") { + hostinfo <- read.table(hostfile, stringsAsFactors=FALSE, + col.names=c("hosts", "count")) + } + } + if (is.null(hostinfo)) + stop("Could not find environment variable pointing to node list.") + else + return (hostinfo) +} + + swiftInit <- function( cores=NULL, server=NULL, hosts=NULL, nodes=NULL, project=NULL, parEnv=NULL, kernel=NULL, workmode=NULL, From noreply at svn.ci.uchicago.edu Wed Mar 2 15:42:42 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 2 Mar 2011 15:42:42 -0600 (CST) Subject: [Swift-commit] r4159 - in SwiftApps/SwiftR/Swift: . tests Message-ID: <20110302214242.4F9C59CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-02 15:42:42 -0600 (Wed, 02 Mar 2011) New Revision: 4159 Added: SwiftApps/SwiftR/Swift/tests/cobalt_script.R SwiftApps/SwiftR/Swift/tests/cobalt_test.sub Modified: SwiftApps/SwiftR/Swift/NAMESPACE Log: Added submit files to perform tests for cobalt. Added getNodeList to namespace. Modified: SwiftApps/SwiftR/Swift/NAMESPACE =================================================================== --- SwiftApps/SwiftR/Swift/NAMESPACE 2011-03-02 20:48:44 UTC (rev 4158) +++ SwiftApps/SwiftR/Swift/NAMESPACE 2011-03-02 21:42:42 UTC (rev 4159) @@ -1,6 +1,7 @@ export(swiftapply) export(swiftLapply) export(swiftInit) +export(getNodeList) export(swiftShutdown) export(swiftLibrary) export(swiftDetach) Added: SwiftApps/SwiftR/Swift/tests/cobalt_script.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/cobalt_script.R (rev 0) +++ SwiftApps/SwiftR/Swift/tests/cobalt_script.R 2011-03-02 21:42:42 UTC (rev 4159) @@ -0,0 +1,11 @@ +require(Swift) + +x1 <- getNodeList() +print("Auto:") +print(x1) + +x2 <- getNodeList("cobalt") +print("pbs:") +print(x2) + +runAllSwiftTests(server="ssh", hosts=x2[[1]], cores=8) Added: SwiftApps/SwiftR/Swift/tests/cobalt_test.sub =================================================================== --- SwiftApps/SwiftR/Swift/tests/cobalt_test.sub (rev 0) +++ SwiftApps/SwiftR/Swift/tests/cobalt_test.sub 2011-03-02 21:42:42 UTC (rev 4159) @@ -0,0 +1,12 @@ +#!/bin/sh +export WORKER_LOGGING_LEVEL=ERROR +echo '***' COBALT_NODEFILE file: $COBALT_NODEFILE CONTACT:http://10.40.9.151:47853 +cat $COBALT_NODEFILE +echo '***' unique nodes are: +sort < $COBALT_NODEFILE|uniq + +echo GLOBUS_HOSTNAME $GLOBUS_HOSTNAME +export GLOBUS_HOSTNAME="" +Rscript `dirname $0`/cobalt_script.R + + Property changes on: SwiftApps/SwiftR/Swift/tests/cobalt_test.sub ___________________________________________________________________ Name: svn:executable + * From noreply at svn.ci.uchicago.edu Wed Mar 2 15:55:50 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 2 Mar 2011 15:55:50 -0600 (CST) Subject: [Swift-commit] r4160 - SwiftApps/SwiftR/Swift/tests Message-ID: <20110302215550.8925E9CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-02 15:55:50 -0600 (Wed, 02 Mar 2011) New Revision: 4160 Added: SwiftApps/SwiftR/Swift/tests/batch_test.R SwiftApps/SwiftR/Swift/tests/pbs_test.sub Removed: SwiftApps/SwiftR/Swift/tests/cobalt_script.R Modified: SwiftApps/SwiftR/Swift/tests/cobalt_test.sub Log: Added batch submit script for cobalt Copied: SwiftApps/SwiftR/Swift/tests/batch_test.R (from rev 4159, SwiftApps/SwiftR/Swift/tests/cobalt_script.R) =================================================================== --- SwiftApps/SwiftR/Swift/tests/batch_test.R (rev 0) +++ SwiftApps/SwiftR/Swift/tests/batch_test.R 2011-03-02 21:55:50 UTC (rev 4160) @@ -0,0 +1,35 @@ +require(Swift) + +server <- commandArgs(TRUE)[[1]] + + +x1 <- getNodeList() +print("Auto:") +print(x1) + +if (server == "cobalt") { + x2 <- getNodeList("cobalt") + print("cobalt:") + print(x2) +} +if (server %in% c("pbs", "pbsf")) { + x2 <- getNodeList("pbs") + print("pbs:") + print(x2) + + x3 <- getNodeList("pbsf") + print("pbsf:") + print(x3) +} +if (server == "sge")) { + x2 <- getNodeList("sge") + print("sge:") + print(x2) + + x3 <- getNodeList("pbsf") + print("pbsf:") + print(x3) +} + +runAllSwiftTests(server="ssh", hosts=x1[[1]], cores=8) + Deleted: SwiftApps/SwiftR/Swift/tests/cobalt_script.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/cobalt_script.R 2011-03-02 21:42:42 UTC (rev 4159) +++ SwiftApps/SwiftR/Swift/tests/cobalt_script.R 2011-03-02 21:55:50 UTC (rev 4160) @@ -1,11 +0,0 @@ -require(Swift) - -x1 <- getNodeList() -print("Auto:") -print(x1) - -x2 <- getNodeList("cobalt") -print("pbs:") -print(x2) - -runAllSwiftTests(server="ssh", hosts=x2[[1]], cores=8) Modified: SwiftApps/SwiftR/Swift/tests/cobalt_test.sub =================================================================== --- SwiftApps/SwiftR/Swift/tests/cobalt_test.sub 2011-03-02 21:42:42 UTC (rev 4159) +++ SwiftApps/SwiftR/Swift/tests/cobalt_test.sub 2011-03-02 21:55:50 UTC (rev 4160) @@ -1,12 +1,12 @@ #!/bin/sh export WORKER_LOGGING_LEVEL=ERROR -echo '***' COBALT_NODEFILE file: $COBALT_NODEFILE CONTACT:http://10.40.9.151:47853 +echo '***' COBALT_NODEFILE file: $COBALT_NODEFILE cat $COBALT_NODEFILE echo '***' unique nodes are: sort < $COBALT_NODEFILE|uniq echo GLOBUS_HOSTNAME $GLOBUS_HOSTNAME export GLOBUS_HOSTNAME="" -Rscript `dirname $0`/cobalt_script.R +Rscript `dirname $0`/cobalt_script.R cobalt Added: SwiftApps/SwiftR/Swift/tests/pbs_test.sub =================================================================== --- SwiftApps/SwiftR/Swift/tests/pbs_test.sub (rev 0) +++ SwiftApps/SwiftR/Swift/tests/pbs_test.sub 2011-03-02 21:55:50 UTC (rev 4160) @@ -0,0 +1,18 @@ +#PBS -S /bin/sh +#PBS -N SwiftR-batch +#PBS -m n +#PBS -l nodes=1 +#PBS -l walltime=00:30:00 + +export WORKER_LOGGING_LEVEL=ERROR # FIXME: parameterize; fix w PBS -v +#cd / && /usr/bin/perl /autonfs/home/tga/R/x86_64-unknown-linux-gnu-library/2.12/Swift/exec/../swift/bin/worker.pl http://192.5.86.6:48998 SwiftR-workers /home/tga/.globus/coasters 864000 +HOST=$(echo http://192.5.86.6:48998 | sed -e 's,^http://,,' -e 's/:.*//') +PORT=$(echo http://192.5.86.6:48998 | sed -e 's,^.*:,,') +echo '***' PBS_NODEFILE file: $PBS_NODEFILE +cat $PBS_NODEFILE +echo '***' unique nodes are: +sort < $PBS_NODEFILE|uniq + +echo GLOBUS_HOSTNAME=$GLOBUS_HOSTNAME +echo PATH=$PATH +Rscript `dirname $0`/cobalt_script.R pbs From noreply at svn.ci.uchicago.edu Wed Mar 2 16:04:53 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 2 Mar 2011 16:04:53 -0600 (CST) Subject: [Swift-commit] r4161 - SwiftApps/SwiftR/Swift/tests Message-ID: <20110302220453.0E1A89CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-02 16:04:52 -0600 (Wed, 02 Mar 2011) New Revision: 4161 Modified: SwiftApps/SwiftR/Swift/tests/batch_test.R SwiftApps/SwiftR/Swift/tests/cobalt_test.sub Log: Fixed cobalt test script. Modified: SwiftApps/SwiftR/Swift/tests/batch_test.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/batch_test.R 2011-03-02 21:55:50 UTC (rev 4160) +++ SwiftApps/SwiftR/Swift/tests/batch_test.R 2011-03-02 22:04:52 UTC (rev 4161) @@ -21,7 +21,7 @@ print("pbsf:") print(x3) } -if (server == "sge")) { +if (server == "sge") { x2 <- getNodeList("sge") print("sge:") print(x2) Modified: SwiftApps/SwiftR/Swift/tests/cobalt_test.sub =================================================================== --- SwiftApps/SwiftR/Swift/tests/cobalt_test.sub 2011-03-02 21:55:50 UTC (rev 4160) +++ SwiftApps/SwiftR/Swift/tests/cobalt_test.sub 2011-03-02 22:04:52 UTC (rev 4161) @@ -7,6 +7,6 @@ echo GLOBUS_HOSTNAME $GLOBUS_HOSTNAME export GLOBUS_HOSTNAME="" -Rscript `dirname $0`/cobalt_script.R cobalt +Rscript `dirname $0`/batch_test.R cobalt From noreply at svn.ci.uchicago.edu Wed Mar 2 16:29:29 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 2 Mar 2011 16:29:29 -0600 (CST) Subject: [Swift-commit] r4162 - in SwiftApps/SwiftR/Swift: R tests Message-ID: <20110302222929.232CC9CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-02 16:29:29 -0600 (Wed, 02 Mar 2011) New Revision: 4162 Modified: SwiftApps/SwiftR/Swift/R/Workers.R SwiftApps/SwiftR/Swift/tests/batch_test.R SwiftApps/SwiftR/Swift/tests/pbs_test.sub Log: Fixes to pbs batch submission. Fixed bug where hostnames were converted to factors. Modified: SwiftApps/SwiftR/Swift/R/Workers.R =================================================================== --- SwiftApps/SwiftR/Swift/R/Workers.R 2011-03-02 22:04:52 UTC (rev 4161) +++ SwiftApps/SwiftR/Swift/R/Workers.R 2011-03-02 22:29:29 UTC (rev 4162) @@ -15,7 +15,8 @@ if (hostfile[[1]] != "") { hostnames <- read.table(hostfile, stringsAsFactors=FALSE)[[1]] summ <- rle(sort(hostnames)) - hostinfo <- data.frame(hosts=summ[[2]], count=summ[[1]]) + hostinfo <- data.frame(hosts=summ[[2]], count=summ[[1]], + stringsAsFactors=FALSE) } } @@ -24,7 +25,8 @@ if (hostfile[[1]] != "") { hostnames <- read.table(hostfile, stringsAsFactors=FALSE)[[1]] summ <- rle(sort(hostnames)) - hostinfo <- data.frame(hosts=summ[[2]], count=summ[[1]]) + hostinfo <- data.frame(hosts=summ[[2]], count=summ[[1]], + stringsAsFactors=FALSE) } } if (is.null(server) || server == "sge") { Modified: SwiftApps/SwiftR/Swift/tests/batch_test.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/batch_test.R 2011-03-02 22:04:52 UTC (rev 4161) +++ SwiftApps/SwiftR/Swift/tests/batch_test.R 2011-03-02 22:29:29 UTC (rev 4162) @@ -31,5 +31,8 @@ print(x3) } +print ("Hosts:") +print(x1[[1]]) + runAllSwiftTests(server="ssh", hosts=x1[[1]], cores=8) Modified: SwiftApps/SwiftR/Swift/tests/pbs_test.sub =================================================================== --- SwiftApps/SwiftR/Swift/tests/pbs_test.sub 2011-03-02 22:04:52 UTC (rev 4161) +++ SwiftApps/SwiftR/Swift/tests/pbs_test.sub 2011-03-02 22:29:29 UTC (rev 4162) @@ -14,5 +14,22 @@ sort < $PBS_NODEFILE|uniq echo GLOBUS_HOSTNAME=$GLOBUS_HOSTNAME -echo PATH=$PATH -Rscript `dirname $0`/cobalt_script.R pbs +#export PATH=/autonfs/home/tga/R-2.12.1/bin:$PATH + +if which Rscript; then + echo Rscript binary found! +else + echo Rscript binary not found in: + echo PATH=$PATH + echo Maybe you need to set PATH in this sub file + exit 1 +fi + + +#Rscript `dirname $0`/batch_test.R pbs +if [ -f $PBS_O_WORKDIR/Swift/tests/batch_test.R ]; then + Rscript $PBS_O_WORKDIR/Swift/tests/batch_test.R pbs +else + echo Could not find batch_test.R. Maybe try modifying this .sub file with the absolute path of the script. + exit 1 +fi From noreply at svn.ci.uchicago.edu Wed Mar 2 16:34:02 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 2 Mar 2011 16:34:02 -0600 (CST) Subject: [Swift-commit] r4163 - SwiftApps/SwiftR Message-ID: <20110302223402.D53EA9CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-02 16:34:02 -0600 (Wed, 02 Mar 2011) New Revision: 4163 Modified: SwiftApps/SwiftR/IMMEDIATE-TODO Log: Updates to swiftR todo list. Modified: SwiftApps/SwiftR/IMMEDIATE-TODO =================================================================== --- SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-02 22:29:29 UTC (rev 4162) +++ SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-02 22:34:02 UTC (rev 4163) @@ -14,12 +14,9 @@ - smaller focused micro-tests looking at param size - Sarah Kenny FMRI - parallel OpenMx Tests - - Candidate systems: - - Eureka/cobalt - need to finish up - - Beagle - might be working - - Sicortex (NO) - - BG/P (NO) +HIGH: +-- get working on beagle. HIGH: - tests @@ -35,14 +32,15 @@ -- swift times? -- micro studies on provider staging etc. -HIGH: -- test on Ranger - HIGH: See email about pbs breaking on UVa cluster MID: + +- test on Ranger + +MID: - saner approach to channels: channel per request to avoid the issue of what happens if a "done" is never read @@ -60,9 +58,6 @@ -- siraf -- godzilla (if updated) -MID: -- user testing in general (ssh, pbs, sge) -* SGE testing: ranger, siraf (low priority) MID: * Cleanup ssh worker processes: add a watchdog that detects when worker.pl has @@ -74,13 +69,13 @@ MID: * Fast branch: working? faster? + (* NOTE: wait until updates: fast branch afflicted by deadlocks *) MID: -Investigate use of swift broadcase: - swift bcast if exportAll files/data and/or xmit this via prov staging w/ caching of duplicates +Implement omxXXX parallel calls, update openmx code MID: -Implement omxXXX parallel calls, update openmx code +- More robust mechanism for swiftExport - use swift to stage? LOW: (unless needed by immediate OpenMx app or test) - complete sf compat functions (sapply, lapply -> for openMx, based on usage) @@ -94,7 +89,6 @@ - SwiftR removes result pipe - Swift script writes a done message to result directory and then exits loop - -- workspace is run as a job under batch scheduler -> new feature LOW: -- perf issue wrt arg list copies (very low prio) @@ -115,7 +109,11 @@ - each request provides a reply channel - swift server forks off a worker thread for each request +LOW: +Investigate use of swift broadcase: + swift bcast if exportAll files/data and/or xmit this via prov staging w/ caching of duplicates + ========================================================================= Completed: ========================================================================= @@ -139,3 +137,12 @@ He (Mihael) will also look at a better fix to the coaster timeout problem, but for now, you should integrate the timeout change from my trunk/cog/modules/provider-coaster/src/* into your test trunk/ Otherwise, you'll find that your coaster workers quit after a few minutes of inactivity and then start-swift needs to be killed, workers cleanup up, and start-swift restarted. +MID: +- user testing in general (ssh, pbs, sge) +* SGE testing: ranger, siraf (low priority) + +LOW: + - workspace is run as a job under batch scheduler -> new feature + (* This can be achieved by running R script through batch scheduler, and using + ssh server. A convenience function getNodeList is included to make it easier + to get the host list from the environment *) From noreply at svn.ci.uchicago.edu Wed Mar 2 17:35:04 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 2 Mar 2011 17:35:04 -0600 (CST) Subject: [Swift-commit] r4164 - www/main Message-ID: <20110302233504.8DF939CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-02 17:35:04 -0600 (Wed, 02 Mar 2011) New Revision: 4164 Modified: www/main/index.php Log: Drop last paragraph Modified: www/main/index.php =================================================================== --- www/main/index.php 2011-03-02 22:34:02 UTC (rev 4163) +++ www/main/index.php 2011-03-02 23:35:04 UTC (rev 4164) @@ -74,9 +74,6 @@ additional support from NIH, Argonne National Laboratory and the University of Chicago Computation Institute.

-

-Swift is an effort undergoing incubation at Globus. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful Globus projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by Globus. -

From noreply at svn.ci.uchicago.edu Wed Mar 2 17:39:30 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 2 Mar 2011 17:39:30 -0600 (CST) Subject: [Swift-commit] r4165 - www/inc Message-ID: <20110302233930.438BB9CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-02 17:39:30 -0600 (Wed, 02 Mar 2011) New Revision: 4165 Modified: www/inc/home_sidebar.php Log: Update to v0.91 Modified: www/inc/home_sidebar.php =================================================================== --- www/inc/home_sidebar.php 2011-03-02 23:35:04 UTC (rev 4164) +++ www/inc/home_sidebar.php 2011-03-02 23:39:30 UTC (rev 4165) @@ -1,9 +1,10 @@ -

What's New?

+ +

What's New?

Paper published

Parallel Scripting for Applications at the Petascale and Beyond [pdf]


-

SWIFT 0.9 RELEASE - 27 APR 2009

+

SWIFT 0.91 RELEASE - 2010/12/23

-The latest release of Swift, v0.9, is available from the +The latest release of Swift, v0.91, is available from the downloads page.


From noreply at svn.ci.uchicago.edu Wed Mar 2 17:42:43 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 2 Mar 2011 17:42:43 -0600 (CST) Subject: [Swift-commit] r4166 - www/docs Message-ID: <20110302234243.1CFFE9CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-02 17:42:42 -0600 (Wed, 02 Mar 2011) New Revision: 4166 Modified: www/docs/index.php Log: Note version number Modified: www/docs/index.php =================================================================== --- www/docs/index.php 2011-03-02 23:39:30 UTC (rev 4165) +++ www/docs/index.php 2011-03-02 23:42:42 UTC (rev 4166) @@ -67,7 +67,7 @@ information on swift. It is assumed that the reader is already familiar with the material in the Quickstart and Tutorial documents.

-
  • current +
  • latest (0.91) [multi-page html] [single-page html] [ Author: skenny Date: 2011-03-02 20:38:38 -0600 (Wed, 02 Mar 2011) New Revision: 4167 Modified: www/downloads/index.php Log: new release Modified: www/downloads/index.php =================================================================== --- www/downloads/index.php 2011-03-02 23:42:42 UTC (rev 4166) +++ www/downloads/index.php 2011-03-03 02:38:38 UTC (rev 4167) @@ -27,13 +27,13 @@

    DOWNLOADS

    Latest Release

    -

    Swift 0.91 - 2010/12/23

    +

    Swift 0.92 - 2011/03/04

    Precompiled binary distribution -[swift-0.91.tar.gz] +>swift-0.92.tar.gz] -

    @@ -66,7 +66,7 @@

    Checkout Swift:

    cd cog/modules
    -
    svn co https://svn.ci.uchicago.edu/svn/vdl2/branches/release-0.91 swift
    +
    svn co https://svn.ci.uchicago.edu/svn/vdl2/branches/release-0.92 swift

    @@ -123,8 +123,15 @@ The dist directory will contain the complete build.

    -

    Historical releases

    +

    Older releases

    + +

    Swift 0.91 - 2010/12/23

    +

    Precompiled binary distribution +[swift-0.92.tar.gz] +

    Swift 0.9 - 2009/04/27

    [ Author: tga Date: 2011-03-03 11:22:13 -0600 (Thu, 03 Mar 2011) New Revision: 4168 Modified: SwiftApps/SwiftR/Swift/DESCRIPTION SwiftApps/SwiftR/Swift/tests/batch_test.R SwiftApps/SwiftR/Swift/tests/pbs_test.sub Log: Tidied up batch test scripts a little. New version 0.1.5 Modified: SwiftApps/SwiftR/Swift/DESCRIPTION =================================================================== --- SwiftApps/SwiftR/Swift/DESCRIPTION 2011-03-03 02:38:38 UTC (rev 4167) +++ SwiftApps/SwiftR/Swift/DESCRIPTION 2011-03-03 17:22:13 UTC (rev 4168) @@ -1,11 +1,12 @@ Package: Swift Type: Package Title: R interface to Swift parallel scripting languaage -Version: 0.1.4 -Date: 2010-02-24 +Version: 0.1.5 +Date: 2011-04-03 Author: Michael Wilde Maintainer: Michael Wilde Description: Routines to invoke R functions on remote resources through Swift. License: Apache License LazyLoad: yes -Packaged: 2010-09-17 12:58:48 UTC; wilde +Packaged: 2011-04-03; Tim Armstrong + Modified: SwiftApps/SwiftR/Swift/tests/batch_test.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/batch_test.R 2011-03-03 02:38:38 UTC (rev 4167) +++ SwiftApps/SwiftR/Swift/tests/batch_test.R 2011-03-03 17:22:13 UTC (rev 4168) @@ -3,36 +3,36 @@ server <- commandArgs(TRUE)[[1]] -x1 <- getNodeList() +hostinfo1 <- getNodeList() print("Auto:") -print(x1) +print(hostinfo1) if (server == "cobalt") { - x2 <- getNodeList("cobalt") + hostinfo2 <- getNodeList("cobalt") print("cobalt:") - print(x2) + print(hostinfo2) } if (server %in% c("pbs", "pbsf")) { - x2 <- getNodeList("pbs") + hostinfo2 <- getNodeList("pbs") print("pbs:") - print(x2) + print(hostinfo2) - x3 <- getNodeList("pbsf") + hostinfo3 <- getNodeList("pbsf") print("pbsf:") - print(x3) + print(hostinfo3) } if (server == "sge") { - x2 <- getNodeList("sge") + hostinfo2 <- getNodeList("sge") print("sge:") - print(x2) + print(hostinfo2) - x3 <- getNodeList("pbsf") + hostinfo3 <- getNodeList("pbsf") print("pbsf:") - print(x3) + print(hostinfo3) } print ("Hosts:") -print(x1[[1]]) +print(hostinfo1[[1]]) -runAllSwiftTests(server="ssh", hosts=x1[[1]], cores=8) +runAllSwiftTests(server="ssh", hosts=hostinfo1[[1]], cores=8) Modified: SwiftApps/SwiftR/Swift/tests/pbs_test.sub =================================================================== --- SwiftApps/SwiftR/Swift/tests/pbs_test.sub 2011-03-03 02:38:38 UTC (rev 4167) +++ SwiftApps/SwiftR/Swift/tests/pbs_test.sub 2011-03-03 17:22:13 UTC (rev 4168) @@ -4,8 +4,6 @@ #PBS -l nodes=1 #PBS -l walltime=00:30:00 -export WORKER_LOGGING_LEVEL=ERROR # FIXME: parameterize; fix w PBS -v -#cd / && /usr/bin/perl /autonfs/home/tga/R/x86_64-unknown-linux-gnu-library/2.12/Swift/exec/../swift/bin/worker.pl http://192.5.86.6:48998 SwiftR-workers /home/tga/.globus/coasters 864000 HOST=$(echo http://192.5.86.6:48998 | sed -e 's,^http://,,' -e 's/:.*//') PORT=$(echo http://192.5.86.6:48998 | sed -e 's,^.*:,,') echo '***' PBS_NODEFILE file: $PBS_NODEFILE From noreply at svn.ci.uchicago.edu Sun Mar 6 09:34:08 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Sun, 6 Mar 2011 09:34:08 -0600 (CST) Subject: [Swift-commit] r4169 - www/downloads Message-ID: <20110306153408.6AA359CC80@svn.ci.uchicago.edu> Author: wilde Date: 2011-03-06 09:34:07 -0600 (Sun, 06 Mar 2011) New Revision: 4169 Modified: www/downloads/index.php Log: Specify the correct cog branch (4.1.8) for Swift 0.92 Modified: www/downloads/index.php =================================================================== --- www/downloads/index.php 2011-03-03 17:22:13 UTC (rev 4168) +++ www/downloads/index.php 2011-03-06 15:34:07 UTC (rev 4169) @@ -59,7 +59,7 @@

    Checkout CoG:

    svn co \ -https://cogkit.svn.sourceforge.net/svnroot/cogkit/branches/4.1.7/src/cog
    +https://cogkit.svn.sourceforge.net/svnroot/cogkit/branches/4.1.8/src/cog

    From noreply at svn.ci.uchicago.edu Sun Mar 6 15:04:28 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Sun, 6 Mar 2011 15:04:28 -0600 (CST) Subject: [Swift-commit] r4170 - branches/release-0.92/libexec Message-ID: <20110306210428.7D19D9CC9A@svn.ci.uchicago.edu> Author: hategan Date: 2011-03-06 15:04:28 -0600 (Sun, 06 Mar 2011) New Revision: 4170 Modified: branches/release-0.92/libexec/svn-revision Log: fixed revision when using git, thanks to Allan Modified: branches/release-0.92/libexec/svn-revision =================================================================== --- branches/release-0.92/libexec/svn-revision 2011-03-06 15:34:07 UTC (rev 4169) +++ branches/release-0.92/libexec/svn-revision 2011-03-06 21:04:28 UTC (rev 4170) @@ -6,7 +6,7 @@ M=$(svn status | grep --invert-match '^\?' > /dev/null && echo "($1 modified locally)") elif [ -d ".git" ] && [ -x "$(which git)" ]; then R=$(git svn info | grep '^Revision' | sed "s/Revision: /$1-r/") - if git status -a >/dev/null ; then + if git status --porcelain | grep 'M ' >/dev/null ; then M="($1 modified locally)" fi else From noreply at svn.ci.uchicago.edu Sun Mar 6 15:44:41 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Sun, 6 Mar 2011 15:44:41 -0600 (CST) Subject: [Swift-commit] r4171 - in trunk/src/org/griphyn/vdl/karajan: . lib Message-ID: <20110306214441.DAAAB9CC9A@svn.ci.uchicago.edu> Author: hategan Date: 2011-03-06 15:44:41 -0600 (Sun, 06 Mar 2011) New Revision: 4171 Added: trunk/src/org/griphyn/vdl/karajan/HangChecker.java Modified: trunk/src/org/griphyn/vdl/karajan/Loader.java trunk/src/org/griphyn/vdl/karajan/Monitor.java trunk/src/org/griphyn/vdl/karajan/lib/VDLFunction.java Log: added a hang checker to detect when things stop happening and dump future/thread info to the log file Added: trunk/src/org/griphyn/vdl/karajan/HangChecker.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/HangChecker.java (rev 0) +++ trunk/src/org/griphyn/vdl/karajan/HangChecker.java 2011-03-06 21:44:41 UTC (rev 4171) @@ -0,0 +1,66 @@ +//---------------------------------------------------------------------- +//This code is developed as part of the Java CoG Kit project +//The terms of the license can be found at http://www.cogkit.org/license +//This message may not be removed or altered. +//---------------------------------------------------------------------- + +/* + * Created on Mar 6, 2011 + */ +package org.griphyn.vdl.karajan; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.Timer; +import java.util.TimerTask; + +import org.apache.log4j.Logger; +import org.globus.cog.karajan.scheduler.LateBindingScheduler; +import org.globus.cog.karajan.stack.VariableStack; +import org.globus.cog.karajan.workflow.ExecutionException; +import org.globus.cog.karajan.workflow.events.EventBus; +import org.globus.cog.karajan.workflow.nodes.grid.SchedulerNode; +import org.griphyn.vdl.karajan.lib.VDLFunction; + +public class HangChecker extends TimerTask { + public static final Logger logger = Logger.getLogger(HangChecker.class); + + public static final int CHECK_INTERVAL = 10000; + private Timer timer; + private long lastEventCount; + private WrapperMap map; + private VariableStack stack; + + public HangChecker(VariableStack stack) throws ExecutionException { + this.stack = stack; + map = VDLFunction.getFutureWrapperMap(stack); + } + + public void start() { + timer = new Timer("Hang checker"); + timer.scheduleAtFixedRate(this, CHECK_INTERVAL, CHECK_INTERVAL); + } + + public void run() { + try { + LateBindingScheduler s = (LateBindingScheduler) stack.getGlobal(SchedulerNode.SCHEDULER); + if (s != null) { + int running = s.getRunning(); + + if (running == 0 && EventBus.eventCount == lastEventCount) { + logger.warn("No events in " + (CHECK_INTERVAL / 1000) + "s."); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + PrintStream ps = new PrintStream(os); + Monitor.dumpVariables(map, ps); + Monitor.dumpThreads(ps); + logger.warn(os.toString()); + ps.close(); + } + } + lastEventCount = EventBus.eventCount; + } + catch (Exception e) { + logger.warn("Exception caught during hang check", e); + } + } +} Modified: trunk/src/org/griphyn/vdl/karajan/Loader.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/Loader.java 2011-03-06 21:04:28 UTC (rev 4170) +++ trunk/src/org/griphyn/vdl/karajan/Loader.java 2011-03-06 21:44:41 UTC (rev 4171) @@ -194,13 +194,12 @@ } ec.setArguments(arguments); long start = System.currentTimeMillis(); + new HangChecker(stack).start(); ec.start(stack); ec.waitFor(); if (ec.isFailed()) { runerror = true; } - long end = System.currentTimeMillis(); - System.out.println("Time: " + (end - start) / 1000.0 + ", rate: " + (16384 * 1000) / (end - start) + " j/s"); } catch (Exception e) { logger.debug("Detailed exception:", e); Modified: trunk/src/org/griphyn/vdl/karajan/Monitor.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/Monitor.java 2011-03-06 21:04:28 UTC (rev 4170) +++ trunk/src/org/griphyn/vdl/karajan/Monitor.java 2011-03-06 21:44:41 UTC (rev 4171) @@ -209,8 +209,12 @@ public void dumpVariables() { dumpVariables(System.out); } + + public void dumpVariables(PrintStream ps) { + dumpVariables(map, ps); + } - public void dumpVariables(PrintStream ps) { + public static void dumpVariables(WrapperMap map, PrintStream ps) { ps.println("\nRegistered futures:"); synchronized (map) { Iterator i = map.entrySet().iterator(); @@ -244,7 +248,7 @@ dumpThreads(System.out); } - public void dumpThreads(PrintStream pw) { + public static void dumpThreads(PrintStream pw) { pw.println("\nWaiting threads:"); Collection c = WaitingThreadsMonitor.getAllThreads(); Iterator i = c.iterator(); Modified: trunk/src/org/griphyn/vdl/karajan/lib/VDLFunction.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/lib/VDLFunction.java 2011-03-06 21:04:28 UTC (rev 4170) +++ trunk/src/org/griphyn/vdl/karajan/lib/VDLFunction.java 2011-03-06 21:44:41 UTC (rev 4171) @@ -376,7 +376,7 @@ public static final String VDL_FUTURE_WRAPPER_MAP = "#vdl:futureWrapperMap"; - protected static WrapperMap getFutureWrapperMap(VariableStack stack) throws ExecutionException { + public static WrapperMap getFutureWrapperMap(VariableStack stack) throws ExecutionException { synchronized (stack.getExecutionContext()) { WrapperMap hash = (WrapperMap) stack.firstFrame().getVar(VDL_FUTURE_WRAPPER_MAP); if (hash == null) { From noreply at svn.ci.uchicago.edu Mon Mar 7 12:38:23 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 7 Mar 2011 12:38:23 -0600 (CST) Subject: [Swift-commit] r4172 - SwiftApps/SwiftR Message-ID: <20110307183823.AE5CF9CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-07 12:38:23 -0600 (Mon, 07 Mar 2011) New Revision: 4172 Modified: SwiftApps/SwiftR/IMMEDIATE-TODO Log: Updated todo list with some completed doc tasks. Modified: SwiftApps/SwiftR/IMMEDIATE-TODO =================================================================== --- SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-06 21:44:41 UTC (rev 4171) +++ SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-07 18:38:23 UTC (rev 4172) @@ -33,9 +33,6 @@ -- micro studies on provider staging etc. -HIGH: -See email about pbs breaking on UVa cluster - MID: - test on Ranger @@ -44,12 +41,6 @@ - saner approach to channels: channel per request to avoid the issue of what happens if a "done" is never read -MID: -- Wiki: screen - -MID: -- startup notes from Tim Bates - -- rlib rpackage sugg MID: - SGE for Tim bates @@ -146,3 +137,14 @@ (* This can be achieved by running R script through batch scheduler, and using ssh server. A convenience function getNodeList is included to make it easier to get the host list from the environment *) + +HIGH: +See email about pbs breaking on UVa cluster + + +MID: +- Wiki: screen + +MID: +- startup notes from Tim Bates + -- rlib rpackage sugg From noreply at svn.ci.uchicago.edu Mon Mar 7 18:24:50 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 7 Mar 2011 18:24:50 -0600 (CST) Subject: [Swift-commit] r4173 - trunk/src/org/griphyn/vdl/karajan Message-ID: <20110308002450.E6F509CC92@svn.ci.uchicago.edu> Author: hategan Date: 2011-03-07 18:24:50 -0600 (Mon, 07 Mar 2011) New Revision: 4173 Modified: trunk/src/org/griphyn/vdl/karajan/DSHandleFutureWrapper.java Log: fixed deadlock in future handling Modified: trunk/src/org/griphyn/vdl/karajan/DSHandleFutureWrapper.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/DSHandleFutureWrapper.java 2011-03-07 18:38:23 UTC (rev 4172) +++ trunk/src/org/griphyn/vdl/karajan/DSHandleFutureWrapper.java 2011-03-08 00:24:50 UTC (rev 4173) @@ -7,6 +7,7 @@ import org.globus.cog.karajan.stack.VariableNotFoundException; import org.globus.cog.karajan.stack.VariableStack; +import org.globus.cog.karajan.workflow.events.EventBus; import org.globus.cog.karajan.workflow.events.EventTargetPair; import org.globus.cog.karajan.workflow.futures.Future; import org.globus.cog.karajan.workflow.futures.FutureEvaluationException; @@ -66,9 +67,13 @@ return; } while (!listeners.isEmpty()) { - ListenerStackPair etp = listeners.removeFirst(); + final ListenerStackPair etp = listeners.removeFirst(); WaitingThreadsMonitor.removeThread(etp.stack); - etp.listener.futureModified(this, etp.stack); + EventBus.post(new Runnable() { + public void run() { + etp.listener.futureModified(DSHandleFutureWrapper.this, etp.stack); + } + }); } listeners = null; } From noreply at svn.ci.uchicago.edu Wed Mar 9 14:57:16 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 9 Mar 2011 14:57:16 -0600 (CST) Subject: [Swift-commit] r4174 - in SwiftApps/SwiftR: . Swift Swift/R Swift/tests Swift/tests/OpenMx Message-ID: <20110309205716.A24629CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-09 14:57:14 -0600 (Wed, 09 Mar 2011) New Revision: 4174 Added: SwiftApps/SwiftR/Swift/tests/OpenMx/ SwiftApps/SwiftR/Swift/tests/OpenMx/BootstrapParallelBigger.R SwiftApps/SwiftR/Swift/tests/OpenMx/RAM-3Factor-96Indicators-covdata-a.R SwiftApps/SwiftR/Swift/tests/perf_tests.R Removed: SwiftApps/SwiftR/mxtests/ Modified: SwiftApps/SwiftR/IMMEDIATE-TODO SwiftApps/SwiftR/Swift/NAMESPACE SwiftApps/SwiftR/Swift/R/TestFramework.R Log: Fixed up the performance test suite so that it is packaged with the library. Fixed up analysis functions to work more nicely. This is still a work in progress. Modified: SwiftApps/SwiftR/IMMEDIATE-TODO =================================================================== --- SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-08 00:24:50 UTC (rev 4173) +++ SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-09 20:57:14 UTC (rev 4174) @@ -16,9 +16,34 @@ - parallel OpenMx Tests HIGH: +-- Feedback from queue + +HIGH: -- get working on beagle. HIGH: +-- Test on Mac + +HIGH: +-- Usability testing package +-- Instructions + survey + +MED: +-- OpenMx specific instructions. + +HIGH: +-- Check java version ahead of time + +HIGH: +-- email swift-devel about automated tests + +MED: +-- IBI performance tests + +MED: +-- Add OpenMx tests to test suite + +HIGH: - tests -- simple calibration tests (n args, arg sizes, durations, etc) -- openmx tests Modified: SwiftApps/SwiftR/Swift/NAMESPACE =================================================================== --- SwiftApps/SwiftR/Swift/NAMESPACE 2011-03-08 00:24:50 UTC (rev 4173) +++ SwiftApps/SwiftR/Swift/NAMESPACE 2011-03-09 20:57:14 UTC (rev 4174) @@ -27,4 +27,6 @@ export(mkPerfTest) export(doPerfTest) export(analysePerf) +export(analyseSuitePerf) +export(mergeGroupResults) Modified: SwiftApps/SwiftR/Swift/R/TestFramework.R =================================================================== --- SwiftApps/SwiftR/Swift/R/TestFramework.R 2011-03-08 00:24:50 UTC (rev 4173) +++ SwiftApps/SwiftR/Swift/R/TestFramework.R 2011-03-09 20:57:14 UTC (rev 4174) @@ -46,8 +46,26 @@ return (makeTestGroup(name, tests, setup, teardown)) } -analysePerf <- function (testGroupResults, nargs=0, perfparams=NULL) { +analyseSuitePerf <- function (testSuite, ...) { + # See analyse perf below: does the same for a test suite and returns a list of the results + # for each group + lapply(testSuite$groups, + function (g) { + res <- analysePerf(g, ...) + n <- length(res[[1]]) + res$group <- rep(g$name, n) + return (res) + }) +} + +analysePerf <- function (testGroupResults, argnames=NULL, perfparams=NULL, includePassed=FALSE) { # Build a list of vectors of performance results for easier analysis + # argnames: names to give to the arguments to the test function, ordered by position + # The number here is the number of arguments that are extracted from + # the test result data. + # perfparams: names of the parameters passed to swfit/snowfall init functions + # that you want to include in the final data + # [[1]] -> first arg # [[2]] -> second arg # ... ... ....... @@ -56,18 +74,21 @@ # $passed # $time collated <- list() - if (nargs >= 1) { - for (i in 1:nargs) { + if (length(argnames) >= 1) { + for (i in 1:length(argnames)) { collated[[i]] <- unlist(lapply(testGroupResults$tests, function(test) {test$args[[i]]})) + names(collated)[[i]] <- argnames[[i]] } } n <- length(testGroupResults$tests) collated$name <- unlist(lapply(testGroupResults$tests, function(test) {test$name })) - collated$passed <-unlist(lapply(testGroupResults$tests, - function(test) {test$passed })) + if (includePassed) { + collated$passed <-unlist(lapply(testGroupResults$tests, + function(test) {test$passed })) + } collated$time <- unlist(lapply(testGroupResults$tests, function(test) {test$time })) @@ -82,6 +103,18 @@ } +# Takes a list of analysed group results from analysePerf and combines them into +# a single data frame. This has to assume that all data in these lists is valid +# for inclusion in a data frame. Merge rules are those of the built-in merge function +mergeGroupResults <- function (groupResults) { + frames <- lapply(groupResults, data.frame) + res <- frames[[1]] + for (frame in frames[2:length(frames)]) { + res <- merge(res, frame, all=T) + } + return (res) +} + runTestGroup <- function (group) { cat("\n*** Starting test group ", group$name, "***\n") if (!is.null(group$setup)) Added: SwiftApps/SwiftR/Swift/tests/OpenMx/BootstrapParallelBigger.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/OpenMx/BootstrapParallelBigger.R (rev 0) +++ SwiftApps/SwiftR/Swift/tests/OpenMx/BootstrapParallelBigger.R 2011-03-09 20:57:14 UTC (rev 4174) @@ -0,0 +1,206 @@ +#!/bin/env Rscript +# Copyright 2007-2010 The OpenMx Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This file is meant to be opened using the source command from an R instance +# with working directory of either +# a) the root of the R library directory in which is +# b) the root of the SwiftR source trunk +# ie. +# > source("Swift/tests/OpenMx/BootstrapParallelBigger.R") +# +# You can then make a custom bootstrap performance testing suite +# using makeBootstrapTestGroup and makeTestSuite, and run it +# using swiftR's test suite mechanism. + +require(OpenMx) +require(Swift) +source("Swift/tests/perf_tests.R") + + + +# This is the main test function, which can be +# run with varying combinations of the three +# parameters. +bootstrapTest <- function (nVar, nObs, nReps) { + set.seed(10) + topModel <- buildModels(nVar, nObs, nReps) + + modelResults <- mxRun(topModel, silent=TRUE, suppressWarnings=TRUE) + + print(modelResults at output$wallTime) + # Only return some statistics about the model: the returned model data + # can be huge in size otherwise + return (modelResults at output) +} + + +# This function sets up the OpenMx models to +# use for the test +buildModels <- function (nVar, nObs, nReps) { + # parameters for the simulation: lambda = factor loadings, + # specifics = specific variances + goodStartValues <- TRUE + if (!is.logical(goodStartValues)) { + stop("'goodStartValues' should be logical. Try again.") + } + + lambda <- matrix(1:nVar*2/nVar, nVar, 1) + specifics <- diag(nVar) + chl <- chol(lambda %*% t(lambda) + specifics) + + # indices for parameters and hessian estimate in results + pStrt <- 3 + pEnd <- pStrt + 2*nVar - 1 + hStrt <- pEnd + 1 + hEnd <- hStrt + 2*nVar - 1 + + # dimension names for OpenMx + dn <- list() + dn[[1]] <- paste("Var", 1:nVar, sep="") + dn[[2]] <- dn[[1]] + + # function to get a covariance matrix + randomCov <- function(nObs, nVar, chl, dn) { + x <- matrix(rnorm(nObs*nVar), nObs, nVar) + x <- x %*% chl + thisCov <- cov(x) + dimnames(thisCov) <- dn + return(thisCov) + } + + createNewModel <- function(index, prefix, model) { + modelname <- paste(prefix, index, sep='') + model at data@observed <- randomCov(nObs, nVar, chl, dn) + model at name <- modelname + return(model) + } + + getStats <- function(model) { + retval <- c(model at output$status[[1]], + max(abs(model at output$gradient)), + model at output$estimate, + sqrt(diag(solve(model at output$hessian)))) + return(retval) + } + + + # initialize obsCov for MxModel + obsCov <- randomCov(nObs, nVar, chl, dn) + + # results matrix: get results for each simulation +# results <- matrix(0, nReps, hEnd) +# dnr <- c("inform", "maxAbsG", paste("lambda", 1:nVar, sep=""), +# paste("specifics", 1:nVar, sep=""), +# paste("hessLambda", 1:nVar, sep=""), +# paste("hessSpecifics", 1:nVar, sep="")) +# dimnames(results)[[2]] <- dnr + + # instantiate MxModel + template <- mxModel(name="stErrSim", + mxMatrix(name="lambda", type="Full", nrow=nVar, ncol=1, + free=TRUE, values=(1:nVar*2/nVar)*goodStartValues), + mxMatrix(name="specifics", type="Diag", nrow=nVar, + free=TRUE, values=rep(1, nVar)), + mxAlgebra(lambda %*% t(lambda) + specifics, + name="preCov", dimnames=dn), + mxData(observed=obsCov, type="cov", numObs=nObs), + mxMLObjective(covariance='preCov'), + independent = TRUE) + + topModel <- mxModel(name = 'container') + + # Don't need to export as local environment will automatically + # be sent + #swiftExportAll() + submodels <- omxLapply(1:nReps, createNewModel, 'stErrSim', template) + cat(length(submodels), "submodels created\n") +# names(submodels) <- imxExtractNames(submodels) + names(submodels) <- imxExtractNames(submodels) + topModel at submodels <- submodels + + return (topModel) +} + + + +# Construct a performance test group which contains bootstrap instances with +# a range of different parameter values. Additional arguments are +# passed to swiftInit or sfInit as appropriate +makeBootstrapTestGroup <- function (argsList, ...) { + makePerfTestGroup( + name="BootstrapParallelBigger", + f=bootstrapTest, + allargs=argsList, + ... ) +} + + + +testArgs <- list( + list(75, 100, 4), + list(75, 100, 8), + list(75, 100, 16), + list(75, 100, 32), + list(75, 100, 64), + list(75, 100, 128), + list(75, 100, 256), + list(75, 100, 512), + list(75, 100, 786), + list(75, 100, 1024), + list(75, 100, 1024 + 512), + list(75, 100, 2048 ) + ) + +testArgsShort <- list( + list(25, 100, 4), + list(25, 100, 8), + list(25, 100, 16), + list(25, 100, 32), + list(25, 100, 64), + list(25, 100, 128), + list(25, 100, 256), + list(25, 100, 512), + list(25, 100, 786), + list(25, 100, 1024), + list(25, 100, 1024 + 512), + list(25, 100, 2048 ) + ) + + + +# An example test suite which runs on a ssh cluster +# on multiple cores of a machine and in vanilla R +sampleTestSuite <- makeTestSuite( + groups=list( + # 16 cores + makeBootstrapTestGroup(mode="swift", server="ssh", cores=2, + hosts=c("nettle", "wapato", "dandelion", "cattail", + "chicory", "echinacea", "amaranth", "black-cohosh"), + argsList=testArgs[3:5]), + # 8 cores + makeBootstrapTestGroup(mode="swift", server="ssh", cores=2, + hosts="nettle wapato dandelion cattail", + argsList=testArgs[2:5]), + makeBootstrapTestGroup(mode="swift", server="local", cores=4, + argsList=testArgs[1:4]), + makeBootstrapTestGroup(mode="swift", server="local", cores=2, + argsList=testArgs[1:4]), + makeBootstrapTestGroup(mode="swift", server="local", cores=1, + argsList=testArgs[1:2]), + makeBootstrapTestGroup(mode="swift", server="local", cores=1, + argsList=testArgs[1:2]), + makeBootstrapTestGroup(mode="serial", argsList=testArgs[1:2]) + )) + Copied: SwiftApps/SwiftR/Swift/tests/OpenMx/RAM-3Factor-96Indicators-covdata-a.R (from rev 4173, SwiftApps/SwiftR/mxtests/swift/RAM-3Factor-96Indicators-covdata-a.R) =================================================================== --- SwiftApps/SwiftR/Swift/tests/OpenMx/RAM-3Factor-96Indicators-covdata-a.R (rev 0) +++ SwiftApps/SwiftR/Swift/tests/OpenMx/RAM-3Factor-96Indicators-covdata-a.R 2011-03-09 20:57:14 UTC (rev 4174) @@ -0,0 +1,143 @@ +# --------------------------------------------------------------------- +# Program: RAM-3Factor-12Indicators.R +# Author: Steven M. Boker +# Date: Fri Jul 30 13:45:12 EDT 2010 +# +# This program is a factor model using standard RAM. +# +# --------------------------------------------------------------------- +# Revision History +# -- Fri Jul 30 13:45:12 EDT 2010 +# Created RAM-3Factor-12Indicators.R. +# +# --------------------------------------------------------------------- + +# ---------------------------------- +# Read libraries and set options. + +library(OpenMx) +library(Swift) + +# --------------------------------------------------------------------- +# Data for factor model. + + +defaultArgs <- list(1000, 3, 32) + + + +# Construct a performance test group which contains CI instances with +# a range of different parameter values. Additional arguments are +# passed to swiftInit or sfInit as appropriate +makeCITestGroup <- function (argsList, ...) { + makePerfTestGroup( + name="cov.confidence.interval", + f=cov.confidence.interval, + allargs=argsList, + ... ) +} + +cov.confidence.interval <- function (numberSubjects, numberFactors, numberIndPerFactor) { + + #numberSubjects <- 1000 + #numberFactors <- 3 + #numberIndPerFactor <- 32 + numberIndicators <- numberIndPerFactor*numberFactors # must be a multiple of numberFactors + + XMatrix <- matrix(rnorm(numberSubjects*numberFactors, mean=0, sd=1), numberSubjects, numberFactors) + + tLoadings <- c(1, seq(.5, .9, length.out=(numberIndPerFactor-1)), rep(0, numberIndPerFactor*2), + rep(0, numberIndPerFactor*1), 1, seq(.5, .9, length.out=(numberIndPerFactor-1)), rep(0, numberIndPerFactor*1), + rep(0, numberIndPerFactor*2), 1, seq(.5, .9, length.out=(numberIndPerFactor-1))) + BMatrix <- matrix(tLoadings, numberFactors, numberIndicators, byrow=TRUE) + UMatrix <- matrix(rnorm(numberSubjects*numberIndicators, mean=0, sd=1), numberSubjects, numberIndicators) + YMatrix <- XMatrix %*% BMatrix + UMatrix + + cor(XMatrix) + + dimnames(YMatrix) <- list(NULL, paste("X", 1:numberIndicators, sep="")) + + YFrame <- data.frame(YMatrix) + + round(cor(YFrame), 3) + round(cov(YFrame), 3) + + indicators <- paste("X", 1:numberIndicators, sep="") + totalVars <- numberIndicators + numberFactors + + # ---------------------------------- + # Build an orthogonal simple structure factor model + + latents <- paste("F", 1:numberFactors, sep="") + + uniqueLabels <- paste("U_", indicators, sep="") + meanLabels <- paste("M_", latents, sep="") + factorVarLabels <- paste("Var_", latents, sep="") + + latents1 <- latents[1] + indicators1 <- indicators[1:numberIndPerFactor] + loadingLabels1 <- paste("b_F1", indicators[1:numberIndPerFactor], sep="") + latents2 <- latents[2] + indicators2 <- indicators[numberIndPerFactor+(1:numberIndPerFactor)] + loadingLabels2 <- paste("b_F2", indicators[numberIndPerFactor+(1:numberIndPerFactor)], sep="") + latents3 <- latents[3] + indicators3 <- indicators[(2*numberIndPerFactor)+(1:numberIndPerFactor)] + loadingLabels3 <- paste("b_F3", indicators[(2*numberIndPerFactor)+(1:numberIndPerFactor)], sep="") + + threeFactorOrthogonal <- mxModel("threeFactorOrthogonal", + type="RAM", + manifestVars=c(indicators), + latentVars=c(latents,"dummy1"), + mxPath(from=latents1, to=indicators1, + arrows=1, all=TRUE, + free=TRUE, values=.2, + labels=loadingLabels1), + mxPath(from=latents2, to=indicators2, + arrows=1, all=TRUE, + free=TRUE, values=.2, + labels=loadingLabels2), + mxPath(from=latents3, to=indicators3, + arrows=1, all=TRUE, + free=TRUE, values=.2, + labels=loadingLabels3), + mxPath(from=latents1, to=indicators1[1], + arrows=1, + free=FALSE, values=1), + mxPath(from=latents2, to=indicators2[1], + arrows=1, + free=FALSE, values=1), + mxPath(from=latents3, to=indicators3[1], + arrows=1, + free=FALSE, values=1), + mxPath(from=indicators, + arrows=2, + free=TRUE, values=.2, + labels=uniqueLabels), + mxPath(from=latents, + arrows=2, + free=TRUE, values=.8, + labels=factorVarLabels), + mxPath(from="one", to=indicators, + arrows=1, free=FALSE, values=0), + mxPath(from="one", to=c(latents), + arrows=1, free=TRUE, values=.1, + labels=meanLabels), + mxCI(c('A', 'S')), + mxData(observed=cov(YFrame), means=mean(YFrame), + numObs=nrow(YFrame), type="cov") + ) + + threeFactorOrthogonalOut <- mxRun(threeFactorOrthogonal) + threeFactorCI <- omxParallelCI(threeFactorOrthogonalOut) + + totalTime <- threeFactorCI at output$wallTime + seqTime <- threeFactorOrthogonalOut at output$wallTime + + + return (threeFactorCI at output) +} + +sampleTestSuite <- makeTestSuite( + groups=list(makeCITestGroup(mode="swift", + argsList=list(defaultArgs), server="local", cores=4 + ))) Copied: SwiftApps/SwiftR/Swift/tests/perf_tests.R (from rev 4173, SwiftApps/SwiftR/mxtests/swift/MakeTests.R) =================================================================== --- SwiftApps/SwiftR/Swift/tests/perf_tests.R (rev 0) +++ SwiftApps/SwiftR/Swift/tests/perf_tests.R 2011-03-09 20:57:14 UTC (rev 4174) @@ -0,0 +1,74 @@ +# Helper functions for building performance tests suites that don't quite fit in the +# main SwiftR code because they can detach the Swift package.. + + +swiftSetup <- function (...) { + library(Swift) + swiftSess <- swiftInit(...) + # Wait to start + Sys.sleep(10) + # Run some small jobs to ensure workers are started and warmed up + swiftapply(function (x) { x }, + rep(1, swiftSess$cores * swiftSess$nodes * 2), + callsperbatch=1) + return (swiftSess) +} + +swiftTearDown <- function (...) { + swiftShutdown() + detach(package:Swift) +} + +sfSetup <- function(..., cpus=ncpus) { + library(snowfall) + sfInit(..., cpus=ncpus) + # warmup + sfLapply(rep(1, ncpus * 2), + function (x) { x }) + +} + +sfTearDown <- function (...) { + sfStop() + detach(package:snowfall) +} + + + +makePerfTestGroup <- function (mode, name, f, allargs, ...) { + params <- list(...) + paramstr <- paste(names(params), + rep("=", length(params)), + lapply(params, deparse), + sep="", collapse=", ") + if (mode == "swift") { + tg <- makeParamTestGroup(name=paste("swift_",name, " ", paramstr,sep=""), + f=f, + allargs=allargs, + perfparams = params, + setup=function() {swiftSetup(...)}, + teardown = swiftTearDown) + } + else if (mode == "snowfall") { + tg <- makeParamTestGroup(name=paste("sf_",name, paramstr, sep=""), + f=f, + allargs=allargs, + perfparams = params, + setup=function() {sfSetup(...)}, + teardown = sfTearDown) + + } + else { + print("Making serial test") + tg <- makeParamTestGroup(name=paste("serial_",name, paramstr, sep=""), + f=f, + allargs=allargs, + perfparams = list(), + setup=function() + {try(detach(package:Swift)); try(detach(package:Snowfall))} ) + } + return (tg) +} + + + Property changes on: SwiftApps/SwiftR/Swift/tests/perf_tests.R ___________________________________________________________________ Name: svn:mergeinfo + From noreply at svn.ci.uchicago.edu Wed Mar 9 15:40:32 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 9 Mar 2011 15:40:32 -0600 (CST) Subject: [Swift-commit] r4175 - SwiftApps/SwiftR/Swift/tests/OpenMx Message-ID: <20110309214032.5F7F99CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-09 15:40:32 -0600 (Wed, 09 Mar 2011) New Revision: 4175 Modified: SwiftApps/SwiftR/Swift/tests/OpenMx/RAM-3Factor-96Indicators-covdata-a.R Log: Missing source statement in openmx test. Modified: SwiftApps/SwiftR/Swift/tests/OpenMx/RAM-3Factor-96Indicators-covdata-a.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/OpenMx/RAM-3Factor-96Indicators-covdata-a.R 2011-03-09 20:57:14 UTC (rev 4174) +++ SwiftApps/SwiftR/Swift/tests/OpenMx/RAM-3Factor-96Indicators-covdata-a.R 2011-03-09 21:40:32 UTC (rev 4175) @@ -1,6 +1,6 @@ # --------------------------------------------------------------------- # Program: RAM-3Factor-12Indicators.R -# Author: Steven M. Boker +# Author: Steven M. Boker, Timothy G. Armstrong # Date: Fri Jul 30 13:45:12 EDT 2010 # # This program is a factor model using standard RAM. @@ -9,14 +9,24 @@ # Revision History # -- Fri Jul 30 13:45:12 EDT 2010 # Created RAM-3Factor-12Indicators.R. +# -- Wed Mar 9 2011 +# Copied to SwiftR codebase, refactored to use with SwiftR +# performance testing tools # # --------------------------------------------------------------------- +# This file is meant to be opened using the source command from an R instance +# with working directory of either +# a) the root of the R library directory in which is +# b) the root of the SwiftR source trunk +# ie. +# > source("Swift/tests/OpenMx/RAM-3Factor-96Indicators-covdata-a.R") # ---------------------------------- # Read libraries and set options. library(OpenMx) library(Swift) +source("Swift/tests/perf_tests.R") # --------------------------------------------------------------------- # Data for factor model. From noreply at svn.ci.uchicago.edu Mon Mar 14 13:08:38 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 13:08:38 -0500 (CDT) Subject: [Swift-commit] r4176 - trunk/libexec Message-ID: <20110314180838.77B839CC7F@svn.ci.uchicago.edu> Author: hategan Date: 2011-03-14 13:08:37 -0500 (Mon, 14 Mar 2011) New Revision: 4176 Modified: trunk/libexec/vdl-int.k Log: added tcp buffer size configuration Modified: trunk/libexec/vdl-int.k =================================================================== --- trunk/libexec/vdl-int.k 2011-03-09 21:40:32 UTC (rev 4175) +++ trunk/libexec/vdl-int.k 2011-03-14 18:08:37 UTC (rev 4176) @@ -256,7 +256,8 @@ if (policy == "DEFAULT" then( restartOnError(".*", 2 task:transfer(srcprovider=provider, srchost=srchost, srcfile=srcfile, - srcdir=srcdir, desthost=desthost, destdir=destdir))) + srcdir=srcdir, desthost=desthost, destdir=destdir, + transferParams(srchost, desthost, provider)))) policy == "BROADCAST" then( log(LOG:DEBUG, "FILE_STAGE_IN_BROADCAST file={srcfile} policy={policy}") cdm:broadcast(srcfile=srcfile, srcdir=srcdir)) @@ -296,7 +297,8 @@ then( restartOnError(".*", 2 task:transfer(srchost=host, srcfile=bname,srcdir=rdir, - destdir=ldir, desthost=dhost, destprovider=provider))) + destdir=ldir, desthost=dhost, destprovider=provider, + transferParams(host, dhost, provider)))) else(log(LOG:DEBUG, "FILE_STAGE_OUT_SKIP srcname={bname}")) ) log(LOG:DEBUG, "FILE_STAGE_OUT_END srcname={bname} srcdir={rdir} srchost={host} ", From noreply at svn.ci.uchicago.edu Mon Mar 14 17:00:33 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 17:00:33 -0500 (CDT) Subject: [Swift-commit] r4177 - in SwiftApps/SwiftR: . Swift Swift/R Message-ID: <20110314220033.EE73D9CC7F@svn.ci.uchicago.edu> Author: tga Date: 2011-03-14 17:00:33 -0500 (Mon, 14 Mar 2011) New Revision: 4177 Modified: SwiftApps/SwiftR/IMMEDIATE-TODO SwiftApps/SwiftR/Swift/NAMESPACE SwiftApps/SwiftR/Swift/R/Apply.R SwiftApps/SwiftR/Swift/R/Tests.R Log: Added in implementation of swiftSapply function. Modified: SwiftApps/SwiftR/IMMEDIATE-TODO =================================================================== --- SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-14 18:08:37 UTC (rev 4176) +++ SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-14 22:00:33 UTC (rev 4177) @@ -5,6 +5,8 @@ +VERY HIGH: +-- get working on beagle. VERY HIGH: -- Benchmarks @@ -18,8 +20,6 @@ HIGH: -- Feedback from queue -HIGH: --- get working on beagle. HIGH: -- Test on Mac @@ -44,22 +44,12 @@ -- Add OpenMx tests to test suite HIGH: -- tests --- simple calibration tests (n args, arg sizes, durations, etc) --- openmx tests - --- OmxParallelCI - --- OmxParallelBootstrap - -HIGH: - perf approach -- socket? - -- swift fast branch? -- swift times? -- micro studies on provider staging etc. - MID: - - test on Ranger MID: Modified: SwiftApps/SwiftR/Swift/NAMESPACE =================================================================== --- SwiftApps/SwiftR/Swift/NAMESPACE 2011-03-14 18:08:37 UTC (rev 4176) +++ SwiftApps/SwiftR/Swift/NAMESPACE 2011-03-14 22:00:33 UTC (rev 4177) @@ -1,5 +1,6 @@ export(swiftapply) export(swiftLapply) +export(swiftSapply) export(swiftInit) export(getNodeList) export(swiftShutdown) Modified: SwiftApps/SwiftR/Swift/R/Apply.R =================================================================== --- SwiftApps/SwiftR/Swift/R/Apply.R 2011-03-14 18:08:37 UTC (rev 4176) +++ SwiftApps/SwiftR/Swift/R/Apply.R 2011-03-14 22:00:33 UTC (rev 4177) @@ -122,7 +122,49 @@ swiftapply(func, arglists) } +swiftSapply <- function( tlist, func, ..., simplify=TRUE, USE.NAMES=TRUE) { + # replicate sapply behaviour: + # simplify to 1d vector or 2d matrix if possible + res <- swiftLapply(tlist, func, ...) + if (USE.NAMES) { + # same rules as sapply + if (is.null(names(res)) && is.character(tlist)) { + names(res) <- tlist + } + } + if (simplify && length(res) > 0) { + # Check to see if list is multidimensional + lens <- unique(lapply(res, length)) + if (length(lens) != 1) { + # ragged list, can't simplify + return (res) + } + else { + if (lens == 1) { + # just a plain list + return (unlist(res, recursive=F)) + } + else { + # multidimensional list: convert to 2d matrix + res <- unlist(res, recursive=F) + if (!(is.null(n1 <- names(res[[1]]))) && + !(is.null(n2 <- names(res)))) { + # names of first and second dimnesion + dimnames <- list(n1, n2) + } + else { + dimnames <- NULL + } + res <- array(res, dim=c(lens, length(tlist)), + dimnames=dimnames) + return(res) + } + } + } + return (res) +} + setupRequestDir <- function (tmpdir) { # Initialize globals if first call in this invocation of R # Use the options mechanism so that setting is tied Modified: SwiftApps/SwiftR/Swift/R/Tests.R =================================================================== --- SwiftApps/SwiftR/Swift/R/Tests.R 2011-03-14 18:08:37 UTC (rev 4176) +++ SwiftApps/SwiftR/Swift/R/Tests.R 2011-03-14 22:00:33 UTC (rev 4177) @@ -586,8 +586,69 @@ return (FALSE) } } +swiftTest_6.1 <- function () { + # test sapply + args <- list(1,2,3,4,5,6,7) + parRes <- swiftSapply(args, log) + serRes <- sapply(args, log) + if (!all(parRes == serRes)) { + cat("\n!!!==> test 6.1 failed.\n") + cat(paste("actual: ", parRes, "\nexpected:", serRes, "\n")) + return (FALSE) + } + if (is.list(parRes)) { + cat("\n!!!==> test 6.1 failed.\n") + cat("parRes is a list\n") + return (FALSE) + } + + cat("\n!!!==> test 6.1 passed.\n") + return (TRUE) +} + +swiftTest_6.2 <- function () { + # test sapply + args <- list(list(1,2),list(3),list(4,5),list(6,7)) + f <- function (x) {lapply(x, function(y) { y * 2 })} + serRes <- sapply(args, f) + parRes <- swiftSapply(args, f) + + + if (!identical(parRes, serRes)) { + cat("\n!!!==> test 6.2 failed.\n") + cat(paste("actual: ", parRes, "\nexpected:", serRes, "\n")) + return (FALSE) + } + if (!is.list(parRes)) { + cat("\n!!!==> test 6.2 failed.\n") + cat("parRes is not a list\n") + return (FALSE) + } + + cat("\n!!!==> test 6.2 passed.\n") + return (TRUE) + +} + +swiftTest_6.3 <- function () { + # test sapply forms matrix ok + args <- list(list(1,2),list(3, 5),list(4,5),list(6,7)) + f <- function (x) {lapply(x, function(y) { y * 2 })} + serRes <- sapply(args, f) + parRes <- swiftSapply(args, f) + + + if (!identical(parRes, serRes) || (!is.matrix(parRes))) { + cat("\n!!!==> test 6.3 failed.\n") + cat(paste("actual: ", parRes, "\nexpected:", serRes, "\n")) + return (FALSE) + } + cat("\n!!!==> test 6.3 passed.\n") + return (TRUE) +} + runAllSwiftTests <- function(...) { startTime = proc.time()[["elapsed"]] @@ -648,6 +709,11 @@ name="5 - remote R service error ", tests = list(mkTest(swiftTest_5.1))) +testGroup6 <- makeTestGroup( + name="6 - test apply variants", + tests = list(mkTest(swiftTest_6.1), + mkTest(swiftTest_6.2), + mkTest(swiftTest_6.3))) makeFullTestSuite <- function (...) { initArgs <- list(...) @@ -657,6 +723,6 @@ options(swift.initialexpr="initVar1 <- 19; initVar2 <- sqrt(400)+3") do.call(swiftInit, initArgs) }, # swiftInit controlled via options groups=list(testGroup1.1, testGroup2, testGroup1.2, testGroup1.3, testGroup3, testGroup4, - testGroup5), + testGroup5, testGroup6), teardown=function () { swiftShutdown() }) } From noreply at svn.ci.uchicago.edu Mon Mar 14 21:47:27 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 21:47:27 -0500 (CDT) Subject: [Swift-commit] r4178 - usertools/plotter Message-ID: <20110315024727.15FAB9CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-14 21:47:26 -0500 (Mon, 14 Mar 2011) New Revision: 4178 Added: usertools/plotter/.classpath Log: Adding Added: usertools/plotter/.classpath =================================================================== --- usertools/plotter/.classpath (rev 0) +++ usertools/plotter/.classpath 2011-03-15 02:47:26 UTC (rev 4178) @@ -0,0 +1,11 @@ + + + + + + + + + + + From noreply at svn.ci.uchicago.edu Mon Mar 14 21:50:15 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 21:50:15 -0500 (CDT) Subject: [Swift-commit] r4179 - usertools/plotter Message-ID: <20110315025015.BB8BC9CC7F@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-14 21:50:15 -0500 (Mon, 14 Mar 2011) New Revision: 4179 Added: usertools/plotter/samples/ Log: Adding From noreply at svn.ci.uchicago.edu Mon Mar 14 21:50:27 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 21:50:27 -0500 (CDT) Subject: [Swift-commit] r4180 - usertools/plotter/samples Message-ID: <20110315025027.BC48B9CC7F@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-14 21:50:27 -0500 (Mon, 14 Mar 2011) New Revision: 4180 Added: usertools/plotter/samples/lines/ Log: Adding From noreply at svn.ci.uchicago.edu Mon Mar 14 21:52:55 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 21:52:55 -0500 (CDT) Subject: [Swift-commit] r4181 - usertools/plotter Message-ID: <20110315025255.EE88C9CC7F@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-14 21:52:55 -0500 (Mon, 14 Mar 2011) New Revision: 4181 Modified: usertools/plotter/lines.zsh Log: Minor fix for Cygwin Modified: usertools/plotter/lines.zsh =================================================================== --- usertools/plotter/lines.zsh 2011-03-15 02:50:27 UTC (rev 4180) +++ usertools/plotter/lines.zsh 2011-03-15 02:52:55 UTC (rev 4181) @@ -4,9 +4,9 @@ # Arguments passed directly to Lines.java - see there for details # usage: lines.zsh * -PLOTTERS=$( dirname $0 ) +PLOTTERS=$( cd $( dirname $0 ) ; /bin/pwd ) -# declare -p PLOTDIR +# declare -p PLOTTERS source ${PLOTTERS}/classpath.zsh [[ $? != 0 ]] && print "Could not build CLASSPATH!" && return 1 From noreply at svn.ci.uchicago.edu Mon Mar 14 21:56:57 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 21:56:57 -0500 (CDT) Subject: [Swift-commit] r4182 - usertools/plotter/samples/lines Message-ID: <20110315025657.323F29CC7F@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-14 21:56:57 -0500 (Mon, 14 Mar 2011) New Revision: 4182 Added: usertools/plotter/samples/lines/About.txt usertools/plotter/samples/lines/plot.cfg usertools/plotter/samples/lines/set1.data usertools/plotter/samples/lines/set2.data Log: Sample case Added: usertools/plotter/samples/lines/About.txt =================================================================== --- usertools/plotter/samples/lines/About.txt (rev 0) +++ usertools/plotter/samples/lines/About.txt 2011-03-15 02:56:57 UTC (rev 4182) @@ -0,0 +1,5 @@ + +To run: + +../../lines.zsh plot.cfg tmp.eps set*.data + Added: usertools/plotter/samples/lines/plot.cfg =================================================================== --- usertools/plotter/samples/lines/plot.cfg (rev 0) +++ usertools/plotter/samples/lines/plot.cfg 2011-03-15 02:56:57 UTC (rev 4182) @@ -0,0 +1,7 @@ +title = Sample + +xlabel = Input +ylabel = Output + +label.set1.data = Set 1 +label.set2.data = Set 2 Added: usertools/plotter/samples/lines/set1.data =================================================================== --- usertools/plotter/samples/lines/set1.data (rev 0) +++ usertools/plotter/samples/lines/set1.data 2011-03-15 02:56:57 UTC (rev 4182) @@ -0,0 +1,2 @@ +1 2 +2 4 Added: usertools/plotter/samples/lines/set2.data =================================================================== --- usertools/plotter/samples/lines/set2.data (rev 0) +++ usertools/plotter/samples/lines/set2.data 2011-03-15 02:56:57 UTC (rev 4182) @@ -0,0 +1,2 @@ +0 -1 +4 3 From noreply at svn.ci.uchicago.edu Mon Mar 14 22:21:08 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 22:21:08 -0500 (CDT) Subject: [Swift-commit] r4183 - in usertools/plotter: samples/lines src/plotter Message-ID: <20110315032108.1BE929CC7F@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-14 22:21:07 -0500 (Mon, 14 Mar 2011) New Revision: 4183 Modified: usertools/plotter/samples/lines/plot.cfg usertools/plotter/src/plotter/Lines.java Log: Allow user to set font Modified: usertools/plotter/samples/lines/plot.cfg =================================================================== --- usertools/plotter/samples/lines/plot.cfg 2011-03-15 02:56:57 UTC (rev 4182) +++ usertools/plotter/samples/lines/plot.cfg 2011-03-15 03:21:07 UTC (rev 4183) @@ -5,3 +5,5 @@ label.set1.data = Set 1 label.set2.data = Set 2 + +legend.font = Lucida Sans Unicode Regular Modified: usertools/plotter/src/plotter/Lines.java =================================================================== --- usertools/plotter/src/plotter/Lines.java 2011-03-15 02:56:57 UTC (rev 4182) +++ usertools/plotter/src/plotter/Lines.java 2011-03-15 03:21:07 UTC (rev 4183) @@ -3,6 +3,7 @@ import gnu.getopt.Getopt; import java.awt.Color; +import java.awt.Font; import java.awt.geom.Rectangle2D; import java.io.*; import java.util.*; @@ -15,6 +16,7 @@ import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; +import org.jfree.chart.title.LegendTitle; import org.jfree.data.Range; import org.jfree.data.general.Series; import org.jfree.data.xy.XYSeriesCollection; @@ -111,17 +113,23 @@ { Series series = collection.getSeries(i); if (! showShape(series.getDescription())) - { - // System.out.println("invis"); renderer.setSeriesShapesVisible(i, false); - } } + setupLegend(chart); setAxes(plot); plot.setRenderer(renderer); plot.setBackgroundPaint(Color.WHITE); } + private static void setupLegend(JFreeChart chart) + { + LegendTitle legend = chart.getLegend(); + Font font = getLegendFont(); + if (font != null) + legend.setItemFont(font); + } + static void setAxes(XYPlot plot) { // Actual values: modify if necessary @@ -328,6 +336,17 @@ return true; } + static Font getLegendFont() + { + Font result = null; + String name = properties.getProperty("legend.font"); + if (name == null) + return null; + System.out.println(name); + result = new Font(name, Font.PLAIN, 12); + return result; + } + static String toString(double[][] array) { StringBuilder sb = new StringBuilder(); From noreply at svn.ci.uchicago.edu Mon Mar 14 22:36:36 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 22:36:36 -0500 (CDT) Subject: [Swift-commit] r4184 - usertools/plotter/src/plotter Message-ID: <20110315033636.6DCA59CC7F@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-14 22:36:36 -0500 (Mon, 14 Mar 2011) New Revision: 4184 Added: usertools/plotter/src/plotter/Dual.java usertools/plotter/src/plotter/Plots.java Modified: usertools/plotter/src/plotter/Lines.java usertools/plotter/src/plotter/Util.java Log: Essentially copy Lines to Dual Added: usertools/plotter/src/plotter/Dual.java =================================================================== --- usertools/plotter/src/plotter/Dual.java (rev 0) +++ usertools/plotter/src/plotter/Dual.java 2011-03-15 03:36:36 UTC (rev 4184) @@ -0,0 +1,351 @@ +package plotter; + +import gnu.getopt.Getopt; + +import java.awt.Color; +import java.awt.geom.Rectangle2D; +import java.io.*; +import java.util.*; + +import org.apache.commons.io.IOUtils; +import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D; +import org.jfree.chart.ChartFactory; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.axis.NumberAxis; +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.chart.plot.XYPlot; +import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; +import org.jfree.data.Range; +import org.jfree.data.general.Series; +import org.jfree.data.xy.XYSeriesCollection; + +/** + * Plots two data lines on two axes + * See main() for command-line arguments + * */ +public class Dual +{ + static Properties properties; + + public static boolean bw = false; + + static int width = 400; + static int height = 400; + + // null indicates the value was not set by the user + static Double xmin = null; + static Double xmax = null; + static Double ymin = null; + static Double ymax = null; + + /** + Generate simple plot + @param collection The x,y data + @param title Plot title + @param xlabel X label text + @param ylabel1 Y label text + @param ylabel2 Y label text + @param output EPS filename + */ + public static boolean plot(XYSeriesCollection collection, + String title, String xlabel, + String ylabel1, String ylabel2, + String output) + { + EPSDocumentGraphics2D g2d = null; + Rectangle2D.Double rectangle = null; + OutputStream out = null; + + try + { + out = new FileOutputStream(output); + out = new BufferedOutputStream(out); + + g2d = new EPSDocumentGraphics2D(false); + g2d.setGraphicContext + (new org.apache.xmlgraphics.java2d.GraphicContext()); + + rectangle = new Rectangle2D.Double(0, 0, width, height); + + g2d.setGraphicContext + (new org.apache.xmlgraphics.java2d.GraphicContext()); + g2d.setupDocument(out, width, height); + } + catch (IOException e) + { + System.out.println("Problem with file: " + output); + return false; + } + + final boolean withLegend = true; + + JFreeChart chart = + ChartFactory.createXYLineChart + (title, xlabel, ylabel1, collection, + PlotOrientation.VERTICAL, withLegend, false, false); + + setupPlot(chart, collection); + chart.draw(g2d, rectangle); + + try + { + g2d.finish(); + } + catch (Exception e) + { + System.out.println("Err!"); + } + + IOUtils.closeQuietly(out); + System.out.println("PLOTTED: " + output); + + return true; + } + + private static void setupPlot(JFreeChart chart, + XYSeriesCollection collection) + { + XYPlot plot = chart.getXYPlot(); + XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); + int count = plot.getSeriesCount(); + if (count != 2) + Util.fatal("dual plot must have two data sets!"); + if (bw) + for (int i = 0; i < count; i++) + renderer.setSeriesPaint(i, Color.BLACK); + Series series1 = collection.getSeries(0); + if (! showShape(series1.getDescription())) + renderer.setSeriesShapesVisible(0, false); + Series series2 = collection.getSeries(1); + if (! showShape(series2.getDescription())) + renderer.setSeriesShapesVisible(1, false); + + Plots.setupLegend(chart, properties); + setAxes(plot); + plot.setRenderer(renderer); + plot.setBackgroundPaint(Color.WHITE); + } + + static void setAxes(XYPlot plot) + { + // Actual values: modify if necessary + double axmin, axmax, aymin, aymax; + + if (xmin != null || xmax != null) + { + NumberAxis axis = (NumberAxis) plot.getDomainAxis(); + Range range = axis.getRange(); + axmin = range.getLowerBound(); + axmax = range.getUpperBound(); + if (xmin != null) axmin = xmin; + if (xmax != null) axmax = xmax; + axis.setRange(axmin, axmax); + } + + if (ymin != null || ymax != null) + { + NumberAxis axis = (NumberAxis) plot.getRangeAxis(); + Range range = axis.getRange(); + aymin = range.getLowerBound(); + aymax = range.getUpperBound(); + if (ymin != null) aymin = ymin; + if (ymax != null) aymax = ymax; + axis.setRange(aymin, aymax); + } + } + + /** + Args: Lines * + Reads settings from properties: see scanProperties() + Produces EPS output file + Data files are two-columns of numbers each - + see LineReader.read() and LineReader.array() + */ + public static void main(String[] args) + { + // Settings: + boolean verbose = false; + + Getopt g = new Getopt("testprog", args, "v"); + int c = -1; + while ((c = g.getopt()) != -1) + { + switch (c) + { + case 'v': + verbose = true; + } + } + + if (args.length < 3) + { + System.out.println + ("usage: [] *"); + System.exit(2); + } + + Bits.init(); + Util.verbose(verbose); + + String propFile = args[0]; + String output = args[1]; + List names = new ArrayList(); + for (int i = 2; i < args.length; i++) + names.add(args[i]); + + String title = null; + String xlabel = null; + String ylabel = null; + List data = new ArrayList(); + List labels = new ArrayList(); + + properties = new Properties(); + load(propFile); + title = properties.getProperty("title"); + xlabel = properties.getProperty("xlabel"); + ylabel = properties.getProperty("ylabel"); + + scanProperties(); + + for (String name : names) + { + File file = new File(name); + Util.verbose("open: " + file); + List lines = null; + try + { + lines = LineReader.read(file); + } + catch (FileNotFoundException e) + { + System.out.println("not found: " + file); + System.exit(1); + } + double[][] array = LineReader.array(lines); + data.add(array); + addLabel(name, labels); + Util.verbose("array:\n" + toString(array)); + } + + XYSeriesCollection collection = Util.collection(data, labels, + names); + + plot(collection, title, xlabel, ylabel, null, output); + } + + static void load(String propFile) + { + try + { + if (propFile.equals("-")) + properties.load(System.in); + else + properties.load(new FileInputStream(propFile)); + } + catch (FileNotFoundException e) + { + System.out.println(e); + System.exit(1); + } + catch (IOException e) + { + e.printStackTrace(); + System.exit(1); + } + } + + /** + Various plot properties. All are currently optional + + Example. + Assume you want to plot a two-column table in file.data. + The first column is the x values and the second column + is the y values. See LineReader for details. + + Your properties may include: + title = Plot + xlabel = size + ylabel = speed + label.file.data = legend text + width (output image width) + height (output image height) + xmin, xmax, ymin, ymax (auto-selected if not given) + bw (Black and white, true/false, default false) + */ + static void scanProperties() + { + String tmp; + tmp = properties.getProperty("width"); + if (tmp != null) + width = Integer.parseInt(tmp.trim()); + tmp = properties.getProperty("height"); + if (tmp != null) + height = Integer.parseInt(tmp.trim()); + tmp = properties.getProperty("xmin"); + if (tmp != null) + xmin = Double.parseDouble(tmp); + tmp = properties.getProperty("xmax"); + if (tmp != null) + xmax = Double.parseDouble(tmp); + tmp = properties.getProperty("ymin"); + if (tmp != null) + ymin = Double.parseDouble(tmp); + tmp = properties.getProperty("ymax"); + if (tmp != null) + ymax = Double.parseDouble(tmp); + tmp = properties.getProperty("bw"); + if (tmp != null) + bw = Boolean.parseBoolean(tmp); + } + + /** + Arrays.copyOfRange is a Java 1.6 feature. + This has the same signature. + */ + /* + static String[] select(String[] s, int p, int q) + { + String[] result = new String[q-p]; + int j = 0; + for (int i = p; i < q; i++) + result[j++] = s[i]; + return result; + } + */ + + static void addLabel(String name, + List labels) + { + String label = properties.getProperty("label."+name); + if (label == null) + label = ""; + labels.add(label); + } + + static boolean showShape(String name) + { + // System.out.println(name); + String mode = properties.getProperty("shape."+name); + // System.out.println(mode); + if ("none".equals(mode)) + return false; + return true; + } + + static String toString(double[][] array) + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < array.length; i++) + { + double[] row = array[i]; + for (int j = 0; j < row.length; j++) + { + sb.append(array[i][j]); + if (j < row.length-1) + sb.append(" "); + } + sb.append("\n"); + } + return sb.toString(); + } +} Property changes on: usertools/plotter/src/plotter/Dual.java ___________________________________________________________________ Name: svn:executable + * Modified: usertools/plotter/src/plotter/Lines.java =================================================================== --- usertools/plotter/src/plotter/Lines.java 2011-03-15 03:21:07 UTC (rev 4183) +++ usertools/plotter/src/plotter/Lines.java 2011-03-15 03:36:36 UTC (rev 4184) @@ -3,7 +3,6 @@ import gnu.getopt.Getopt; import java.awt.Color; -import java.awt.Font; import java.awt.geom.Rectangle2D; import java.io.*; import java.util.*; @@ -16,7 +15,6 @@ import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; -import org.jfree.chart.title.LegendTitle; import org.jfree.data.Range; import org.jfree.data.general.Series; import org.jfree.data.xy.XYSeriesCollection; @@ -116,20 +114,12 @@ renderer.setSeriesShapesVisible(i, false); } - setupLegend(chart); + Plots.setupLegend(chart, properties); setAxes(plot); plot.setRenderer(renderer); plot.setBackgroundPaint(Color.WHITE); } - private static void setupLegend(JFreeChart chart) - { - LegendTitle legend = chart.getLegend(); - Font font = getLegendFont(); - if (font != null) - legend.setItemFont(font); - } - static void setAxes(XYPlot plot) { // Actual values: modify if necessary @@ -336,17 +326,6 @@ return true; } - static Font getLegendFont() - { - Font result = null; - String name = properties.getProperty("legend.font"); - if (name == null) - return null; - System.out.println(name); - result = new Font(name, Font.PLAIN, 12); - return result; - } - static String toString(double[][] array) { StringBuilder sb = new StringBuilder(); Added: usertools/plotter/src/plotter/Plots.java =================================================================== --- usertools/plotter/src/plotter/Plots.java (rev 0) +++ usertools/plotter/src/plotter/Plots.java 2011-03-15 03:36:36 UTC (rev 4184) @@ -0,0 +1,34 @@ +package plotter; + +import java.awt.Font; +import java.util.Properties; + +import org.jfree.chart.JFreeChart; +import org.jfree.chart.title.LegendTitle; + +/** + * Reusable JFreeChart-specific functions + * @author wozniak + * + */ +public class Plots +{ + static void setupLegend(JFreeChart chart, + Properties properties) + { + LegendTitle legend = chart.getLegend(); + Font font = getLegendFont(properties); + if (font != null) + legend.setItemFont(font); + } + + static Font getLegendFont(Properties properties) + { + Font result = null; + String name = properties.getProperty("legend.font"); + if (name == null) + return null; + result = new Font(name, Font.PLAIN, 12); + return result; + } +} Property changes on: usertools/plotter/src/plotter/Plots.java ___________________________________________________________________ Name: svn:executable + * Modified: usertools/plotter/src/plotter/Util.java =================================================================== --- usertools/plotter/src/plotter/Util.java 2011-03-15 03:21:07 UTC (rev 4183) +++ usertools/plotter/src/plotter/Util.java 2011-03-15 03:36:36 UTC (rev 4184) @@ -45,6 +45,12 @@ return collection; } + public static void fatal(String s) + { + System.out.println(s); + System.exit(2); + } + public static void verbose(String s) { if (v) From noreply at svn.ci.uchicago.edu Mon Mar 14 22:46:04 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 22:46:04 -0500 (CDT) Subject: [Swift-commit] r4185 - in usertools/plotter/samples: . dual Message-ID: <20110315034604.CE6479CC7F@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-14 22:46:04 -0500 (Mon, 14 Mar 2011) New Revision: 4185 Added: usertools/plotter/samples/dual/ usertools/plotter/samples/dual/About.txt usertools/plotter/samples/dual/plot.cfg usertools/plotter/samples/dual/set1.data usertools/plotter/samples/dual/set2.data Log: Test case for dual Y axis plots Copied: usertools/plotter/samples/dual (from rev 4180, usertools/plotter/samples/lines) Copied: usertools/plotter/samples/dual/About.txt (from rev 4182, usertools/plotter/samples/lines/About.txt) =================================================================== --- usertools/plotter/samples/dual/About.txt (rev 0) +++ usertools/plotter/samples/dual/About.txt 2011-03-15 03:46:04 UTC (rev 4185) @@ -0,0 +1,5 @@ + +To run: + +../../lines.zsh plot.cfg tmp.eps set*.data + Copied: usertools/plotter/samples/dual/plot.cfg (from rev 4183, usertools/plotter/samples/lines/plot.cfg) =================================================================== --- usertools/plotter/samples/dual/plot.cfg (rev 0) +++ usertools/plotter/samples/dual/plot.cfg 2011-03-15 03:46:04 UTC (rev 4185) @@ -0,0 +1,9 @@ +title = Sample + +xlabel = Input +ylabel = Output + +label.set1.data = Set 1 +label.set2.data = Set 2 + +legend.font = Lucida Sans Unicode Regular Copied: usertools/plotter/samples/dual/set1.data (from rev 4182, usertools/plotter/samples/lines/set1.data) =================================================================== --- usertools/plotter/samples/dual/set1.data (rev 0) +++ usertools/plotter/samples/dual/set1.data 2011-03-15 03:46:04 UTC (rev 4185) @@ -0,0 +1,2 @@ +1 2 +2 4 Copied: usertools/plotter/samples/dual/set2.data (from rev 4182, usertools/plotter/samples/lines/set2.data) =================================================================== --- usertools/plotter/samples/dual/set2.data (rev 0) +++ usertools/plotter/samples/dual/set2.data 2011-03-15 03:46:04 UTC (rev 4185) @@ -0,0 +1,2 @@ +0 -1 +4 3 From noreply at svn.ci.uchicago.edu Mon Mar 14 22:57:11 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 22:57:11 -0500 (CDT) Subject: [Swift-commit] r4186 - in usertools/plotter: . samples/dual src/plotter Message-ID: <20110315035711.A8E089CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-14 22:57:11 -0500 (Mon, 14 Mar 2011) New Revision: 4186 Added: usertools/plotter/dual.zsh Modified: usertools/plotter/samples/dual/About.txt usertools/plotter/samples/dual/plot.cfg usertools/plotter/src/plotter/Dual.java Log: Setup right-hand Y axis label Added: usertools/plotter/dual.zsh =================================================================== --- usertools/plotter/dual.zsh (rev 0) +++ usertools/plotter/dual.zsh 2011-03-15 03:57:11 UTC (rev 4186) @@ -0,0 +1,16 @@ +#!/bin/zsh + +# DUAL.ZSH + +# Create plot with two data sets, two Y axes +# Arguments passed directly to Dual.java - see there for details +# usage: dual.zsh * + +PLOTTERS=$( cd $( dirname $0 ) ; /bin/pwd ) + +# declare -p PLOTTERS + +source ${PLOTTERS}/classpath.zsh +[[ $? != 0 ]] && print "Could not build CLASSPATH!" && return 1 + +java -ea -cp ${CP} plotter.Dual ${*} Property changes on: usertools/plotter/dual.zsh ___________________________________________________________________ Name: svn:executable + * Modified: usertools/plotter/samples/dual/About.txt =================================================================== --- usertools/plotter/samples/dual/About.txt 2011-03-15 03:46:04 UTC (rev 4185) +++ usertools/plotter/samples/dual/About.txt 2011-03-15 03:57:11 UTC (rev 4186) @@ -1,5 +1,5 @@ To run: -../../lines.zsh plot.cfg tmp.eps set*.data +../../dual.zsh plot.cfg tmp.eps set*.data Modified: usertools/plotter/samples/dual/plot.cfg =================================================================== --- usertools/plotter/samples/dual/plot.cfg 2011-03-15 03:46:04 UTC (rev 4185) +++ usertools/plotter/samples/dual/plot.cfg 2011-03-15 03:57:11 UTC (rev 4186) @@ -1,7 +1,8 @@ title = Sample xlabel = Input -ylabel = Output +ylabel1 = Output +ylabel2 = Secondary label.set1.data = Set 1 label.set2.data = Set 2 Modified: usertools/plotter/src/plotter/Dual.java =================================================================== --- usertools/plotter/src/plotter/Dual.java 2011-03-15 03:46:04 UTC (rev 4185) +++ usertools/plotter/src/plotter/Dual.java 2011-03-15 03:57:11 UTC (rev 4186) @@ -3,6 +3,7 @@ import gnu.getopt.Getopt; import java.awt.Color; +import java.awt.Font; import java.awt.geom.Rectangle2D; import java.io.*; import java.util.*; @@ -84,7 +85,7 @@ (title, xlabel, ylabel1, collection, PlotOrientation.VERTICAL, withLegend, false, false); - setupPlot(chart, collection); + setupPlot(chart, collection, ylabel2); chart.draw(g2d, rectangle); try @@ -103,7 +104,8 @@ } private static void setupPlot(JFreeChart chart, - XYSeriesCollection collection) + XYSeriesCollection collection, + String ylabel2) { XYPlot plot = chart.getXYPlot(); XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); @@ -121,19 +123,20 @@ renderer.setSeriesShapesVisible(1, false); Plots.setupLegend(chart, properties); - setAxes(plot); + setAxes(plot, ylabel2); plot.setRenderer(renderer); plot.setBackgroundPaint(Color.WHITE); } - static void setAxes(XYPlot plot) + static void setAxes(XYPlot plot, String ylabel2) { // Actual values: modify if necessary double axmin, axmax, aymin, aymax; if (xmin != null || xmax != null) { - NumberAxis axis = (NumberAxis) plot.getDomainAxis(); + NumberAxis axis = new NumberAxis(); + plot.setDomainAxis(axis); Range range = axis.getRange(); axmin = range.getLowerBound(); axmax = range.getUpperBound(); @@ -142,9 +145,11 @@ axis.setRange(axmin, axmax); } + // Left Y axis if (ymin != null || ymax != null) { - NumberAxis axis = (NumberAxis) plot.getRangeAxis(); + NumberAxis axis = new NumberAxis(); + plot.setRangeAxis(0, axis); Range range = axis.getRange(); aymin = range.getLowerBound(); aymax = range.getUpperBound(); @@ -152,6 +157,12 @@ if (ymax != null) aymax = ymax; axis.setRange(aymin, aymax); } + + // Right Y axis + Font font = plot.getRangeAxis().getLabelFont(); + final NumberAxis rightAxis = new NumberAxis(ylabel2); + rightAxis.setLabelFont(font); + plot.setRangeAxis(1, rightAxis); } /** @@ -195,7 +206,8 @@ String title = null; String xlabel = null; - String ylabel = null; + String ylabel1 = null; + String ylabel2 = null; List data = new ArrayList(); List labels = new ArrayList(); @@ -203,7 +215,8 @@ load(propFile); title = properties.getProperty("title"); xlabel = properties.getProperty("xlabel"); - ylabel = properties.getProperty("ylabel"); + ylabel1 = properties.getProperty("ylabel1"); + ylabel2 = properties.getProperty("ylabel2"); scanProperties(); @@ -230,7 +243,7 @@ XYSeriesCollection collection = Util.collection(data, labels, names); - plot(collection, title, xlabel, ylabel, null, output); + plot(collection, title, xlabel, ylabel1, ylabel2, output); } static void load(String propFile) From noreply at svn.ci.uchicago.edu Mon Mar 14 23:48:23 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 14 Mar 2011 23:48:23 -0500 (CDT) Subject: [Swift-commit] r4187 - in usertools/plotter: samples/dual src/plotter Message-ID: <20110315044823.C7BC89CC7F@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-14 23:48:23 -0500 (Mon, 14 Mar 2011) New Revision: 4187 Modified: usertools/plotter/samples/dual/plot.cfg usertools/plotter/samples/dual/set2.data usertools/plotter/src/plotter/Dual.java Log: Two data sets, two axes Modified: usertools/plotter/samples/dual/plot.cfg =================================================================== --- usertools/plotter/samples/dual/plot.cfg 2011-03-15 03:57:11 UTC (rev 4186) +++ usertools/plotter/samples/dual/plot.cfg 2011-03-15 04:48:23 UTC (rev 4187) @@ -1,3 +1,4 @@ + title = Sample xlabel = Input @@ -4,6 +5,11 @@ ylabel1 = Output ylabel2 = Secondary +ymin1 = -10 +ymax1 = 30 +ymin2 = -10 +ymax2 = 300 + label.set1.data = Set 1 label.set2.data = Set 2 Modified: usertools/plotter/samples/dual/set2.data =================================================================== --- usertools/plotter/samples/dual/set2.data 2011-03-15 03:57:11 UTC (rev 4186) +++ usertools/plotter/samples/dual/set2.data 2011-03-15 04:48:23 UTC (rev 4187) @@ -1,2 +1,2 @@ 0 -1 -4 3 +4 300 Modified: usertools/plotter/src/plotter/Dual.java =================================================================== --- usertools/plotter/src/plotter/Dual.java 2011-03-15 03:57:11 UTC (rev 4186) +++ usertools/plotter/src/plotter/Dual.java 2011-03-15 04:48:23 UTC (rev 4187) @@ -18,6 +18,7 @@ import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.Range; import org.jfree.data.general.Series; +import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; /** @@ -36,9 +37,12 @@ // null indicates the value was not set by the user static Double xmin = null; static Double xmax = null; - static Double ymin = null; - static Double ymax = null; + static Double ymin1 = null; + static Double ymax1 = null; + static Double ymin2 = null; + static Double ymax2 = null; + /** Generate simple plot @param collection The x,y data @@ -48,7 +52,7 @@ @param ylabel2 Y label text @param output EPS filename */ - public static boolean plot(XYSeriesCollection collection, + public static boolean plot(XYSeriesCollection[] collections, String title, String xlabel, String ylabel1, String ylabel2, String output) @@ -82,10 +86,10 @@ JFreeChart chart = ChartFactory.createXYLineChart - (title, xlabel, ylabel1, collection, + (title, xlabel, ylabel1, collections[0], PlotOrientation.VERTICAL, withLegend, false, false); - setupPlot(chart, collection, ylabel2); + setupPlot(chart, collections, ylabel1, ylabel2); chart.draw(g2d, rectangle); try @@ -104,34 +108,41 @@ } private static void setupPlot(JFreeChart chart, - XYSeriesCollection collection, - String ylabel2) + XYSeriesCollection[] collections, + String ylabel1, String ylabel2) { XYPlot plot = chart.getXYPlot(); - XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); + XYLineAndShapeRenderer renderer1 = new XYLineAndShapeRenderer(); + XYLineAndShapeRenderer renderer2 = new XYLineAndShapeRenderer(); + int count = plot.getSeriesCount(); - if (count != 2) - Util.fatal("dual plot must have two data sets!"); if (bw) for (int i = 0; i < count; i++) - renderer.setSeriesPaint(i, Color.BLACK); - Series series1 = collection.getSeries(0); + { + renderer1.setSeriesPaint(i, Color.BLACK); + renderer2.setSeriesPaint(i, Color.BLACK); + } + Series series1 = collections[0].getSeries(0); if (! showShape(series1.getDescription())) - renderer.setSeriesShapesVisible(0, false); - Series series2 = collection.getSeries(1); + renderer1.setSeriesShapesVisible(0, false); + Series series2 = collections[1].getSeries(0); if (! showShape(series2.getDescription())) - renderer.setSeriesShapesVisible(1, false); + renderer2.setSeriesShapesVisible(1, false); Plots.setupLegend(chart, properties); - setAxes(plot, ylabel2); - plot.setRenderer(renderer); + setAxes(plot, ylabel1, ylabel2, collections[1]); + plot.setRenderer(0, renderer1); + plot.setRenderer(1, renderer2); plot.setBackgroundPaint(Color.WHITE); } - static void setAxes(XYPlot plot, String ylabel2) + static void setAxes(XYPlot plot, String ylabel1, String ylabel2, + XYSeriesCollection collection) { + plot.setDataset(1, collection); + // Actual values: modify if necessary - double axmin, axmax, aymin, aymax; + double axmin, axmax, aymin1, aymax1, aymin2, aymax2; if (xmin != null || xmax != null) { @@ -146,23 +157,38 @@ } // Left Y axis - if (ymin != null || ymax != null) + if (ymin1 != null || ymax1 != null) { - NumberAxis axis = new NumberAxis(); + NumberAxis axis = new NumberAxis(ylabel1); plot.setRangeAxis(0, axis); Range range = axis.getRange(); - aymin = range.getLowerBound(); - aymax = range.getUpperBound(); - if (ymin != null) aymin = ymin; - if (ymax != null) aymax = ymax; - axis.setRange(aymin, aymax); + aymin1 = range.getLowerBound(); + aymax1 = range.getUpperBound(); + if (ymin1 != null) aymin1 = ymin1; + if (ymax1 != null) aymax1 = ymax1; + axis.setRange(aymin1, aymax1); } - // Right Y axis + // Right Y axis setup Font font = plot.getRangeAxis().getLabelFont(); final NumberAxis rightAxis = new NumberAxis(ylabel2); rightAxis.setLabelFont(font); plot.setRangeAxis(1, rightAxis); + + // Right Y axis + if (ymin2 != null || ymax2 != null) + { + Range range = rightAxis.getRange(); + aymin2 = range.getLowerBound(); + aymax2 = range.getUpperBound(); + if (ymin2 != null) aymin2 = ymin2; + if (ymax2 != null) aymax2 = ymax2; + rightAxis.setRange(aymin2, aymax2); + } + + plot.mapDatasetToRangeAxis(0, 0); + plot.mapDatasetToRangeAxis(1, 1); + plot.configureRangeAxes(); } /** @@ -240,12 +266,45 @@ Util.verbose("array:\n" + toString(array)); } - XYSeriesCollection collection = Util.collection(data, labels, - names); + XYSeriesCollection[] collections = + collections(data, labels, names); - plot(collection, title, xlabel, ylabel1, ylabel2, output); + plot(collections, title, xlabel, ylabel1, ylabel2, output); } + static XYSeriesCollection[] collections(List data, + List labels, + List names) + { + final XYSeriesCollection[] result = new XYSeriesCollection[2]; + result[0] = new XYSeriesCollection(); + result[1] = new XYSeriesCollection(); + + int count = 0; + for (int i = 0; i < 2; i++) + { + double[][] d = data.get(i); + String label = "data: " + count; + try + { + label = labels.get(count); + } + catch (IndexOutOfBoundsException e) + {} + + XYSeries series = new XYSeries(label); + for (int j = 0; j < d.length; j++) + { + series.add(d[j][0], d[j][1]); + } + + series.setDescription(names.get(count)); + result[i].addSeries(series); + count++; + } + return result; + } + static void load(String propFile) { try @@ -282,7 +341,8 @@ label.file.data = legend text width (output image width) height (output image height) - xmin, xmax, ymin, ymax (auto-selected if not given) + xmin, xmax, ymin1, ymax1, ymin2, ymax2 + (auto-selected if not given) bw (Black and white, true/false, default false) */ static void scanProperties() @@ -300,12 +360,19 @@ tmp = properties.getProperty("xmax"); if (tmp != null) xmax = Double.parseDouble(tmp); - tmp = properties.getProperty("ymin"); + tmp = properties.getProperty("ymin1"); if (tmp != null) - ymin = Double.parseDouble(tmp); - tmp = properties.getProperty("ymax"); + ymin1 = Double.parseDouble(tmp); + tmp = properties.getProperty("ymax1"); if (tmp != null) - ymax = Double.parseDouble(tmp); + ymax1 = Double.parseDouble(tmp); + tmp = properties.getProperty("ymin2"); + if (tmp != null) + ymin2 = Double.parseDouble(tmp); + tmp = properties.getProperty("ymax2"); + if (tmp != null) + ymax2 = Double.parseDouble(tmp); + tmp = properties.getProperty("bw"); if (tmp != null) bw = Boolean.parseBoolean(tmp); From noreply at svn.ci.uchicago.edu Wed Mar 16 17:40:32 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 16 Mar 2011 17:40:32 -0500 (CDT) Subject: [Swift-commit] r4188 - in SwiftApps/SwiftR: . Swift/R Swift/tests Message-ID: <20110316224032.EEB5A9CCA8@svn.ci.uchicago.edu> Author: tga Date: 2011-03-16 17:40:21 -0500 (Wed, 16 Mar 2011) New Revision: 4188 Added: SwiftApps/SwiftR/Swift/tests/param_size.R Modified: SwiftApps/SwiftR/IMMEDIATE-TODO SwiftApps/SwiftR/Swift/R/TestFramework.R SwiftApps/SwiftR/Swift/tests/perf_tests.R Log: Tests to investigate effect of parameter size on apply call duration. Modified: SwiftApps/SwiftR/IMMEDIATE-TODO =================================================================== --- SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-15 04:48:23 UTC (rev 4187) +++ SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-16 22:40:21 UTC (rev 4188) @@ -74,10 +74,6 @@ * restart batch jobs automatically if time runs out MID: -* Fast branch: working? faster? - (* NOTE: wait until updates: fast branch afflicted by deadlocks *) - -MID: Implement omxXXX parallel calls, update openmx code MID: @@ -163,3 +159,7 @@ MID: - startup notes from Tim Bates -- rlib rpackage sugg + +MID: +* Fast branch: working? faster? + - DONE Modified: SwiftApps/SwiftR/Swift/R/TestFramework.R =================================================================== --- SwiftApps/SwiftR/Swift/R/TestFramework.R 2011-03-15 04:48:23 UTC (rev 4187) +++ SwiftApps/SwiftR/Swift/R/TestFramework.R 2011-03-16 22:40:21 UTC (rev 4188) @@ -1,9 +1,10 @@ # Generic functions for running and displaying results # from a suite of tests -mkTest <- function (f) { +mkTest <- function (f, prep=NULL) { test = list() test$name = deparse(substitute(f)) + test$prep = prep test$fun = f test$passed = NULL test$time <- NULL @@ -20,7 +21,8 @@ } makeParamTestGroup <- function (name, f, allargs, - setup=NULL, teardown=NULL, perfparams=NULL) { + setup=NULL, teardown=NULL, perfparams=NULL, + prep=NULL) { buildClosure <- function (f, args) { @@ -35,7 +37,14 @@ test = list() args <- as.list(args) test$name = paste(fname, substring(deparse(args), 5) , sep="") - test$fun <- buildClosure(f, args) + if (!is.null(prep)) { + test$fun <- f + test$fun <- buildClosure(prep, args) + } + else { + test$fun <- buildClosure(f, args) + } + test$args <- args # Store for later analysis test$passed <- NULL test$time <- NULL @@ -122,11 +131,27 @@ for (i in 1:length(group$tests)) { test <- group$tests[[i]] cat("\n== Starting test ", test$name, " ==\n") - startTime = proc.time()[["elapsed"]] - group$tests[[i]]$passed <- try(test$fun()) - endTime <- proc.time()[["elapsed"]] - runTime <- endTime - startTime - group$tests[[i]]$time <- runTime + if (!is.null(test$prep)) { + prep <- try(test$prep()) + if (inherits(res, "try-error")) { + group$tests[[i]]$passed <- res + group$tests[[i]]$time <- 0 + } + else { + startTime = proc.time()[["elapsed"]] + group$tests[[i]]$passed <- try(test$fun(prep)) + endTime <- proc.time()[["elapsed"]] + runTime <- endTime - startTime + group$tests[[i]]$time <- runTime + } + } + else { + startTime = proc.time()[["elapsed"]] + group$tests[[i]]$passed <- try(test$fun()) + endTime <- proc.time()[["elapsed"]] + runTime <- endTime - startTime + group$tests[[i]]$time <- runTime + } } if (!is.null(group$teardown)) Added: SwiftApps/SwiftR/Swift/tests/param_size.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/param_size.R (rev 0) +++ SwiftApps/SwiftR/Swift/tests/param_size.R 2011-03-16 22:40:21 UTC (rev 4188) @@ -0,0 +1,29 @@ +require(Swift) +source("Swift/tests/perf_tests.R") + +cores <- 4 +intsize <- 4 + +param.bytes <- lapply(1:26, function (x) {list(cores, 4 * (2**x))}) + +id <- function (x) {x} + +test <- function (arr) { + res <- swiftLapply(arr, id) +} +makeArray <- function (procs, arr.bytes) { + #arrsize is in bytes + args <- list() + for (i in 1:procs) { + args[[i]] <- as.vector(sample(1:1000, arr.bytes/intsize, replace=T), "integer") + } + return(args) +} + +testGroup <- makePerfTestGroup(mode="swift", name="ArgSize", + f=test, prep=makeArray, + allargs=param.bytes, + server="local", cores=cores) + +ts <- makeTestSuite(groups=list(testGroup)) +res <- runTestSuite(ts) Modified: SwiftApps/SwiftR/Swift/tests/perf_tests.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/perf_tests.R 2011-03-15 04:48:23 UTC (rev 4187) +++ SwiftApps/SwiftR/Swift/tests/perf_tests.R 2011-03-16 22:40:21 UTC (rev 4188) @@ -35,7 +35,7 @@ -makePerfTestGroup <- function (mode, name, f, allargs, ...) { +makePerfTestGroup <- function (mode, name, f, allargs, prep=NULL, ...) { params <- list(...) paramstr <- paste(names(params), rep("=", length(params)), @@ -43,7 +43,7 @@ sep="", collapse=", ") if (mode == "swift") { tg <- makeParamTestGroup(name=paste("swift_",name, " ", paramstr,sep=""), - f=f, + f=f, prep=prep, allargs=allargs, perfparams = params, setup=function() {swiftSetup(...)}, @@ -51,7 +51,7 @@ } else if (mode == "snowfall") { tg <- makeParamTestGroup(name=paste("sf_",name, paramstr, sep=""), - f=f, + f=f,prep=prep, allargs=allargs, perfparams = params, setup=function() {sfSetup(...)}, @@ -61,7 +61,7 @@ else { print("Making serial test") tg <- makeParamTestGroup(name=paste("serial_",name, paramstr, sep=""), - f=f, + f=f,prep=prep, allargs=allargs, perfparams = list(), setup=function() From noreply at svn.ci.uchicago.edu Thu Mar 17 14:01:08 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Thu, 17 Mar 2011 14:01:08 -0500 (CDT) Subject: [Swift-commit] r4190 - in SwiftApps/SwiftR/Swift: R tests Message-ID: <20110317190108.4E6899CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-17 14:01:08 -0500 (Thu, 17 Mar 2011) New Revision: 4190 Modified: SwiftApps/SwiftR/Swift/R/TestFramework.R SwiftApps/SwiftR/Swift/tests/param_size.R SwiftApps/SwiftR/Swift/tests/perf_tests.R Log: Fixed argument size benchmark: now runs correctly and gives plottable results. Modified: SwiftApps/SwiftR/Swift/R/TestFramework.R =================================================================== --- SwiftApps/SwiftR/Swift/R/TestFramework.R 2011-03-17 03:31:54 UTC (rev 4189) +++ SwiftApps/SwiftR/Swift/R/TestFramework.R 2011-03-17 19:01:08 UTC (rev 4190) @@ -39,7 +39,7 @@ test$name = paste(fname, substring(deparse(args), 5) , sep="") if (!is.null(prep)) { test$fun <- f - test$fun <- buildClosure(prep, args) + test$prep <- buildClosure(prep, args) } else { test$fun <- buildClosure(f, args) @@ -134,10 +134,12 @@ if (!is.null(test$prep)) { prep <- try(test$prep()) if (inherits(res, "try-error")) { + print("prep failed") group$tests[[i]]$passed <- res group$tests[[i]]$time <- 0 } else { + print("prep ran") startTime = proc.time()[["elapsed"]] group$tests[[i]]$passed <- try(test$fun(prep)) endTime <- proc.time()[["elapsed"]] Modified: SwiftApps/SwiftR/Swift/tests/param_size.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/param_size.R 2011-03-17 03:31:54 UTC (rev 4189) +++ SwiftApps/SwiftR/Swift/tests/param_size.R 2011-03-17 19:01:08 UTC (rev 4190) @@ -4,12 +4,14 @@ cores <- 4 intsize <- 4 -param.bytes <- lapply(1:26, function (x) {list(cores, 4 * (2**x))}) +param.bytes <- lapply(1:24, function (x) {list(cores, 4 * (2**x))}) id <- function (x) {x} test <- function (arr) { res <- swiftLapply(arr, id) + length(res) + return (NULL) } makeArray <- function (procs, arr.bytes) { #arrsize is in bytes @@ -20,10 +22,25 @@ return(args) } -testGroup <- makePerfTestGroup(mode="swift", name="ArgSize", +ts <- makeTestSuite(groups=list( + makePerfTestGroup(mode="swift", name="ArgSize", f=test, prep=makeArray, allargs=param.bytes, - server="local", cores=cores) + server="local", cores=cores), + makePerfTestGroup(mode="swift", name="ArgSize", + f=test, prep=makeArray, + allargs=param.bytes, + server="ssh", cores=1, hosts="nettle wapato dandelion cattail") + )) +res <- runTestSuite(ts) -ts <- makeTestSuite(groups=list(testGroup)) -res <- runTestSuite(ts) +anl <- mergeGroupResults(analyseSuitePerf(res, + argnames=c("procs", "arr.bytes"), perfparams=c('server'))) + + + +loc <- subset(anl, server=="local") +ssh <- subset(anl, server=="ssh") +plot(x=ssh$arr.bytes, y=ssh$time, col='red', ylab="time", xlab="Argument size (bytes)") +points(x=loc$arr.bytes, y=loc$time) + Modified: SwiftApps/SwiftR/Swift/tests/perf_tests.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/perf_tests.R 2011-03-17 03:31:54 UTC (rev 4189) +++ SwiftApps/SwiftR/Swift/tests/perf_tests.R 2011-03-17 19:01:08 UTC (rev 4190) @@ -3,6 +3,11 @@ swiftSetup <- function (...) { + libraries <- search() + if ("package:Swift" %in% libraries) { + library(Swift) + options(.swift.detach=T) + } library(Swift) swiftSess <- swiftInit(...) # Wait to start @@ -16,11 +21,25 @@ swiftTearDown <- function (...) { swiftShutdown() - detach(package:Swift) + dt <- getOption(".swift.detach") + options(.swift.detach=NULL) + if (!is.null(dt) && dt) { + detach(package:Swift) + } } sfSetup <- function(..., cpus=ncpus) { - library(snowfall) + libraries <- search() + if (!("package:snowfall" %in% libraries)) { + library(snowfall) + options(.snowfall.detach=T) + } + # Swift needs to be detached + if ("package:Swift" %in% libraries) { + detach(package:Swift) + options(.swift.reattach=T) + } + sfInit(..., cpus=ncpus) # warmup sfLapply(rep(1, ncpus * 2), @@ -30,7 +49,16 @@ sfTearDown <- function (...) { sfStop() - detach(package:snowfall) + dt <- getOption(".snowfall.detach") + options(.snowfall.detach=NULL) + if (!is.null(dt) && dt) { + detach(package:snowfall) + } + rt <- getOption(".swift.reattach") + options(.swift.reattach=NULL) + if (!is.null(rt) && rt) { + library(Swift) + } } From noreply at svn.ci.uchicago.edu Thu Mar 17 14:04:07 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Thu, 17 Mar 2011 14:04:07 -0500 (CDT) Subject: [Swift-commit] r4191 - text/parco10submission Message-ID: <20110317190407.85C1C9CC92@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-17 14:04:07 -0500 (Thu, 17 Mar 2011) New Revision: 4191 Added: text/parco10submission/ResponseToReviews3.txt Modified: text/parco10submission/paper.tex Log: A few more corrections and new response file Added: text/parco10submission/ResponseToReviews3.txt =================================================================== --- text/parco10submission/ResponseToReviews3.txt (rev 0) +++ text/parco10submission/ResponseToReviews3.txt 2011-03-17 19:04:07 UTC (rev 4191) @@ -0,0 +1,109 @@ + +Here are the things I found (page numbers refer to numbers on the +printed pages, not to page numbers inside acrobat reader): + +Last paragraph in section 1 skips mention of section 5, which is very strange + +RESPONSE: Corrected + +p. 12: "It is important to understood" + +RESPONSE: Corrected + +p. 12: becomes"in scope" [space missing] + +RESPONSE: Corrected + +p. 12: "The invocation of mappers... are" ['are' should be 'is'] + +RESPONSE: Corrected + +p. 13: My dictionary says 'de facto' not de-facto + +RESPONSE: Corrected + +p. 13: "underly" should be "underlie" [underly is not a word] + +RESPONSE: Corrected + +p. 14: "automatically selection" + +RESPONSE: Corrected + +p. 14: semntics + +RESPONSE: Corrected + +p. 17: applicatoin + +RESPONSE: Corrected + +p. 19: "discoveries...continues to drive" wrong [should be 'continue'] + +RESPONSE: Corrected + +p. 19: My dictionary says self-contained, not "self contained" + +RESPONSE: Corrected + +p. 20: line -9: maybe "find N files"? [doesn't make sense to me as is] + +RESPONSE: Corrected + +p. 22: line 11: geos[] . should be geos[]. (extraneous space) + +RESPONSE: Corrected + +p. 22: "for statement" should be "for the statement" + +RESPONSE: Corrected + +p. 22: line -8 "of every input tiles" should be "of every input tile" + +RESPONSE: Corrected + +p. 25: 7*27*10=1890 not 1690 (also see p. 26 where 1670 is mentioned) + +RESPONSE: Corrected + +p. 25: "These structure" [should be structures] + +RESPONSE: Corrected + +p. 25: "selectable energy function to used by" [should be 'to be used by'] + +RESPONSE: Corrected + +Fig. 3: acronym SEM is undefined (also 2nd paragraph of section 5.2) + +RESPONSE: Corrected + +Fig. 4: lower half: color of "Processors" differs left vs. right; why? + +RESPONSE: Corrected + +p. 32: "rational" should be "rationale" + +RESPONSE: Corrected + +p. 32: "goals to providing" should be "goals of providing" + +RESPONSE: Corrected + +p. 33: line -12 "environment" should be "environments" + +RESPONSE: Corrected + +p. 34: "on single parallel system" - another typo + +RESPONSE: Corrected + +p. 35: "thousands of small accesses to the filesystem" might not + only be a bottleneck, it may significantly degrade + responsiveness for every process on the system + +RESPONSE: Corrected + +p. 38: "J. H G" -> J. H. G." ? + +RESPONSE: Corrected Modified: text/parco10submission/paper.tex =================================================================== --- text/parco10submission/paper.tex 2011-03-17 19:01:08 UTC (rev 4190) +++ text/parco10submission/paper.tex 2011-03-17 19:04:07 UTC (rev 4191) @@ -134,12 +134,12 @@ parallelized. Swift exploits the maximal concurrency permitted by data dependencies within a script and by external resource availability. -Swift enables users to specify process composition by representing processes as functions, where input data files and process parameters become function parameters and output data files become function return values. +Swift enables users to specify process composition by representing processes as functions, where input data files and process parameters become function parameters and output data files become function return values. Swift also provides a high-level representation of collections of data (used as function inputs and outputs) and a specification (``mapper'') that allows those collections to be processed by external -programs. +programs. We chose to make the Swift language purely functional (i.e., all operations have a well-defined set of inputs and outputs, all variables are write-once, and no script-level side effects are permitted by the language) in order to prevent the difficulties that @@ -163,7 +163,7 @@ from a given application, such that an execution environment can automatically make remote execution transparent. Without this, -achieving location transparency +achieving location transparency is not feasible. Swift adds to scripting what the remote procedure call (RPC) paradigm~\cite{RPC} adds to programming: by formalizing the inputs and outputs of applications that have been declared as Swift functions, it makes the distributed remote @@ -207,7 +207,7 @@ itself, it is also not readily obvious that such a feature would contradict the main goals of Swift, and therefore is not ruled out as a possible future development. -} +} \section{The Swift language} \label{Language} @@ -601,7 +601,7 @@ floating point numbers and true/false values, respectively. } -\hide{ +\hide{ Sometimes data may be stored in a form that does not fit with Swift's file-and-site model; for example, data might be stored in an database on a server. In that case, a variable can be declared to have @@ -1136,7 +1136,7 @@ For additional visualization, the script assembles a full map of all the input tiles, placed in their proper grid location on the MODIS world map projection, and with the selected tiles marked. Since this -operation needs true-color images of every input tiles, these are +operation needs true-color images of every input tile, these are computed---again in parallel---with 317 jobs generated by the foreach statement at lines 76--78. The power of Swift's implicit parallelization is shown vividly here: since the {\tt colorMODIS} call @@ -1500,13 +1500,13 @@ \subsection{Filesystem access optimizations} Similarly, some applications deal with files that are uncomfortably -small for GridFTP (on the order of tens of bytes). In this situation, a -lightweight file access mechanism provided by Coasters can be +small for GridFTP (on the order of tens of bytes). In this situation, +a lightweight file access mechanism provided by Coasters can be substituted for GridFTP. When running on HPC resources, the thousands -of small accesses to the filesystem may create a bottleneck. To -mitigate this problem, we have investigated application needs and -are developing a set of collective data management -primitives ~\cite{CDM_2009}. +of small accesses to the filesystem may create a bottleneck for all +system users. To mitigate this problem, we have investigated +application needs and are developing a set of collective data +management primitives ~\cite{CDM_2009}. \subsection{Provenance} \label{Provenance} From noreply at svn.ci.uchicago.edu Thu Mar 17 14:15:40 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Thu, 17 Mar 2011 14:15:40 -0500 (CDT) Subject: [Swift-commit] r4193 - in text/parco10submission: . code Message-ID: <20110317191540.C42D39CC92@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-17 14:15:40 -0500 (Thu, 17 Mar 2011) New Revision: 4193 Added: text/parco10submission/glass.swift text/parco10submission/glassRunCavities.swift.ORIG text/parco10submission/modis.list text/parco10submission/modis.swift Removed: text/parco10submission/code/glass.swift text/parco10submission/code/glassRunCavities.swift.ORIG text/parco10submission/code/modis.list text/parco10submission/code/modis.swift Modified: text/parco10submission/paper.tex Log: Flatten code directory and update paths in tex file Deleted: text/parco10submission/code/glass.swift =================================================================== --- text/parco10submission/code/glass.swift 2011-03-17 19:12:52 UTC (rev 4192) +++ text/parco10submission/code/glass.swift 2011-03-17 19:15:40 UTC (rev 4193) @@ -1,80 +0,0 @@ -type Text; -type Arc; -type Restart; -type Log; -type Active; - -type GlassIn{ - Restart startfile; - Active activefile; -} - -type GlassOut{ - Arc arcfile; - Active activefile; - Restart restartfile; - Restart startfile; - Restart final; - Log logfile; -} - -app (GlassOut o) glassCavityRun - (GlassIn i, string rad, string temp, string steps, string volume, string fraca, - string energyfunction, string centerstring, string arctimestring) -{ glassRun - "-a" @filename(o.final) "--lf" @filename(i.startfile) stdout=@filename(o.logfile) - "--temp" temp "--stepsperparticle" steps "--energy_function" energyfunction - "--volume" volume "--fraca" fraca - "--cradius" rad "--ccoord" centerstring arctimestring; -} - -GlassRun() -{ - string temp=@arg("temp","2.0"); - string steps=@arg("steps","10"); - string esteps=@arg("esteps","100"); - string ceqsteps=@arg("ceqsteps","100"); - string natoms=@arg("natoms","200"); - string volume=@arg("volume","200"); - string rlist=@arg("rlist","rlist"); - string clist=@arg("clist","clist"); - string fraca=@arg("fraca","0.5"); - string radii[] = readData(rlist); - string centers[] = readData(clist); - int nmodels=@toint( @arg("n","1") ); - int nsub=@toint( @arg("nsub","1") ); - string savearc=@arg("savearc","FALSE"); - string arctimestring; - string energyfunction=@arg("energyfunction","softsphereratiosmooth"); - - if(savearc=="FALSE") { - arctimestring="--arc_time=10000000"; - } - else{ - arctimestring=""; - } - - GlassIn modelIn[][][] ; - - GlassOut modelOut[][][][] ; - - foreach rad,rindex in radii { - foreach centerstring,cindex in centers { - foreach model in [0:nmodels-1] { - foreach job in [0:nsub-1] { - if( !(@filename(modelOut[rindex][cindex][model][job].final)=="NULL") ) { - modelOut[rindex][cindex][model][job] = glassCavityRun( - modelIn[rindex][cindex][model], rad, temp, steps, volume, fraca, - energyfunction, centerstring, arctimestring); - } - } - } - } - } -} - -GlassRun(); \ No newline at end of file Deleted: text/parco10submission/code/glassRunCavities.swift.ORIG =================================================================== --- text/parco10submission/code/glassRunCavities.swift.ORIG 2011-03-17 19:12:52 UTC (rev 4192) +++ text/parco10submission/code/glassRunCavities.swift.ORIG 2011-03-17 19:15:40 UTC (rev 4193) @@ -1,123 +0,0 @@ -type file; -type Text; - -type Arc; -type Restart; -type Log; -type Active; - -type GlassOut{ - Arc arcfile; - Active activefile; - Restart restartfile; - Restart startfile; - Restart final; - Log logfile; -} - -type GlassIn{ - Restart startfile; - Active activefile; -} - -// Lib functions (to be moved to imported file - -app (file o) echoi (int i) { echo i stdout=@o;} -app (file o) echof (float f) { echo f stdout=@o;} -app (file o) echob (boolean b) { echo b stdout=@o;} -app (file o) echos (string s) { echo s stdout=@o;} - -(string s) itostr (int i) -{ - file f; - f = echoi(i); - s = readData(f); -} - -(string s) ftostr (float n) -{ - file f; - f = echof(n); - s = readData(f); -} - -(int n) strtoi (string s) -{ - file f; - f = echos(s); - n = readData(f); -} - -(float n) strtof (string s) -{ - file f; - f = echos(s); - n = readData(f); -} - -app (file o) sprintfsApp (string fmt, string e[]) -{ - sprintfs fmt e stdout=@o; -} - -(string s) sprintfs (string fmt, string e[]) -{ - file f; - f = sprintfsApp(fmt,e); - s = readData(f); -} - -//glassSim app declarations -//app (int result) multiply(int a,int b) -//{ -// file f; -// multiply a b stdout=@filename(f); -// result=readData(f); -//} - -app (GlassOut o) glassCavityRun(GlassIn i,string rad,string temp,string steps,string volume,string fraca,string energyfunction,string centerstring,string arctimestring) -{ - glassRun "-a" @filename(o.final) "--lf" @filename(i.startfile) "--temp" temp "--stepsperparticle" steps "--volume" volume "--fraca" fraca "--energy_function" energyfunction "--cradius" rad "--ccoord" centerstring arctimestring stdout=@filename(o.logfile); -} - -CreateGlassSystem() -{ - string temp=@arg("temp","2.0"); - string steps=@arg("steps","10"); - string esteps=@arg("esteps","100"); - string ceqsteps=@arg("ceqsteps","100"); - string natoms=@arg("natoms","200"); - string volume=@arg("volume","200"); - string rlist=@arg("rlist","rlist"); - string clist=@arg("clist","clist"); - string fraca=@arg("fraca","0.5"); - string radii[] = readData(rlist); - string centers[] = readData(clist); - int nmodels=strtoi( @arg("n","1") ); - int nsub=strtoi( @arg("nsub","1") ); -// int njobs=nsub*nmodels; - string savearc=@arg("savearc","FALSE"); - string arctimestring; - if(savearc=="FALSE") { - arctimestring="--arc_time=10000000"; - } - else{ - arctimestring=""; - } - string energyfunction=@arg("energyfunction","softsphereratiosmooth"); - GlassIn modelIn[][][] ; - GlassOut modelOut[][][][] ; - foreach rad,rindex in radii { - foreach centerstring,cindex in centers { - foreach model in [0:nmodels-1] { - foreach job in [0:nsub-1] { - if( !(@filename(modelOut[rindex][cindex][model][job].final)=="NULL") ){ - modelOut[rindex][cindex][model][job]=glassCavityRun(modelIn[rindex][cindex][model],rad,temp,steps,volume,fraca,energyfunction,centerstring,arctimestring); - } - } - } - } - } -} - -CreateGlassSystem(); Deleted: text/parco10submission/code/modis.list =================================================================== --- text/parco10submission/code/modis.list 2011-03-17 19:12:52 UTC (rev 4192) +++ text/parco10submission/code/modis.list 2011-03-17 19:15:40 UTC (rev 4193) @@ -1,6 +0,0 @@ -$ ./modis.mapper -location /home/wilde/modis/2002/ -suffix .tif -n 5 -[0] /home/wilde/modis/2002/h00v08.tif -[1] /home/wilde/modis/2002/h00v09.tif -[2] /home/wilde/modis/2002/h00v10.tif -[3] /home/wilde/modis/2002/h01v07.tif -[4] /home/wilde/modis/2002/h01v08.tif Deleted: text/parco10submission/code/modis.swift =================================================================== --- text/parco10submission/code/modis.swift 2011-03-17 19:12:52 UTC (rev 4192) +++ text/parco10submission/code/modis.swift 2011-03-17 19:15:40 UTC (rev 4193) @@ -1,83 +0,0 @@ -type file; -type MODIS; type image; -type landuse; - -# Define application program interfaces - -app (landuse output) getLandUse (imagefile input, int sortfield) -{ - getlanduse @input sortfield stdout=@output; -} - -app (file output, file tilelist) analyzeLandUse - (MODIS input[], string usetype, int maxnum) -{ - analyzelanduse @output @tilelist usetype maxnum @filenames(input); -} - -app (image output) colorMODIS (MODIS input) -{ - colormodis @input @output; -} - -app (image output) assemble - (file selected, image img[], string webdir) -{ - assemble @output @selected @filename(img[0]) webdir; -} - -app (image grid) markMap (file tilelist) -{ - markmap @tilelist @grid; -} - -# Constants and command line arguments - -int nFiles = @toint(@arg("nfiles","1000")); -int nSelect = @toint(@arg("nselect","12")); -string landType = @arg("landtype","urban"); -string runID = @arg("runid","modis-run"); -string MODISdir= @arg("modisdir","/home/wilde/bigdata/data/modis/2002"); -string webDir = @arg("webdir","/home/wilde/public_html/geo/"); - - - -# Input Dataset - -image geos[] ; - -# Compute the land use summary of each MODIS tile - -landuse land[] ; - -foreach g,i in geos { - land[i] = getLandUse(g,1); -} - -# Find the top N tiles (by total area of selected landuse types) - -file topSelected <"topselected.txt">; -file selectedTiles <"selectedtiles.txt">; -(topSelected, selectedTiles) = analyzeLandUse(land, landType, nSelect); - -# Mark the top N tiles on a sinusoidal gridded map - -image gridMap <"markedGrid.gif">; -gridMap = markMap(topSelected); - -# Create multi-color images for all tiles - -image colorImage[] ; - -foreach g, i in geos { - colorImage[i] = colorMODIS(g); -} - -# Assemble a montage of the top selected areas - -image montage ; # @arg -montage = assemble(selectedTiles,colorImage,webDir); \ No newline at end of file Copied: text/parco10submission/glass.swift (from rev 4189, text/parco10submission/code/glass.swift) =================================================================== --- text/parco10submission/glass.swift (rev 0) +++ text/parco10submission/glass.swift 2011-03-17 19:15:40 UTC (rev 4193) @@ -0,0 +1,80 @@ +type Text; +type Arc; +type Restart; +type Log; +type Active; + +type GlassIn{ + Restart startfile; + Active activefile; +} + +type GlassOut{ + Arc arcfile; + Active activefile; + Restart restartfile; + Restart startfile; + Restart final; + Log logfile; +} + +app (GlassOut o) glassCavityRun + (GlassIn i, string rad, string temp, string steps, string volume, string fraca, + string energyfunction, string centerstring, string arctimestring) +{ glassRun + "-a" @filename(o.final) "--lf" @filename(i.startfile) stdout=@filename(o.logfile) + "--temp" temp "--stepsperparticle" steps "--energy_function" energyfunction + "--volume" volume "--fraca" fraca + "--cradius" rad "--ccoord" centerstring arctimestring; +} + +GlassRun() +{ + string temp=@arg("temp","2.0"); + string steps=@arg("steps","10"); + string esteps=@arg("esteps","100"); + string ceqsteps=@arg("ceqsteps","100"); + string natoms=@arg("natoms","200"); + string volume=@arg("volume","200"); + string rlist=@arg("rlist","rlist"); + string clist=@arg("clist","clist"); + string fraca=@arg("fraca","0.5"); + string radii[] = readData(rlist); + string centers[] = readData(clist); + int nmodels=@toint( @arg("n","1") ); + int nsub=@toint( @arg("nsub","1") ); + string savearc=@arg("savearc","FALSE"); + string arctimestring; + string energyfunction=@arg("energyfunction","softsphereratiosmooth"); + + if(savearc=="FALSE") { + arctimestring="--arc_time=10000000"; + } + else{ + arctimestring=""; + } + + GlassIn modelIn[][][] ; + + GlassOut modelOut[][][][] ; + + foreach rad,rindex in radii { + foreach centerstring,cindex in centers { + foreach model in [0:nmodels-1] { + foreach job in [0:nsub-1] { + if( !(@filename(modelOut[rindex][cindex][model][job].final)=="NULL") ) { + modelOut[rindex][cindex][model][job] = glassCavityRun( + modelIn[rindex][cindex][model], rad, temp, steps, volume, fraca, + energyfunction, centerstring, arctimestring); + } + } + } + } + } +} + +GlassRun(); \ No newline at end of file Copied: text/parco10submission/glassRunCavities.swift.ORIG (from rev 4189, text/parco10submission/code/glassRunCavities.swift.ORIG) =================================================================== --- text/parco10submission/glassRunCavities.swift.ORIG (rev 0) +++ text/parco10submission/glassRunCavities.swift.ORIG 2011-03-17 19:15:40 UTC (rev 4193) @@ -0,0 +1,123 @@ +type file; +type Text; + +type Arc; +type Restart; +type Log; +type Active; + +type GlassOut{ + Arc arcfile; + Active activefile; + Restart restartfile; + Restart startfile; + Restart final; + Log logfile; +} + +type GlassIn{ + Restart startfile; + Active activefile; +} + +// Lib functions (to be moved to imported file + +app (file o) echoi (int i) { echo i stdout=@o;} +app (file o) echof (float f) { echo f stdout=@o;} +app (file o) echob (boolean b) { echo b stdout=@o;} +app (file o) echos (string s) { echo s stdout=@o;} + +(string s) itostr (int i) +{ + file f; + f = echoi(i); + s = readData(f); +} + +(string s) ftostr (float n) +{ + file f; + f = echof(n); + s = readData(f); +} + +(int n) strtoi (string s) +{ + file f; + f = echos(s); + n = readData(f); +} + +(float n) strtof (string s) +{ + file f; + f = echos(s); + n = readData(f); +} + +app (file o) sprintfsApp (string fmt, string e[]) +{ + sprintfs fmt e stdout=@o; +} + +(string s) sprintfs (string fmt, string e[]) +{ + file f; + f = sprintfsApp(fmt,e); + s = readData(f); +} + +//glassSim app declarations +//app (int result) multiply(int a,int b) +//{ +// file f; +// multiply a b stdout=@filename(f); +// result=readData(f); +//} + +app (GlassOut o) glassCavityRun(GlassIn i,string rad,string temp,string steps,string volume,string fraca,string energyfunction,string centerstring,string arctimestring) +{ + glassRun "-a" @filename(o.final) "--lf" @filename(i.startfile) "--temp" temp "--stepsperparticle" steps "--volume" volume "--fraca" fraca "--energy_function" energyfunction "--cradius" rad "--ccoord" centerstring arctimestring stdout=@filename(o.logfile); +} + +CreateGlassSystem() +{ + string temp=@arg("temp","2.0"); + string steps=@arg("steps","10"); + string esteps=@arg("esteps","100"); + string ceqsteps=@arg("ceqsteps","100"); + string natoms=@arg("natoms","200"); + string volume=@arg("volume","200"); + string rlist=@arg("rlist","rlist"); + string clist=@arg("clist","clist"); + string fraca=@arg("fraca","0.5"); + string radii[] = readData(rlist); + string centers[] = readData(clist); + int nmodels=strtoi( @arg("n","1") ); + int nsub=strtoi( @arg("nsub","1") ); +// int njobs=nsub*nmodels; + string savearc=@arg("savearc","FALSE"); + string arctimestring; + if(savearc=="FALSE") { + arctimestring="--arc_time=10000000"; + } + else{ + arctimestring=""; + } + string energyfunction=@arg("energyfunction","softsphereratiosmooth"); + GlassIn modelIn[][][] ; + GlassOut modelOut[][][][] ; + foreach rad,rindex in radii { + foreach centerstring,cindex in centers { + foreach model in [0:nmodels-1] { + foreach job in [0:nsub-1] { + if( !(@filename(modelOut[rindex][cindex][model][job].final)=="NULL") ){ + modelOut[rindex][cindex][model][job]=glassCavityRun(modelIn[rindex][cindex][model],rad,temp,steps,volume,fraca,energyfunction,centerstring,arctimestring); + } + } + } + } + } +} + +CreateGlassSystem(); Copied: text/parco10submission/modis.list (from rev 4189, text/parco10submission/code/modis.list) =================================================================== --- text/parco10submission/modis.list (rev 0) +++ text/parco10submission/modis.list 2011-03-17 19:15:40 UTC (rev 4193) @@ -0,0 +1,6 @@ +$ ./modis.mapper -location /home/wilde/modis/2002/ -suffix .tif -n 5 +[0] /home/wilde/modis/2002/h00v08.tif +[1] /home/wilde/modis/2002/h00v09.tif +[2] /home/wilde/modis/2002/h00v10.tif +[3] /home/wilde/modis/2002/h01v07.tif +[4] /home/wilde/modis/2002/h01v08.tif Copied: text/parco10submission/modis.swift (from rev 4189, text/parco10submission/code/modis.swift) =================================================================== --- text/parco10submission/modis.swift (rev 0) +++ text/parco10submission/modis.swift 2011-03-17 19:15:40 UTC (rev 4193) @@ -0,0 +1,83 @@ +type file; +type MODIS; type image; +type landuse; + +# Define application program interfaces + +app (landuse output) getLandUse (imagefile input, int sortfield) +{ + getlanduse @input sortfield stdout=@output; +} + +app (file output, file tilelist) analyzeLandUse + (MODIS input[], string usetype, int maxnum) +{ + analyzelanduse @output @tilelist usetype maxnum @filenames(input); +} + +app (image output) colorMODIS (MODIS input) +{ + colormodis @input @output; +} + +app (image output) assemble + (file selected, image img[], string webdir) +{ + assemble @output @selected @filename(img[0]) webdir; +} + +app (image grid) markMap (file tilelist) +{ + markmap @tilelist @grid; +} + +# Constants and command line arguments + +int nFiles = @toint(@arg("nfiles","1000")); +int nSelect = @toint(@arg("nselect","12")); +string landType = @arg("landtype","urban"); +string runID = @arg("runid","modis-run"); +string MODISdir= @arg("modisdir","/home/wilde/bigdata/data/modis/2002"); +string webDir = @arg("webdir","/home/wilde/public_html/geo/"); + + + +# Input Dataset + +image geos[] ; + +# Compute the land use summary of each MODIS tile + +landuse land[] ; + +foreach g,i in geos { + land[i] = getLandUse(g,1); +} + +# Find the top N tiles (by total area of selected landuse types) + +file topSelected <"topselected.txt">; +file selectedTiles <"selectedtiles.txt">; +(topSelected, selectedTiles) = analyzeLandUse(land, landType, nSelect); + +# Mark the top N tiles on a sinusoidal gridded map + +image gridMap <"markedGrid.gif">; +gridMap = markMap(topSelected); + +# Create multi-color images for all tiles + +image colorImage[] ; + +foreach g, i in geos { + colorImage[i] = colorMODIS(g); +} + +# Assemble a montage of the top selected areas + +image montage ; # @arg +montage = assemble(selectedTiles,colorImage,webDir); \ No newline at end of file Modified: text/parco10submission/paper.tex =================================================================== --- text/parco10submission/paper.tex 2011-03-17 19:12:52 UTC (rev 4192) +++ text/parco10submission/paper.tex 2011-03-17 19:15:40 UTC (rev 4193) @@ -846,7 +846,7 @@ \begin{figure*}[htbp] \begin{center} - \includegraphics{img/swift-model} + \includegraphics{swift-model} \caption{Swift site model (CoG = Commodity Grid~\cite{Karajan}, OSG = Open Science Grid, AWS = Amazon Web Services, HPC = high-performance computing system, BG/P = Blue Gene/P).} @@ -1110,7 +1110,7 @@ name being mapped. For example, if this mapper invocation were called from the Swift script at lines 47--48: -\VerbatimInput[fontsize=\scriptsize] {code/modis.list} +\VerbatimInput[fontsize=\scriptsize] {modis.list} it would cause the first five elements of the array {\tt geos} to be mapped to the first five files of the modis dataset in the specified directory. @@ -1152,7 +1152,7 @@ \\ {\bf \small Swift example 1: MODIS satellite image processing script} \VerbatimInput[fontsize=\scriptsize,frame=single,framesep=2mm, - numbers=left] {code/modis.swift} + numbers=left] {modis.swift} \subsection{Simulation of glass cavity dynamics and thermodynamics} @@ -1230,7 +1230,7 @@ resources would be prohibitive. {\bf \small Swift example 2: Monte-Carlo simulation of glass cavity dynamics} -\VerbatimInput[fontsize=\scriptsize,frame=single,framesep=2mm, numbers=left] {code/glass.swift} +\VerbatimInput[fontsize=\scriptsize,frame=single,framesep=2mm, numbers=left] {glass.swift} \section{Performance characteristics\label{Performance}} @@ -1269,8 +1269,8 @@ \begin{center} {\footnotesize \begin{tabular}{p{7cm}p{7cm}} - \includegraphics[scale=\plotscale]{plots/multicore} & - \includegraphics[scale=\plotscale]{plots/sleep} \\ + \includegraphics[scale=\plotscale]{multicore} & + \includegraphics[scale=\plotscale]{sleep} \\ Test A. Application CPU utilization for 3 task durations (in seconds) with up to 200 concurrent processes on an 16-core @@ -1313,7 +1313,7 @@ \begin{center} {\footnotesize \begin{tabular}{p{14 cm}} - \includegraphics[scale=.4]{plots/SEM_IO} + \includegraphics[scale=.4]{SEM_IO} \end{tabular} } \caption{128K-job SEM fMRI application execution on the Ranger Constellation (from \cite{CNARI_2009}). Red=active compute jobs, blue=data stage in, green=stage out. } @@ -1331,10 +1331,10 @@ \begin{center} {\footnotesize \begin{tabular}{p{7cm}p{7cm}} - \includegraphics[scale=.3]{plots/PTMap_top} & - \includegraphics[scale=.3]{plots/SEM_top} \\ - \includegraphics[scale=.3]{plots/PTMap_bottom} & - \includegraphics[scale=.3]{plots/SEM_bottom} \\ + \includegraphics[scale=.3]{PTMap_top} & + \includegraphics[scale=.3]{SEM_top} \\ + \includegraphics[scale=.3]{PTMap_bottom} & + \includegraphics[scale=.3]{SEM_bottom} \\ A. PTMap application on 2,048 nodes of the Blue Gene/P & B. SEM application on varying-size processing allocations on Ranger\\ \end{tabular} From noreply at svn.ci.uchicago.edu Thu Mar 17 14:20:44 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Thu, 17 Mar 2011 14:20:44 -0500 (CDT) Subject: [Swift-commit] r4194 - text/parco10submission Message-ID: <20110317192044.EC9229CC92@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-17 14:20:44 -0500 (Thu, 17 Mar 2011) New Revision: 4194 Removed: text/parco10submission/code/ text/parco10submission/img/ text/parco10submission/plots/ Log: Drop directories From noreply at svn.ci.uchicago.edu Thu Mar 17 17:42:38 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Thu, 17 Mar 2011 17:42:38 -0500 (CDT) Subject: [Swift-commit] r4195 - SwiftApps/SwiftR/Swift/tests Message-ID: <20110317224238.B57E59CC92@svn.ci.uchicago.edu> Author: tga Date: 2011-03-17 17:42:38 -0500 (Thu, 17 Mar 2011) New Revision: 4195 Modified: SwiftApps/SwiftR/Swift/tests/param_size.R Log: Improved param size test graphs. Modified: SwiftApps/SwiftR/Swift/tests/param_size.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/param_size.R 2011-03-17 19:20:44 UTC (rev 4194) +++ SwiftApps/SwiftR/Swift/tests/param_size.R 2011-03-17 22:42:38 UTC (rev 4195) @@ -41,6 +41,17 @@ loc <- subset(anl, server=="local") ssh <- subset(anl, server=="ssh") -plot(x=ssh$arr.bytes, y=ssh$time, col='red', ylab="time", xlab="Argument size (bytes)") -points(x=loc$arr.bytes, y=loc$time) - +plot(x=ssh$arr.bytes/1024, y=ssh$time, col='red', ylab="Time (s)", xlab="Argument size (bytes)", +# log="xy", ylim=c(0.1, 500), + xaxt="n") +title(main="Effect of argument size on execution time", line=2) +title(main="Execution time of identity function with one function invocation per core", line=1, font.main=4, cex.main=0.8) +axis(1, at=ssh$arr.bytes/1024, + labels=lapply(ssh$arr.bytes, + function (n) { if (n >= 1024*1024) {sprintf("%dM", n/(1024*1024))} + else if (n >= 1024 ) {sprintf("%dK", n/1024)} + else {sprintf("%d", n)}}) + ) +points(x=loc$arr.bytes/1024, y=loc$time) +legend("topleft", legend=c("Local (4 cores)", "Ssh (4 hosts, 1 core per host)"), + fill=c("black", "red")) From noreply at svn.ci.uchicago.edu Fri Mar 18 10:22:10 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Fri, 18 Mar 2011 10:22:10 -0500 (CDT) Subject: [Swift-commit] r4196 - usertools/persistent-coasters Message-ID: <20110318152210.B43B09CCA8@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-18 10:22:10 -0500 (Fri, 18 Mar 2011) New Revision: 4196 Modified: usertools/persistent-coasters/README.txt Log: Update file name Modified: usertools/persistent-coasters/README.txt =================================================================== --- usertools/persistent-coasters/README.txt 2011-03-17 22:42:38 UTC (rev 4195) +++ usertools/persistent-coasters/README.txt 2011-03-18 15:22:10 UTC (rev 4196) @@ -12,6 +12,6 @@ Usage: -Start run.zsh - - run.zsh does the above steps +Start start-service.zsh + - start-service.zsh does the above steps Start your application SwiftScripts with the generated sites.xml From noreply at svn.ci.uchicago.edu Fri Mar 18 10:29:58 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Fri, 18 Mar 2011 10:29:58 -0500 (CDT) Subject: [Swift-commit] r4197 - usertools/persistent-coasters Message-ID: <20110318152958.80E6B9CCA8@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-18 10:29:58 -0500 (Fri, 18 Mar 2011) New Revision: 4197 Modified: usertools/persistent-coasters/start-service.zsh Log: Whitespace Modified: usertools/persistent-coasters/start-service.zsh =================================================================== --- usertools/persistent-coasters/start-service.zsh 2011-03-18 15:22:10 UTC (rev 4196) +++ usertools/persistent-coasters/start-service.zsh 2011-03-18 15:29:58 UTC (rev 4197) @@ -24,13 +24,13 @@ SWIFT_OUT=${LOGDIR}/swift.out -if [[ ${WORKER_MODE} == "local" ]] - then +if [[ ${WORKER_MODE} == "local" ]] +then source workers-local.zsh -elif [[ ${WORKER_MODE} == "ssh" ]] - then +elif [[ ${WORKER_MODE} == "ssh" ]] +then source workers-ssh.zsh -else +else print "Unknown WORKER_MODE: ${WORKER_MODE}" false fi @@ -43,14 +43,14 @@ LINE=() COUNT=0 for COUNT in {1..3} - do - LINE=( $( grep --text "Started coaster service:" ${OUT} ) ) - if [[ ${#LINE} == 0 ]] then - grep Error ${OUT} >& /dev/null && return 1 - sleep 3 - else - break - fi + do + LINE=( $( grep --text "Started coaster service:" ${OUT} ) ) + if [[ ${#LINE} == 0 ]] then + grep Error ${OUT} >& /dev/null && return 1 + sleep 3 + else + break + fi done [[ ${#LINE} == 0 ]] && return 1 @@ -67,18 +67,18 @@ COUNT=0 for COUNT in {1..4} do - LINE=( $( grep "Passive queue processor" ${OUT} ) ) - if [[ ${#LINE} == 0 ]] then - sleep 4 - else - break - fi - if grep "Error" ${OUT} >& /dev/null - then - print "coaster-service error!" >&2 - cat ${OUT} >&2 - return 1 - fi + LINE=( $( grep "Passive queue processor" ${OUT} ) ) + if [[ ${#LINE} == 0 ]] then + sleep 4 + else + break + fi + if grep "Error" ${OUT} >& /dev/null + then + print "coaster-service error!" >&2 + cat ${OUT} >&2 + return 1 + fi done [[ ${#LINE} == 0 ]] && return 1 @@ -113,9 +113,9 @@ sleep 1 { ${SWIFT} -config swift.properties \ - -sites.file sites.passivate.xml \ - -tc.file tc.passivate.data \ - passivate.swift < /dev/null >& ${SWIFT_OUT} + -sites.file sites.passivate.xml \ + -tc.file tc.passivate.data \ + passivate.swift < /dev/null >& ${SWIFT_OUT} exitcode "Swift failed!" print "Swift finished." } & @@ -138,7 +138,7 @@ cp sites.passivate.xml sites.xml print "Created user sites file: sites.xml" -cp tc.passivate.data tc.data +cp tc.passivate.data tc.data print "Created user tc file: tc.data" exit 0 From noreply at svn.ci.uchicago.edu Fri Mar 18 12:30:41 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Fri, 18 Mar 2011 12:30:41 -0500 (CDT) Subject: [Swift-commit] r4198 - in SwiftApps/SwiftR/Swift: R tests tests/OpenMx Message-ID: <20110318173041.063389CCA8@svn.ci.uchicago.edu> Author: tga Date: 2011-03-18 12:30:40 -0500 (Fri, 18 Mar 2011) New Revision: 4198 Modified: SwiftApps/SwiftR/Swift/R/Apply.R SwiftApps/SwiftR/Swift/tests/OpenMx/BootstrapParallelBigger.R SwiftApps/SwiftR/Swift/tests/perf_tests.R Log: * Tweak to BootstrapParalel benchmark - don't build models in parallel * Added in optional printing of time taken to serial to swiftapply Modified: SwiftApps/SwiftR/Swift/R/Apply.R =================================================================== --- SwiftApps/SwiftR/Swift/R/Apply.R 2011-03-18 15:29:58 UTC (rev 4197) +++ SwiftApps/SwiftR/Swift/R/Apply.R 2011-03-18 17:30:40 UTC (rev 4198) @@ -16,7 +16,8 @@ keepwork=NULL, tmpdir=NULL, timeout=NULL, - quiet=FALSE) + quiet=NULL, + printTiming=NULL) { # Set Swift default options if not passed as keywords or pre-set by user if(is.null(server)) server <- getOption("swift.server") @@ -45,6 +46,9 @@ if(is.null(quiet)) quiet <- getOption("swift.quiet") if(is.null(quiet)) quiet <- FALSE + + if(is.null(printTiming)) printTiming <- getOption("swift.printtiming") + if(is.null(printTiming)) printTiming <- FALSE # Inform user of some call info if (! quiet) { @@ -60,10 +64,19 @@ # Execute the calls in batches reqdir <- setupRequestDir(tmpdir=tmpdir) + if (printTiming) + startTime = proc.time()[["elapsed"]] nbatches <- writeRequestBatches(func, arglists, initialexpr, reqdir, callsperbatch) - if (! quiet) cat("Swift request written to: ",reqdir,"\n") + if (printTiming) { + endTime = proc.time()[["elapsed"]] + cat(nbatches, "Swift request files written to: ", reqdir, + "in", sprintf("%.2f", endTime - startTime), "s\n") + } + else if (!quiet) { + cat(nbatches, "Swift request files written to: ", reqdir, "\n") + } if( runmode == "manual" ) { # Prompt for return (empty line) to continue; assumes user ran a @@ -106,8 +119,17 @@ stop(paste("Invalid runmode", runmode)) } + + if (printTiming) startTime = proc.time()[["elapsed"]] # Fetch the batch results - return(fetchBatchResults(reqdir, nbatches, arglists, keepwork)) + res <- fetchBatchResults(reqdir, nbatches, arglists, keepwork) + if (printTiming) { + endTime = proc.time()[["elapsed"]] + cat(paste("Swift results retrieved from disk in", + sprintf("%.2f", endTime - startTime), "s\n")) + } + + return (res) } swiftLapply <- function( tlist, func, ... ) Modified: SwiftApps/SwiftR/Swift/tests/OpenMx/BootstrapParallelBigger.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/OpenMx/BootstrapParallelBigger.R 2011-03-18 15:29:58 UTC (rev 4197) +++ SwiftApps/SwiftR/Swift/tests/OpenMx/BootstrapParallelBigger.R 2011-03-18 17:30:40 UTC (rev 4198) @@ -35,7 +35,10 @@ # parameters. bootstrapTest <- function (nVar, nObs, nReps) { set.seed(10) + startTime = proc.time()[["elapsed"]] topModel <- buildModels(nVar, nObs, nReps) + endTime = proc.time()[["elapsed"]] + cat(paste("Took", endTime - startTime, "s to build models\n")) modelResults <- mxRun(topModel, silent=TRUE, suppressWarnings=TRUE) @@ -124,7 +127,16 @@ # Don't need to export as local environment will automatically # be sent #swiftExportAll() - submodels <- omxLapply(1:nReps, createNewModel, 'stErrSim', template) + if (FALSE) { + oldSetting <- getOption("swift.callsperbatch") + options(swift.callsperbatch=128) + submodels <- omxLapply(1:nReps, createNewModel, 'stErrSim', template) + options(swift.callsperbatch=oldSetting) + } + else { + submodels <- lapply(1:nReps, createNewModel, 'stErrSim', template) + } + cat(length(submodels), "submodels created\n") # names(submodels) <- imxExtractNames(submodels) names(submodels) <- imxExtractNames(submodels) Modified: SwiftApps/SwiftR/Swift/tests/perf_tests.R =================================================================== --- SwiftApps/SwiftR/Swift/tests/perf_tests.R 2011-03-18 15:29:58 UTC (rev 4197) +++ SwiftApps/SwiftR/Swift/tests/perf_tests.R 2011-03-18 17:30:40 UTC (rev 4198) @@ -10,6 +10,8 @@ } library(Swift) swiftSess <- swiftInit(...) + options(.swift.printtiming=getOption("swift.printtiming")) + options(swift.printtiming=TRUE) # Wait to start Sys.sleep(10) # Run some small jobs to ensure workers are started and warmed up @@ -21,6 +23,7 @@ swiftTearDown <- function (...) { swiftShutdown() + options(swift.printtiming=getOption(".swift.printtiming")) dt <- getOption(".swift.detach") options(.swift.detach=NULL) if (!is.null(dt) && dt) { From noreply at svn.ci.uchicago.edu Fri Mar 18 14:08:14 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Fri, 18 Mar 2011 14:08:14 -0500 (CDT) Subject: [Swift-commit] r4199 - trunk Message-ID: <20110318190814.33D979CCA8@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-18 14:08:14 -0500 (Fri, 18 Mar 2011) New Revision: 4199 Modified: trunk/build.xml Log: Option to omit generateVersion step Modified: trunk/build.xml =================================================================== --- trunk/build.xml 2011-03-18 17:30:40 UTC (rev 4198) +++ trunk/build.xml 2011-03-18 19:08:14 UTC (rev 4199) @@ -365,7 +365,7 @@ - + Swift ${version} From noreply at svn.ci.uchicago.edu Mon Mar 21 13:44:23 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 21 Mar 2011 13:44:23 -0500 (CDT) Subject: [Swift-commit] r4200 - in SwiftApps/SwiftR: . Swift Swift/R Message-ID: <20110321184423.0854E9CC84@svn.ci.uchicago.edu> Author: tga Date: 2011-03-21 13:44:22 -0500 (Mon, 21 Mar 2011) New Revision: 4200 Modified: SwiftApps/SwiftR/IMMEDIATE-TODO SwiftApps/SwiftR/Swift/DESCRIPTION SwiftApps/SwiftR/Swift/R/Apply.R Log: version 0.1.6 for posting to web Modified: SwiftApps/SwiftR/IMMEDIATE-TODO =================================================================== --- SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-18 19:08:14 UTC (rev 4199) +++ SwiftApps/SwiftR/IMMEDIATE-TODO 2011-03-21 18:44:22 UTC (rev 4200) @@ -6,6 +6,9 @@ VERY HIGH: +-- OpenMx doco on wiki + +VERY HIGH: -- get working on beagle. VERY HIGH: Modified: SwiftApps/SwiftR/Swift/DESCRIPTION =================================================================== --- SwiftApps/SwiftR/Swift/DESCRIPTION 2011-03-18 19:08:14 UTC (rev 4199) +++ SwiftApps/SwiftR/Swift/DESCRIPTION 2011-03-21 18:44:22 UTC (rev 4200) @@ -1,12 +1,12 @@ Package: Swift Type: Package Title: R interface to Swift parallel scripting languaage -Version: 0.1.5 -Date: 2011-04-03 +Version: 0.1.6 +Date: 2011-04-21 Author: Michael Wilde Maintainer: Michael Wilde Description: Routines to invoke R functions on remote resources through Swift. License: Apache License LazyLoad: yes -Packaged: 2011-04-03; Tim Armstrong +Packaged: 2011-04-21; Tim Armstrong Modified: SwiftApps/SwiftR/Swift/R/Apply.R =================================================================== --- SwiftApps/SwiftR/Swift/R/Apply.R 2011-03-18 19:08:14 UTC (rev 4199) +++ SwiftApps/SwiftR/Swift/R/Apply.R 2011-03-21 18:44:22 UTC (rev 4200) @@ -122,7 +122,7 @@ if (printTiming) startTime = proc.time()[["elapsed"]] # Fetch the batch results - res <- fetchBatchResults(reqdir, nbatches, arglists, keepwork) + res <- fetchBatchResults(reqdir, nbatches, arglists, keepwork, quiet) if (printTiming) { endTime = proc.time()[["elapsed"]] cat(paste("Swift results retrieved from disk in", @@ -251,7 +251,7 @@ return (batch - 1) } -fetchBatchResults <- function (reqdir, nbatches, arglists, keepwork) { +fetchBatchResults <- function (reqdir, nbatches, arglists, keepwork, quiet) { rno <- 1 rlist <- list() for(batch in 1:nbatches) { @@ -272,7 +272,8 @@ } names(rlist) = names(arglists) if( ! keepwork ) { - cat("Removing ", reqdir, "\n") + if (!quiet) + cat("Removing ", reqdir, "\n") unlink(reqdir,recursive=TRUE) } return(rlist) From noreply at svn.ci.uchicago.edu Mon Mar 21 16:24:01 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Mon, 21 Mar 2011 16:24:01 -0500 (CDT) Subject: [Swift-commit] r4203 - trunk/tests/providers Message-ID: <20110321212401.AF0AD9CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-21 16:24:01 -0500 (Mon, 21 Mar 2011) New Revision: 4203 Added: trunk/tests/providers/local-coasters/ Log: Adding From noreply at svn.ci.uchicago.edu Tue Mar 22 13:47:41 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Tue, 22 Mar 2011 13:47:41 -0500 (CDT) Subject: [Swift-commit] r4204 - in trunk: docs etc/sites etc/sites/cnari-abe etc/sites/cnari-queenbee etc/sites/cnari-ranger etc/sites/local-pbs-coasters etc/sites/pads-local-pbs-coasters etc/sites/pads-remote-pbs-coasters-ssh etc/sites/teraport-local-pbs-coasters etc/sites/teraport-remote-pbs-coasters-ssh libexec tests/cdm/ps tests/cdm/ps/pinned tests/mpi tests/providers/local-cobalt/intrepid tests/providers/local-cobalt/surveyor tests/providers/local-pbs-coasters tests/providers/local-sge-coasters tests/providers/ssh-pbs-coasters Message-ID: <20110322184741.A46FF9CCA0@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-22 13:47:41 -0500 (Tue, 22 Mar 2011) New Revision: 4204 Added: trunk/etc/sites/cnari-abe/ trunk/etc/sites/cnari-queenbee/ trunk/etc/sites/cnari-ranger/ trunk/etc/sites/local-pbs-coasters/ trunk/etc/sites/pads-local-pbs-coasters/ trunk/etc/sites/pads-remote-pbs-coasters-ssh/ trunk/etc/sites/teraport-local-pbs-coasters/ trunk/etc/sites/teraport-remote-pbs-coasters-ssh/ Modified: trunk/docs/userguide.xml trunk/etc/sites/cnari-abe/sites.xml trunk/etc/sites/cnari-queenbee/sites.xml trunk/etc/sites/cnari-ranger/sites.xml trunk/etc/sites/intrepid trunk/etc/sites/local-pbs-coasters/sites.xml trunk/etc/sites/pads-local-pbs-coasters/sites.xml trunk/etc/sites/pads-remote-pbs-coasters-ssh/sites.xml trunk/etc/sites/ssh-pbs-coasters trunk/etc/sites/surveyor trunk/etc/sites/teraport-local-pbs-coasters/sites.xml trunk/etc/sites/teraport-remote-pbs-coasters-ssh/sites.xml trunk/libexec/vdl-sc.k trunk/tests/cdm/ps/pinned/sites.template.xml trunk/tests/cdm/ps/sites.template.xml trunk/tests/mpi/sites.template.xml trunk/tests/providers/local-cobalt/intrepid/sites.template.xml trunk/tests/providers/local-cobalt/surveyor/sites.template.xml trunk/tests/providers/local-pbs-coasters/sites.template.xml trunk/tests/providers/local-sge-coasters/sites.template.xml trunk/tests/providers/ssh-pbs-coasters/sites.template.xml Log: Rename workersPerNode to jobsPerNode Modified: trunk/docs/userguide.xml =================================================================== --- trunk/docs/userguide.xml 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/docs/userguide.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -3288,14 +3288,14 @@ specifies the maximum number of jobs/blocks that the coaster scheduler will have running at any given time. The default is 20. - workersPerNode + jobsPerNode This parameter determines how many coaster workers are started one each compute node. The default value is 1. nodeGranularity When allocating a coaster worker block, this parameter restricts the number of nodes in a block to a multiple of this value. The total number of workers will -then be a multiple of workersPerNode * nodeGranularity. The default value is 1. +then be a multiple of jobsPerNode * nodeGranularity. The default value is 1. allocationStepSize Each time the coaster block scheduler computes a schedule, it will attempt to allocate a @@ -3987,13 +3987,13 @@ profile keybrief description slotsHow many maximum LRM jobs/worker blocks are allowed - workersPerNodeHow many coaster workers to run per execution node + jobsPerNodeHow many coaster workers to run per execution node nodeGranularityEach worker block uses a number of nodes that is a multiple of this number lowOverallocationHow many times larger than the job walltime should a block's walltime be if all jobs are 1s long highOverallocationHow many times larger than the job walltime should a block's walltime be if all jobs are infinitely long overallocationDecayFactorHow quickly should the overallocation curve tend towards the highOverallocation as job walltimes get larger spreadBy how much should worker blocks vary in worker size - workersPerNodeHow many coaster workers to run per execution node + jobsPerNodeHow many coaster workers to run per execution node reserveHow many seconds to reserve in a block's walltime for starting/shutdown operations maxnodesThe maximum number of nodes allowed in a block maxtimeThe maximum number of walltime allowed for a block Copied: trunk/etc/sites/cnari-abe (from rev 4199, trunk/etc/sites/cnari-abe) Modified: trunk/etc/sites/cnari-abe/sites.xml =================================================================== --- trunk/etc/sites/cnari-abe/sites.xml 2011-03-18 19:08:14 UTC (rev 4199) +++ trunk/etc/sites/cnari-abe/sites.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -5,14 +5,14 @@ 172800 10 8 - 8 + 8 8 normal TG-DBS080004N configtest - 8 + 8 /scratch/users/sidgrid/$USER Copied: trunk/etc/sites/cnari-queenbee (from rev 4199, trunk/etc/sites/cnari-queenbee) Modified: trunk/etc/sites/cnari-queenbee/sites.xml =================================================================== --- trunk/etc/sites/cnari-queenbee/sites.xml 2011-03-18 19:08:14 UTC (rev 4199) +++ trunk/etc/sites/cnari-queenbee/sites.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -5,14 +5,14 @@ 172800 10 8 - 8 + 8 8 workq TG-DBS080004N configtest - 8 + 8 /work/scommuni/$USER Copied: trunk/etc/sites/cnari-ranger (from rev 4199, trunk/etc/sites/cnari-ranger) Modified: trunk/etc/sites/cnari-ranger/sites.xml =================================================================== --- trunk/etc/sites/cnari-ranger/sites.xml 2011-03-18 19:08:14 UTC (rev 4199) +++ trunk/etc/sites/cnari-ranger/sites.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -5,12 +5,12 @@ 172800 10 8 - 16 + 16 16 long TG-DBS080004N - 16 + 16 /work/00926/tg459516/sidgrid_out/$USER Modified: trunk/etc/sites/intrepid =================================================================== --- trunk/etc/sites/intrepid 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/etc/sites/intrepid 2011-03-22 18:47:41 UTC (rev 4204) @@ -20,7 +20,7 @@ true 21 10000 - 1 + 1 DEBUG 1 900 Copied: trunk/etc/sites/local-pbs-coasters (from rev 4199, trunk/etc/sites/local-pbs-coasters) Modified: trunk/etc/sites/local-pbs-coasters/sites.xml =================================================================== --- trunk/etc/sites/local-pbs-coasters/sites.xml 2011-03-18 19:08:14 UTC (rev 4199) +++ trunk/etc/sites/local-pbs-coasters/sites.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -3,7 +3,7 @@ $HOME/swiftwork 3000 - 8 + 8 1 1 10 Copied: trunk/etc/sites/pads-local-pbs-coasters (from rev 4199, trunk/etc/sites/pads-local-pbs-coasters) Modified: trunk/etc/sites/pads-local-pbs-coasters/sites.xml =================================================================== --- trunk/etc/sites/pads-local-pbs-coasters/sites.xml 2011-03-18 19:08:14 UTC (rev 4199) +++ trunk/etc/sites/pads-local-pbs-coasters/sites.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -3,7 +3,7 @@ $HOME/swiftwork 3000 - 8 + 8 1 1 10 Copied: trunk/etc/sites/pads-remote-pbs-coasters-ssh (from rev 4199, trunk/etc/sites/pads-remote-pbs-coasters-ssh) Modified: trunk/etc/sites/pads-remote-pbs-coasters-ssh/sites.xml =================================================================== --- trunk/etc/sites/pads-remote-pbs-coasters-ssh/sites.xml 2011-03-18 19:08:14 UTC (rev 4199) +++ trunk/etc/sites/pads-remote-pbs-coasters-ssh/sites.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -1,7 +1,7 @@ 3000 - 8 + 8 1 1 10 Modified: trunk/etc/sites/ssh-pbs-coasters =================================================================== --- trunk/etc/sites/ssh-pbs-coasters 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/etc/sites/ssh-pbs-coasters 2011-03-22 18:47:41 UTC (rev 4204) @@ -3,7 +3,7 @@ 3000 - 8 + 8 1 1 10 Modified: trunk/etc/sites/surveyor =================================================================== --- trunk/etc/sites/surveyor 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/etc/sites/surveyor 2011-03-22 18:47:41 UTC (rev 4204) @@ -10,7 +10,7 @@ true 21 10000 - 1 + 1 DEBUG 1 900 Copied: trunk/etc/sites/teraport-local-pbs-coasters (from rev 4199, trunk/etc/sites/teraport-local-pbs-coasters) Modified: trunk/etc/sites/teraport-local-pbs-coasters/sites.xml =================================================================== --- trunk/etc/sites/teraport-local-pbs-coasters/sites.xml 2011-03-18 19:08:14 UTC (rev 4199) +++ trunk/etc/sites/teraport-local-pbs-coasters/sites.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -3,7 +3,7 @@ $HOME/swiftwork 3000 - 8 + 8 1 1 10 Copied: trunk/etc/sites/teraport-remote-pbs-coasters-ssh (from rev 4199, trunk/etc/sites/teraport-remote-pbs-coasters-ssh) Modified: trunk/etc/sites/teraport-remote-pbs-coasters-ssh/sites.xml =================================================================== --- trunk/etc/sites/teraport-remote-pbs-coasters-ssh/sites.xml 2011-03-18 19:08:14 UTC (rev 4199) +++ trunk/etc/sites/teraport-remote-pbs-coasters-ssh/sites.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -1,7 +1,7 @@ 3000 - 8 + 8 1 1 10 Modified: trunk/libexec/vdl-sc.k =================================================================== --- trunk/libexec/vdl-sc.k 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/libexec/vdl-sc.k 2011-03-22 18:47:41 UTC (rev 4204) @@ -72,7 +72,7 @@ element(intrepidCoasterParams, [optional(averageJobTime, blockSize)] print("Setting Intrepid coaster params:") p("scratch", "/scratch") - p("workersPerNode", "4") + p("jobsPerNode", "4") p("kernelprofile", "zeptoos") p("alcfbgpnat", "true") maybe( @@ -91,7 +91,7 @@ element(surveyorCoasterParams, [optional(averageJobTime, blockSize)] print("Setting Surveyor coaster params:") p("scratch", "/scratch") - p("workersPerNode", "4") + p("jobsPerNode", "4") p("kernelprofile", "zeptoos") p("alcfbgpnat", "true") maybe( Modified: trunk/tests/cdm/ps/pinned/sites.template.xml =================================================================== --- trunk/tests/cdm/ps/pinned/sites.template.xml 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/tests/cdm/ps/pinned/sites.template.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -13,7 +13,7 @@ _HOST_ 2.55 10000 - 4 + 4 8 1000 1 Modified: trunk/tests/cdm/ps/sites.template.xml =================================================================== --- trunk/tests/cdm/ps/sites.template.xml 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/tests/cdm/ps/sites.template.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -13,7 +13,7 @@ _HOST_ 2.55 10000 - 4 + 4 8 1000 1 Modified: trunk/tests/mpi/sites.template.xml =================================================================== --- trunk/tests/mpi/sites.template.xml 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/tests/mpi/sites.template.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -13,7 +13,7 @@ _HOST_ 2.55 10000 - 4 + 4 8 1000 1 Modified: trunk/tests/providers/local-cobalt/intrepid/sites.template.xml =================================================================== --- trunk/tests/providers/local-cobalt/intrepid/sites.template.xml 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/tests/providers/local-cobalt/intrepid/sites.template.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -20,7 +20,7 @@ true 21 10000 - 1 + 1 DEBUG 1 900 Modified: trunk/tests/providers/local-cobalt/surveyor/sites.template.xml =================================================================== --- trunk/tests/providers/local-cobalt/surveyor/sites.template.xml 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/tests/providers/local-cobalt/surveyor/sites.template.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -10,7 +10,7 @@ true 21 10000 - 1 + 1 DEBUG 1 900 Modified: trunk/tests/providers/local-pbs-coasters/sites.template.xml =================================================================== --- trunk/tests/providers/local-pbs-coasters/sites.template.xml 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/tests/providers/local-pbs-coasters/sites.template.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -4,7 +4,7 @@ 1 7200 - 1 + 1 1 1 1 Modified: trunk/tests/providers/local-sge-coasters/sites.template.xml =================================================================== --- trunk/tests/providers/local-sge-coasters/sites.template.xml 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/tests/providers/local-sge-coasters/sites.template.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -4,7 +4,7 @@ 1 7200 - 1 + 1 1 16 16 Modified: trunk/tests/providers/ssh-pbs-coasters/sites.template.xml =================================================================== --- trunk/tests/providers/ssh-pbs-coasters/sites.template.xml 2011-03-21 21:24:01 UTC (rev 4203) +++ trunk/tests/providers/ssh-pbs-coasters/sites.template.xml 2011-03-22 18:47:41 UTC (rev 4204) @@ -3,7 +3,7 @@ 3000 - 8 + 8 1 1 10 From noreply at svn.ci.uchicago.edu Tue Mar 22 13:48:56 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Tue, 22 Mar 2011 13:48:56 -0500 (CDT) Subject: [Swift-commit] r4205 - trunk Message-ID: <20110322184856.3F7E49CCA0@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-22 13:48:56 -0500 (Tue, 22 Mar 2011) New Revision: 4205 Modified: trunk/CHANGES.txt Log: test Modified: trunk/CHANGES.txt =================================================================== --- trunk/CHANGES.txt 2011-03-22 18:47:41 UTC (rev 4204) +++ trunk/CHANGES.txt 2011-03-22 18:48:56 UTC (rev 4205) @@ -707,3 +707,4 @@ *** Added a basic wrapper to capture exit codes and do other work before and after executing the job + From noreply at svn.ci.uchicago.edu Tue Mar 22 13:49:22 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Tue, 22 Mar 2011 13:49:22 -0500 (CDT) Subject: [Swift-commit] r4206 - trunk Message-ID: <20110322184922.B6CD09CCA0@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-22 13:49:22 -0500 (Tue, 22 Mar 2011) New Revision: 4206 Modified: trunk/CHANGES.txt Log: test2 Modified: trunk/CHANGES.txt =================================================================== --- trunk/CHANGES.txt 2011-03-22 18:48:56 UTC (rev 4205) +++ trunk/CHANGES.txt 2011-03-22 18:49:22 UTC (rev 4206) @@ -708,3 +708,4 @@ *** Added a basic wrapper to capture exit codes and do other work before and after executing the job + From noreply at svn.ci.uchicago.edu Tue Mar 22 14:29:59 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Tue, 22 Mar 2011 14:29:59 -0500 (CDT) Subject: [Swift-commit] r4207 - trunk/tests/providers/local-coasters Message-ID: <20110322192959.B6A5A9CCA0@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-22 14:29:59 -0500 (Tue, 22 Mar 2011) New Revision: 4207 Added: trunk/tests/providers/local-coasters/200-cp.check.sh trunk/tests/providers/local-coasters/200-cp.clean.sh trunk/tests/providers/local-coasters/200-cp.setup.sh trunk/tests/providers/local-coasters/200-cp.swift trunk/tests/providers/local-coasters/README.txt trunk/tests/providers/local-coasters/sites.template.xml trunk/tests/providers/local-coasters/tc.template.data trunk/tests/providers/local-coasters/title.txt Modified: trunk/tests/providers/local-coasters/ Log: Simple local-coasters test Property changes on: trunk/tests/providers/local-coasters ___________________________________________________________________ Name: svn:ignore + 200-input.txt Added: trunk/tests/providers/local-coasters/200-cp.check.sh =================================================================== --- trunk/tests/providers/local-coasters/200-cp.check.sh (rev 0) +++ trunk/tests/providers/local-coasters/200-cp.check.sh 2011-03-22 19:29:59 UTC (rev 4207) @@ -0,0 +1,8 @@ +#!/bin/sh + +set -x + +grep $( uname -m ) 200-input.txt || exit 1 +grep $( uname -m ) 200-output.txt || exit 1 + +exit 0 Property changes on: trunk/tests/providers/local-coasters/200-cp.check.sh ___________________________________________________________________ Name: svn:executable + * Added: trunk/tests/providers/local-coasters/200-cp.clean.sh =================================================================== --- trunk/tests/providers/local-coasters/200-cp.clean.sh (rev 0) +++ trunk/tests/providers/local-coasters/200-cp.clean.sh 2011-03-22 19:29:59 UTC (rev 4207) @@ -0,0 +1,7 @@ +#!/bin/sh + +set -x + +rm -rv 200-output.txt || exit 1 + +exit 0 Property changes on: trunk/tests/providers/local-coasters/200-cp.clean.sh ___________________________________________________________________ Name: svn:executable + * Added: trunk/tests/providers/local-coasters/200-cp.setup.sh =================================================================== --- trunk/tests/providers/local-coasters/200-cp.setup.sh (rev 0) +++ trunk/tests/providers/local-coasters/200-cp.setup.sh 2011-03-22 19:29:59 UTC (rev 4207) @@ -0,0 +1,10 @@ +#!/bin/sh + +set -x + +{ + uname -a + date +} > 200-input.txt + +exit 0 Property changes on: trunk/tests/providers/local-coasters/200-cp.setup.sh ___________________________________________________________________ Name: svn:executable + * Added: trunk/tests/providers/local-coasters/200-cp.swift =================================================================== --- trunk/tests/providers/local-coasters/200-cp.swift (rev 0) +++ trunk/tests/providers/local-coasters/200-cp.swift 2011-03-22 19:29:59 UTC (rev 4207) @@ -0,0 +1,10 @@ + +type file; + +app (file o) cp(file i) +{ + cp @i @o; +} + +file input<"200-input.txt">; +file output<"200-output.txt"> = cp(input); Added: trunk/tests/providers/local-coasters/README.txt =================================================================== --- trunk/tests/providers/local-coasters/README.txt (rev 0) +++ trunk/tests/providers/local-coasters/README.txt 2011-03-22 19:29:59 UTC (rev 4207) @@ -0,0 +1,5 @@ + +Tests for basic Coasters functionality on local machine + +200 series: Simple jobs, simple settings + Added: trunk/tests/providers/local-coasters/sites.template.xml =================================================================== --- trunk/tests/providers/local-coasters/sites.template.xml (rev 0) +++ trunk/tests/providers/local-coasters/sites.template.xml 2011-03-22 19:29:59 UTC (rev 4207) @@ -0,0 +1,24 @@ + + + + + + _WORK_ + file + + + + + + _HOST_ + 2.55 + 10000 + 4 + 8 + 1000 + 1 + 4 + _WORK_ + + + Added: trunk/tests/providers/local-coasters/tc.template.data =================================================================== --- trunk/tests/providers/local-coasters/tc.template.data (rev 0) +++ trunk/tests/providers/local-coasters/tc.template.data 2011-03-22 19:29:59 UTC (rev 4207) @@ -0,0 +1,19 @@ +#This is the transformation catalog. +# +#It comes pre-configured with a number of simple transformations with +#paths that are likely to work on a linux box. However, on some systems, +#the paths to these executables will be different (for example, sometimes +#some of these programs are found in /usr/bin rather than in /bin) +# +#NOTE WELL: fields in this file must be separated by tabs, not spaces; and +#there must be no trailing whitespace at the end of each line. +# +# sitename transformation path INSTALLED platform profiles +localhost echo /bin/echo INSTALLED INTEL32::LINUX null +localhost cat /bin/cat INSTALLED INTEL32::LINUX null +localhost ls /bin/ls INSTALLED INTEL32::LINUX null +localhost grep /bin/grep INSTALLED INTEL32::LINUX null +localhost sort /bin/sort INSTALLED INTEL32::LINUX null +localhost paste /bin/paste INSTALLED INTEL32::LINUX null + +coasterslocal cp /bin/cp INSTALLED INTEL32::LINUX null Added: trunk/tests/providers/local-coasters/title.txt =================================================================== --- trunk/tests/providers/local-coasters/title.txt (rev 0) +++ trunk/tests/providers/local-coasters/title.txt 2011-03-22 19:29:59 UTC (rev 4207) @@ -0,0 +1 @@ +Local coasters From noreply at svn.ci.uchicago.edu Tue Mar 22 14:52:48 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Tue, 22 Mar 2011 14:52:48 -0500 (CDT) Subject: [Swift-commit] r4208 - trunk/tests/groups Message-ID: <20110322195248.922219CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-22 14:52:48 -0500 (Tue, 22 Mar 2011) New Revision: 4208 Added: trunk/tests/groups/local-coasters.sh Log: Adding Added: trunk/tests/groups/local-coasters.sh =================================================================== --- trunk/tests/groups/local-coasters.sh (rev 0) +++ trunk/tests/groups/local-coasters.sh 2011-03-22 19:52:48 UTC (rev 4208) @@ -0,0 +1,4 @@ + +# GROUPLIST definition to run local coasters tests + +GROUPLIST=( $TESTDIR/providers/local-coasters ) From noreply at svn.ci.uchicago.edu Tue Mar 22 16:29:51 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Tue, 22 Mar 2011 16:29:51 -0500 (CDT) Subject: [Swift-commit] r4209 - trunk/src/org/griphyn/vdl/karajan/functions Message-ID: <20110322212951.1EFCF9CC80@svn.ci.uchicago.edu> Author: skenny Date: 2011-03-22 16:29:50 -0500 (Tue, 22 Mar 2011) New Revision: 4209 Modified: trunk/src/org/griphyn/vdl/karajan/functions/ProcessBulkErrors.java Log: note: full java stack trace can be printed by setting the ProcessBulkErrors logger to DEBUG in log4j Modified: trunk/src/org/griphyn/vdl/karajan/functions/ProcessBulkErrors.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/functions/ProcessBulkErrors.java 2011-03-22 19:52:48 UTC (rev 4208) +++ trunk/src/org/griphyn/vdl/karajan/functions/ProcessBulkErrors.java 2011-03-22 21:29:50 UTC (rev 4209) @@ -123,6 +123,11 @@ } e = e.getCause(); } - return lastmsg; + if (logger.isDebugEnabled()) { + return sb.toString(); + } + else{ + return lastmsg; + } } } From noreply at svn.ci.uchicago.edu Tue Mar 22 16:32:54 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Tue, 22 Mar 2011 16:32:54 -0500 (CDT) Subject: [Swift-commit] r4210 - trunk/etc Message-ID: <20110322213254.BA2529CC80@svn.ci.uchicago.edu> Author: skenny Date: 2011-03-22 16:32:54 -0500 (Tue, 22 Mar 2011) New Revision: 4210 Modified: trunk/etc/log4j.properties Log: reasonable default for ProcessBulkErrors, can be set to DEBUG if user wishes to see entire java stack trace Modified: trunk/etc/log4j.properties =================================================================== --- trunk/etc/log4j.properties 2011-03-22 21:29:50 UTC (rev 4209) +++ trunk/etc/log4j.properties 2011-03-22 21:32:54 UTC (rev 4210) @@ -18,6 +18,8 @@ log4j.logger.org.globus.swift.trace=INFO log4j.logger.org.griphyn.vdl.karajan.Loader=DEBUG + +log4j.logger.org.griphyn.vdl.karajan.functions.ProcessBulkErrors=WARN log4j.logger.org.globus.cog.karajan.workflow.events.WorkerSweeper=WARN log4j.logger.org.globus.cog.karajan.workflow.nodes.FlowNode=WARN log4j.logger.org.globus.cog.karajan.scheduler.WeightedHostScoreScheduler=INFO From noreply at svn.ci.uchicago.edu Tue Mar 22 16:45:30 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Tue, 22 Mar 2011 16:45:30 -0500 (CDT) Subject: [Swift-commit] r4211 - trunk/etc Message-ID: <20110322214530.1776B9CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-22 16:45:29 -0500 (Tue, 22 Mar 2011) New Revision: 4211 Modified: trunk/etc/log4j.properties Log: Categorize log4j.properties contents Should not change behavior Modified: trunk/etc/log4j.properties =================================================================== --- trunk/etc/log4j.properties 2011-03-22 21:32:54 UTC (rev 4210) +++ trunk/etc/log4j.properties 2011-03-22 21:45:29 UTC (rev 4211) @@ -15,19 +15,27 @@ log4j.logger.org.apache.axis.utils=ERROR +# Swift + log4j.logger.org.globus.swift.trace=INFO - log4j.logger.org.griphyn.vdl.karajan.Loader=DEBUG +log4j.logger.org.griphyn.vdl.karajan.functions.ProcessBulkErrors=WARN +log4j.logger.org.griphyn.vdl.engine.Karajan=INFO +log4j.logger.org.griphyn.vdl.karajan.lib=INFO +log4j.logger.org.griphyn.vdl.karajan.VDL2ExecutionContext=DEBUG +log4j.logger.org.griphyn.vdl.karajan.lib.GetFieldValue=DEBUG +log4j.logger.org.griphyn.vdl.toolkit.VDLt2VDLx=DEBUG -log4j.logger.org.griphyn.vdl.karajan.functions.ProcessBulkErrors=WARN +# CoG Karajan + log4j.logger.org.globus.cog.karajan.workflow.events.WorkerSweeper=WARN log4j.logger.org.globus.cog.karajan.workflow.nodes.FlowNode=WARN + +# CoG Scheduling + log4j.logger.org.globus.cog.karajan.scheduler.WeightedHostScoreScheduler=INFO -log4j.logger.org.griphyn.vdl.toolkit.VDLt2VDLx=DEBUG -log4j.logger.org.griphyn.vdl.karajan.VDL2ExecutionContext=DEBUG + +# CoG Providers + log4j.logger.org.globus.cog.abstraction.impl.common.task.TaskImpl=INFO -log4j.logger.org.griphyn.vdl.karajan.lib.GetFieldValue=DEBUG -log4j.logger.org.griphyn.vdl.engine.Karajan=INFO log4j.logger.org.globus.cog.abstraction.coaster.rlog=INFO - -log4j.logger.org.griphyn.vdl.karajan.lib=INFO From noreply at svn.ci.uchicago.edu Tue Mar 22 16:55:56 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Tue, 22 Mar 2011 16:55:56 -0500 (CDT) Subject: [Swift-commit] r4212 - text Message-ID: <20110322215556.DB5A39CCA0@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-22 16:55:56 -0500 (Tue, 22 Mar 2011) New Revision: 4212 Added: text/CCA_2011/ Log: Extended abstract regarding Swift/Coasters on cloud resources From noreply at svn.ci.uchicago.edu Wed Mar 23 03:34:53 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 23 Mar 2011 03:34:53 -0500 (CDT) Subject: [Swift-commit] r4214 - text/parco10submission Message-ID: <20110323083453.428649CC84@svn.ci.uchicago.edu> Author: dsk Date: 2011-03-23 03:34:53 -0500 (Wed, 23 Mar 2011) New Revision: 4214 Modified: text/parco10submission/paper.tex Log: minor changes Modified: text/parco10submission/paper.tex =================================================================== --- text/parco10submission/paper.tex 2011-03-22 21:57:56 UTC (rev 4213) +++ text/parco10submission/paper.tex 2011-03-23 08:34:53 UTC (rev 4214) @@ -661,7 +661,7 @@ uses the built-in \verb|filesys_mapper| to map all files matching the name pattern \verb|*.jpeg| to an array--and then applies a function to each element of that array. -Swift mappers can operate on files stored on the local machine in the directory where the {\tt swift} command is executing, or they can map any files accessible to the local machine, using absolute pathnames. Custom mappers (and some of the built-in mappers) can also map variables to files specified by URIs for access from remote servers via protocols such as GridFTP or HTTP, as described in section \ref{Execution}. Mappers can interact with structure fields and array elements in a simple and useful manner. +Swift mappers can operate on files stored on the local machine in the directory where the {\tt swift} command is executing, or they can map any files accessible to the local machine, using absolute pathnames. Custom mappers (and some of the built-in mappers) can also map variables to files specified by URIs for access from remote servers via protocols such as GridFTP or HTTP, as described in Section~\ref{Execution}. Mappers can interact with structure fields and array elements in a simple and useful manner. New mappers can be added to Swift either as Java classes or as simple, external executable scripts or programs coded in any language. Mappers can operate both as input mappers (which map files to be processed as application inputs) and as output mappers (which specify the names of files to be produced by applications). It is important to understand that mapping a variable is a different operation from setting the value of a variable. Variables of mapped-file type are mapped (conceptually) when the variable becomes ``in scope,'' but they are set when a statement assigns them a value. Mapper invocations (and invocations of external mapper executables) are completely synchronized with the Swift parallel execution model. @@ -1545,13 +1545,13 @@ \section*{Acknowledgments} -This research is supported in part by NSF grants OCI-721939 and +This research was supported in part by NSF grants OCI-721939 and OCI-0944332 and by the U.S. Department of Energy under contract DE-AC02-06CH11357. Computing resources were provided by the Argonne -Leadership Computing Facility, TeraGrid, the Open Science Grid, the UChicago / Argonne Computation Institute -Petascale Active Data Store, and the Amazon Web Services Education allocation program. +Leadership Computing Facility, TeraGrid, the Open Science Grid, the UChicago/Argonne Computation Institute +Petascale Active Data Store (PADS), and the Amazon Web Services Education allocation program. -The glass cavity simulation example in this article is the work of Glen Hocky of the Reichman Lab of the Columbia University Department of Chemistry. We thank Glen for his contributions to the text and code of section 4 and valuable feedback to the Swift project. We gratefully acknowledge the contributions of current and former Swift team members, collaborators, and users: Sarah Kenny, Allan Espinosa, Zhao Zhang, Luiz Gadelha, David Kelly, Milena Nokolic, Jon Monette, Aashish Adhikari, Marc Parisien, Michael Andric, Steven Small, John Dennis, Mats Rynge, Michael Kubal, Tibi Stef-Praun, Xu Du, Zhengxiong Hou, and Xi Li. The initial implementation of Swift was the work of Yong Zhao and Mihael Hategan; Karajan was designed and implemented by Hategan. We thank Tim Armstrong for helpful comments on the text. +The glass cavity simulation example in this article is the work of Glen Hocky of the Reichman Lab of the Columbia University Department of Chemistry. We thank Glen for his contributions to the text and code of Section 4 and valuable feedback to the Swift project. We gratefully acknowledge the contributions of current and former Swift team members, collaborators, and users: Sarah Kenny, Allan Espinosa, Zhao Zhang, Luiz Gadelha, David Kelly, Milena Nokolic, Jon Monette, Aashish Adhikari, Marc Parisien, Michael Andric, Steven Small, John Dennis, Mats Rynge, Michael Kubal, Tibi Stef-Praun, Xu Du, Zhengxiong Hou, and Xi Li. The initial implementation of Swift was the work of Yong Zhao and Mihael Hategan; Karajan was designed and implemented by Hategan. We thank Tim Armstrong for helpful comments on the text. \bibliographystyle{elsarticle-num} \bibliography{paper,Wozniak} % for ACM SIGS style From noreply at svn.ci.uchicago.edu Wed Mar 23 09:58:10 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 23 Mar 2011 09:58:10 -0500 (CDT) Subject: [Swift-commit] r4215 - trunk/tests Message-ID: <20110323145810.24DF7FC41@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-23 09:58:09 -0500 (Wed, 23 Mar 2011) New Revision: 4215 Modified: trunk/tests/nightly.sh Log: Minor improvements to nightly.sh Modified: trunk/tests/nightly.sh =================================================================== --- trunk/tests/nightly.sh 2011-03-23 08:34:53 UTC (rev 4214) +++ trunk/tests/nightly.sh 2011-03-23 14:58:09 UTC (rev 4215) @@ -194,6 +194,13 @@ TESTCOUNT=0 +# PIDs to kill if nightly.sh is killed: +PROCESS_PID= +MONITOR_PID= + +# When true, we should exit: +SHUTDOWN=0 + echo "RUNNING_IN: $RUNDIR" echo "HTML_OUTPUT: $HTML" @@ -233,6 +240,14 @@ return 0 } +shutdown_trap() { + SHUTDOWN=1 + printf "\n\nshutdown_trap... $MONITOR_PID $PROCESS_PID\n\n" + ps -f + kill -INT $MONITOR_PID + kill -INT $PROCESS_PID +} + header() { CURRENT=$SCRIPTDIR/html/current.html sed "s at _HTMLBASE_@$HTMLPATH@" < $CURRENT > $TOPDIR/current.html @@ -575,7 +590,7 @@ "$@" > $OUTPUT 2>&1 & EXEC_PID=$! - trap "process_exec_trap $EXEC_PID" SIGTERM + trap "process_exec_trap $EXEC_PID" SIGTERM SIGINT wait $EXEC_PID EXITCODE=$? @@ -594,9 +609,11 @@ # Rationale: Killing bin/swift does not kill the Swift java process process_exec_trap() { EXEC_PID=$1 - echo "process_exec_trap()" - kill -KILL $EXEC_PID - killall_swift + ps -f + echo "process_exec_trap($EXEC_PID)" + kill -TERM $EXEC_PID + ps -f + # killall_swift } # Kill all subordinate swift/java processes @@ -663,15 +680,15 @@ # Use background so kill/trap is immediate sleep $TIMEOUT > /dev/null 2>&1 & SLEEP_PID=$! - trap "monitor_trap $SLEEP_PID $V > /dev/null 2>&1" SIGTERM + trap "monitor_trap $SLEEP_PID" SIGTERM SIGINT wait $SLEEP_PID [ $? != 0 ] && verbose "monitor($V) cancelled" && return 0 if ps | grep $PID then - echo "monitor($V): killing test process..." + echo "monitor($V): killing test process $PID" touch killed_test - /bin/kill -TERM $PID + /bin/kill -INT $PID KILLCODE=$? if [ $KILLCODE == 0 ]; then echo "monitor($V): killed process_exec (TERM)" @@ -687,9 +704,8 @@ monitor_trap() { SLEEP_PID=$1 - V=$2 - verbose "monitor_trap(): kill sleep" - /bin/kill -KILL $SLEEP_PID + echo "monitor_trap(SLEEP_PID)..." + /bin/kill -INT $SLEEP_PID } # Execute given command line in background with monitor @@ -707,9 +723,11 @@ process_exec "$@" & PROCESS_PID=$! + echo PROCESS_PID: $PROCESS_PID monitor $PROCESS_PID $TIMEOUT $OUTPUT & MONITOR_PID=$! + echo MONITOR_PID: $MONITOR_PID wait $PROCESS_PID EXITCODE=$? @@ -718,8 +736,8 @@ # If the test was killed, monitor() may have work to do rm killed_test > /dev/null 2>&1 && sleep 5 - verbose "Killing monitor..." - /bin/kill -TERM $MONITOR_PID + echo "Killing monitor..." + /bin/kill -INT $MONITOR_PID echo "TOOK: $(( STOP-START ))" @@ -963,6 +981,7 @@ for (( i=0; $i<$ITERS_LOCAL; i=$i+1 )); do swift_test_case $TESTNAME (( $TESTCOUNT >= $NUMBER_OF_TESTS )) && return + (( $SHUTDOWN )) && return done end_row done @@ -981,6 +1000,7 @@ for ((i=0; $i<$ITERS_LOCAL; i=$i+1)); do script_test_case $TESTNAME (( $TESTCOUNT >= $NUMBER_OF_TESTS )) && return + (( $SHUTDOWN )) && return done end_row done @@ -1054,6 +1074,8 @@ EXITONFAILURE=false fi +trap "shutdown_trap" SIGINT SIGTERM + SKIP_COUNTER=0 GROUPCOUNT=1 @@ -1064,6 +1086,7 @@ test_group (( GROUPCOUNT++ )) (( $TESTCOUNT >= $NUMBER_OF_TESTS )) && break + (( $SHUTDOWN )) && break done if [ $GRID_TESTS == "0" ]; then From noreply at svn.ci.uchicago.edu Wed Mar 23 09:58:55 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 23 Mar 2011 09:58:55 -0500 (CDT) Subject: [Swift-commit] r4216 - trunk/bin Message-ID: <20110323145855.44C9DFC41@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-23 09:58:55 -0500 (Wed, 23 Mar 2011) New Revision: 4216 Modified: trunk/bin/swift Log: New SWIFT_ASSERTS variable- only for developers Modified: trunk/bin/swift =================================================================== --- trunk/bin/swift 2011-03-23 14:58:09 UTC (rev 4215) +++ trunk/bin/swift 2011-03-23 14:58:55 UTC (rev 4216) @@ -1,6 +1,7 @@ #! /bin/sh # Referenced environment variables (default values): +# SWIFT_ASSERTS # SWIFT_HEAP_MAX (256M) # SWIFT_USAGE_STATS @@ -29,7 +30,7 @@ } updateOptions() { - + if [ "X$1" != "X" ] ; then OPTIONS="$OPTIONS -D$2=$1" fi @@ -64,8 +65,8 @@ USERID=`id | awk '{printf("%s\n", substr($1, 5, index($1, "(")-5 ) ) }'` -if [ "X$GLOBUS_HOSTNAME" = "X" ] && [ "X$HOSTNAME" != "X" ]; then - GLOBUS_HOSTNAME=$HOSTNAME +if [ "X$GLOBUS_HOSTNAME" = "X" ] && [ "X$HOSTNAME" != "X" ]; then + GLOBUS_HOSTNAME=$HOSTNAME fi updateOptions "$USERID" "UID" @@ -86,13 +87,17 @@ #large delays if /dev/random does not have enough entropy collected updateOptions "file:///dev/urandom" "java.security.egd" -if [ "X$SWIFT_HEAP_MAX" != "X" ]; then +if [ "X$SWIFT_HEAP_MAX" != "X" ]; then HEAPMAX=$SWIFT_HEAP_MAX fi if [ "X$HEAPMAX" != "X" ]; then OPTIONS="-Xmx$HEAPMAX $OPTIONS" fi +if [ "X$SWIFT_ASSERTS" != "X" ]; then + OPTIONS="-ea $OPTIONS" +fi + # Anonymous usage statistics LISTENER="128.135.125.18" PORT="9999" @@ -133,7 +138,7 @@ SCRIPT=$var SCRIPTID=`$MD5SUM $SCRIPT|cut -d ' ' -f1` SCRIPTLENGTH=`wc -l $SCRIPT|cut -d ' ' -f1` - fi + fi done HOSTNAME=`hostname` USERID=`echo $USERID $HOSTNAME $MAC | $MD5SUM |cut -d ' ' -f1` From noreply at svn.ci.uchicago.edu Wed Mar 23 12:45:30 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 23 Mar 2011 12:45:30 -0500 (CDT) Subject: [Swift-commit] r4217 - text Message-ID: <20110323174530.8F2D5FC41@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-23 12:45:30 -0500 (Wed, 23 Mar 2011) New Revision: 4217 Removed: text/CCA_2011/ Log: Wrong repo From noreply at svn.ci.uchicago.edu Wed Mar 23 12:56:06 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 23 Mar 2011 12:56:06 -0500 (CDT) Subject: [Swift-commit] r4218 - usertools/mpich Message-ID: <20110323175606.B4385FC41@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-23 12:56:06 -0500 (Wed, 23 Mar 2011) New Revision: 4218 Modified: usertools/mpich/README.txt Log: Update README Modified: usertools/mpich/README.txt =================================================================== --- usertools/mpich/README.txt 2011-03-23 17:45:30 UTC (rev 4217) +++ usertools/mpich/README.txt 2011-03-23 17:56:06 UTC (rev 4218) @@ -1,6 +1,8 @@ See: http://www.ci.uchicago.edu/wiki/bin/view/SWFT/CoastersMpi +These patches are now all obsolete, everything is in MPICH trunk. + Contains the following patches: mpich2-r7562.diff: works with MPICH2, revision 7562 From noreply at svn.ci.uchicago.edu Wed Mar 23 12:57:18 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 23 Mar 2011 12:57:18 -0500 (CDT) Subject: [Swift-commit] r4219 - usertools/persistent-coasters Message-ID: <20110323175718.18B7FFC41@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-23 12:57:17 -0500 (Wed, 23 Mar 2011) New Revision: 4219 Modified: usertools/persistent-coasters/settings.sh Log: Whitespace Modified: usertools/persistent-coasters/settings.sh =================================================================== --- usertools/persistent-coasters/settings.sh 2011-03-23 17:56:06 UTC (rev 4218) +++ usertools/persistent-coasters/settings.sh 2011-03-23 17:57:17 UTC (rev 4219) @@ -9,12 +9,12 @@ # Worker logging setting passed to worker.pl export WORKER_LOGGING=INFO - + # Worker host names for ssh # WORKER_HOSTS="login1 login2" export WORKER_HOSTS="$( print login{1,2}.mcs.anl.gov )" -# Some settings known to gensites +# Some settings known to gensites NODES=64 QUEUE=prod-devel MAXTIME=$(( 20 )) From noreply at svn.ci.uchicago.edu Wed Mar 23 13:52:27 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 23 Mar 2011 13:52:27 -0500 (CDT) Subject: [Swift-commit] r4220 - usertools/persistent-coasters Message-ID: <20110323185227.A24439CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-23 13:52:27 -0500 (Wed, 23 Mar 2011) New Revision: 4220 Modified: usertools/persistent-coasters/settings.sh usertools/persistent-coasters/setup.sh usertools/persistent-coasters/start-service.zsh usertools/persistent-coasters/workers-cobalt.zsh Log: Extra notes from discussion Modified: usertools/persistent-coasters/settings.sh =================================================================== --- usertools/persistent-coasters/settings.sh 2011-03-23 17:57:17 UTC (rev 4219) +++ usertools/persistent-coasters/settings.sh 2011-03-23 18:52:27 UTC (rev 4220) @@ -1,13 +1,15 @@ # Keep all interesting settings in one place +# User should modify this to fit environment -# Where to place/launch worker.pl on the remote machine +# Where to place/launch worker.pl on the remote machine for sites.xml export WORKER_WORK=/home/${USER}/work # How to launch workers- local or ssh -export WORKER_MODE=ssh +export WORKER_MODE=local +# ssh -# Worker logging setting passed to worker.pl +# Worker logging setting passed to worker.pl for sites.xml export WORKER_LOGGING=INFO # Worker host names for ssh Modified: usertools/persistent-coasters/setup.sh =================================================================== --- usertools/persistent-coasters/setup.sh 2011-03-23 17:57:17 UTC (rev 4219) +++ usertools/persistent-coasters/setup.sh 2011-03-23 18:52:27 UTC (rev 4220) @@ -1,7 +1,6 @@ -# Obtain settings from settings.sh, -# generate sites file -# Should extend to generate tc as well +# Generates sites file +# TODO: extend to generate tc as well source ${TOOLS}/coasters-setup.sh Modified: usertools/persistent-coasters/start-service.zsh =================================================================== --- usertools/persistent-coasters/start-service.zsh 2011-03-23 17:57:17 UTC (rev 4219) +++ usertools/persistent-coasters/start-service.zsh 2011-03-23 18:52:27 UTC (rev 4220) @@ -1,21 +1,23 @@ #!/bin/zsh +# User should have already sourced settings.sh + # If you get "Could not get coasters service" the # service may already be running on SERVICE_PORT # Process management is incomplete here, check for # processes with ps +# Setup paths, get helper functions PC=$( cd $( dirname $0 ) ; /bin/pwd ) TOOLS=${PC} # In the future this might be ${SWIFT_HOME}/tools source ${TOOLS}/helpers.zsh [[ $? != 0 ]] && print "Could not load helpers.zsh!" && exit 1 - [[ ${SWIFT} == "" ]] && SWIFT=$( which swift ) SWIFT_BIN=$( dirname ${SWIFT} ) -COASTER_RESOURCES=${SWIFT_BIN}/../../../../provider-coaster/resources -WORKER=${COASTER_RESOURCES}/worker.pl +WORKER=${SWIFT_BIN}/worker.pl +# This is an arbitrary port number export SERVICE_PORT=10985 LOGDIR=logs @@ -24,12 +26,16 @@ SWIFT_OUT=${LOGDIR}/swift.out +# Get the function start-workers() from somewhere if [[ ${WORKER_MODE} == "local" ]] then source workers-local.zsh elif [[ ${WORKER_MODE} == "ssh" ]] then source workers-ssh.zsh +elif [[ ${WORKER_MODE} == "cobalt" ]] +then + source workers-cobalt.zsh else print "Unknown WORKER_MODE: ${WORKER_MODE}" false Modified: usertools/persistent-coasters/workers-cobalt.zsh =================================================================== --- usertools/persistent-coasters/workers-cobalt.zsh 2011-03-23 17:57:17 UTC (rev 4219) +++ usertools/persistent-coasters/workers-cobalt.zsh 2011-03-23 18:52:27 UTC (rev 4220) @@ -1,6 +1,7 @@ # Source this to get start_workers() for cobalt -# This is not complete +# This is not complete and will not work because you cannot +# pass argument on the cqsub command line start_workers() { @@ -9,6 +10,9 @@ local -Z 5 R=${RANDOM} ID="${TIMESTAMP}.${R}" + # TODO: 1) make worker.sh script that calls worker.pl with args + # 2) cqsub that worker.sh + cqsub -q ${QUEUE} \ -k zeptoos \ -t ${MAXTIME} \ # minutes From noreply at svn.ci.uchicago.edu Wed Mar 23 13:59:58 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 23 Mar 2011 13:59:58 -0500 (CDT) Subject: [Swift-commit] r4221 - usertools/persistent-coasters Message-ID: <20110323185958.BE4639CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-23 13:59:58 -0500 (Wed, 23 Mar 2011) New Revision: 4221 Modified: usertools/persistent-coasters/start-service.zsh Log: Bug fix Modified: usertools/persistent-coasters/start-service.zsh =================================================================== --- usertools/persistent-coasters/start-service.zsh 2011-03-23 18:52:27 UTC (rev 4220) +++ usertools/persistent-coasters/start-service.zsh 2011-03-23 18:59:58 UTC (rev 4221) @@ -113,6 +113,7 @@ exitcode "Could not get coasters service!" export SERVICE_COASTERS +WORK=${WORKER_WORK} source setup.sh exitcode "setup.sh failed!" From noreply at svn.ci.uchicago.edu Wed Mar 23 14:00:14 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 23 Mar 2011 14:00:14 -0500 (CDT) Subject: [Swift-commit] r4222 - usertools/persistent-coasters Message-ID: <20110323190014.8F7E69CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-23 14:00:14 -0500 (Wed, 23 Mar 2011) New Revision: 4222 Modified: usertools/persistent-coasters/README.txt Log: Note testing procedure Modified: usertools/persistent-coasters/README.txt =================================================================== --- usertools/persistent-coasters/README.txt 2011-03-23 18:59:58 UTC (rev 4221) +++ usertools/persistent-coasters/README.txt 2011-03-23 19:00:14 UTC (rev 4222) @@ -15,3 +15,14 @@ Start start-service.zsh - start-service.zsh does the above steps Start your application SwiftScripts with the generated sites.xml + +Testing: + +After the service has started, you will have fresh sites.xml and tc.data +files. You can then run: + +swift -sites.file sites.xml -tc.file tc.data system-info.swift + +which will run system-info.sh on the worker and create system-info.out . + +Read system-info.out to see if it worked. From noreply at svn.ci.uchicago.edu Wed Mar 23 14:02:12 2011 From: noreply at svn.ci.uchicago.edu (noreply at svn.ci.uchicago.edu) Date: Wed, 23 Mar 2011 14:02:12 -0500 (CDT) Subject: [Swift-commit] r4223 - usertools/persistent-coasters Message-ID: <20110323190212.6C03C9CC80@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-23 14:02:12 -0500 (Wed, 23 Mar 2011) New Revision: 4223 Modified: usertools/persistent-coasters/start-service.zsh Log: Drop extraneous pwd Modified: usertools/persistent-coasters/start-service.zsh =================================================================== --- usertools/persistent-coasters/start-service.zsh 2011-03-23 19:00:14 UTC (rev 4222) +++ usertools/persistent-coasters/start-service.zsh 2011-03-23 19:02:12 UTC (rev 4223) @@ -130,7 +130,6 @@ sleep 1 -pwd SERVICE_LOCAL=$( get_service_local ${SWIFT_OUT} ) exitcode "get_service_local failed!" export SERVICE_LOCAL From lgadelha at ci.uchicago.edu Sun Mar 27 16:54:23 2011 From: lgadelha at ci.uchicago.edu (lgadelha at ci.uchicago.edu) Date: Sun, 27 Mar 2011 16:54:23 -0500 (CDT) Subject: [Swift-commit] r4224 - in provenancedb: . apps/oops etc Message-ID: <20110327215423.E42D99CC94@svn.ci.uchicago.edu> Author: lgadelha Date: 2011-03-27 16:54:23 -0500 (Sun, 27 Mar 2011) New Revision: 4224 Removed: provenancedb/etc/provenance.config.soju Modified: provenancedb/apps/oops/oops_extractor.sh provenancedb/info-to-extrainfo provenancedb/pql_functions.sql provenancedb/prov-init.sql provenancedb/prov-to-sql.sh provenancedb/swift-prov-import-all-logs Log: Update schema to include runtime_info relation. Minor updates. Modified: provenancedb/apps/oops/oops_extractor.sh =================================================================== --- provenancedb/apps/oops/oops_extractor.sh 2011-03-23 19:02:12 UTC (rev 4223) +++ provenancedb/apps/oops/oops_extractor.sh 2011-03-27 21:54:23 UTC (rev 4224) @@ -82,7 +82,7 @@ if [ -n "$FILENAME" ]; then SEQLENGTH=$(awk '{if (NR==2) print $1}' $FILENAME | wc -c) - echo "insert into annot_ds_txt values ('$DATASET_ID', 'fasta_sequence_length', $SEQLENGTH);" | $SQLCMD + echo "insert into annot_ds_num values ('$DATASET_ID', 'fasta_sequence_length', $SEQLENGTH);" | $SQLCMD fi # extracts scientific parameters given as output by the workflow in *.log. # relevant lines: Deleted: provenancedb/etc/provenance.config.soju =================================================================== --- provenancedb/etc/provenance.config.soju 2011-03-23 19:02:12 UTC (rev 4223) +++ provenancedb/etc/provenance.config.soju 2011-03-27 21:54:23 UTC (rev 4224) @@ -1,10 +0,0 @@ -# file to source that sets variables for the various paths that are -# presently hardcoded - -# this is the path to log repo on benc's laptop -export LOGREPO=/Users/benc/work/everylog/ -export IDIR=/Users/benc/work/everylog/ - -export SQLCMD="sqlite3 provdb " -# export SQLCMD="psql -p 5435 -d provdb " - Modified: provenancedb/info-to-extrainfo =================================================================== --- provenancedb/info-to-extrainfo 2011-03-23 19:02:12 UTC (rev 4223) +++ provenancedb/info-to-extrainfo 2011-03-27 21:54:23 UTC (rev 4224) @@ -3,17 +3,17 @@ # must have $EXECUTE2PREFIX appropriately by containing script while read t d id rest; do - echo processing wrapper file for job $id >&2 - record=$(find ${IDIR} -name ${id}-info) - - globalid=$EXECUTE2PREFIX$id - - if [ "X$record" != "X" ] && [ -f $record ] ; then - - grep '^EXTRAINFO=' $record | sed "s/^EXTRAINFO=\(.*\)$/$globalid \1/" - - else - echo no wrapper log for $id >&2 - fi - + echo processing wrapper file for job $id >&2 + record=$(find ${IDIR} -name ${id}-info) + + globalid=$EXECUTE2PREFIX$id + + if [ "X$record" != "X" ] && [ -f $record ] ; then + + grep '^EXTRAINFO=' $record | sed "s/^EXTRAINFO=\(.*\)$/$globalid \1/" + + else + echo no wrapper log for $id >&2 + fi + done < execute2.event Modified: provenancedb/pql_functions.sql =================================================================== --- provenancedb/pql_functions.sql 2011-03-23 19:02:12 UTC (rev 4223) +++ provenancedb/pql_functions.sql 2011-03-27 21:54:23 UTC (rev 4224) @@ -3,79 +3,134 @@ -- SQL Functions --- list_runs_* lists workflows recorded in the database by id or log_filename -DROP TYPE list_runs_type CASCADE; +-- lists variations in a parameter's value across workflows, for parameters that are in-memory variables -CREATE TYPE list_runs_type -AS (id VARCHAR, - log_filename VARCHAR, - swift_version VARCHAR, - start_time TIMESTAMP WITH TIME ZONE, - duration NUMERIC, - final_state VARCHAR); -CREATE OR REPLACE FUNCTION list_runs() -RETURNS SETOF list_runs_type AS $$ - SELECT id, log_filename, swift_version, TO_TIMESTAMP(start_time), - duration, import_status AS final_state - FROM workflow; +CREATE OR REPLACE FUNCTION compare_run_by_parameter(param_name VARCHAR) +RETURNS TABLE ( + run_id VARCHAR, + param_name VARCHAR, + value VARCHAR +) +AS $$ + SELECT process.workflow_id, ds_usage.param_name, variable.value + FROM variable, ds_usage, process + WHERE variable.id=ds_usage.dataset_id AND ds_usage.process_id=process.id AND + ds_usage.param_name=$1 + GROUP BY process.workflow_id, ds_usage.param_name, variable.value; $$ LANGUAGE SQL; +CREATE OR REPLACE FUNCTION compare_run_by_parameter(param_name1 VARCHAR, param_name2 VARCHAR) +RETURNS TABLE ( + workflow_id VARCHAR, + param_name1 VARCHAR, + value1 VARCHAR, + param_name2 VARCHAR, + value2 VARCHAR +) +AS $$ + SELECT * + FROM compare_run_by_parameter($1) as t + INNER JOIN + compare_run_by_parameter($2) as s + USING (workflow_id); +$$ LANGUAGE SQL; --- lists variations in a parameter's value across workflows -DROP TYPE param_across_wf_type CASCADE; -CREATE TYPE param_across_wf_type AS (workflow VARCHAR, parameter VARCHAR, value VARCHAR); - -CREATE OR REPLACE FUNCTION param_across_wf(param_name VARCHAR) -RETURNS SETOF param_across_wf_type AS $$ - SELECT workflow.log_filename,ds_usage.param_name,variable.value - FROM variable,ds_usage,process,workflow - WHERE variable.id=ds_usage.dataset_id AND ds_usage.process_id=process.id AND - process.workflow_id=workflow.id AND ds_usage.param_name=$1 - GROUP BY workflow.log_filename,ds_usage.param_name,variable.value; +CREATE OR REPLACE FUNCTION compare_run_by_parameter(param_name1 VARCHAR, param_name2 VARCHAR, param_name3 VARCHAR) +RETURNS TABLE ( + workflow_id VARCHAR, + param_name1 VARCHAR, + value1 VARCHAR, + param_name2 VARCHAR, + value2 VARCHAR, + param_name3 VARCHAR, + value3 VARCHAR +) +AS $$ + SELECT * + FROM compare_run_by_parameter($1, $2) as t + INNER JOIN + compare_run_by_parameter($3) as s + USING (workflow_id); $$ LANGUAGE SQL; -drop type annot_across_wf_type cascade; -create type annot_across_wf_type as (workflow varchar, process varchar, name varchar, value numeric); -create or replace function annot_across_wf(name varchar) -returns setof annot_across_wf_type as $$ - select process.workflow_id,process.id,annot_ds_num.name,annot_ds_num.value - from process,ds_usage,ds_containment,annot_ds_num - where process.id=ds_usage.process_id and ds_usage.dataset_id=ds_containment.out_id and - ds_containment.in_id=annot_ds_num.id and annot_ds_num.name=$1 - order by process.workflow_id,process.id; -$$ language sql; +CREATE OR REPLACE FUNCTION compare_run_by_annot_num(name VARCHAR) +RETURNS TABLE ( + workflow_id VARCHAR, + name VARCHAR, + value NUMERIC +) +AS $$ + SELECT process.workflow_id, annot_ds_num.name, annot_ds_num.value + FROM annot_ds_num,ds_usage,ds_containment,process + WHERE annot_ds_num.id=ds_containment.in_id AND ds_containment.out_id=ds_usage.dataset_id AND + ds_usage.process_id=process.id AND annot_ds_num.name=$1 + UNION + SELECT process.workflow_id, annot_ds_num.name, annot_ds_num.value + FROM process, ds_usage, annot_ds_num + WHERE process.id=ds_usage.process_id and ds_usage.dataset_id=annot_ds_num.id and + annot_ds_num.name=$1 + UNION + SELECT process.workflow_id, annot_p_num.name, annot_p_num.value + FROM process, annot_p_num + WHERE process.id=annot_p_num.id and annot_p_num.name=$1 + UNION + SELECT workflow.id as workflow_id, annot_wf_num.name, annot_wf_num.value + FROM workflow, annot_wf_num + WHERE workflow.id=annot_wf_num.id and annot_wf_num.name=$1 +$$ LANGUAGE SQL; +CREATE OR REPLACE FUNCTION compare_run_by_annot_txt(name VARCHAR) +RETURNS TABLE ( + workflow_id VARCHAR, + name VARCHAR, + value VARCHAR) +AS $$ + SELECT process.workflow_id, annot_ds_txt.name, annot_ds_txt.value + FROM process, ds_usage, annot_ds_txt + WHERE process.id=ds_usage.process_id and ds_usage.dataset_id=annot_ds_txt.id and + annot_ds_txt.name=$1 + UNION + SELECT process.workflow_id, annot_p_txt.name, annot_p_txt.value + FROM process, annot_p_txt + WHERE process.id=annot_p_txt.id and annot_p_txt.name=$1 + UNION + SELECT workflow.id as workflow_id, annot_wf_txt.name, annot_wf_txt.value + FROM workflow, annot_wf_txt + WHERE workflow.id=annot_wf_txt.id and annot_wf_txt.name=$1 +$$ LANGUAGE SQL; +CREATE OR REPLACE FUNCTION compare_run_by_annot_bool(name VARCHAR) +RETURNS TABLE ( + workflow_id VARCHAR, + name VARCHAR, + value BOOLEAN +) +AS $$ + SELECT process.workflow_id, annot_ds_bool.name, annot_ds_bool.value + FROM process, ds_usage, annot_ds_bool + WHERE process.id=ds_usage.process_id and ds_usage.dataset_id=annot_ds_bool.id and + annot_ds_bool.name=$1 + UNION + SELECT process.workflow_id, annot_p_bool.name, annot_p_bool.value + FROM process, annot_p_bool + WHERE process.id=annot_p_bool.id and annot_p_bool.name=$1 + UNION + SELECT workflow.id as workflow_id, annot_wf_bool.name, annot_wf_bool.value + FROM workflow, annot_wf_bool + WHERE workflow.id=annot_wf_bool.id and annot_wf_bool.name=$1 +$$ LANGUAGE SQL; --- lists variations of the values of a set of parameters - -DROP TYPE param_across_wf_class_type CASCADE; -CREATE TYPE param_across_wf_class_type AS (workflow VARCHAR, parameter VARCHAR, value VARCHAR); - -CREATE OR REPLACE FUNCTION param_across_wf_class(param_name VARCHAR, wf_class VARACHAR) -RETURNS SETOF param_across_wf_type AS $$ - -$$ LANGUAGE plpgsql; - -- correlate a parameter with workflow runtime statistics -DROP TYPE correlate_param_runtime_type CASCADE; -CREATE TYPE correlate_param_runtime_type -AS (workflow VARCHAR, +CREATE OR REPLACE FUNCTION correlate_param_runtime(param_name VARCHAR) +RETURNS TABLE ( + workflow VARCHAR, workflow_starttime TIMESTAMP WITH TIME ZONE, workflow_duration NUMERIC, parameter VARCHAR, - parameter_value VARCHAR); - -CREATE OR REPLACE FUNCTION correlate_param_runtime(param_name VARCHAR) -RETURNS SETOF correlate_param_runtime_type AS $$ - SELECT A.workflow,to_timestamp(B.start_time),B.duration,A.parameter,A.value - FROM param_across_wf($1) AS A, workflow AS B - WHERE A.workflow=B.log_filename; -$$ LANGUAGE SQL; - -CREATE OR REPLACE FUNCTION correlate_param_runtime(param_name VARCHAR) -RETURNS SETOF correlate_param_runtime_type AS $$ + parameter_value VARCHAR +) +AS $$ SELECT workflow.id,to_timestamp(workflow.start_time),workflow.duration,ds_usage.param_name,variable.value FROM variable,ds_usage,process,workflow WHERE variable.id=ds_usage.dataset_id AND ds_usage.process_id=process.id AND @@ -90,73 +145,13 @@ WHERE process.workflow_id=$1; $$ LANGUAGE SQL; --- lists distinct processes in a - --- OOPS-specific functions - - - -CREATE OR REPLACE FUNCTION list_oops_runs() RETURNS SETOF VARCHAR AS $$ - SELECT DISTINCT(value) FROM annot_wf_txt WHERE annot_wf_txt.name=('oops_run_id'); -$$ LANGUAGE SQL; - -DROP TYPE oops_param_across_wf_type CASCADE; -CREATE TYPE oops_param_across_wf_type AS (oops_run_id VARCHAR, param_name VARCHAR, variable VARCHAR); -CREATE OR REPLACE FUNCTION oops_param_across_wf(VARCHAR) RETURNS SETOF oops_param_across_wf_type AS $$ - SELECT annot_wf_txt.value,ds_usage.param_name,variable.value - FROM variable,ds_usage,process,annot_wf_txt - WHERE variable.id=ds_usage.dataset_id AND ds_usage.process_id=process.id AND process.workflow_id=annot_wf_txt.id AND - ds_usage.param_name=$1 AND annot_wf_txt.name='oops_run_id' - GROUP BY annot_wf_txt.name,annot_wf_txt.value,ds_usage.param_name,variable.value; -$$ LANGUAGE SQL; - -CREATE OR REPLACE FUNCTION list_oops_runs() RETURNS SETOF VARCHAR AS $$ - SELECT DISTINCT(value) FROM annot_wf_txt WHERE annot_wf_txt.name=('oops_run_id'); -$$ LANGUAGE SQL; - -DROP TYPE oops_summary CASCADE; -CREATE TYPE oops_summary AS (oops_run_id VARCHAR, start_time TIMESTAMP WITH TIME ZONE, duration_sec NUMERIC, swift_version VARCHAR); -CREATE OR REPLACE FUNCTION oops_run_summary(varchar) RETURNS SETOF oops_summary AS $$ - SELECT annot_wf_txt.value as oops_run_id, to_timestamp(workflow.start_time) as start_time, - workflow.duration as duration_sec,workflow.swift_version as swift_version - FROM annot_wf_txt,workflow - WHERE annot_wf_txt.id=workflow.id and annot_wf_txt.name='oops_run_id' and annot_wf_txt.value=$1; -$$ LANGUAGE SQL; - -CREATE OR REPLACE FUNCTION oops_process_names(varchar) RETURNS SETOF varchar AS $$ - SELECT DISTINCT(process.name) - FROM process, annot_wf_txt - WHERE process.workflow_id=annot_wf_txt.id AND - annot_wf_txt.name='oops_run_id' AND annot_wf_txt.value=$1; -$$ LANGUAGE SQL; - -DROP TYPE oops_wf_param_summary CASCADE; -CREATE TYPE oops_wf_param_summary AS (oops_run_id varchar, param_name varchar, value varchar); -CREATE OR REPLACE FUNCTION oops_variable_summary() RETURNS SETOF oops_wf_param_summary AS $$ - SELECT annot_wf_txt.value,ds_usage.param_name,variable.value - FROM variable,ds_usage,process,annot_wf_txt - WHERE variable.id=ds_usage.dataset_id and ds_usage.process_id=process.id and process.workflow_id=annot_wf_txt.id; -$$ LANGUAGE SQL; - - -DROP TYPE oops_param_summary CASCADE; -CREATE TYPE oops_param_summary AS (param_name varchar, value varchar); -CREATE OR REPLACE FUNCTION oops_science_summary(varchar) RETURNS SETOF oops_param_summary AS $$ - SELECT ds_usage.param_name,variable.value - FROM variable,ds_usage,process,annot_wf_txt - WHERE variable.id=ds_usage.dataset_id AND ds_usage.process_id=process.id AND process.workflow_id=annot_wf_txt.id AND - (ds_usage.param_name='proteinId' OR ds_usage.param_name='targetId' OR ds_usage.param_name='seqFile' OR - ds_usage.param_name='prot' OR ds_usage.param_name='prepTarFile' OR ds_usage.param_name='nSim') AND - annot_wf_txt.name='oops_run_id' AND annot_wf_txt.value=$1; -$$ LANGUAGE SQL; - -- recursive query to find ancestor entities in a provenance graph CREATE OR REPLACE FUNCTION ancestors(varchar) RETURNS SETOF varchar AS $$ WITH RECURSIVE anc(ancestor,descendant) AS ( SELECT parent AS ancestor, child AS descendant FROM parent_of WHERE child=$1 - UNION + UNION SELECT parent_of.parent AS ancestor, anc.descendant AS descendant FROM anc,parent_of WHERE anc.ancestor=parent_of.child @@ -164,5 +159,77 @@ SELECT ancestor FROM anc $$ LANGUAGE SQL; +-- compare(, - +CREATE OR REPLACE FUNCTION compare_run(VARIADIC args VARCHAR[]) +RETURNS SETOF RECORD AS $$ +DECLARE + i INTEGER; + q VARCHAR; + selectq VARCHAR; + fromq VARCHAR; + property VARCHAR; + property_type VARCHAR; + function_name VARCHAR; +BEGIN + selectq := 'SELECT *'; + FOR i IN array_lower(args, 1)..array_upper(args, 1) LOOP + property_type := split_part(args[i], '=', 1); + property := split_part(args[i], '=', 2); + CASE property_type + WHEN 'param_name' THEN + function_name := 'compare_run_by_parameter'; + WHEN 'annot_num' THEN + function_name := 'compare_run_by_annot_num'; + WHEN 'annot_txt' THEN + function_name := 'compare_run_by_annot_txt'; + WHEN 'annot_bool' THEN + function_name := 'compare_run_by_annot_bool'; + END CASE; + IF i = 1 THEN + fromq := function_name || '(''' || property || ''') as t' || i; + ELSE + fromq := fromq || ' INNER JOIN ' || function_name || '(''' || property || ''') as t' || i || ' USING (workflow_id)'; + END IF; + END LOOP; + q := selectq || ' FROM ' || fromq; + RETURN QUERY EXECUTE q; +END; +$$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION compare_run_print(VARIADIC args VARCHAR[]) +RETURNS VARCHAR AS $$ +DECLARE + i INTEGER; + q VARCHAR; + selectq VARCHAR; + fromq VARCHAR; + property VARCHAR; + property_type VARCHAR; + function_name VARCHAR; +BEGIN + selectq := 'SELECT *'; + FOR i IN array_lower(args, 1)..array_upper(args, 1) LOOP + property_type := split_part(args[i], '=', 1); + property := split_part(args[i], '=', 2); + CASE property_type + WHEN 'param_name' THEN + function_name := 'compare_run_by_parameter'; + WHEN 'annot_num' THEN + function_name := 'compare_run_by_annot_num'; + WHEN 'annot_txt' THEN + function_name := 'compare_run_by_annot_txt'; + WHEN 'annot_bool' THEN + function_name := 'compare_run_by_annot_bool'; + END CASE; + IF i = 1 THEN + fromq := function_name || '(''' || property || ''') as t' || i; + ELSE + fromq := fromq || ' INNER JOIN ' || function_name || '(''' || property || ''') as t' || i || ' USING (workflow_id)'; + END IF; + END LOOP; + q := selectq || ' FROM ' || fromq; + RETURN q; +END; +$$ LANGUAGE plpgsql; Modified: provenancedb/prov-init.sql =================================================================== --- provenancedb/prov-init.sql 2011-03-23 19:02:12 UTC (rev 4223) +++ provenancedb/prov-init.sql 2011-03-27 21:54:23 UTC (rev 4224) @@ -1,35 +1,30 @@ -- this is the schema definition used for the main relational provenance -- implementation (in both sqlite3 and postgres) +drop table run cascade; +drop table process cascade; +drop table app_invocation cascade; +drop table app_execution cascade; +drop table runtime_info cascade; drop table dataset cascade; drop table file cascade; -drop table variable cascade; -drop table ds_containment cascade; -drop table process cascade; -drop table execute cascade; -drop table execute2 cascade; -drop table workflow cascade; -drop table ds_usage cascade; -drop table annot_ds_num cascade; -drop table annot_ds_txt cascade; -drop table annot_ds_bool cascade; -drop table annot_p_num cascade; -drop table annot_p_txt cascade; -drop table annot_p_bool cascade; -drop table annot_wf_num cascade; -drop table annot_wf_txt cascade; -drop table annot_wf_bool cascade; --- drop table extrainfo cascade; -drop table createarray cascade; -drop table createarray_member cascade; -drop table array_range cascade; +drop table in_memory cascade; +drop table dataset_containment cascade; +drop table dataset_consumption cascade; +drop table dataset_production cascade; +drop table annot_dataset_numeric cascade; +drop table annot_dataset_text cascade; +drop table annot_process_numeric cascade; +drop table annot_process_text cascade; +drop table annot_run_numeric cascade; +drop table annot_run_text cascade; --- workflow stores some information about each workflow log that has +-- run stores information about each script run log that has -- been seen by the importer: the log filename, swift version and import -- status. --- Might be interesting to store xml translation of the swiftscript code --- here for prospective provenance/versioning -create table workflow +-- Might be interesting to store xml translation of the Swift script +-- here for prospective provenance and versioning. +create table run (id varchar(256) primary key, log_filename varchar(2048), swift_version varchar(16), @@ -38,68 +33,24 @@ duration numeric ); --- workflow_run stores the start time and duration for each workflow --- that has been successfully imported. ---CREATE TABLE wf_run --- (id varchar(256) PRIMARY KEY REFERENCES workflow (id) ON DELETE CASCADE, --- start_time numeric, --- duration numeric --- ); - --- dataset stores all dataset identifiers. -create table dataset - (id varchar(256) primary key - ); - --- file stores the filename mapped to each dataset. -create table file - ( id varchar(256) primary key references dataset (id) on delete cascade, - filename varchar(2048) - ); - --- dataset_values stores the value for each dataset which is known to have --- a value (which is all assigned primitive types). No attempt is made here --- to expose that value as an SQL type other than a string, and so (for --- example) SQL numerical operations should not be expected to work, even --- though the user knows that a particular dataset stores a numeric value. -create table variable - ( id varchar(256) primary key references dataset (id) on delete cascade, - value varchar(2048) - ); - --- dataset_containment stores the containment hierarchy between --- container datasets (arrays and structs) and their contents. --- out_id contains in_id --- TODO this should perhaps be replaced with a more OPM-like model of --- constructors and accessors, rather than, or in addition to, --- a containment hierarchy. The relationship (such as array index or --- structure member name) should also be stored in this table. -create table ds_containment - ( out_id varchar(256) references dataset (id) on delete cascade, - in_id varchar(256) references dataset (id) on delete cascade, - primary key (out_id,in_id) - ); - -- process gives information about each process (in the OPM sense) -- it is augmented by information in other tables -- specifies the type of process. for any type, it -- must be the case that the specific type table -- has an entry for this process. --- Having this type here seems poor normalisation, though? -- process types: internal, rootthread, execute, function, compound, scope, operator --- maybe create a table for each type? create table process (id varchar(256) primary key, type varchar(16), name varchar(256), -- in the case of an execute this refers to the transformation name in tc.data - workflow_id varchar(256) references workflow (id) on delete cascade -- normalize: workflow_id of sub-procedure determined + run_id varchar(256) references run (id) on delete cascade -- normalize: workflow_id of sub-procedure determined -- by compound procedure ); -- this gives information about each execute. -- each execute is identified by a unique URI. other information from -- swift logs is also stored here. an execute is an OPM process. -create table execute +create table app_invocation (id varchar(256) primary key references process (id) on delete cascade, procedure_name varchar(256), -- name of the app procedure that invokes the transformation start_time numeric, @@ -111,156 +62,159 @@ -- this gives information about each execute2, which is an attempt to -- perform an execution. the execute2 id is tied to per-execution-attempt -- information such as wrapper logs -create table execute2 +create table app_execution (id varchar(256) primary key, - execute_id varchar(256) references execute (id) on delete cascade, + app_invocation_id varchar(256) references app_invocation (id) on delete cascade, start_time numeric, duration numeric, final_state varchar(16), site varchar(256) ); +-- app execution runtime info extracted from the /proc filesystem (assumes the app executed +-- in a Linux host) +create table runtime_info + ( app_execution_id varchar(256) references app_execution (id) on delete cascade, + event_timestamp numeric, + cpu_usage numeric, + max_phys_mem numeric, + max_virtual_mem numeric, + io_read_bytes numeric, + io_write_bytes numeric, + primary key (app_execution_id, event_timestamp) + ); + +-- ds stores all dataset identifiers. +create table dataset + (id varchar(256) primary key + ); + +-- file stores the filename mapped to each dataset. +create table file + ( id varchar(256) primary key references dataset (id) on delete cascade, + filename varchar(2048) + ); + +-- dataset_values stores the value for each dataset which is known to have +-- a value (which is all assigned primitive types). No attempt is made here +-- to expose that value as an SQL type other than a string, and so (for +-- example) SQL numerical operations should not be expected to work, even +-- though the user knows that a particular dataset stores a numeric value. +create table in_memory + ( id varchar(256) primary key references dataset (id) on delete cascade, + value varchar(2048) + ); + +-- dataset_containment stores the containment hierarchy between +-- container datasets (arrays and structs) and their contents. +-- out_id contains in_id +-- TODO this should perhaps be replaced with a more OPM-like model of +-- constructors and accessors, rather than, or in addition to, +-- a containment hierarchy. The relationship (such as array index or +-- structure member name) should also be stored in this table. +create table dataset_containment + ( out_id varchar(256) references dataset (id) on delete cascade, + in_id varchar(256) references dataset (id) on delete cascade, + primary key (out_id,in_id) + ); + + -- dataset_usage records usage relationships between processes and datasets; -- in SwiftScript terms, the input and output parameters for each -- application procedure invocation; in OPM terms, the artificts which are -- input to and output from each process that is a Swift execution -create table ds_usage +create table dataset_consumption (process_id varchar(256) references process(id) on delete cascade, - direction char(1), -- I or O for input or output dataset_id varchar(256) references dataset(id) on delete cascade, param_name varchar(256), -- the name of the parameter in this execute that -- this dataset was bound to. sometimes this must -- be contrived (for example, in positional varargs) - primary key (process_id,direction,dataset_id,param_name) + primary key (process_id,dataset_id,param_name) ); +create table dataset_production + (process_id varchar(256) references process(id) on delete cascade, + dataset_id varchar(256) references dataset(id) on delete cascade, + param_name varchar(256), -- the name of the parameter in this execute that + -- this dataset was bound to. sometimes this must + -- be contrived (for example, in positional varargs) + primary key (process_id,dataset_id,param_name) + ); + + -- annotations -create table annot_ds_num - ( id varchar(256) references dataset (id) on delete cascade, +create table annot_dataset_numeric + ( dataset_id varchar(256) references dataset (id) on delete cascade, name varchar(256), value numeric, - primary key (id, name) + primary key (dataset_id, name) ); -create table annot_ds_txt - ( id varchar(256) references dataset (id) on delete cascade, +create table annot_dataset_text + ( dataset_id varchar(256) references dataset (id) on delete cascade, name varchar(256), value varchar(2048), - primary key (id, name) + primary key (dataset_id, name) ); -create table annot_ds_bool - ( id varchar(256) references dataset (id) on delete cascade, +create table annot_process_numeric + ( process_id varchar(256) references process (id) on delete cascade, name varchar(256), - value boolean, - primary key (id, name) - ); - -create table annot_p_num - ( id varchar(256) references process (id) on delete cascade, - name varchar(256), value numeric, - primary key (id, name) + primary key (process_id, name) ); -create table annot_p_txt - ( id varchar(256) references process (id) on delete cascade, +create table annot_process_text + ( process_id varchar(256) references process (id) on delete cascade, name varchar(256), value varchar(2048), - primary key (id, name) + primary key (process_id, name) ); -create table annot_p_bool - ( id varchar(256) references process (id) on delete cascade, +create table annot_run_numeric + ( run_id varchar(256) references run (id) on delete cascade, name varchar(256), - value boolean, - primary key (id, name) - ); - -create table annot_wf_num - ( id varchar(256) references workflow (id) on delete cascade, - name varchar(256), value numeric, - primary key (id, name) + primary key (run_id, name) ); -create table annot_wf_txt - ( id varchar(256) references workflow (id) on delete cascade, +create table annot_run_text + ( run_id varchar(256) references run (id) on delete cascade, name varchar(256), value varchar(2048), - primary key (id, name) + primary key (run_id, name) ); -create table annot_wf_bool - ( id varchar(256) references workflow (id) on delete cascade, - name varchar(2048), - value boolean, - primary key (id, name) - ); - -create view parent_of as - select process_id as parent,dataset_id as child from ds_usage where direction='O' +create view provenance_graph as + select process_id as parent,dataset_id as child from dataset_production union - select dataset_id as parent,process_id as child from ds_usage where direction='I' + select dataset_id as parent,process_id as child from dataset_consumption union - select out_id as parent,in_id as child from ds_containment; + select out_id as parent,in_id as child from dataset_containment; --- extrainfo stores lines generated by the SWIFT_EXTRA_INFO feature --- extrainfo will be processes into annotation tables --- CREATE TABLE extrainfo --- ( id varchar(256) PRIMARY KEY REFERENCES execute (id) ON DELETE CASCADE, --- extrainfo varchar(2048) --- ); --- The above dataset_* tables are the original containment representation --- of datasets. --- Now here are some tables to represent complex datasets differently, in --- terms of accessors and constructors. --- It is unclear which is the better representation. +CREATE VIEW run_date AS + SELECT id, log_filename, swift_version, import_status, + to_timestamp(start_time) as start_time, duration + FROM run; -create table createarray - ( id varchar(256) primary key - ); +CREATE VIEW annot_text AS + SELECT * + FROM annot_run_text + UNION + SELECT * + FROM annot_dataset_text + UNION + SELECT * + FROM annot_process_text; -create table createarray_member - ( array_id varchar(256) references createarray (id) on delete cascade, - ix varchar(256), - member_id varchar(256), - primary key (array_id, ix) - ); +CREATE VIEW annot_numeric AS + SELECT * + FROM annot_run_numeric + UNION + SELECT * + FROM annot_dataset_numeric + UNION + SELECT * + FROM annot_process_numeric; --- TODO step -create table array_range - ( array_id varchar(256) references createarray (id) on delete cascade, - from_id varchar(256), - to_id varchar(256), - step_id varchar(256), -- nullable, if step is unspecified - primary key (array_id,from_id,to_id,step_id) - ); - --- this GRANT does not work for sqlite; you'll get a syntax error but --- ignore it, as it is not needed in sqlite -grant all on - dataset, - file, - variable, - ds_containment, - process, - execute, - execute2, - workflow, - ds_usage, - annot_ds_num, - annot_ds_txt, - annot_ds_bool, - annot_p_num, - annot_p_txt, - annot_p_bool, - annot_wf_num, - annot_wf_txt, - annot_wf_bool, --- extrainfo, - createarray, - createarray_member, - array_range -to public, operators; Modified: provenancedb/prov-to-sql.sh =================================================================== --- provenancedb/prov-to-sql.sh 2011-03-23 19:02:12 UTC (rev 4223) +++ provenancedb/prov-to-sql.sh 2011-03-27 21:54:23 UTC (rev 4224) @@ -8,22 +8,23 @@ export WF="${RUNID}" echo Generating SQL for $RUNID +rm -f tmp-u.sql tmp-ds.sql tmp-p.sql tmp-e.sql tmp-e2.sql tmp-dsu.sql tmp-dsc.sql tmp-f.sql tmp-v.sql tmp-import.sql import.sql extrainfo.sql fields.txt # this gives a distinction between the root process for a workflow and the # workflow itself. perhaps better to model the workflow as a process -echo "INSERT INTO process (id, type, name, workflow_id) VALUES ('${WFID}0', 'rootthread', '$RUNID', '$WF');" > tmp-p.sql +echo "INSERT INTO process (id, type, name, run_id) VALUES ('${WFID}0', 'rootthread', '$RUNID', '$WF');" > tmp-p.sql while read time duration thread localthread endstate tr_name scratch; do - echo "INSERT INTO process (id, type, name, workflow_id) VALUES ('$thread', 'execute', '$tr_name', '$WF');" >> tmp-p.sql - echo "INSERT INTO execute (id, start_time, duration, final_state, scratch) VALUES ('$thread', $time, $duration, '$endstate', '$scratch');" > tmp-e.sql + echo "INSERT INTO process (id, type, name, run_id) VALUES ('$thread', 'execute', '$tr_name', '$WF');" >> tmp-p.sql + echo "INSERT INTO app_invocation (id, start_time, duration, final_state, scratch) VALUES ('$thread', $time, $duration, '$endstate', '$scratch');" >> tmp-e.sql done < execute.global.event while read start_time duration globalid id endstate thread site scratch; do # cut off the last component of the thread, so that we end up at the # parent thread id which should correspond with the execute-level ID inv_id="$WFID$(echo $thread | sed 's/-[^-]*$//')" - echo "INSERT INTO execute2 (id, execute_id, start_time, duration, final_state, site) VALUES ('$globalid', '$inv_id', $start_time, $duration, '$endstate', '$site');" > tmp-e2.sql + echo "INSERT INTO app_execution (id, app_invocation_id, start_time, duration, final_state, site) VALUES ('$globalid', '$inv_id', $start_time, $duration, '$endstate', '$site');" >> tmp-e2.sql done < execute2.global.event while read col1 col2 col3 col4 col5 thread name lhs rhs result; do @@ -41,13 +42,13 @@ result=$(echo $result | sed -e 's/tag:benc at ci.uchicago.edu,2008:swift://g') fi - echo "INSERT INTO dataset (id) VALUES ('$lhs');" > tmp-ds.sql + echo "INSERT INTO dataset (id) VALUES ('$lhs');" >> tmp-ds.sql echo "INSERT INTO dataset (id) VALUES ('$rhs');" >> tmp-ds.sql echo "INSERT INTO dataset (id) VALUES ('$result');" >> tmp-ds.sql - echo "INSERT INTO process (id, type, name, workflow_id) VALUES ('$operatorid', 'operator', '$name', '$WF');" >> tmp-p.sql - echo "INSERT INTO ds_usage (process_id, direction, dataset_id, param_name) VALUES ('$operatorid', 'I', '$lhs', 'lhs');" > tmp-dsu.sql - echo "INSERT INTO ds_usage (process_id, direction, dataset_id, param_name) VALUES ('$operatorid', 'I', '$rhs', 'rhs');" >> tmp-dsu.sql - echo "INSERT INTO ds_usage (process_id, direction, dataset_id, param_name) VALUES ('$operatorid', 'O', '$result', 'result');" >> tmp-dsu.sql + echo "INSERT INTO process (id, type, name, run_id) VALUES ('$operatorid', 'operator', '$name', '$WF');" >> tmp-p.sql + echo "INSERT INTO dataset_consumption (process_id, dataset_id, param_name) VALUES ('$operatorid', '$lhs', 'lhs');" >> tmp-dsu.sql + echo "INSERT INTO dataset_consumption (process_id, dataset_id, param_name) VALUES ('$operatorid', '$rhs', 'rhs');" >> tmp-dsu.sql + echo "INSERT INTO dataset_production (process_id, dataset_id, param_name) VALUES ('$operatorid', '$result', 'result');" >> tmp-dsu.sql done < operators.txt while read id name output; do @@ -55,8 +56,8 @@ output=$(echo $output | sed -e 's/tag:benc at ci.uchicago.edu,2008:swift://g') fi echo "INSERT INTO dataset (id) VALUES ('$output');" >> tmp-ds.sql - echo "INSERT INTO process (id, type, name, workflow_id) VALUES ('$id', 'function', '$name', '$WF');" >> tmp-p.sql - echo "INSERT INTO ds_usage (process_id, direction, dataset_id, param_name) VALUES ('$id', 'O', '$output', 'result');" >> tmp-dsu.sql + echo "INSERT INTO process (id, type, name, run_id) VALUES ('$id', 'function', '$name', '$WF');" >> tmp-p.sql + echo "INSERT INTO dataset_production (process_id, dataset_id, param_name) VALUES ('$id', '$output', 'result');" >> tmp-dsu.sql done < functions.txt while read id value; do @@ -67,12 +68,12 @@ fi echo "INSERT INTO dataset (id) VALUES ('$value');" >> tmp-ds.sql - echo "INSERT INTO ds_usage (process_id, direction, dataset_id, param_name) VALUES ('$id', 'I', '$value', 'undefined');" >> tmp-dsu.sql + echo "INSERT INTO dataset_consumption (process_id, dataset_id, param_name) VALUES ('$id', '$value', 'undefined');" >> tmp-dsu.sql done < function-inputs.txt while read thread appname; do - echo "UPDATE execute SET procedure_name='$appname' WHERE id='$thread';" >> tmp-e.sql + echo "UPDATE app_invocation SET procedure_name='$appname' WHERE id='$thread';" >> tmp-e.sql done < invocation-procedure-names.txt while read outer inner; do @@ -84,7 +85,7 @@ echo "INSERT INTO dataset (id) VALUES ('$outer');" >> tmp-ds.sql echo "INSERT INTO dataset (id) VALUES ('$inner');" >> tmp-ds.sql - echo "INSERT INTO ds_containment (out_id, in_id) VALUES ('$outer', '$inner');" > tmp-dsc.sql + echo "INSERT INTO dataset_containment (out_id, in_id) VALUES ('$outer', '$inner');" >> tmp-dsc.sql done < tie-containers.txt while read dataset filename; do @@ -94,7 +95,7 @@ fi echo "INSERT INTO dataset (id) VALUES ('$dataset');" >> tmp-ds.sql - echo "INSERT INTO file (id, filename) VALUES ('$dataset', '$filename');" > tmp-f.sql + echo "INSERT INTO file (id, filename) VALUES ('$dataset', '$filename');" >> tmp-f.sql done < dataset-filenames.txt while read dataset value; do @@ -104,77 +105,52 @@ fi echo "INSERT INTO dataset (id) VALUES ('$dataset');" >> tmp-ds.sql - echo "INSERT INTO variable (id, value) VALUES ('$dataset', '$value');" > tmp-v.sql + echo "INSERT INTO in_memory (id, value) VALUES ('$dataset', '$value');" >> tmp-v.sql done < dataset-values.txt while read start duration wfid rest; do - echo "UPDATE workflow SET start_time=$start WHERE id='$WF';" > tmp-u.sql - echo "UPDATE workflow SET duration=$duration WHERE id='$WF';" >> tmp-u.sql + echo "UPDATE run SET start_time=$start WHERE id='$WF';" >> tmp-u.sql + echo "UPDATE run SET duration=$duration WHERE id='$WF';" >> tmp-u.sql done < workflow.event - -while read id extrainfo; do - echo $extrainfo | awk -F ";" '{ for (i = 1; i <= NF; i++) - print $i - }' | awk -F "=" '{ print $1 " " $2 }' | awk -F ":" '{ print $1 " " $2 }' > fields.txt - while read name type value; do - if [ "$type" = "num" ]; then - echo "INSERT INTO annot_p_num (id, name, value) VALUES ('$id', '$name', $value);" > tmp-import.sql - fi - if [ "$type" = "txt" ]; then - echo "INSERT INTO annot_p_txt (id, name, value) VALUES ('$id', '$name', '$value');" >> tmp-import.sql - fi - if [ "$type" = "bool" ]; then - echo "INSERT INTO annot_p_bool (id, name, value) VALUES ('$id', '$name', $value);" >> tmp-import.sql - fi - done < fields.txt -done < extrainfo.txt - # TODO this could merge with other naming tables while read start duration thread final_state procname ; do if [ "$duration" != "last-event-line" ]; then compoundid=$WFID$thread - echo "INSERT INTO process (id, type, name, workflow_id) VALUES ('$compoundid', 'compound', '$procname', '$WF');" >> tmp-p.sql + echo "INSERT INTO process (id, type, name, run_id) VALUES ('$compoundid', 'compound', '$procname', '$WF');" >> tmp-p.sql fi done < compound.event while read start duration thread final_state procname ; do if [ "$duration" != "last-event-line" ]; then fqid=$WFID$thread - echo "INSERT INTO process (id, type, name, workflow_id) VALUES ('$fqid', 'internal', '$procname', '$WF');" >> tmp-p.sql + echo "INSERT INTO process (id, type, name, run_id) VALUES ('$fqid', 'internal', '$procname', '$WF');" >> tmp-p.sql fi done < internalproc.event while read t ; do thread="${WFID}$t" - echo "INSERT INTO process (id, type, name, workflow_id) VALUES ('$thread', 'scope', 'scope', '$WF');" >> tmp-p.sql + echo "INSERT INTO process (id, type, name, run_id) VALUES ('$thread', 'scope', 'scope', '$WF');" >> tmp-p.sql done < scopes.txt while read thread direction dataset variable rest; do - if [ "$direction" == "input" ] ; then - dir=I - else - dir=O - fi if [ $version -le 3726 ]; then dataset=$(echo $dataset | sed -e 's/tag:benc at ci.uchicago.edu,2008:swift://g') fi + if [ "$direction" == "input" ] ; then + table=dataset_consumption + else + table=dataset_production + fi + echo "INSERT INTO dataset (id) VALUES ('$dataset');" >> tmp-ds.sql - echo "INSERT INTO ds_usage (process_id, direction, dataset_id, param_name) VALUES ('$thread', '$dir', '$dataset', '$variable');" >> tmp-dsu.sql + echo "INSERT INTO $table (process_id, dataset_id, param_name) VALUES ('$thread', '$dataset', '$variable');" >> tmp-dsu.sql done < tie-data-invocs.txt -while read id ; do - echo "INSERT INTO createarray (array_id) VALUES ('$id');" >> tmp-import.sql -done < createarray.txt - -while read arrayid index memberid ; do - echo "INSERT INTO createarray_member (array_id, ix, member_id) VALUES ('$arrayid', '$index', '$memberid');" >> tmp-import.sql -done < createarray-members.txt - -cat tmp-ds.sql | sort | uniq > import.sql +cat tmp-ds.sql | sort | uniq >> import.sql cat tmp-f.sql | sort | uniq >> import.sql cat tmp-v.sql | sort | uniq >> import.sql cat tmp-p.sql | sort | uniq >> import.sql @@ -187,7 +163,23 @@ echo Sending SQL to DB $SQLCMD < import.sql -rm -f tmp-u.sql tmp-ds.sql tmp-p.sql tmp-e.sql tmp-e2.sql tmp-dsu.sql tmp-dsc.sql tmp-f.sql tmp-v.sql tmp-import.sql import.sql fields.txt +while read execute2_id extrainfo; do + echo $extrainfo | awk -F ";" '{ for (i = 1; i <= NF; i++) + print $i + }' | awk -F "=" '{ print $1 " " $2 }' | awk -F ":" '{ print $1 " " $2 }' > fields.txt + id=$($SQLCMD --tuples-only -c "select app_invocation_id from app_execution where id='$execute2_id';" | awk '{print $1}') + while read name type value; do + if [ "$type" = "num" ]; then + echo "INSERT INTO annot_process_numeric (id, name, value) VALUES ('$id', '$name', $value);" >> extrainfo.sql + fi + if [ "$type" = "txt" ]; then + echo "INSERT INTO annot_process_text (id, name, value) VALUES ('$id', '$name', '$value');" >> extrainfo.sql + fi + done < fields.txt +done < extrainfo.txt + +$SQLCMD < extrainfo.sql + echo Finished sending SQL to DB Modified: provenancedb/swift-prov-import-all-logs =================================================================== --- provenancedb/swift-prov-import-all-logs 2011-03-23 19:02:12 UTC (rev 4223) +++ provenancedb/swift-prov-import-all-logs 2011-03-27 21:54:23 UTC (rev 4224) @@ -38,7 +38,7 @@ echo -n "Log: $filename ... " # TODO: does not work in sqlite - EXISTING=$($SQLCMD --tuples-only -c "select count(*) from workflow where log_filename='$filename';") + EXISTING=$($SQLCMD --tuples-only -c "select count(*) from run where log_filename='$filename';") if [ "$EXISTING" -eq "0" ]; then PROV_ENABLED=$(grep provenanceid $filename | wc -l) @@ -55,7 +55,7 @@ export WF="${RUNID}" - echo "INSERT INTO workflow (id, log_filename, swift_version, import_status) VALUES ('$WF','$filename','$version','$wfstatus');" | $SQLCMD + echo "INSERT INTO run (id, log_filename, swift_version, import_status) VALUES ('$WF','$filename','$version','$wfstatus');" | $SQLCMD echo version $version in log file $filename echo ============= will import ============= From lgadelha at ci.uchicago.edu Sun Mar 27 18:55:29 2011 From: lgadelha at ci.uchicago.edu (lgadelha at ci.uchicago.edu) Date: Sun, 27 Mar 2011 18:55:29 -0500 (CDT) Subject: [Swift-commit] r4225 - provenancedb/apps/oops Message-ID: <20110327235529.C82719CC94@svn.ci.uchicago.edu> Author: lgadelha Date: 2011-03-27 18:55:29 -0500 (Sun, 27 Mar 2011) New Revision: 4225 Modified: provenancedb/apps/oops/oops_extractor.sh Log: OOPS annotation extractor update to match new schema. Modified: provenancedb/apps/oops/oops_extractor.sh =================================================================== --- provenancedb/apps/oops/oops_extractor.sh 2011-03-27 21:54:23 UTC (rev 4224) +++ provenancedb/apps/oops/oops_extractor.sh 2011-03-27 23:55:29 UTC (rev 4225) @@ -37,12 +37,12 @@ OOPS_RUN_ID=$(echo $i | awk -F . '{print $3}') cd $PROTESTS_HOME/$k/$i LOG_FILENAME=$(ls *-*-*-*.log) - WORKFLOW_ID=$(echo "select id from workflow where log_filename like '%$LOG_FILENAME%'" | $SQLCMD -t | awk '{print $1}') + WORKFLOW_ID=$(echo "select id from run where log_filename like '%$LOG_FILENAME%'" | $SQLCMD -t | awk '{print $1}') cd $IMPORT_HOME/swift-logs - echo "insert into annot_wf_txt (id, name, value) values ('$WORKFLOW_ID','oops_run_id','$OOPS_RUN_ID');" | $SQLCMD + echo "insert into annot_run_text (id, name, value) values ('$WORKFLOW_ID','oops_run_id','$OOPS_RUN_ID');" | $SQLCMD #extracts scientific parameters given as input to the workflow in file *.params. - echo "select file.id,file.filename from process, ds_usage, ds_containment, file where process.id=ds_usage.process_id and ds_usage.dataset_id=out_id and file.id=ds_containment.in_id and filename like '%.params' and process.name='PrepLoop' and process.workflow_id='$WORKFLOW_ID' and ds_usage.direction='O';" > query.sql; + echo "select file.id,file.filename from process, dataset_production, dataset_containment, file where process.id=dataset_production.process_id and dataset_usage.dataset_id=out_id and file.id=dataset_containment.in_id and filename like '%.params' and process.name='PrepLoop' and process.run_id='$WORKFLOW_ID';" > query.sql; $SQLCMD -t -A -F " " -f query.sql -o result.txt @@ -55,23 +55,23 @@ NAME=$(echo $line | awk 'BEGIN { FS = "=" }; {print $1}') RIGHT=$(echo $line | awk 'BEGIN { FS = "=" }; {print $2}') if [ "$NAME" = "SAMPLE RANGE" ]; then - echo "insert into annot_ds_txt values ('$DATASET_ID', 'sample_range', '$RIGHT');" | $SQLCMD + echo "insert into annot_dataset_text values ('$DATASET_ID', 'sample_range', '$RIGHT');" | $SQLCMD fi if [ "$NAME" = "RESTRAIN DISTANCE" ]; then VALUE1=$(echo $RIGHT | awk 'BEGIN { FS = "," }; {print $1}') VALUE2=$(echo $line | awk 'BEGIN { FS = "=" }; {print $2}' | awk 'BEGIN { FS = "," }; {print $2}') - echo "insert into annot_ds_num values ('$DATASET_ID', 'restrain_distance_1', $VALUE1);" | $SQLCMD - echo "insert into annot_ds_num values ('$DATASET_ID', 'restrain_distance_2', $VALUE2);" | $SQLCMD + echo "insert into annot_dataset_numeric values ('$DATASET_ID', 'restrain_distance_1', $VALUE1);" | $SQLCMD + echo "insert into annot_dataset_numeric values ('$DATASET_ID', 'restrain_distance_2', $VALUE2);" | $SQLCMD fi if [ "$NAME" = "MAXIMUM NUMBER OF STEPS" ]; then - echo "insert into annot_ds_num values ('$DATASET_ID', 'maximum_number_of_steps', $RIGHT);" | $SQLCMD + echo "insert into annot_dataset_numeric values ('$DATASET_ID', 'maximum_number_of_steps', $RIGHT);" | $SQLCMD fi done < $FILENAME #extracts length of the fasta sequence given as input to the workflow in file *.fasta. cd $IMPORT_HOME/swift-logs - echo "select file.id,file.filename from process, ds_usage, ds_containment, file where process.id=ds_usage.process_id and ds_usage.dataset_id=out_id and file.id=ds_containment.in_id and filename like '%.fasta' and process.name='PrepLoop' and process.workflow_id='$WORKFLOW_ID' and ds_usage.direction='O';" > query.sql; + echo "select file.id,file.filename from process, dataset_production, dataset_containment, file where process.id=dataset_production.process_id and dataset_production.dataset_id=out_id and file.id=dataset_containment.in_id and filename like '%.fasta' and process.name='PrepLoop' and process.run_id='$WORKFLOW_ID';" > query.sql; $SQLCMD -t -A -F " " -f query.sql -o result.txt @@ -82,8 +82,9 @@ if [ -n "$FILENAME" ]; then SEQLENGTH=$(awk '{if (NR==2) print $1}' $FILENAME | wc -c) - echo "insert into annot_ds_num values ('$DATASET_ID', 'fasta_sequence_length', $SEQLENGTH);" | $SQLCMD + echo "insert into annot_dataset_numeric values ('$DATASET_ID', 'fasta_sequence_length', $SEQLENGTH);" | $SQLCMD fi + # extracts scientific parameters given as output by the workflow in *.log. # relevant lines: # zone2 (Initial Energy: -21352.116911) @@ -98,7 +99,7 @@ cd $IMPORT_HOME/swift-logs - echo "select file.id,file.filename from process, ds_usage, ds_containment, file where process.id=ds_usage.process_id and ds_usage.dataset_id=out_id and file.id=ds_containment.in_id and filename like '%.log' and process.name='LoopModel' and process.workflow_id='$WORKFLOW_ID' and ds_usage.direction='O';" > query.sql; + echo "select file.id,file.filename from process, dataset_production, dataset_containment, file where process.id=dataset_production.process_id and dataset_production.dataset_id=out_id and file.id=dataset_containment.in_id and filename like '%.log' and process.name='LoopModel' and process.run_id='$WORKFLOW_ID';" > query.sql; $SQLCMD -t -A -F " " -f query.sql -o result.txt @@ -109,28 +110,28 @@ while read token1 token2 token3 token4; do if [ "$token2" = "(Initial Energy:" ]; then initialenergy=$(echo $token3 | awk 'BEGIN { FS = "\)" }; {print $1}') - echo "insert into annot_ds_num (id, name, value) values ('$dataset', 'initial_energy', $initialenergy);" | $SQLCMD + echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'initial_energy', $initialenergy);" | $SQLCMD fi if [ "$token1" = "Total" ] && [ "$token2" = "Function" ] && [ "$token3" = "Evaluations:" ]; then - echo "insert into annot_ds_num (id, name, value) values ('$dataset', 'total_function_evaluations', $token4);" | $SQLCMD + echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'total_function_evaluations', $token4);" | $SQLCMD fi if [ "$token1" = "Increasing" ] && [ "$token2" = "transitions:" ]; then - echo "insert into annot_ds_num (id, name, value) values ('$dataset', 'accepted_increasing_transitions', $token3);" | $SQLCMD + echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'accepted_increasing_transitions', $token3);" | $SQLCMD fi if [ "$token1" = "Decreasing" ] && [ "$token2" = "transitions:" ]; then - echo "insert into annot_ds_num (id, name, value) values ('$dataset', 'accepted_decreasing_transitions', $token3);" | $SQLCMD + echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'accepted_decreasing_transitions', $token3);" | $SQLCMD fi if [ "$token1" = "Rejected" ] && [ "$token2" = "transitions:" ]; then - echo "insert into annot_ds_num (id, name, value) values ('$dataset', 'rejected_transitions', $token3);" | $SQLCMD + echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'rejected_transitions', $token3);" | $SQLCMD fi if [ "$token1" = "Final" ] && [ "$token2" = "Energy:" ]; then - echo "insert into annot_ds_num (id, name, value) values ('$dataset', 'final_energy', $token3);" | $SQLCMD + echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'final_energy', $token3);" | $SQLCMD fi if [ "$token1" = "Final" ] && [ "$token2" = "Temp:" ]; then - echo "insert into annot_ds_num (id, name, value) values ('$dataset', 'final_temp', $token3);" | $SQLCMD + echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'final_temp', $token3);" | $SQLCMD fi if [ "$token1" = "Total" ] && [ "$token2" = "Running" ] && [ "$token3" = "Time:" ]; then - echo "insert into annot_ds_num (id, name, value) values ('$dataset', 'total_running_time', $token4);" | $SQLCMD + echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'total_running_time', $token4);" | $SQLCMD fi done < $FILENAME done < $IMPORT_HOME/swift-logs/result.txt From tga at ci.uchicago.edu Mon Mar 28 17:28:46 2011 From: tga at ci.uchicago.edu (tga at ci.uchicago.edu) Date: Mon, 28 Mar 2011 17:28:46 -0500 (CDT) Subject: [Swift-commit] r4226 - in SwiftApps/SwiftR: . perftools Message-ID: <20110328222846.5605B9D65B@svn.ci.uchicago.edu> Author: tga Date: 2011-03-28 17:28:46 -0500 (Mon, 28 Mar 2011) New Revision: 4226 Added: SwiftApps/SwiftR/perftools/ SwiftApps/SwiftR/perftools/parselog.py Log: Checking in swift log analysis code for python: building tools for scraping events from logs and visualising. Added: SwiftApps/SwiftR/perftools/parselog.py =================================================================== --- SwiftApps/SwiftR/perftools/parselog.py (rev 0) +++ SwiftApps/SwiftR/perftools/parselog.py 2011-03-28 22:28:46 UTC (rev 4226) @@ -0,0 +1,135 @@ +import re +import itertools as its +import datetime +from operator import itemgetter + + +def runlength_enc(xs): + '''Return a run-length encoded version of the stream, xs. + + The resulting stream consists of (count, x) pairs. + + >>> ys = runlength_enc('AAABBCCC') + >>> next(ys) + (3, 'A') + >>> list(ys) + [(2, 'B'), (3, 'C')] + ''' + return ((ilen(gp), x) for x, gp in its.groupby(xs)) + +def ilen(it): + '''Return the length of an iterable. + + >>> ilen(range(7)) + 7 + ''' + return sum(1 for _ in it) + + +fname = "rserver2.log" + + +pattern = (r"^([-\d]+)" + r"\s+" + + r"([:\d]+),([\d]+)\+([\d]+)" + r"\s+" + + r"([\S]+)" + r"\s+" + r"([\S]+)" + + r"(.+)$" ) + + +compiled = re.compile(pattern) + +time_rex = r"(\d\d):(\d\d):(\d\d)" +def parse_time(timestr): + m = re.match(time_rex, timestr) + return int(m.group(1)), int(m.group(2)), int(m.group(3)) + +date_rex = r"(\d\d\d\d)-(\d\d)-(\d\d)" +def parse_date(datestr): + m = re.match(date_rex, datestr) + if m is None: + print datestr + return int(m.group(1)), int(m.group(2)), int(m.group(3)) + +def log_iter(filter_type=None, message_rex=None): + for line in open(fname).readlines(): + matched = re.match(compiled, line) + if matched is None: + #print "Error on line" + line + pass + else: + (date, time, milliseconds, something, priority, + type, message) = matched.groups() + if filter_type is not None and filter_type != type: + continue + if message_rex is not None and re.match(message_rex, message) is None: + #print message + continue + yield (date, time, milliseconds, something, priority, + type, message) + + +def time_converted(recs, basetime=None): + for (date, time, milliseconds, something, priority, + type, message) in recs: + + year, month, day = parse_date(date) + h, m, s = parse_time(time) + t = datetime.datetime(year, month, day, h, m, s, int(milliseconds) * 1000) + if basetime is not None: + if t < basetime: + continue + td = t - basetime + yield (td, priority, type, message) + else: + yield(t, priority, type, message) + + +def get_cmd_times(filter_type, message_rex=None): + return list(runlength_enc((date, time, type) + for date, time, milliseconds, something, priority, + type, message in log_iter(filter_type, message_rex))) + + + +def handle(count, date, time, type, message=None): + if message is not None: + print message, + print count, date, time, type + + +#for count, tup in get_cmd_times("PutFileCommand"): +# handle(count, *tup) + +#for count, tup in get_cmd_times("GridExec"): +# handle(count, *tup) + +#for count, tup in get_cmd_times("Cpu", re.compile("^.*jobTerminated.*$")): +# handle(count, tup[0], tup[1], tup[2], message="jobTerminated") + + +exec_events = log_iter("vdl:execute") + + +basetime = datetime.datetime(2011, 3, 18, 13, 22, 52, 231*1000) +exec_events = list(time_converted(exec_events, basetime)) + +starts = [(t, priority, type, message, message.split()[1]) + for t, priority, type, message in exec_events + if message.find("START") >= 0] +ends = [(t, priority, type, message, message.split()[1]) + for t, priority, type, message in exec_events + if message.find("END_SUCCESS") >= 0] + +starts.sort(key=itemgetter(4)) +ends.sort(key=itemgetter(4)) +for s, e in zip(starts[:10], ends[:10]): + print s, e + +def to_s(td): + return float(td.seconds) + float(td.microseconds) / 1000000.0 + +paired = [(i, s[0], e[0]) for i,s,e in zip(range(len(starts)), starts, ends)] +import pylab +for i, s, e in paired: + pylab.plot((to_s(s), to_s(e)), (i, i), 'r') + +pylab.show() From tga at ci.uchicago.edu Tue Mar 29 16:47:30 2011 From: tga at ci.uchicago.edu (tga at ci.uchicago.edu) Date: Tue, 29 Mar 2011 16:47:30 -0500 (CDT) Subject: [Swift-commit] r4227 - SwiftApps/SwiftR/Swift/exec Message-ID: <20110329214730.9E7269CC94@svn.ci.uchicago.edu> Author: tga Date: 2011-03-29 16:47:30 -0500 (Tue, 29 Mar 2011) New Revision: 4227 Modified: SwiftApps/SwiftR/Swift/exec/EvalRBatchPersistent.sh Log: Added in lines to worker shell script to load bash_profile: on some setups there are important environment variables set e.g. for R library location. Modified: SwiftApps/SwiftR/Swift/exec/EvalRBatchPersistent.sh =================================================================== --- SwiftApps/SwiftR/Swift/exec/EvalRBatchPersistent.sh 2011-03-28 22:28:46 UTC (rev 4226) +++ SwiftApps/SwiftR/Swift/exec/EvalRBatchPersistent.sh 2011-03-29 21:47:30 UTC (rev 4227) @@ -15,6 +15,16 @@ exit 1 fi +# Load bash profile: may need this to resolve R libraries +if [ -f ~/.swiftbash_profile ]; then + source ~/.swiftbash_profile +else + if [ -f ~/.bash_profile ]; then + source ~/.bash_profile + fi +fi + + # tmp=/tmp # FIXME: allow this to change eg for sites with main tmp dir elsewhere # tmp=/scratch/local # FIXME: allow this to change eg for sites with main tmp dir elsewhere tmp=${SWIFTR_TMP:-/tmp} From jonmon at ci.uchicago.edu Thu Mar 31 22:12:09 2011 From: jonmon at ci.uchicago.edu (jonmon at ci.uchicago.edu) Date: Thu, 31 Mar 2011 22:12:09 -0500 (CDT) Subject: [Swift-commit] r4236 - trunk/bin Message-ID: <20110401031209.7FA139D65B@svn.ci.uchicago.edu> Author: jonmon Date: 2011-03-31 22:12:09 -0500 (Thu, 31 Mar 2011) New Revision: 4236 Modified: trunk/bin/gensites Log: o gensites -- Fixed problem where it was not parsing the slot variable out of the properties file Modified: trunk/bin/gensites =================================================================== --- trunk/bin/gensites 2011-04-01 02:43:13 UTC (rev 4235) +++ trunk/bin/gensites 2011-04-01 03:12:09 UTC (rev 4236) @@ -169,6 +169,9 @@ "#site $TEMPLATE n_max="*|'#site n_max='*) MAXTIME=`get_value $line` ;; + "#site $TEMPLATE slots="*|'#site slots='*) + SLOTS=`get_value $line` + ;; esac done < $PROPERTIES_FILE From tga at ci.uchicago.edu Tue Mar 29 17:08:35 2011 From: tga at ci.uchicago.edu (tga at ci.uchicago.edu) Date: Tue, 29 Mar 2011 17:08:35 -0500 (CDT) Subject: [Swift-commit] r4228 - SwiftApps/SwiftR/Swift Message-ID: <20110329220835.EF4149CC94@svn.ci.uchicago.edu> Author: tga Date: 2011-03-29 17:08:35 -0500 (Tue, 29 Mar 2011) New Revision: 4228 Modified: SwiftApps/SwiftR/Swift/DESCRIPTION Log: Release 0.1.7 Modified: SwiftApps/SwiftR/Swift/DESCRIPTION =================================================================== --- SwiftApps/SwiftR/Swift/DESCRIPTION 2011-03-29 21:47:30 UTC (rev 4227) +++ SwiftApps/SwiftR/Swift/DESCRIPTION 2011-03-29 22:08:35 UTC (rev 4228) @@ -1,12 +1,12 @@ Package: Swift Type: Package Title: R interface to Swift parallel scripting languaage -Version: 0.1.6 -Date: 2011-04-21 +Version: 0.1.7 +Date: 2011-04-29 Author: Michael Wilde Maintainer: Michael Wilde Description: Routines to invoke R functions on remote resources through Swift. License: Apache License LazyLoad: yes -Packaged: 2011-04-21; Tim Armstrong +Packaged: 2011-04-29; Tim Armstrong From lgadelha at ci.uchicago.edu Tue Mar 29 23:14:03 2011 From: lgadelha at ci.uchicago.edu (lgadelha at ci.uchicago.edu) Date: Tue, 29 Mar 2011 23:14:03 -0500 (CDT) Subject: [Swift-commit] r4229 - provenancedb Message-ID: <20110330041403.75B269CC94@svn.ci.uchicago.edu> Author: lgadelha Date: 2011-03-29 23:14:02 -0500 (Tue, 29 Mar 2011) New Revision: 4229 Added: provenancedb/info-to-runtime Modified: provenancedb/prepare-provenance-chart provenancedb/prov-init.sql provenancedb/prov-to-sql.sh provenancedb/swift-prov-import-all-logs Log: Import /proc runtime info into the provenance database. Added: provenancedb/info-to-runtime =================================================================== --- provenancedb/info-to-runtime (rev 0) +++ provenancedb/info-to-runtime 2011-03-30 04:14:02 UTC (rev 4229) @@ -0,0 +1,19 @@ +#!/bin/bash + +# must have $EXECUTE2PREFIX appropriately by containing script + +while read t d id rest; do + echo processing wrapper file for job $id >&2 + record=$(find ${IDIR} -name ${id}-info) + + globalid=$EXECUTE2PREFIX$id + + if [ "X$record" != "X" ] && [ -f $record ] ; then + + grep '^RUNTIME_INFO=' $record | sed "s/^RUNTIME_INFO=\(.*\)$/$globalid \1/" + + else + echo no wrapper log for $id >&2 + fi + +done < execute2.event Modified: provenancedb/prepare-provenance-chart =================================================================== --- provenancedb/prepare-provenance-chart 2011-03-29 22:08:35 UTC (rev 4228) +++ provenancedb/prepare-provenance-chart 2011-03-30 04:14:02 UTC (rev 4229) @@ -27,6 +27,8 @@ info-to-extrainfo > extrainfo.txt +info-to-runtime > runtime.txt + cat $1 | grep ' OPERATOR ' | sed 's/^.*thread=\([^ ]*\) operator="\([^ ]*\)" lhs=\([^ ]*\) rhs=\([^ ]*\) result=\([^ ]*\).*$/\1 \2 \3 \4 \5/' > operators.txt Modified: provenancedb/prov-init.sql =================================================================== --- provenancedb/prov-init.sql 2011-03-29 22:08:35 UTC (rev 4228) +++ provenancedb/prov-init.sql 2011-03-30 04:14:02 UTC (rev 4229) @@ -28,7 +28,7 @@ (id varchar(256) primary key, log_filename varchar(2048), swift_version varchar(16), - import_status varchar(16), + final_state varchar(16), start_time numeric, duration numeric ); @@ -40,9 +40,9 @@ -- has an entry for this process. -- process types: internal, rootthread, execute, function, compound, scope, operator create table process - (id varchar(256) primary key, - type varchar(16), - name varchar(256), -- in the case of an execute this refers to the transformation name in tc.data + (id varchar(256) primary key, + type varchar(16), + name varchar(256), -- in the case of an execute this refers to the transformation name in tc.data run_id varchar(256) references run (id) on delete cascade -- normalize: workflow_id of sub-procedure determined -- by compound procedure ); @@ -63,25 +63,25 @@ -- perform an execution. the execute2 id is tied to per-execution-attempt -- information such as wrapper logs create table app_execution - (id varchar(256) primary key, - app_invocation_id varchar(256) references app_invocation (id) on delete cascade, - start_time numeric, - duration numeric, - final_state varchar(16), - site varchar(256) + (id varchar(256) primary key, + app_invocation_id varchar(256) references app_invocation (id) on delete cascade, + start_time numeric, + duration numeric, + final_state varchar(16), + site varchar(256) ); -- app execution runtime info extracted from the /proc filesystem (assumes the app executed -- in a Linux host) create table runtime_info ( app_execution_id varchar(256) references app_execution (id) on delete cascade, - event_timestamp numeric, + tstamp numeric, cpu_usage numeric, max_phys_mem numeric, max_virtual_mem numeric, io_read_bytes numeric, io_write_bytes numeric, - primary key (app_execution_id, event_timestamp) + primary key (app_execution_id, tstamp) ); -- ds stores all dataset identifiers. @@ -194,7 +194,7 @@ CREATE VIEW run_date AS - SELECT id, log_filename, swift_version, import_status, + SELECT id, log_filename, swift_version, final_state, to_timestamp(start_time) as start_time, duration FROM run; Modified: provenancedb/prov-to-sql.sh =================================================================== --- provenancedb/prov-to-sql.sh 2011-03-29 22:08:35 UTC (rev 4228) +++ provenancedb/prov-to-sql.sh 2011-03-30 04:14:02 UTC (rev 4229) @@ -8,7 +8,7 @@ export WF="${RUNID}" echo Generating SQL for $RUNID -rm -f tmp-u.sql tmp-ds.sql tmp-p.sql tmp-e.sql tmp-e2.sql tmp-dsu.sql tmp-dsc.sql tmp-f.sql tmp-v.sql tmp-import.sql import.sql extrainfo.sql fields.txt +rm -f tmp-u.sql tmp-ds.sql tmp-p.sql tmp-e.sql tmp-e2.sql tmp-dsu.sql tmp-dsc.sql tmp-f.sql tmp-v.sql tmp-import.sql import.sql extrainfo.sql fields.txt runtime.sql # this gives a distinction between the root process for a workflow and the @@ -181,5 +181,17 @@ $SQLCMD < extrainfo.sql +while read execute2_id runtime; do + timestamp=$(echo $runtime | awk -F "," '{print $1}' | awk -F ":" '{print $2}') + cpu_usage=$(echo $runtime | awk -F "," '{print $2}' | awk -F ":" '{print $2}') + max_phys_mem=$(echo $runtime | awk -F "," '{print $3}' | awk -F ":" '{print $2}') + max_virtual_mem=$(echo $runtime | awk -F "," '{print $4}' | awk -F ":" '{print $2}') + io_read_bytes=$(echo $runtime | awk -F "," '{print $5}' | awk -F ":" '{print $2}') + io_write_bytes=$(echo $runtime | awk -F "," '{print $6}' | awk -F ":" '{print $2}') + echo "INSERT INTO runtime_info (app_execution_id, tstamp, cpu_usage, max_phys_mem, max_virtual_mem, io_read_bytes, io_write_bytes) VALUES ('$execute2_id', $timestamp, $cpu_usage, $max_phys_mem, $max_virtual_mem, $io_read_bytes, $io_write_bytes);" >> runtime.sql +done < runtime.txt + +$SQLCMD < runtime.sql + echo Finished sending SQL to DB Modified: provenancedb/swift-prov-import-all-logs =================================================================== --- provenancedb/swift-prov-import-all-logs 2011-03-29 22:08:35 UTC (rev 4228) +++ provenancedb/swift-prov-import-all-logs 2011-03-30 04:14:02 UTC (rev 4229) @@ -45,7 +45,7 @@ if [ $PROV_ENABLED -gt 0 ]; then echo IMPORTING - if grep --silent "DEBUG Loader Swift finished with no errors" $filename; then + if grep --silent "INFO Loader Swift finished with no errors" $filename; then wfstatus="SUCCESS" else wfstatus="FAIL" @@ -55,7 +55,7 @@ export WF="${RUNID}" - echo "INSERT INTO run (id, log_filename, swift_version, import_status) VALUES ('$WF','$filename','$version','$wfstatus');" | $SQLCMD + echo "INSERT INTO run (id, log_filename, swift_version, final_state) VALUES ('$WF','$filename','$version','$wfstatus');" | $SQLCMD echo version $version in log file $filename echo ============= will import ============= From wozniak at ci.uchicago.edu Thu Mar 31 13:52:02 2011 From: wozniak at ci.uchicago.edu (wozniak at ci.uchicago.edu) Date: Thu, 31 Mar 2011 13:52:02 -0500 (CDT) Subject: [Swift-commit] r4231 - trunk/src/org/griphyn/vdl/karajan/lib/swiftscript Message-ID: <20110331185202.C1DDD9D65B@svn.ci.uchicago.edu> Author: wozniak Date: 2011-03-31 13:52:02 -0500 (Thu, 31 Mar 2011) New Revision: 4231 Modified: trunk/src/org/griphyn/vdl/karajan/lib/swiftscript/Misc.java Log: Whitespace and warning fixes Modified: trunk/src/org/griphyn/vdl/karajan/lib/swiftscript/Misc.java =================================================================== --- trunk/src/org/griphyn/vdl/karajan/lib/swiftscript/Misc.java 2011-03-30 17:57:26 UTC (rev 4230) +++ trunk/src/org/griphyn/vdl/karajan/lib/swiftscript/Misc.java 2011-03-31 18:52:02 UTC (rev 4231) @@ -1,8 +1,6 @@ package org.griphyn.vdl.karajan.lib.swiftscript; import java.io.IOException; -import java.util.List; -import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -54,9 +52,10 @@ setArguments("swiftscript_length", new Arg[] { Arg.VARGS }); } - private static final Logger traceLogger = Logger.getLogger("org.globus.swift.trace"); - public DSHandle swiftscript_trace(VariableStack stack) throws ExecutionException, NoSuchTypeException, - InvalidPathException { + private static final Logger traceLogger = + Logger.getLogger("org.globus.swift.trace"); + public DSHandle swiftscript_trace(VariableStack stack) + throws ExecutionException { DSHandle[] args = SwiftArg.VARGS.asDSHandleArray(stack); @@ -72,8 +71,8 @@ return null; } - public DSHandle swiftscript_strcat(VariableStack stack) throws ExecutionException, NoSuchTypeException, - InvalidPathException { + public DSHandle swiftscript_strcat(VariableStack stack) + throws ExecutionException { Object[] args = SwiftArg.VARGS.asArray(stack); int provid = VDLFunction.nextProvenanceID(); StringBuffer buf = new StringBuffer(); @@ -87,7 +86,7 @@ if(VDL2Config.getConfig().getProvenanceLog()) { DSHandle[] provArgs = SwiftArg.VARGS.asDSHandleArray(stack); for (int i = 0; i < provArgs.length; i++) { - VDLFunction.logProvenanceParameter(provid, (DSHandle)provArgs[i], ""+i); + VDLFunction.logProvenanceParameter(provid, provArgs[i], ""+i); } VDLFunction.logProvenanceResult(provid, handle, "strcat"); } @@ -97,8 +96,8 @@ return handle; } - public DSHandle swiftscript_strcut(VariableStack stack) throws ExecutionException, NoSuchTypeException, - InvalidPathException { + public DSHandle swiftscript_strcut(VariableStack stack) + throws ExecutionException { int provid = VDLFunction.nextProvenanceID(); String inputString = TypeUtil.toString(PA_INPUT.getValue(stack)); String pattern = TypeUtil.toString(PA_PATTERN.getValue(stack)); @@ -131,9 +130,8 @@ return handle; } - public DSHandle swiftscript_strstr(VariableStack stack) throws ExecutionException, NoSuchTypeException, - InvalidPathException { - + public DSHandle swiftscript_strstr(VariableStack stack) + throws ExecutionException { String inputString = TypeUtil.toString(PA_INPUT.getValue(stack)); String pattern = TypeUtil.toString(PA_PATTERN.getValue(stack)); if (logger.isDebugEnabled()) { @@ -147,8 +145,9 @@ return handle; } - public DSHandle swiftscript_strsplit(VariableStack stack) throws ExecutionException, NoSuchTypeException, - InvalidPathException { + public DSHandle swiftscript_strsplit(VariableStack stack) + throws ExecutionException, InvalidPathException { + String str = TypeUtil.toString(PA_INPUT.getValue(stack)); String pattern = TypeUtil.toString(PA_PATTERN.getValue(stack)); @@ -167,8 +166,8 @@ return handle; } - public DSHandle swiftscript_regexp(VariableStack stack) throws ExecutionException, NoSuchTypeException, - InvalidPathException { + public DSHandle swiftscript_regexp(VariableStack stack) + throws ExecutionException { String inputString = TypeUtil.toString(PA_INPUT.getValue(stack)); String pattern = TypeUtil.toString(PA_PATTERN.getValue(stack)); String transform = TypeUtil.toString(PA_TRANSFORM.getValue(stack)); @@ -204,8 +203,8 @@ return handle; } - public DSHandle swiftscript_toint(VariableStack stack) throws ExecutionException, NoSuchTypeException, - InvalidPathException { + public DSHandle swiftscript_toint(VariableStack stack) + throws ExecutionException { String inputString = TypeUtil.toString(PA_INPUT.getValue(stack)); int i = inputString.indexOf("."); if( i >= 0 ) @@ -230,8 +229,8 @@ return handle; } - public DSHandle swiftscript_tofloat(VariableStack stack) throws ExecutionException, NoSuchTypeException, - InvalidPathException { + public DSHandle swiftscript_tofloat(VariableStack stack) + throws ExecutionException { String inputString = TypeUtil.toString(PA_INPUT.getValue(stack)); DSHandle handle = new RootDataNode(Types.FLOAT); @@ -253,8 +252,8 @@ /* * Takes in a float and formats to desired precision and returns a string */ - public DSHandle swiftscript_format(VariableStack stack) throws ExecutionException, NoSuchTypeException, - InvalidPathException { + public DSHandle swiftscript_format(VariableStack stack) + throws ExecutionException { String inputString = TypeUtil.toString(PA_INPUT.getValue(stack)); String inputFormat = TypeUtil.toString(PA_TRANSFORM.getValue(stack)); DSHandle handle = new RootDataNode(Types.STRING); @@ -273,8 +272,8 @@ /* * Takes in an int and pads zeros to the left and returns a string */ - public DSHandle swiftscript_pad(VariableStack stack) throws ExecutionException, NoSuchTypeException, - InvalidPathException { + public DSHandle swiftscript_pad(VariableStack stack) + throws ExecutionException { String inputString = TypeUtil.toString(PA_INPUT.getValue(stack)); String inputFormat = TypeUtil.toString(PA_TRANSFORM.getValue(stack)); DSHandle handle = new RootDataNode(Types.STRING); @@ -283,7 +282,8 @@ int zeros_to_pad = Integer.parseInt(inputFormat); zeros_to_pad += num_length; - String output = String.format("%0"+zeros_to_pad+"d", Integer.parseInt(inputString)); + String output = String.format("%0"+zeros_to_pad+"d", + Integer.parseInt(inputString)); handle.setValue(output); handle.closeShallow(); @@ -295,17 +295,16 @@ } public DSHandle swiftscript_tostring(VariableStack stack) - throws ExecutionException, NoSuchTypeException, - InvalidPathException { - Object input = PA_INPUT.getValue(stack); - DSHandle handle = new RootDataNode(Types.STRING); - handle.setValue(""+input); - handle.closeShallow(); - return handle; + throws ExecutionException { + Object input = PA_INPUT.getValue(stack); + DSHandle handle = new RootDataNode(Types.STRING); + handle.setValue(""+input); + handle.closeShallow(); + return handle; } public DSHandle swiftscript_dirname(VariableStack stack) - throws ExecutionException, NoSuchTypeException, InvalidPathException { + throws ExecutionException { DSHandle handle; try { @@ -326,12 +325,14 @@ } /* - * This is copied from swiftscript_dirname. Both the functions could be changed to be more readable. + * This is copied from swiftscript_dirname. + * Both the functions could be changed to be more readable. * Returns length of an array. - * Good for debugging because array needs to be closed before the length is determined + * Good for debugging because array needs to be closed + * before the length is determined */ public DSHandle swiftscript_length(VariableStack stack) - throws ExecutionException, NoSuchTypeException, InvalidPathException { + throws ExecutionException { DSHandle handle; DSHandle[] args = SwiftArg.VARGS.asDSHandleArray( stack ); DSHandle arg = args[0]; @@ -339,7 +340,8 @@ if( !( adn.isClosed() ) ) { - throw new FutureNotYetAvailable( VDLFunction.addFutureListener( stack, adn ) ); + throw new FutureNotYetAvailable + (VDLFunction.addFutureListener(stack, adn)); } int result = adn.size(); From tga at ci.uchicago.edu Thu Mar 31 17:03:37 2011 From: tga at ci.uchicago.edu (tga at ci.uchicago.edu) Date: Thu, 31 Mar 2011 17:03:37 -0500 (CDT) Subject: [Swift-commit] r4232 - SwiftApps/SwiftR/Swift/exec Message-ID: <20110331220337.D9B9A9CCA0@svn.ci.uchicago.edu> Author: tga Date: 2011-03-31 17:03:37 -0500 (Thu, 31 Mar 2011) New Revision: 4232 Modified: SwiftApps/SwiftR/Swift/exec/configure-server-pbs Log: Mistakenly didn't include scratch setting correctly in pbs config. Modified: SwiftApps/SwiftR/Swift/exec/configure-server-pbs =================================================================== --- SwiftApps/SwiftR/Swift/exec/configure-server-pbs 2011-03-31 18:52:02 UTC (rev 4231) +++ SwiftApps/SwiftR/Swift/exec/configure-server-pbs 2011-03-31 22:03:37 UTC (rev 4232) @@ -33,7 +33,7 @@ 10000 $(pwd)/swiftwork - $(pwd)/swiftscratch + $(pwd)/swiftscratch From tga at ci.uchicago.edu Thu Mar 31 17:05:20 2011 From: tga at ci.uchicago.edu (tga at ci.uchicago.edu) Date: Thu, 31 Mar 2011 17:05:20 -0500 (CDT) Subject: [Swift-commit] r4233 - SwiftApps/SwiftR/Swift/exec Message-ID: <20110331220520.406059CCA0@svn.ci.uchicago.edu> Author: tga Date: 2011-03-31 17:05:18 -0500 (Thu, 31 Mar 2011) New Revision: 4233 Modified: SwiftApps/SwiftR/Swift/exec/EvalRBatchPersistent.sh SwiftApps/SwiftR/Swift/exec/configure-server-crayxt Log: Checking in fixes required to get SwiftR running on single node of crayxt: * Point SwiftR to use tmp directory mounted on lustre file system (node file systems dont work) * Invoke R directly, rather than using Rscript Modified: SwiftApps/SwiftR/Swift/exec/EvalRBatchPersistent.sh =================================================================== --- SwiftApps/SwiftR/Swift/exec/EvalRBatchPersistent.sh 2011-03-31 22:03:37 UTC (rev 4232) +++ SwiftApps/SwiftR/Swift/exec/EvalRBatchPersistent.sh 2011-03-31 22:05:18 UTC (rev 4233) @@ -27,7 +27,7 @@ # tmp=/tmp # FIXME: allow this to change eg for sites with main tmp dir elsewhere # tmp=/scratch/local # FIXME: allow this to change eg for sites with main tmp dir elsewhere -tmp=${SWIFTR_TMP:-/tmp} +tmp=${SWIFTR_TMP:-${TMP:-/tmp}} RServerScript=$1 callFile=$2 @@ -140,7 +140,11 @@ echo LD_LIBRARYPATH= $LD_LIBRARY_PATH PATH=.:$PATH echo PATH= $PATH - $RServerScript $SLOTDIR >> $SLOTDIR/R.log 2>&1 & # launch R server + # Use R instead of Rscript due to Rscript issues on some + # platforms (e.g. cray xt) + R --slave --no-restore --file=$RServerScript \ + --args $SLOTDIR >> $SLOTDIR/R.log 2>&1 & # launch R server + #$RServerScript $SLOTDIR >> $SLOTDIR/R.log 2>&1 & # launch R server # idletimer $SLOTDIR /dev/null 2>&1 & # R saves pid in R.pid for idletimer to kill it echo "$0: INFO: Launched $RServerScript $SLOTDIR Rscript" else Modified: SwiftApps/SwiftR/Swift/exec/configure-server-crayxt =================================================================== --- SwiftApps/SwiftR/Swift/exec/configure-server-crayxt 2011-03-31 22:03:37 UTC (rev 4232) +++ SwiftApps/SwiftR/Swift/exec/configure-server-crayxt 2011-03-31 22:05:18 UTC (rev 4233) @@ -3,7 +3,6 @@ # configuration for PBS with manually-started Swift workers (passive coasters) cores=$1 - throttlePBS=$2 cat >tc <sites.xml < @@ -32,8 +34,11 @@ $throttlePBS 10000 - $(pwd)/swiftwork - $(pwd)/swiftscratch + $LUSTRE_TMP + $LUSTRE_TMP + $LD_LIBRARY_PATH + $LUSTRE_TMP/swiftwork + $LUSTRE_TMP/swiftscratch From lgadelha at ci.uchicago.edu Thu Mar 31 19:29:56 2011 From: lgadelha at ci.uchicago.edu (lgadelha at ci.uchicago.edu) Date: Thu, 31 Mar 2011 19:29:56 -0500 (CDT) Subject: [Swift-commit] r4234 - in provenancedb: . apps/oops Message-ID: <20110401002956.732819D65B@svn.ci.uchicago.edu> Author: lgadelha Date: 2011-03-31 19:29:56 -0500 (Thu, 31 Mar 2011) New Revision: 4234 Modified: provenancedb/apps/oops/oops_extractor.sh provenancedb/swift-prov-import-all-logs Log: Minor updates. Modified: provenancedb/apps/oops/oops_extractor.sh =================================================================== --- provenancedb/apps/oops/oops_extractor.sh 2011-03-31 22:05:18 UTC (rev 4233) +++ provenancedb/apps/oops/oops_extractor.sh 2011-04-01 00:29:56 UTC (rev 4234) @@ -39,10 +39,10 @@ LOG_FILENAME=$(ls *-*-*-*.log) WORKFLOW_ID=$(echo "select id from run where log_filename like '%$LOG_FILENAME%'" | $SQLCMD -t | awk '{print $1}') cd $IMPORT_HOME/swift-logs - echo "insert into annot_run_text (id, name, value) values ('$WORKFLOW_ID','oops_run_id','$OOPS_RUN_ID');" | $SQLCMD + echo "insert into annot_run_text (run_id, name, value) values ('$WORKFLOW_ID','oops_run_id','$OOPS_RUN_ID');" | $SQLCMD #extracts scientific parameters given as input to the workflow in file *.params. - echo "select file.id,file.filename from process, dataset_production, dataset_containment, file where process.id=dataset_production.process_id and dataset_usage.dataset_id=out_id and file.id=dataset_containment.in_id and filename like '%.params' and process.name='PrepLoop' and process.run_id='$WORKFLOW_ID';" > query.sql; + echo "select file.id,file.filename from process, dataset_production, dataset_containment, file where process.id=dataset_production.process_id and dataset_production.dataset_id=out_id and file.id=dataset_containment.in_id and filename like '%.params' and process.name='PrepLoop' and process.run_id='$WORKFLOW_ID';" > query.sql; $SQLCMD -t -A -F " " -f query.sql -o result.txt @@ -110,28 +110,28 @@ while read token1 token2 token3 token4; do if [ "$token2" = "(Initial Energy:" ]; then initialenergy=$(echo $token3 | awk 'BEGIN { FS = "\)" }; {print $1}') - echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'initial_energy', $initialenergy);" | $SQLCMD + echo "insert into annot_dataset_numeric (dataset_id, name, value) values ('$dataset', 'initial_energy', $initialenergy);" | $SQLCMD fi if [ "$token1" = "Total" ] && [ "$token2" = "Function" ] && [ "$token3" = "Evaluations:" ]; then - echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'total_function_evaluations', $token4);" | $SQLCMD + echo "insert into annot_dataset_numeric (dataset_id, name, value) values ('$dataset', 'total_function_evaluations', $token4);" | $SQLCMD fi if [ "$token1" = "Increasing" ] && [ "$token2" = "transitions:" ]; then - echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'accepted_increasing_transitions', $token3);" | $SQLCMD + echo "insert into annot_dataset_numeric (dataset_id, name, value) values ('$dataset', 'accepted_increasing_transitions', $token3);" | $SQLCMD fi if [ "$token1" = "Decreasing" ] && [ "$token2" = "transitions:" ]; then - echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'accepted_decreasing_transitions', $token3);" | $SQLCMD + echo "insert into annot_dataset_numeric (dataset_id, name, value) values ('$dataset', 'accepted_decreasing_transitions', $token3);" | $SQLCMD fi if [ "$token1" = "Rejected" ] && [ "$token2" = "transitions:" ]; then - echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'rejected_transitions', $token3);" | $SQLCMD + echo "insert into annot_dataset_numeric (dataset_id, name, value) values ('$dataset', 'rejected_transitions', $token3);" | $SQLCMD fi if [ "$token1" = "Final" ] && [ "$token2" = "Energy:" ]; then - echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'final_energy', $token3);" | $SQLCMD + echo "insert into annot_dataset_numeric (dataset_id, name, value) values ('$dataset', 'final_energy', $token3);" | $SQLCMD fi if [ "$token1" = "Final" ] && [ "$token2" = "Temp:" ]; then - echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'final_temp', $token3);" | $SQLCMD + echo "insert into annot_dataset_numeric (dataset_id, name, value) values ('$dataset', 'final_temp', $token3);" | $SQLCMD fi if [ "$token1" = "Total" ] && [ "$token2" = "Running" ] && [ "$token3" = "Time:" ]; then - echo "insert into annot_dataset_numeric (id, name, value) values ('$dataset', 'total_running_time', $token4);" | $SQLCMD + echo "insert into annot_dataset_numeric (dataset_id, name, value) values ('$dataset', 'total_running_time', $token4);" | $SQLCMD fi done < $FILENAME done < $IMPORT_HOME/swift-logs/result.txt Modified: provenancedb/swift-prov-import-all-logs =================================================================== --- provenancedb/swift-prov-import-all-logs 2011-03-31 22:05:18 UTC (rev 4233) +++ provenancedb/swift-prov-import-all-logs 2011-04-01 00:29:56 UTC (rev 4234) @@ -45,7 +45,7 @@ if [ $PROV_ENABLED -gt 0 ]; then echo IMPORTING - if grep --silent "INFO Loader Swift finished with no errors" $filename; then + if grep --silent "Loader Swift finished with no errors" $filename; then wfstatus="SUCCESS" else wfstatus="FAIL" From wilde at ci.uchicago.edu Thu Mar 31 21:43:13 2011 From: wilde at ci.uchicago.edu (wilde at ci.uchicago.edu) Date: Thu, 31 Mar 2011 21:43:13 -0500 (CDT) Subject: [Swift-commit] r4235 - www/downloads Message-ID: <20110401024313.6074D9CCA0@svn.ci.uchicago.edu> Author: wilde Date: 2011-03-31 21:43:13 -0500 (Thu, 31 Mar 2011) New Revision: 4235 Modified: www/downloads/index.php Log: Add temp message about 0.92 source branch problem (twice-each bug) Modified: www/downloads/index.php =================================================================== --- www/downloads/index.php 2011-04-01 00:29:56 UTC (rev 4234) +++ www/downloads/index.php 2011-04-01 02:43:13 UTC (rev 4235) @@ -56,6 +56,8 @@

    Latest Release

    +

    WARNING: Code Problem: the source code for the latest release has a known concurrency defect, discovered Mar 29 2011. Please do not use or trust this SVN branch until we post that the problem has been corrected.

    +

    Checkout CoG:

    svn co \ @@ -128,9 +130,9 @@

    Swift 0.91 - 2010/12/23

    Precompiled binary distribution -[swift-0.92.tar.gz] +[swift-0.91.tar.gz]

    Swift 0.9 - 2009/04/27

    [ Author: zzhang Date: 2011-03-30 12:57:26 -0500 (Wed, 30 Mar 2011) New Revision: 4230 Added: SwiftApps/Andrey-MC/ SwiftApps/Andrey-MC/for_movies.pickled SwiftApps/Andrey-MC/movie_graph.py SwiftApps/Andrey-MC/movies_coarse.swift SwiftApps/Andrey-MC/tc.data Log: Andrey's application code Added: SwiftApps/Andrey-MC/for_movies.pickled =================================================================== --- SwiftApps/Andrey-MC/for_movies.pickled (rev 0) +++ SwiftApps/Andrey-MC/for_movies.pickled 2011-03-30 17:57:26 UTC (rev 4230) @@ -0,0 +1,23698 @@ +ccopy_reg +_reconstructor +p0 +(cnetworkx.classes.graph +Graph +p1 +c__builtin__ +object +p2 +Ntp3 +Rp4 +(dp5 +S'node' +p6 +(dp7 +cnumpy.core.multiarray +scalar +p8 +(cnumpy +dtype +p9 +(S'i4' +p10 +I0 +I1 +tp11 +Rp12 +(I3 +S'<' +p13 +NNNI-1 +I-1 +I0 +tp14 +bS'\x00\x00\x00\x00' +p15 +tp16 +Rp17 +(dp18 +sg8 +(g12 +S'\x01\x00\x00\x00' +p19 +tp20 +Rp21 +(dp22 +sg8 +(g12 +S'\x02\x00\x00\x00' +p23 +tp24 +Rp25 +(dp26 +sg8 +(g12 +S'\x03\x00\x00\x00' +p27 +tp28 +Rp29 +(dp30 +sg8 +(g12 +S'\x04\x00\x00\x00' +p31 +tp32 +Rp33 +(dp34 +sg8 +(g12 +S'\x05\x00\x00\x00' +p35 +tp36 +Rp37 +(dp38 +sg8 +(g12 +S'\x06\x00\x00\x00' +p39 +tp40 +Rp41 +(dp42 +sg8 +(g12 +S'\x07\x00\x00\x00' +p43 +tp44 +Rp45 +(dp46 +sg8 +(g12 +S'\x08\x00\x00\x00' +p47 +tp48 +Rp49 +(dp50 +sg8 +(g12 +S'\t\x00\x00\x00' +p51 +tp52 +Rp53 +(dp54 +sg8 +(g12 +S'\n\x00\x00\x00' +p55 +tp56 +Rp57 +(dp58 +sg8 +(g12 +S'\x0b\x00\x00\x00' +p59 +tp60 +Rp61 +(dp62 +sg8 +(g12 +S'\x0c\x00\x00\x00' +p63 +tp64 +Rp65 +(dp66 +sg8 +(g12 +S'\r\x00\x00\x00' +p67 +tp68 +Rp69 +(dp70 +sg8 +(g12 +S'\x0e\x00\x00\x00' +p71 +tp72 +Rp73 +(dp74 +sg8 +(g12 +S'\x0f\x00\x00\x00' +p75 +tp76 +Rp77 +(dp78 +sg8 +(g12 +S'\x10\x00\x00\x00' +p79 +tp80 +Rp81 +(dp82 +sg8 +(g12 +S'\x11\x00\x00\x00' +p83 +tp84 +Rp85 +(dp86 +sg8 +(g12 +S'\x12\x00\x00\x00' +p87 +tp88 +Rp89 +(dp90 +sg8 +(g12 +S'\x13\x00\x00\x00' +p91 +tp92 +Rp93 +(dp94 +sg8 +(g12 +S'\x14\x00\x00\x00' +p95 +tp96 +Rp97 +(dp98 +sg8 +(g12 +S'\x15\x00\x00\x00' +p99 +tp100 +Rp101 +(dp102 +sg8 +(g12 +S'\x16\x00\x00\x00' +p103 +tp104 +Rp105 +(dp106 +sg8 +(g12 +S'\x17\x00\x00\x00' +p107 +tp108 +Rp109 +(dp110 +sg8 +(g12 +S'\x18\x00\x00\x00' +p111 +tp112 +Rp113 +(dp114 +sg8 +(g12 +S'\x19\x00\x00\x00' +p115 +tp116 +Rp117 +(dp118 +sg8 +(g12 +S'\x1a\x00\x00\x00' +p119 +tp120 +Rp121 +(dp122 +sg8 +(g12 +S'\x1b\x00\x00\x00' +p123 +tp124 +Rp125 +(dp126 +sg8 +(g12 +S'\x1c\x00\x00\x00' +p127 +tp128 +Rp129 +(dp130 +sg8 +(g12 +S'\x1d\x00\x00\x00' +p131 +tp132 +Rp133 +(dp134 +sg8 +(g12 +S'\x1e\x00\x00\x00' +p135 +tp136 +Rp137 +(dp138 +sg8 +(g12 +S'\x1f\x00\x00\x00' +p139 +tp140 +Rp141 +(dp142 +sg8 +(g12 +S' \x00\x00\x00' +p143 +tp144 +Rp145 +(dp146 +sg8 +(g12 +S'!\x00\x00\x00' +p147 +tp148 +Rp149 +(dp150 +sg8 +(g12 +S'"\x00\x00\x00' +p151 +tp152 +Rp153 +(dp154 +sg8 +(g12 +S'#\x00\x00\x00' +p155 +tp156 +Rp157 +(dp158 +sg8 +(g12 +S'$\x00\x00\x00' +p159 +tp160 +Rp161 +(dp162 +sg8 +(g12 +S'%\x00\x00\x00' +p163 +tp164 +Rp165 +(dp166 +sg8 +(g12 +S'&\x00\x00\x00' +p167 +tp168 +Rp169 +(dp170 +sg8 +(g12 +S"'\x00\x00\x00" +p171 +tp172 +Rp173 +(dp174 +sg8 +(g12 +S'(\x00\x00\x00' +p175 +tp176 +Rp177 +(dp178 +sg8 +(g12 +S')\x00\x00\x00' +p179 +tp180 +Rp181 +(dp182 +sg8 +(g12 +S'*\x00\x00\x00' +p183 +tp184 +Rp185 +(dp186 +sg8 +(g12 +S'+\x00\x00\x00' +p187 +tp188 +Rp189 +(dp190 +sg8 +(g12 +S',\x00\x00\x00' +p191 +tp192 +Rp193 +(dp194 +sg8 +(g12 +S'-\x00\x00\x00' +p195 +tp196 +Rp197 +(dp198 +sg8 +(g12 +S'.\x00\x00\x00' +p199 +tp200 +Rp201 +(dp202 +sg8 +(g12 +S'/\x00\x00\x00' +p203 +tp204 +Rp205 +(dp206 +sg8 +(g12 +S'0\x00\x00\x00' +p207 +tp208 +Rp209 +(dp210 +sg8 +(g12 +S'1\x00\x00\x00' +p211 +tp212 +Rp213 +(dp214 +sg8 +(g12 +S'2\x00\x00\x00' +p215 +tp216 +Rp217 +(dp218 +sg8 +(g12 +S'3\x00\x00\x00' +p219 +tp220 +Rp221 +(dp222 +sg8 +(g12 +S'4\x00\x00\x00' +p223 +tp224 +Rp225 +(dp226 +sg8 +(g12 +S'5\x00\x00\x00' +p227 +tp228 +Rp229 +(dp230 +sg8 +(g12 +S'6\x00\x00\x00' +p231 +tp232 +Rp233 +(dp234 +sg8 +(g12 +S'7\x00\x00\x00' +p235 +tp236 +Rp237 +(dp238 +sg8 +(g12 +S'8\x00\x00\x00' +p239 +tp240 +Rp241 +(dp242 +sg8 +(g12 +S'9\x00\x00\x00' +p243 +tp244 +Rp245 +(dp246 +sg8 +(g12 +S':\x00\x00\x00' +p247 +tp248 +Rp249 +(dp250 +sg8 +(g12 +S';\x00\x00\x00' +p251 +tp252 +Rp253 +(dp254 +sg8 +(g12 +S'<\x00\x00\x00' +p255 +tp256 +Rp257 +(dp258 +sg8 +(g12 +S'=\x00\x00\x00' +p259 +tp260 +Rp261 +(dp262 +sg8 +(g12 +S'>\x00\x00\x00' +p263 +tp264 +Rp265 +(dp266 +sg8 +(g12 +S'?\x00\x00\x00' +p267 +tp268 +Rp269 +(dp270 +sg8 +(g12 +S'@\x00\x00\x00' +p271 +tp272 +Rp273 +(dp274 +sg8 +(g12 +S'A\x00\x00\x00' +p275 +tp276 +Rp277 +(dp278 +sg8 +(g12 +S'B\x00\x00\x00' +p279 +tp280 +Rp281 +(dp282 +sg8 +(g12 +S'C\x00\x00\x00' +p283 +tp284 +Rp285 +(dp286 +sg8 +(g12 +S'D\x00\x00\x00' +p287 +tp288 +Rp289 +(dp290 +sg8 +(g12 +S'E\x00\x00\x00' +p291 +tp292 +Rp293 +(dp294 +sg8 +(g12 +S'F\x00\x00\x00' +p295 +tp296 +Rp297 +(dp298 +sg8 +(g12 +S'G\x00\x00\x00' +p299 +tp300 +Rp301 +(dp302 +sg8 +(g12 +S'H\x00\x00\x00' +p303 +tp304 +Rp305 +(dp306 +sg8 +(g12 +S'I\x00\x00\x00' +p307 +tp308 +Rp309 +(dp310 +sg8 +(g12 +S'J\x00\x00\x00' +p311 +tp312 +Rp313 +(dp314 +sg8 +(g12 +S'K\x00\x00\x00' +p315 +tp316 +Rp317 +(dp318 +sg8 +(g12 +S'L\x00\x00\x00' +p319 +tp320 +Rp321 +(dp322 +sg8 +(g12 +S'M\x00\x00\x00' +p323 +tp324 +Rp325 +(dp326 +sg8 +(g12 +S'N\x00\x00\x00' +p327 +tp328 +Rp329 +(dp330 +sg8 +(g12 +S'O\x00\x00\x00' +p331 +tp332 +Rp333 +(dp334 +sg8 +(g12 +S'P\x00\x00\x00' +p335 +tp336 +Rp337 +(dp338 +sg8 +(g12 +S'Q\x00\x00\x00' +p339 +tp340 +Rp341 +(dp342 +sg8 +(g12 +S'R\x00\x00\x00' +p343 +tp344 +Rp345 +(dp346 +sg8 +(g12 +S'S\x00\x00\x00' +p347 +tp348 +Rp349 +(dp350 +sg8 +(g12 +S'T\x00\x00\x00' +p351 +tp352 +Rp353 +(dp354 +sg8 +(g12 +S'U\x00\x00\x00' +p355 +tp356 +Rp357 +(dp358 +sg8 +(g12 +S'V\x00\x00\x00' +p359 +tp360 +Rp361 +(dp362 +sg8 +(g12 +S'W\x00\x00\x00' +p363 +tp364 +Rp365 +(dp366 +sg8 +(g12 +S'X\x00\x00\x00' +p367 +tp368 +Rp369 +(dp370 +sg8 +(g12 +S'Y\x00\x00\x00' +p371 +tp372 +Rp373 +(dp374 +sg8 +(g12 +S'Z\x00\x00\x00' +p375 +tp376 +Rp377 +(dp378 +sg8 +(g12 +S'[\x00\x00\x00' +p379 +tp380 +Rp381 +(dp382 +sg8 +(g12 +S'\\\x00\x00\x00' +p383 +tp384 +Rp385 +(dp386 +sg8 +(g12 +S']\x00\x00\x00' +p387 +tp388 +Rp389 +(dp390 +sg8 +(g12 +S'^\x00\x00\x00' +p391 +tp392 +Rp393 +(dp394 +sg8 +(g12 +S'_\x00\x00\x00' +p395 +tp396 +Rp397 +(dp398 +sg8 +(g12 +S'`\x00\x00\x00' +p399 +tp400 +Rp401 +(dp402 +sg8 +(g12 +S'a\x00\x00\x00' +p403 +tp404 +Rp405 +(dp406 +sg8 +(g12 +S'b\x00\x00\x00' +p407 +tp408 +Rp409 +(dp410 +sg8 +(g12 +S'c\x00\x00\x00' +p411 +tp412 +Rp413 +(dp414 +sg8 +(g12 +S'd\x00\x00\x00' +p415 +tp416 +Rp417 +(dp418 +sg8 +(g12 +S'e\x00\x00\x00' +p419 +tp420 +Rp421 +(dp422 +sg8 +(g12 +S'f\x00\x00\x00' +p423 +tp424 +Rp425 +(dp426 +sg8 +(g12 +S'g\x00\x00\x00' +p427 +tp428 +Rp429 +(dp430 +sg8 +(g12 +S'h\x00\x00\x00' +p431 +tp432 +Rp433 +(dp434 +sg8 +(g12 +S'i\x00\x00\x00' +p435 +tp436 +Rp437 +(dp438 +sg8 +(g12 +S'j\x00\x00\x00' +p439 +tp440 +Rp441 +(dp442 +sg8 +(g12 +S'k\x00\x00\x00' +p443 +tp444 +Rp445 +(dp446 +sg8 +(g12 +S'l\x00\x00\x00' +p447 +tp448 +Rp449 +(dp450 +sg8 +(g12 +S'm\x00\x00\x00' +p451 +tp452 +Rp453 +(dp454 +sg8 +(g12 +S'n\x00\x00\x00' +p455 +tp456 +Rp457 +(dp458 +sg8 +(g12 +S'o\x00\x00\x00' +p459 +tp460 +Rp461 +(dp462 +sg8 +(g12 +S'p\x00\x00\x00' +p463 +tp464 +Rp465 +(dp466 +sg8 +(g12 +S'q\x00\x00\x00' +p467 +tp468 +Rp469 +(dp470 +sg8 +(g12 +S'r\x00\x00\x00' +p471 +tp472 +Rp473 +(dp474 +sg8 +(g12 +S's\x00\x00\x00' +p475 +tp476 +Rp477 +(dp478 +sg8 +(g12 +S't\x00\x00\x00' +p479 +tp480 +Rp481 +(dp482 +sg8 +(g12 +S'u\x00\x00\x00' +p483 +tp484 +Rp485 +(dp486 +sg8 +(g12 +S'v\x00\x00\x00' +p487 +tp488 +Rp489 +(dp490 +sg8 +(g12 +S'w\x00\x00\x00' +p491 +tp492 +Rp493 +(dp494 +sg8 +(g12 +S'x\x00\x00\x00' +p495 +tp496 +Rp497 +(dp498 +sg8 +(g12 +S'y\x00\x00\x00' +p499 +tp500 +Rp501 +(dp502 +sg8 +(g12 +S'z\x00\x00\x00' +p503 +tp504 +Rp505 +(dp506 +sg8 +(g12 +S'{\x00\x00\x00' +p507 +tp508 +Rp509 +(dp510 +sg8 +(g12 +S'|\x00\x00\x00' +p511 +tp512 +Rp513 +(dp514 +sg8 +(g12 +S'}\x00\x00\x00' +p515 +tp516 +Rp517 +(dp518 +sg8 +(g12 +S'~\x00\x00\x00' +p519 +tp520 +Rp521 +(dp522 +sg8 +(g12 +S'\x7f\x00\x00\x00' +p523 +tp524 +Rp525 +(dp526 +sg8 +(g12 +S'\x80\x00\x00\x00' +p527 +tp528 +Rp529 +(dp530 +sg8 +(g12 +S'\x81\x00\x00\x00' +p531 +tp532 +Rp533 +(dp534 +sg8 +(g12 +S'\x82\x00\x00\x00' +p535 +tp536 +Rp537 +(dp538 +sg8 +(g12 +S'\x83\x00\x00\x00' +p539 +tp540 +Rp541 +(dp542 +sg8 +(g12 +S'\x84\x00\x00\x00' +p543 +tp544 +Rp545 +(dp546 +sg8 +(g12 +S'\x85\x00\x00\x00' +p547 +tp548 +Rp549 +(dp550 +sg8 +(g12 +S'\x86\x00\x00\x00' +p551 +tp552 +Rp553 +(dp554 +sg8 +(g12 +S'\x87\x00\x00\x00' +p555 +tp556 +Rp557 +(dp558 +sg8 +(g12 +S'\x88\x00\x00\x00' +p559 +tp560 +Rp561 +(dp562 +sg8 +(g12 +S'\x89\x00\x00\x00' +p563 +tp564 +Rp565 +(dp566 +sg8 +(g12 +S'\x8a\x00\x00\x00' +p567 +tp568 +Rp569 +(dp570 +sg8 +(g12 +S'\x8b\x00\x00\x00' +p571 +tp572 +Rp573 +(dp574 +sg8 +(g12 +S'\x8c\x00\x00\x00' +p575 +tp576 +Rp577 +(dp578 +sg8 +(g12 +S'\x8d\x00\x00\x00' +p579 +tp580 +Rp581 +(dp582 +sg8 +(g12 +S'\x8e\x00\x00\x00' +p583 +tp584 +Rp585 +(dp586 +sg8 +(g12 +S'\x8f\x00\x00\x00' +p587 +tp588 +Rp589 +(dp590 +sg8 +(g12 +S'\x90\x00\x00\x00' +p591 +tp592 +Rp593 +(dp594 +sg8 +(g12 +S'\x91\x00\x00\x00' +p595 +tp596 +Rp597 +(dp598 +sg8 +(g12 +S'\x92\x00\x00\x00' +p599 +tp600 +Rp601 +(dp602 +sg8 +(g12 +S'\x93\x00\x00\x00' +p603 +tp604 +Rp605 +(dp606 +sg8 +(g12 +S'\x94\x00\x00\x00' +p607 +tp608 +Rp609 +(dp610 +sg8 +(g12 +S'\x95\x00\x00\x00' +p611 +tp612 +Rp613 +(dp614 +sg8 +(g12 +S'\x96\x00\x00\x00' +p615 +tp616 +Rp617 +(dp618 +sg8 +(g12 +S'\x97\x00\x00\x00' +p619 +tp620 +Rp621 +(dp622 +sg8 +(g12 +S'\x98\x00\x00\x00' +p623 +tp624 +Rp625 +(dp626 +sg8 +(g12 +S'\x99\x00\x00\x00' +p627 +tp628 +Rp629 +(dp630 +sg8 +(g12 +S'\x9a\x00\x00\x00' +p631 +tp632 +Rp633 +(dp634 +sg8 +(g12 +S'\x9b\x00\x00\x00' +p635 +tp636 +Rp637 +(dp638 +sg8 +(g12 +S'\x9c\x00\x00\x00' +p639 +tp640 +Rp641 +(dp642 +sg8 +(g12 +S'\x9d\x00\x00\x00' +p643 +tp644 +Rp645 +(dp646 +sg8 +(g12 +S'\x9e\x00\x00\x00' +p647 +tp648 +Rp649 +(dp650 +sg8 +(g12 +S'\x9f\x00\x00\x00' +p651 +tp652 +Rp653 +(dp654 +sg8 +(g12 +S'\xa0\x00\x00\x00' +p655 +tp656 +Rp657 +(dp658 +sg8 +(g12 +S'\xa1\x00\x00\x00' +p659 +tp660 +Rp661 +(dp662 +sg8 +(g12 +S'\xa2\x00\x00\x00' +p663 +tp664 +Rp665 +(dp666 +sg8 +(g12 +S'\xa3\x00\x00\x00' +p667 +tp668 +Rp669 +(dp670 +sg8 +(g12 +S'\xa4\x00\x00\x00' +p671 +tp672 +Rp673 +(dp674 +sg8 +(g12 +S'\xa5\x00\x00\x00' +p675 +tp676 +Rp677 +(dp678 +sg8 +(g12 +S'\xa6\x00\x00\x00' +p679 +tp680 +Rp681 +(dp682 +sg8 +(g12 +S'\xa7\x00\x00\x00' +p683 +tp684 +Rp685 +(dp686 +sg8 +(g12 +S'\xa8\x00\x00\x00' +p687 +tp688 +Rp689 +(dp690 +sg8 +(g12 +S'\xa9\x00\x00\x00' +p691 +tp692 +Rp693 +(dp694 +sg8 +(g12 +S'\xaa\x00\x00\x00' +p695 +tp696 +Rp697 +(dp698 +sg8 +(g12 +S'\xab\x00\x00\x00' +p699 +tp700 +Rp701 +(dp702 +sg8 +(g12 +S'\xac\x00\x00\x00' +p703 +tp704 +Rp705 +(dp706 +sg8 +(g12 +S'\xad\x00\x00\x00' +p707 +tp708 +Rp709 +(dp710 +sg8 +(g12 +S'\xae\x00\x00\x00' +p711 +tp712 +Rp713 +(dp714 +sg8 +(g12 +S'\xaf\x00\x00\x00' +p715 +tp716 +Rp717 +(dp718 +sg8 +(g12 +S'\xb0\x00\x00\x00' +p719 +tp720 +Rp721 +(dp722 +sg8 +(g12 +S'\xb1\x00\x00\x00' +p723 +tp724 +Rp725 +(dp726 +sg8 +(g12 +S'\xb2\x00\x00\x00' +p727 +tp728 +Rp729 +(dp730 +sg8 +(g12 +S'\xb3\x00\x00\x00' +p731 +tp732 +Rp733 +(dp734 +sg8 +(g12 +S'\xb4\x00\x00\x00' +p735 +tp736 +Rp737 +(dp738 +sg8 +(g12 +S'\xb5\x00\x00\x00' +p739 +tp740 +Rp741 +(dp742 +sg8 +(g12 +S'\xb6\x00\x00\x00' +p743 +tp744 +Rp745 +(dp746 +sg8 +(g12 +S'\xb7\x00\x00\x00' +p747 +tp748 +Rp749 +(dp750 +sg8 +(g12 +S'\xb8\x00\x00\x00' +p751 +tp752 +Rp753 +(dp754 +sg8 +(g12 +S'\xb9\x00\x00\x00' +p755 +tp756 +Rp757 +(dp758 +sg8 +(g12 +S'\xba\x00\x00\x00' +p759 +tp760 +Rp761 +(dp762 +sg8 +(g12 +S'\xbb\x00\x00\x00' +p763 +tp764 +Rp765 +(dp766 +sg8 +(g12 +S'\xbc\x00\x00\x00' +p767 +tp768 +Rp769 +(dp770 +sg8 +(g12 +S'\xbd\x00\x00\x00' +p771 +tp772 +Rp773 +(dp774 +sg8 +(g12 +S'\xbe\x00\x00\x00' +p775 +tp776 +Rp777 +(dp778 +sg8 +(g12 +S'\xbf\x00\x00\x00' +p779 +tp780 +Rp781 +(dp782 +sg8 +(g12 +S'\xc0\x00\x00\x00' +p783 +tp784 +Rp785 +(dp786 +sg8 +(g12 +S'\xc1\x00\x00\x00' +p787 +tp788 +Rp789 +(dp790 +sg8 +(g12 +S'\xc2\x00\x00\x00' +p791 +tp792 +Rp793 +(dp794 +sg8 +(g12 +S'\xc3\x00\x00\x00' +p795 +tp796 +Rp797 +(dp798 +sg8 +(g12 +S'\xc4\x00\x00\x00' +p799 +tp800 +Rp801 +(dp802 +sg8 +(g12 +S'\xc5\x00\x00\x00' +p803 +tp804 +Rp805 +(dp806 +sg8 +(g12 +S'\xc6\x00\x00\x00' +p807 +tp808 +Rp809 +(dp810 +sg8 +(g12 +S'\xc7\x00\x00\x00' +p811 +tp812 +Rp813 +(dp814 +sg8 +(g12 +S'\xc8\x00\x00\x00' +p815 +tp816 +Rp817 +(dp818 +sg8 +(g12 +S'\xc9\x00\x00\x00' +p819 +tp820 +Rp821 +(dp822 +sg8 +(g12 +S'\xca\x00\x00\x00' +p823 +tp824 +Rp825 +(dp826 +sg8 +(g12 +S'\xcb\x00\x00\x00' +p827 +tp828 +Rp829 +(dp830 +sg8 +(g12 +S'\xcc\x00\x00\x00' +p831 +tp832 +Rp833 +(dp834 +sg8 +(g12 +S'\xcd\x00\x00\x00' +p835 +tp836 +Rp837 +(dp838 +sg8 +(g12 +S'\xce\x00\x00\x00' +p839 +tp840 +Rp841 +(dp842 +sg8 +(g12 +S'\xcf\x00\x00\x00' +p843 +tp844 +Rp845 +(dp846 +sg8 +(g12 +S'\xd0\x00\x00\x00' +p847 +tp848 +Rp849 +(dp850 +sg8 +(g12 +S'\xd1\x00\x00\x00' +p851 +tp852 +Rp853 +(dp854 +sg8 +(g12 +S'\xd2\x00\x00\x00' +p855 +tp856 +Rp857 +(dp858 +sg8 +(g12 +S'\xd3\x00\x00\x00' +p859 +tp860 +Rp861 +(dp862 +sg8 +(g12 +S'\xd4\x00\x00\x00' +p863 +tp864 +Rp865 +(dp866 +sg8 +(g12 +S'\xd5\x00\x00\x00' +p867 +tp868 +Rp869 +(dp870 +sg8 +(g12 +S'\xd6\x00\x00\x00' +p871 +tp872 +Rp873 +(dp874 +sg8 +(g12 +S'\xd7\x00\x00\x00' +p875 +tp876 +Rp877 +(dp878 +sg8 +(g12 +S'\xd8\x00\x00\x00' +p879 +tp880 +Rp881 +(dp882 +sg8 +(g12 +S'\xd9\x00\x00\x00' +p883 +tp884 +Rp885 +(dp886 +sg8 +(g12 +S'\xda\x00\x00\x00' +p887 +tp888 +Rp889 +(dp890 +sg8 +(g12 +S'\xdb\x00\x00\x00' +p891 +tp892 +Rp893 +(dp894 +sg8 +(g12 +S'\xdc\x00\x00\x00' +p895 +tp896 +Rp897 +(dp898 +sg8 +(g12 +S'\xdd\x00\x00\x00' +p899 +tp900 +Rp901 +(dp902 +sg8 +(g12 +S'\xde\x00\x00\x00' +p903 +tp904 +Rp905 +(dp906 +sg8 +(g12 +S'\xdf\x00\x00\x00' +p907 +tp908 +Rp909 +(dp910 +sg8 +(g12 +S'\xe0\x00\x00\x00' +p911 +tp912 +Rp913 +(dp914 +sg8 +(g12 +S'\xe1\x00\x00\x00' +p915 +tp916 +Rp917 +(dp918 +sg8 +(g12 +S'\xe2\x00\x00\x00' +p919 +tp920 +Rp921 +(dp922 +sg8 +(g12 +S'\xe3\x00\x00\x00' +p923 +tp924 +Rp925 +(dp926 +sg8 +(g12 +S'\xe4\x00\x00\x00' +p927 +tp928 +Rp929 +(dp930 +sg8 +(g12 +S'\xe5\x00\x00\x00' +p931 +tp932 +Rp933 +(dp934 +sg8 +(g12 +S'\xe6\x00\x00\x00' +p935 +tp936 +Rp937 +(dp938 +sg8 +(g12 +S'\xe7\x00\x00\x00' +p939 +tp940 +Rp941 +(dp942 +sg8 +(g12 +S'\xe8\x00\x00\x00' +p943 +tp944 +Rp945 +(dp946 +sg8 +(g12 +S'\xe9\x00\x00\x00' +p947 +tp948 +Rp949 +(dp950 +sg8 +(g12 +S'\xea\x00\x00\x00' +p951 +tp952 +Rp953 +(dp954 +sg8 +(g12 +S'\xeb\x00\x00\x00' +p955 +tp956 +Rp957 +(dp958 +sg8 +(g12 +S'\xec\x00\x00\x00' +p959 +tp960 +Rp961 +(dp962 +sg8 +(g12 +S'\xed\x00\x00\x00' +p963 +tp964 +Rp965 +(dp966 +sg8 +(g12 +S'\xee\x00\x00\x00' +p967 +tp968 +Rp969 +(dp970 +sg8 +(g12 +S'\xef\x00\x00\x00' +p971 +tp972 +Rp973 +(dp974 +sg8 +(g12 +S'\xf0\x00\x00\x00' +p975 +tp976 +Rp977 +(dp978 +sg8 +(g12 +S'\xf1\x00\x00\x00' +p979 +tp980 +Rp981 +(dp982 +sg8 +(g12 +S'\xf2\x00\x00\x00' +p983 +tp984 +Rp985 +(dp986 +sg8 +(g12 +S'\xf3\x00\x00\x00' +p987 +tp988 +Rp989 +(dp990 +sg8 +(g12 +S'\xf4\x00\x00\x00' +p991 +tp992 +Rp993 +(dp994 +sg8 +(g12 +S'\xf5\x00\x00\x00' +p995 +tp996 +Rp997 +(dp998 +sg8 +(g12 +S'\xf6\x00\x00\x00' +p999 +tp1000 +Rp1001 +(dp1002 +sg8 +(g12 +S'\xf7\x00\x00\x00' +p1003 +tp1004 +Rp1005 +(dp1006 +sg8 +(g12 +S'\xf8\x00\x00\x00' +p1007 +tp1008 +Rp1009 +(dp1010 +sg8 +(g12 +S'\xf9\x00\x00\x00' +p1011 +tp1012 +Rp1013 +(dp1014 +sg8 +(g12 +S'\xfa\x00\x00\x00' +p1015 +tp1016 +Rp1017 +(dp1018 +sg8 +(g12 +S'\xfb\x00\x00\x00' +p1019 +tp1020 +Rp1021 +(dp1022 +sg8 +(g12 +S'\xfc\x00\x00\x00' +p1023 +tp1024 +Rp1025 +(dp1026 +sg8 +(g12 +S'\xfd\x00\x00\x00' +p1027 +tp1028 +Rp1029 +(dp1030 +sg8 +(g12 +S'\xfe\x00\x00\x00' +p1031 +tp1032 +Rp1033 +(dp1034 +sg8 +(g12 +S'\xff\x00\x00\x00' +p1035 +tp1036 +Rp1037 +(dp1038 +sg8 +(g12 +S'\x00\x01\x00\x00' +p1039 +tp1040 +Rp1041 +(dp1042 +sg8 +(g12 +S'\x01\x01\x00\x00' +p1043 +tp1044 +Rp1045 +(dp1046 +sg8 +(g12 +S'\x02\x01\x00\x00' +p1047 +tp1048 +Rp1049 +(dp1050 +sg8 +(g12 +S'\x03\x01\x00\x00' +p1051 +tp1052 +Rp1053 +(dp1054 +sg8 +(g12 +S'\x04\x01\x00\x00' +p1055 +tp1056 +Rp1057 +(dp1058 +sg8 +(g12 +S'\x05\x01\x00\x00' +p1059 +tp1060 +Rp1061 +(dp1062 +sg8 +(g12 +S'\x06\x01\x00\x00' +p1063 +tp1064 +Rp1065 +(dp1066 +sg8 +(g12 +S'\x07\x01\x00\x00' +p1067 +tp1068 +Rp1069 +(dp1070 +sg8 +(g12 +S'\x08\x01\x00\x00' +p1071 +tp1072 +Rp1073 +(dp1074 +sg8 +(g12 +S'\t\x01\x00\x00' +p1075 +tp1076 +Rp1077 +(dp1078 +sg8 +(g12 +S'\n\x01\x00\x00' +p1079 +tp1080 +Rp1081 +(dp1082 +sg8 +(g12 +S'\x0b\x01\x00\x00' +p1083 +tp1084 +Rp1085 +(dp1086 +sg8 +(g12 +S'\x0c\x01\x00\x00' +p1087 +tp1088 +Rp1089 +(dp1090 +sg8 +(g12 +S'\r\x01\x00\x00' +p1091 +tp1092 +Rp1093 +(dp1094 +sg8 +(g12 +S'\x0e\x01\x00\x00' +p1095 +tp1096 +Rp1097 +(dp1098 +sg8 +(g12 +S'\x0f\x01\x00\x00' +p1099 +tp1100 +Rp1101 +(dp1102 +sg8 +(g12 +S'\x10\x01\x00\x00' +p1103 +tp1104 +Rp1105 +(dp1106 +sg8 +(g12 +S'\x11\x01\x00\x00' +p1107 +tp1108 +Rp1109 +(dp1110 +sg8 +(g12 +S'\x12\x01\x00\x00' +p1111 +tp1112 +Rp1113 +(dp1114 +sg8 +(g12 +S'\x13\x01\x00\x00' +p1115 +tp1116 +Rp1117 +(dp1118 +sg8 +(g12 +S'\x14\x01\x00\x00' +p1119 +tp1120 +Rp1121 +(dp1122 +sg8 +(g12 +S'\x15\x01\x00\x00' +p1123 +tp1124 +Rp1125 +(dp1126 +sg8 +(g12 +S'\x16\x01\x00\x00' +p1127 +tp1128 +Rp1129 +(dp1130 +sg8 +(g12 +S'\x17\x01\x00\x00' +p1131 +tp1132 +Rp1133 +(dp1134 +sg8 +(g12 +S'\x18\x01\x00\x00' +p1135 +tp1136 +Rp1137 +(dp1138 +sg8 +(g12 +S'\x19\x01\x00\x00' +p1139 +tp1140 +Rp1141 +(dp1142 +sg8 +(g12 +S'\x1a\x01\x00\x00' +p1143 +tp1144 +Rp1145 +(dp1146 +sg8 +(g12 +S'\x1b\x01\x00\x00' +p1147 +tp1148 +Rp1149 +(dp1150 +sg8 +(g12 +S'\x1c\x01\x00\x00' +p1151 +tp1152 +Rp1153 +(dp1154 +sg8 +(g12 +S'\x1d\x01\x00\x00' +p1155 +tp1156 +Rp1157 +(dp1158 +sg8 +(g12 +S'\x1e\x01\x00\x00' +p1159 +tp1160 +Rp1161 +(dp1162 +sg8 +(g12 +S'\x1f\x01\x00\x00' +p1163 +tp1164 +Rp1165 +(dp1166 +sg8 +(g12 +S' \x01\x00\x00' +p1167 +tp1168 +Rp1169 +(dp1170 +sg8 +(g12 +S'!\x01\x00\x00' +p1171 +tp1172 +Rp1173 +(dp1174 +sg8 +(g12 +S'"\x01\x00\x00' +p1175 +tp1176 +Rp1177 +(dp1178 +sg8 +(g12 +S'#\x01\x00\x00' +p1179 +tp1180 +Rp1181 +(dp1182 +sg8 +(g12 +S'$\x01\x00\x00' +p1183 +tp1184 +Rp1185 +(dp1186 +sg8 +(g12 +S'%\x01\x00\x00' +p1187 +tp1188 +Rp1189 +(dp1190 +sg8 +(g12 +S'&\x01\x00\x00' +p1191 +tp1192 +Rp1193 +(dp1194 +sg8 +(g12 +S"'\x01\x00\x00" +p1195 +tp1196 +Rp1197 +(dp1198 +sg8 +(g12 +S'(\x01\x00\x00' +p1199 +tp1200 +Rp1201 +(dp1202 +sg8 +(g12 +S')\x01\x00\x00' +p1203 +tp1204 +Rp1205 +(dp1206 +sg8 +(g12 +S'*\x01\x00\x00' +p1207 +tp1208 +Rp1209 +(dp1210 +sg8 +(g12 +S'+\x01\x00\x00' +p1211 +tp1212 +Rp1213 +(dp1214 +sg8 +(g12 +S',\x01\x00\x00' +p1215 +tp1216 +Rp1217 +(dp1218 +sg8 +(g12 +S'-\x01\x00\x00' +p1219 +tp1220 +Rp1221 +(dp1222 +sg8 +(g12 +S'.\x01\x00\x00' +p1223 +tp1224 +Rp1225 +(dp1226 +sg8 +(g12 +S'/\x01\x00\x00' +p1227 +tp1228 +Rp1229 +(dp1230 +sg8 +(g12 +S'0\x01\x00\x00' +p1231 +tp1232 +Rp1233 +(dp1234 +sg8 +(g12 +S'1\x01\x00\x00' +p1235 +tp1236 +Rp1237 +(dp1238 +sg8 +(g12 +S'2\x01\x00\x00' +p1239 +tp1240 +Rp1241 +(dp1242 +sg8 +(g12 +S'3\x01\x00\x00' +p1243 +tp1244 +Rp1245 +(dp1246 +sg8 +(g12 +S'4\x01\x00\x00' +p1247 +tp1248 +Rp1249 +(dp1250 +sg8 +(g12 +S'5\x01\x00\x00' +p1251 +tp1252 +Rp1253 +(dp1254 +sg8 +(g12 +S'6\x01\x00\x00' +p1255 +tp1256 +Rp1257 +(dp1258 +sg8 +(g12 +S'7\x01\x00\x00' +p1259 +tp1260 +Rp1261 +(dp1262 +sg8 +(g12 +S'8\x01\x00\x00' +p1263 +tp1264 +Rp1265 +(dp1266 +sg8 +(g12 +S'9\x01\x00\x00' +p1267 +tp1268 +Rp1269 +(dp1270 +sg8 +(g12 +S':\x01\x00\x00' +p1271 +tp1272 +Rp1273 +(dp1274 +sg8 +(g12 +S';\x01\x00\x00' +p1275 +tp1276 +Rp1277 +(dp1278 +sg8 +(g12 +S'<\x01\x00\x00' +p1279 +tp1280 +Rp1281 +(dp1282 +sg8 +(g12 +S'=\x01\x00\x00' +p1283 +tp1284 +Rp1285 +(dp1286 +sg8 +(g12 +S'>\x01\x00\x00' +p1287 +tp1288 +Rp1289 +(dp1290 +sg8 +(g12 +S'?\x01\x00\x00' +p1291 +tp1292 +Rp1293 +(dp1294 +sg8 +(g12 +S'@\x01\x00\x00' +p1295 +tp1296 +Rp1297 +(dp1298 +sg8 +(g12 +S'A\x01\x00\x00' +p1299 +tp1300 +Rp1301 +(dp1302 +sg8 +(g12 +S'B\x01\x00\x00' +p1303 +tp1304 +Rp1305 +(dp1306 +sg8 +(g12 +S'C\x01\x00\x00' +p1307 +tp1308 +Rp1309 +(dp1310 +sg8 +(g12 +S'D\x01\x00\x00' +p1311 +tp1312 +Rp1313 +(dp1314 +sg8 +(g12 +S'E\x01\x00\x00' +p1315 +tp1316 +Rp1317 +(dp1318 +sg8 +(g12 +S'F\x01\x00\x00' +p1319 +tp1320 +Rp1321 +(dp1322 +sg8 +(g12 +S'G\x01\x00\x00' +p1323 +tp1324 +Rp1325 +(dp1326 +sg8 +(g12 +S'H\x01\x00\x00' +p1327 +tp1328 +Rp1329 +(dp1330 +sg8 +(g12 +S'I\x01\x00\x00' +p1331 +tp1332 +Rp1333 +(dp1334 +sg8 +(g12 +S'J\x01\x00\x00' +p1335 +tp1336 +Rp1337 +(dp1338 +sg8 +(g12 +S'K\x01\x00\x00' +p1339 +tp1340 +Rp1341 +(dp1342 +sg8 +(g12 +S'L\x01\x00\x00' +p1343 +tp1344 +Rp1345 +(dp1346 +sg8 +(g12 +S'M\x01\x00\x00' +p1347 +tp1348 +Rp1349 +(dp1350 +sg8 +(g12 +S'N\x01\x00\x00' +p1351 +tp1352 +Rp1353 +(dp1354 +sg8 +(g12 +S'O\x01\x00\x00' +p1355 +tp1356 +Rp1357 +(dp1358 +sg8 +(g12 +S'P\x01\x00\x00' +p1359 +tp1360 +Rp1361 +(dp1362 +sg8 +(g12 +S'Q\x01\x00\x00' +p1363 +tp1364 +Rp1365 +(dp1366 +sg8 +(g12 +S'R\x01\x00\x00' +p1367 +tp1368 +Rp1369 +(dp1370 +sg8 +(g12 +S'S\x01\x00\x00' +p1371 +tp1372 +Rp1373 +(dp1374 +sg8 +(g12 +S'T\x01\x00\x00' +p1375 +tp1376 +Rp1377 +(dp1378 +sg8 +(g12 +S'U\x01\x00\x00' +p1379 +tp1380 +Rp1381 +(dp1382 +sg8 +(g12 +S'V\x01\x00\x00' +p1383 +tp1384 +Rp1385 +(dp1386 +sg8 +(g12 +S'W\x01\x00\x00' +p1387 +tp1388 +Rp1389 +(dp1390 +sg8 +(g12 +S'X\x01\x00\x00' +p1391 +tp1392 +Rp1393 +(dp1394 +sg8 +(g12 +S'Y\x01\x00\x00' +p1395 +tp1396 +Rp1397 +(dp1398 +sg8 +(g12 +S'Z\x01\x00\x00' +p1399 +tp1400 +Rp1401 +(dp1402 +sg8 +(g12 +S'[\x01\x00\x00' +p1403 +tp1404 +Rp1405 +(dp1406 +sg8 +(g12 +S'\\\x01\x00\x00' +p1407 +tp1408 +Rp1409 +(dp1410 +sg8 +(g12 +S']\x01\x00\x00' +p1411 +tp1412 +Rp1413 +(dp1414 +sg8 +(g12 +S'^\x01\x00\x00' +p1415 +tp1416 +Rp1417 +(dp1418 +sg8 +(g12 +S'_\x01\x00\x00' +p1419 +tp1420 +Rp1421 +(dp1422 +sg8 +(g12 +S'`\x01\x00\x00' +p1423 +tp1424 +Rp1425 +(dp1426 +sg8 +(g12 +S'a\x01\x00\x00' +p1427 +tp1428 +Rp1429 +(dp1430 +sg8 +(g12 +S'b\x01\x00\x00' +p1431 +tp1432 +Rp1433 +(dp1434 +sg8 +(g12 +S'c\x01\x00\x00' +p1435 +tp1436 +Rp1437 +(dp1438 +sg8 +(g12 +S'd\x01\x00\x00' +p1439 +tp1440 +Rp1441 +(dp1442 +sg8 +(g12 +S'e\x01\x00\x00' +p1443 +tp1444 +Rp1445 +(dp1446 +sg8 +(g12 +S'f\x01\x00\x00' +p1447 +tp1448 +Rp1449 +(dp1450 +sg8 +(g12 +S'g\x01\x00\x00' +p1451 +tp1452 +Rp1453 +(dp1454 +sg8 +(g12 +S'h\x01\x00\x00' +p1455 +tp1456 +Rp1457 +(dp1458 +sg8 +(g12 +S'i\x01\x00\x00' +p1459 +tp1460 +Rp1461 +(dp1462 +sg8 +(g12 +S'j\x01\x00\x00' +p1463 +tp1464 +Rp1465 +(dp1466 +sg8 +(g12 +S'k\x01\x00\x00' +p1467 +tp1468 +Rp1469 +(dp1470 +sg8 +(g12 +S'l\x01\x00\x00' +p1471 +tp1472 +Rp1473 +(dp1474 +sg8 +(g12 +S'm\x01\x00\x00' +p1475 +tp1476 +Rp1477 +(dp1478 +sg8 +(g12 +S'n\x01\x00\x00' +p1479 +tp1480 +Rp1481 +(dp1482 +sg8 +(g12 +S'o\x01\x00\x00' +p1483 +tp1484 +Rp1485 +(dp1486 +sg8 +(g12 +S'p\x01\x00\x00' +p1487 +tp1488 +Rp1489 +(dp1490 +sg8 +(g12 +S'q\x01\x00\x00' +p1491 +tp1492 +Rp1493 +(dp1494 +sg8 +(g12 +S'r\x01\x00\x00' +p1495 +tp1496 +Rp1497 +(dp1498 +sg8 +(g12 +S's\x01\x00\x00' +p1499 +tp1500 +Rp1501 +(dp1502 +sg8 +(g12 +S't\x01\x00\x00' +p1503 +tp1504 +Rp1505 +(dp1506 +sg8 +(g12 +S'u\x01\x00\x00' +p1507 +tp1508 +Rp1509 +(dp1510 +sg8 +(g12 +S'v\x01\x00\x00' +p1511 +tp1512 +Rp1513 +(dp1514 +sg8 +(g12 +S'w\x01\x00\x00' +p1515 +tp1516 +Rp1517 +(dp1518 +sg8 +(g12 +S'x\x01\x00\x00' +p1519 +tp1520 +Rp1521 +(dp1522 +sg8 +(g12 +S'y\x01\x00\x00' +p1523 +tp1524 +Rp1525 +(dp1526 +sg8 +(g12 +S'z\x01\x00\x00' +p1527 +tp1528 +Rp1529 +(dp1530 +sg8 +(g12 +S'{\x01\x00\x00' +p1531 +tp1532 +Rp1533 +(dp1534 +sg8 +(g12 +S'|\x01\x00\x00' +p1535 +tp1536 +Rp1537 +(dp1538 +sg8 +(g12 +S'}\x01\x00\x00' +p1539 +tp1540 +Rp1541 +(dp1542 +sg8 +(g12 +S'~\x01\x00\x00' +p1543 +tp1544 +Rp1545 +(dp1546 +sg8 +(g12 +S'\x7f\x01\x00\x00' +p1547 +tp1548 +Rp1549 +(dp1550 +sg8 +(g12 +S'\x80\x01\x00\x00' +p1551 +tp1552 +Rp1553 +(dp1554 +sg8 +(g12 +S'\x81\x01\x00\x00' +p1555 +tp1556 +Rp1557 +(dp1558 +sg8 +(g12 +S'\x82\x01\x00\x00' +p1559 +tp1560 +Rp1561 +(dp1562 +sg8 +(g12 +S'\x83\x01\x00\x00' +p1563 +tp1564 +Rp1565 +(dp1566 +sg8 +(g12 +S'\x84\x01\x00\x00' +p1567 +tp1568 +Rp1569 +(dp1570 +sg8 +(g12 +S'\x85\x01\x00\x00' +p1571 +tp1572 +Rp1573 +(dp1574 +sg8 +(g12 +S'\x86\x01\x00\x00' +p1575 +tp1576 +Rp1577 +(dp1578 +sg8 +(g12 +S'\x87\x01\x00\x00' +p1579 +tp1580 +Rp1581 +(dp1582 +sg8 +(g12 +S'\x88\x01\x00\x00' +p1583 +tp1584 +Rp1585 +(dp1586 +sg8 +(g12 +S'\x89\x01\x00\x00' +p1587 +tp1588 +Rp1589 +(dp1590 +sg8 +(g12 +S'\x8a\x01\x00\x00' +p1591 +tp1592 +Rp1593 +(dp1594 +sg8 +(g12 +S'\x8b\x01\x00\x00' +p1595 +tp1596 +Rp1597 +(dp1598 +sg8 +(g12 +S'\x8c\x01\x00\x00' +p1599 +tp1600 +Rp1601 +(dp1602 +sg8 +(g12 +S'\x8d\x01\x00\x00' +p1603 +tp1604 +Rp1605 +(dp1606 +sg8 +(g12 +S'\x8e\x01\x00\x00' +p1607 +tp1608 +Rp1609 +(dp1610 +sg8 +(g12 +S'\x8f\x01\x00\x00' +p1611 +tp1612 +Rp1613 +(dp1614 +sg8 +(g12 +S'\x90\x01\x00\x00' +p1615 +tp1616 +Rp1617 +(dp1618 +sg8 +(g12 +S'\x91\x01\x00\x00' +p1619 +tp1620 +Rp1621 +(dp1622 +sg8 +(g12 +S'\x92\x01\x00\x00' +p1623 +tp1624 +Rp1625 +(dp1626 +sg8 +(g12 +S'\x93\x01\x00\x00' +p1627 +tp1628 +Rp1629 +(dp1630 +sg8 +(g12 +S'\x94\x01\x00\x00' +p1631 +tp1632 +Rp1633 +(dp1634 +sg8 +(g12 +S'\x95\x01\x00\x00' +p1635 +tp1636 +Rp1637 +(dp1638 +sg8 +(g12 +S'\x96\x01\x00\x00' +p1639 +tp1640 +Rp1641 +(dp1642 +sg8 +(g12 +S'\x97\x01\x00\x00' +p1643 +tp1644 +Rp1645 +(dp1646 +sg8 +(g12 +S'\x98\x01\x00\x00' +p1647 +tp1648 +Rp1649 +(dp1650 +sg8 +(g12 +S'\x99\x01\x00\x00' +p1651 +tp1652 +Rp1653 +(dp1654 +sg8 +(g12 +S'\x9a\x01\x00\x00' +p1655 +tp1656 +Rp1657 +(dp1658 +sg8 +(g12 +S'\x9b\x01\x00\x00' +p1659 +tp1660 +Rp1661 +(dp1662 +sg8 +(g12 +S'\x9c\x01\x00\x00' +p1663 +tp1664 +Rp1665 +(dp1666 +sg8 +(g12 +S'\x9d\x01\x00\x00' +p1667 +tp1668 +Rp1669 +(dp1670 +sg8 +(g12 +S'\x9e\x01\x00\x00' +p1671 +tp1672 +Rp1673 +(dp1674 +sg8 +(g12 +S'\x9f\x01\x00\x00' +p1675 +tp1676 +Rp1677 +(dp1678 +sg8 +(g12 +S'\xa0\x01\x00\x00' +p1679 +tp1680 +Rp1681 +(dp1682 +sg8 +(g12 +S'\xa1\x01\x00\x00' +p1683 +tp1684 +Rp1685 +(dp1686 +sg8 +(g12 +S'\xa2\x01\x00\x00' +p1687 +tp1688 +Rp1689 +(dp1690 +sg8 +(g12 +S'\xa3\x01\x00\x00' +p1691 +tp1692 +Rp1693 +(dp1694 +sg8 +(g12 +S'\xa4\x01\x00\x00' +p1695 +tp1696 +Rp1697 +(dp1698 +sg8 +(g12 +S'\xa5\x01\x00\x00' +p1699 +tp1700 +Rp1701 +(dp1702 +sg8 +(g12 +S'\xa6\x01\x00\x00' +p1703 +tp1704 +Rp1705 +(dp1706 +sg8 +(g12 +S'\xa7\x01\x00\x00' +p1707 +tp1708 +Rp1709 +(dp1710 +sg8 +(g12 +S'\xa8\x01\x00\x00' +p1711 +tp1712 +Rp1713 +(dp1714 +sg8 +(g12 +S'\xa9\x01\x00\x00' +p1715 +tp1716 +Rp1717 +(dp1718 +sg8 +(g12 +S'\xaa\x01\x00\x00' +p1719 +tp1720 +Rp1721 +(dp1722 +sg8 +(g12 +S'\xab\x01\x00\x00' +p1723 +tp1724 +Rp1725 +(dp1726 +sg8 +(g12 +S'\xac\x01\x00\x00' +p1727 +tp1728 +Rp1729 +(dp1730 +sg8 +(g12 +S'\xad\x01\x00\x00' +p1731 +tp1732 +Rp1733 +(dp1734 +sg8 +(g12 +S'\xae\x01\x00\x00' +p1735 +tp1736 +Rp1737 +(dp1738 +sg8 +(g12 +S'\xaf\x01\x00\x00' +p1739 +tp1740 +Rp1741 +(dp1742 +sg8 +(g12 +S'\xb0\x01\x00\x00' +p1743 +tp1744 +Rp1745 +(dp1746 +sg8 +(g12 +S'\xb1\x01\x00\x00' +p1747 +tp1748 +Rp1749 +(dp1750 +sg8 +(g12 +S'\xb2\x01\x00\x00' +p1751 +tp1752 +Rp1753 +(dp1754 +sg8 +(g12 +S'\xb3\x01\x00\x00' +p1755 +tp1756 +Rp1757 +(dp1758 +sg8 +(g12 +S'\xb4\x01\x00\x00' +p1759 +tp1760 +Rp1761 +(dp1762 +sg8 +(g12 +S'\xb5\x01\x00\x00' +p1763 +tp1764 +Rp1765 +(dp1766 +sg8 +(g12 +S'\xb6\x01\x00\x00' +p1767 +tp1768 +Rp1769 +(dp1770 +sg8 +(g12 +S'\xb7\x01\x00\x00' +p1771 +tp1772 +Rp1773 +(dp1774 +sg8 +(g12 +S'\xb8\x01\x00\x00' +p1775 +tp1776 +Rp1777 +(dp1778 +sg8 +(g12 +S'\xb9\x01\x00\x00' +p1779 +tp1780 +Rp1781 +(dp1782 +sg8 +(g12 +S'\xba\x01\x00\x00' +p1783 +tp1784 +Rp1785 +(dp1786 +sg8 +(g12 +S'\xbb\x01\x00\x00' +p1787 +tp1788 +Rp1789 +(dp1790 +sg8 +(g12 +S'\xbc\x01\x00\x00' +p1791 +tp1792 +Rp1793 +(dp1794 +sg8 +(g12 +S'\xbd\x01\x00\x00' +p1795 +tp1796 +Rp1797 +(dp1798 +sg8 +(g12 +S'\xbe\x01\x00\x00' +p1799 +tp1800 +Rp1801 +(dp1802 +sg8 +(g12 +S'\xbf\x01\x00\x00' +p1803 +tp1804 +Rp1805 +(dp1806 +sg8 +(g12 +S'\xc0\x01\x00\x00' +p1807 +tp1808 +Rp1809 +(dp1810 +sg8 +(g12 +S'\xc1\x01\x00\x00' +p1811 +tp1812 +Rp1813 +(dp1814 +sg8 +(g12 +S'\xc2\x01\x00\x00' +p1815 +tp1816 +Rp1817 +(dp1818 +sg8 +(g12 +S'\xc3\x01\x00\x00' +p1819 +tp1820 +Rp1821 +(dp1822 +sg8 +(g12 +S'\xc4\x01\x00\x00' +p1823 +tp1824 +Rp1825 +(dp1826 +sg8 +(g12 +S'\xc5\x01\x00\x00' +p1827 +tp1828 +Rp1829 +(dp1830 +sg8 +(g12 +S'\xc6\x01\x00\x00' +p1831 +tp1832 +Rp1833 +(dp1834 +sg8 +(g12 +S'\xc7\x01\x00\x00' +p1835 +tp1836 +Rp1837 +(dp1838 +sg8 +(g12 +S'\xc8\x01\x00\x00' +p1839 +tp1840 +Rp1841 +(dp1842 +sg8 +(g12 +S'\xc9\x01\x00\x00' +p1843 +tp1844 +Rp1845 +(dp1846 +sg8 +(g12 +S'\xca\x01\x00\x00' +p1847 +tp1848 +Rp1849 +(dp1850 +sg8 +(g12 +S'\xcb\x01\x00\x00' +p1851 +tp1852 +Rp1853 +(dp1854 +sg8 +(g12 +S'\xcc\x01\x00\x00' +p1855 +tp1856 +Rp1857 +(dp1858 +sg8 +(g12 +S'\xcd\x01\x00\x00' +p1859 +tp1860 +Rp1861 +(dp1862 +sg8 +(g12 +S'\xce\x01\x00\x00' +p1863 +tp1864 +Rp1865 +(dp1866 +sg8 +(g12 +S'\xcf\x01\x00\x00' +p1867 +tp1868 +Rp1869 +(dp1870 +sg8 +(g12 +S'\xd0\x01\x00\x00' +p1871 +tp1872 +Rp1873 +(dp1874 +sg8 +(g12 +S'\xd1\x01\x00\x00' +p1875 +tp1876 +Rp1877 +(dp1878 +sg8 +(g12 +S'\xd2\x01\x00\x00' +p1879 +tp1880 +Rp1881 +(dp1882 +sg8 +(g12 +S'\xd3\x01\x00\x00' +p1883 +tp1884 +Rp1885 +(dp1886 +sg8 +(g12 +S'\xd4\x01\x00\x00' +p1887 +tp1888 +Rp1889 +(dp1890 +sg8 +(g12 +S'\xd5\x01\x00\x00' +p1891 +tp1892 +Rp1893 +(dp1894 +sg8 +(g12 +S'\xd6\x01\x00\x00' +p1895 +tp1896 +Rp1897 +(dp1898 +sg8 +(g12 +S'\xd7\x01\x00\x00' +p1899 +tp1900 +Rp1901 +(dp1902 +sg8 +(g12 +S'\xd8\x01\x00\x00' +p1903 +tp1904 +Rp1905 +(dp1906 +sg8 +(g12 +S'\xd9\x01\x00\x00' +p1907 +tp1908 +Rp1909 +(dp1910 +sg8 +(g12 +S'\xda\x01\x00\x00' +p1911 +tp1912 +Rp1913 +(dp1914 +sg8 +(g12 +S'\xdb\x01\x00\x00' +p1915 +tp1916 +Rp1917 +(dp1918 +sg8 +(g12 +S'\xdc\x01\x00\x00' +p1919 +tp1920 +Rp1921 +(dp1922 +sg8 +(g12 +S'\xdd\x01\x00\x00' +p1923 +tp1924 +Rp1925 +(dp1926 +sg8 +(g12 +S'\xde\x01\x00\x00' +p1927 +tp1928 +Rp1929 +(dp1930 +sg8 +(g12 +S'\xdf\x01\x00\x00' +p1931 +tp1932 +Rp1933 +(dp1934 +sg8 +(g12 +S'\xe0\x01\x00\x00' +p1935 +tp1936 +Rp1937 +(dp1938 +sg8 +(g12 +S'\xe1\x01\x00\x00' +p1939 +tp1940 +Rp1941 +(dp1942 +sg8 +(g12 +S'\xe2\x01\x00\x00' +p1943 +tp1944 +Rp1945 +(dp1946 +sg8 +(g12 +S'\xe3\x01\x00\x00' +p1947 +tp1948 +Rp1949 +(dp1950 +sg8 +(g12 +S'\xe4\x01\x00\x00' +p1951 +tp1952 +Rp1953 +(dp1954 +sg8 +(g12 +S'\xe5\x01\x00\x00' +p1955 +tp1956 +Rp1957 +(dp1958 +sg8 +(g12 +S'\xe6\x01\x00\x00' +p1959 +tp1960 +Rp1961 +(dp1962 +sg8 +(g12 +S'\xe7\x01\x00\x00' +p1963 +tp1964 +Rp1965 +(dp1966 +sg8 +(g12 +S'\xe8\x01\x00\x00' +p1967 +tp1968 +Rp1969 +(dp1970 +sg8 +(g12 +S'\xe9\x01\x00\x00' +p1971 +tp1972 +Rp1973 +(dp1974 +sg8 +(g12 +S'\xea\x01\x00\x00' +p1975 +tp1976 +Rp1977 +(dp1978 +sg8 +(g12 +S'\xeb\x01\x00\x00' +p1979 +tp1980 +Rp1981 +(dp1982 +sg8 +(g12 +S'\xec\x01\x00\x00' +p1983 +tp1984 +Rp1985 +(dp1986 +sg8 +(g12 +S'\xed\x01\x00\x00' +p1987 +tp1988 +Rp1989 +(dp1990 +sg8 +(g12 +S'\xee\x01\x00\x00' +p1991 +tp1992 +Rp1993 +(dp1994 +sg8 +(g12 +S'\xef\x01\x00\x00' +p1995 +tp1996 +Rp1997 +(dp1998 +sg8 +(g12 +S'\xf0\x01\x00\x00' +p1999 +tp2000 +Rp2001 +(dp2002 +sg8 +(g12 +S'\xf1\x01\x00\x00' +p2003 +tp2004 +Rp2005 +(dp2006 +sg8 +(g12 +S'\xf2\x01\x00\x00' +p2007 +tp2008 +Rp2009 +(dp2010 +sg8 +(g12 +S'\xf3\x01\x00\x00' +p2011 +tp2012 +Rp2013 +(dp2014 +ssS'graph' +p2015 +(dp2016 +sS'edge' +p2017 +(dp2018 +g17 +(dp2019 +g8 +(g12 +S'\x00\x00\x00\x00' +p2020 +tp2021 +Rp2022 +(dp2023 +S'weight' +p2024 +F9.5999999999999996 +ssg8 +(g12 +S'8\x00\x00\x00' +p2025 +tp2026 +Rp2027 +(dp2028 +g2024 +F13.714285714285714 +ssI436 +(dp2029 +g2024 +F9.5999999999999996 +ssI446 +(dp2030 +g2024 +F9.5999999999999996 +sssg21 +(dp2031 +g8 +(g12 +S'\x00\x01\x00\x00' +p2032 +tp2033 +Rp2034 +(dp2035 +g2024 +F2.0425531914893615 +ssg1057 +(dp2036 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\x06\x01\x00\x00' +p2037 +tp2038 +Rp2039 +(dp2040 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\t\x00\x00\x00' +p2041 +tp2042 +Rp2043 +(dp2044 +g2024 +F2.0869565217391304 +ssg1081 +(dp2045 +g2024 +F2.0425531914893615 +ssg69 +(dp2046 +g2024 +F1.5737704918032787 +ssg8 +(g12 +S'\x8e\x00\x00\x00' +p2047 +tp2048 +Rp2049 +(dp2050 +g2024 +F2.1333333333333333 +ssg8 +(g12 +S'\x11\x01\x00\x00' +p2051 +tp2052 +Rp2053 +(dp2054 +g2024 +F2.0425531914893615 +ssg1409 +(dp2055 +g2024 +F2.0869565217391304 +ssg8 +(g12 +S'\x84\x01\x00\x00' +p2056 +tp2057 +Rp2058 +(dp2059 +g2024 +F2.0425531914893615 +ssg137 +(dp2060 +g2024 +F1.8461538461538463 +ssg161 +(dp2061 +g2024 +F1.4328358208955223 +ssg165 +(dp2062 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\xa7\x01\x00\x00' +p2063 +tp2064 +Rp2065 +(dp2066 +g2024 +F2.1333333333333333 +ssg689 +(dp2067 +g2024 +F2.0 +ssg8 +(g12 +S'\xa9\x01\x00\x00' +p2068 +tp2069 +Rp2070 +(dp2071 +g2024 +F2.1333333333333333 +ssg717 +(dp2072 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'3\x01\x00\x00' +p2073 +tp2074 +Rp2075 +(dp2076 +g2024 +F2.0869565217391304 +ssg8 +(g12 +S'X\x00\x00\x00' +p2077 +tp2078 +Rp2079 +(dp2080 +g2024 +F2.1333333333333333 +ssg8 +(g12 +S':\x00\x00\x00' +p2081 +tp2082 +Rp2083 +(dp2084 +g2024 +F2.0 +ssg8 +(g12 +S'<\x01\x00\x00' +p2085 +tp2086 +Rp2087 +(dp2088 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'?\x01\x00\x00' +p2089 +tp2090 +Rp2091 +(dp2092 +g2024 +F2.0 +ssg8 +(g12 +S'C\x01\x00\x00' +p2093 +tp2094 +Rp2095 +(dp2096 +g2024 +F2.0869565217391304 +ssg8 +(g12 +S'D\x00\x00\x00' +p2097 +tp2098 +Rp2099 +(dp2100 +g2024 +F2.1333333333333333 +ssg8 +(g12 +S'\xc7\x01\x00\x00' +p2101 +tp2102 +Rp2103 +(dp2104 +g2024 +F2.1333333333333333 +ssg345 +(dp2105 +g2024 +F1.6000000000000001 +ssg8 +(g12 +S'\xd8\x00\x00\x00' +p2106 +tp2107 +Rp2108 +(dp2109 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'Z\x01\x00\x00' +p2110 +tp2111 +Rp2112 +(dp2113 +g2024 +F2.0 +ssg8 +(g12 +S'\xdc\x01\x00\x00' +p2114 +tp2115 +Rp2116 +(dp2117 +g2024 +F2.1333333333333333 +ssg8 +(g12 +S'\xe1\x00\x00\x00' +p2118 +tp2119 +Rp2120 +(dp2121 +g2024 +F2.0425531914893615 +ssg929 +(dp2122 +g2024 +F2.0 +ssg8 +(g12 +S'\x7f\x00\x00\x00' +p2123 +tp2124 +Rp2125 +(dp2126 +g2024 +F2.1333333333333333 +ssg8 +(g12 +S'\xec\x00\x00\x00' +p2127 +tp2128 +Rp2129 +(dp2130 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'm\x01\x00\x00' +p2131 +tp2132 +Rp2133 +(dp2134 +g2024 +F2.0869565217391304 +ssg461 +(dp2135 +g2024 +F2.0869565217391304 +ssg8 +(g12 +S'\xa8\x01\x00\x00' +p2136 +tp2137 +Rp2138 +(dp2139 +g2024 +F2.0 +ssg8 +(g12 +S'r\x01\x00\x00' +p2140 +tp2141 +Rp2142 +(dp2143 +g2024 +F2.1333333333333333 +ssg1001 +(dp2144 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'x\x01\x00\x00' +p2145 +tp2146 +Rp2147 +(dp2148 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'z\x00\x00\x00' +p2149 +tp2150 +Rp2151 +(dp2152 +g2024 +F2.0 +ssg781 +(dp2153 +g2024 +F2.1333333333333333 +ssg8 +(g12 +S'\xfc\x00\x00\x00' +p2154 +tp2155 +Rp2156 +(dp2157 +g2024 +F2.0869565217391304 +ssg8 +(g12 +S'~\x01\x00\x00' +p2158 +tp2159 +Rp2160 +(dp2161 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'\xff\x00\x00\x00' +p2162 +tp2163 +Rp2164 +(dp2165 +g2024 +F2.0869565217391304 +sssg25 +(dp2166 +g29 +(dp2167 +g2024 +F2.0869565217391304 +sssg29 +(dp2168 +g25 +g2167 +sg8 +(g12 +S'\x06\x01\x00\x00' +p2169 +tp2170 +Rp2171 +(dp2172 +g2024 +F1.9199999999999999 +ssg1069 +(dp2173 +g2024 +F1.9591836734693877 +ssg1585 +(dp2174 +g2024 +F1.9199999999999999 +ssg8 +(g12 +S'\xac\x00\x00\x00' +p2175 +tp2176 +Rp2177 +(dp2178 +g2024 +F2.0869565217391304 +ssg8 +(g12 +S'\x8a\x00\x00\x00' +p2179 +tp2180 +Rp2181 +(dp2182 +g2024 +F1.8461538461538463 +ssg8 +(g12 +S'\x8b\x01\x00\x00' +p2183 +tp2184 +Rp2185 +(dp2186 +g2024 +F2.0869565217391304 +ssg69 +(dp2187 +g2024 +F1.5483870967741935 +ssg89 +(dp2188 +g2024 +F1.8461538461538463 +ssg8 +(g12 +S'\x96\x00\x00\x00' +p2189 +tp2190 +Rp2191 +(dp2192 +g2024 +F2.0869565217391304 +ssg8 +(g12 +S'\x98\x01\x00\x00' +p2193 +tp2194 +Rp2195 +(dp2196 +g2024 +F2.0425531914893615 +ssg633 +(dp2197 +g2024 +F1.9199999999999999 +ssg641 +(dp2198 +g2024 +F1.9591836734693877 +ssg649 +(dp2199 +g2024 +F1.8823529411764706 +ssg1181 +(dp2200 +g2024 +F1.9199999999999999 +ssg165 +(dp2201 +g2024 +F1.9199999999999999 +ssg689 +(dp2202 +g2024 +F1.9591836734693877 +ssg1217 +(dp2203 +g2024 +F2.0425531914893615 +ssg225 +(dp2204 +g2024 +F1.9199999999999999 +ssg137 +(dp2205 +g2024 +F1.8113207547169812 +ssg8 +(g12 +S'6\x01\x00\x00' +p2206 +tp2207 +Rp2208 +(dp2209 +g2024 +F2.0425531914893615 +ssg1077 +(dp2210 +g2024 +F2.0425531914893615 +ssg765 +(dp2211 +g2024 +F2.0 +ssg8 +(g12 +S'=\x00\x00\x00' +p2212 +tp2213 +Rp2214 +(dp2215 +g2024 +F2.0869565217391304 +ssg8 +(g12 +S'?\x01\x00\x00' +p2216 +tp2217 +Rp2218 +(dp2219 +g2024 +F1.9591836734693877 +ssg277 +(dp2220 +g2024 +F1.9199999999999999 +ssg8 +(g12 +S'B\x01\x00\x00' +p2221 +tp2222 +Rp2223 +(dp2224 +g2024 +F2.0425531914893615 +ssg233 +(dp2225 +g2024 +F2.0 +ssg537 +(dp2226 +g2024 +F1.9199999999999999 +ssg8 +(g12 +S'G\x00\x00\x00' +p2227 +tp2228 +Rp2229 +(dp2230 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'L\x01\x00\x00' +p2231 +tp2232 +Rp2233 +(dp2234 +g2024 +F1.9199999999999999 +ssg8 +(g12 +S'\xcd\x01\x00\x00' +p2235 +tp2236 +Rp2237 +(dp2238 +g2024 +F2.0 +ssg8 +(g12 +S'\x8d\x01\x00\x00' +p2239 +tp2240 +Rp2241 +(dp2242 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'\xa3\x01\x00\x00' +p2243 +tp2244 +Rp2245 +(dp2246 +g2024 +F2.0 +ssg8 +(g12 +S'\xd9\x01\x00\x00' +p2247 +tp2248 +Rp2249 +(dp2250 +g2024 +F2.0869565217391304 +ssg8 +(g12 +S'Z\x01\x00\x00' +p2251 +tp2252 +Rp2253 +(dp2254 +g2024 +F1.9591836734693877 +ssg397 +(dp2255 +g2024 +F1.9199999999999999 +ssg8 +(g12 +S'`\x01\x00\x00' +p2256 +tp2257 +Rp2258 +(dp2259 +g2024 +F2.0425531914893615 +ssg409 +(dp2260 +g2024 +F2.0869565217391304 +ssg8 +(g12 +S'g\x00\x00\x00' +p2261 +tp2262 +Rp2263 +(dp2264 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'k\x00\x00\x00' +p2265 +tp2266 +Rp2267 +(dp2268 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'\x9e\x01\x00\x00' +p2269 +tp2270 +Rp2271 +(dp2272 +g2024 +F2.0 +ssg8 +(g12 +S'p\x01\x00\x00' +p2273 +tp2274 +Rp2275 +(dp2276 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\xf2\x01\x00\x00' +p2277 +tp2278 +Rp2279 +(dp2280 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'\xf3\x01\x00\x00' +p2281 +tp2282 +Rp2283 +(dp2284 +g2024 +F2.0425531914893615 +sssg33 +(dp2285 +g8 +(g12 +S'\xe0\x00\x00\x00' +p2286 +tp2287 +Rp2288 +(dp2289 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\xc1\x01\x00\x00' +p2290 +tp2291 +Rp2292 +(dp2293 +g2024 +F6.8571428571428568 +ssg1693 +(dp2294 +g2024 +F6.4000000000000004 +ssg8 +(g12 +S'd\x01\x00\x00' +p2295 +tp2296 +Rp2297 +(dp2298 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'H\x00\x00\x00' +p2299 +tp2300 +Rp2301 +(dp2302 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'J\x01\x00\x00' +p2303 +tp2304 +Rp2305 +(dp2306 +g2024 +F7.384615384615385 +ssg709 +(dp2307 +g2024 +F6.0 +ssg337 +(dp2308 +g2024 +F6.8571428571428568 +ssg985 +(dp2309 +g2024 +F6.0 +ssg737 +(dp2310 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'\x18\x00\x00\x00' +p2311 +tp2312 +Rp2313 +(dp2314 +g2024 +F2.8235294117647061 +ssg569 +(dp2315 +g2024 +F5.0526315789473681 +sssg37 +(dp2316 +g149 +(dp2317 +g2024 +F4.5714285714285712 +ssg8 +(g12 +S'+\x01\x00\x00' +p2318 +tp2319 +Rp2320 +(dp2321 +g2024 +F6.0 +ssg8 +(g12 +S'\xe4\x01\x00\x00' +p2322 +tp2323 +Rp2324 +(dp2325 +g2024 +F6.4000000000000004 +ssg441 +(dp2326 +g2024 +F4.3636363636363633 +ssg8 +(g12 +S'\xcb\x01\x00\x00' +p2327 +tp2328 +Rp2329 +(dp2330 +g2024 +F6.0 +ssg8 +(g12 +S'\xae\x01\x00\x00' +p2331 +tp2332 +Rp2333 +(dp2334 +g2024 +F5.333333333333333 +ssg81 +(dp2335 +g2024 +F3.3103448275862069 +ssg1361 +(dp2336 +g2024 +F5.6470588235294121 +ssg217 +(dp2337 +g2024 +F3.6923076923076925 +ssg605 +(dp2338 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'\x96\x01\x00\x00' +p2339 +tp2340 +Rp2341 +(dp2342 +g2024 +F5.6470588235294121 +ssg8 +(g12 +S'W\x00\x00\x00' +p2343 +tp2344 +Rp2345 +(dp2346 +g2024 +F5.0526315789473681 +ssg381 +(dp2347 +g2024 +F4.1739130434782608 +ssg8 +(g12 +S'\xbe\x00\x00\x00' +p2348 +tp2349 +Rp2350 +(dp2351 +g2024 +F6.0 +sssg41 +(dp2352 +g45 +(dp2353 +g2024 +F1.1851851851851851 +ssg8 +(g12 +S'\x08\x01\x00\x00' +p2354 +tp2355 +Rp2356 +(dp2357 +g2024 +F2.5945945945945947 +ssg8 +(g12 +S'\x89\x00\x00\x00' +p2358 +tp2359 +Rp2360 +(dp2361 +g2024 +F2.6666666666666665 +ssg8 +(g12 +S'\x14\x01\x00\x00' +p2362 +tp2363 +Rp2364 +(dp2365 +g2024 +F2.4615384615384617 +ssg613 +(dp2366 +g2024 +F2.4615384615384617 +ssg8 +(g12 +S'\x17\x01\x00\x00' +p2367 +tp2368 +Rp2369 +(dp2370 +g2024 +F2.5945945945945947 +ssg8 +(g12 +S'\x99\x00\x00\x00' +p2371 +tp2372 +Rp2373 +(dp2374 +g2024 +F2.5945945945945947 +ssg133 +(dp2375 +g2024 +F2.1333333333333333 +ssg1677 +(dp2376 +g2024 +F2.5945945945945947 +ssg8 +(g12 +S'%\x01\x00\x00' +p2377 +tp2378 +Rp2379 +(dp2380 +g2024 +F2.7428571428571429 +ssg681 +(dp2381 +g2024 +F2.4615384615384617 +ssg8 +(g12 +S'(\x01\x00\x00' +p2382 +tp2383 +Rp2384 +(dp2385 +g2024 +F2.5945945945945947 +ssg185 +(dp2386 +g2024 +F2.0425531914893615 +ssg193 +(dp2387 +g2024 +F2.2325581395348837 +ssg209 +(dp2388 +g2024 +F2.3414634146341462 +ssg8 +(g12 +S'1\x00\x00\x00' +p2389 +tp2390 +Rp2391 +(dp2392 +g2024 +F2.7428571428571429 +ssg8 +(g12 +S'\xb6\x01\x00\x00' +p2393 +tp2394 +Rp2395 +(dp2396 +g2024 +F2.6666666666666665 +ssg237 +(dp2397 +g2024 +F2.6666666666666665 +ssg1273 +(dp2398 +g2024 +F2.3999999999999999 +ssg293 +(dp2399 +g2024 +F2.1333333333333333 +ssg8 +(g12 +S'\xc6\x01\x00\x00' +p2400 +tp2401 +Rp2402 +(dp2403 +g2024 +F2.6666666666666665 +ssg8 +(g12 +S'\xcf\x01\x00\x00' +p2404 +tp2405 +Rp2406 +(dp2407 +g2024 +F2.5945945945945947 +ssg353 +(dp2408 +g2024 +F2.3414634146341462 +ssg357 +(dp2409 +g2024 +F2.5263157894736841 +ssg8 +(g12 +S'\xd6\x01\x00\x00' +p2410 +tp2411 +Rp2412 +(dp2413 +g2024 +F2.5263157894736841 +ssg8 +(g12 +S']\x01\x00\x00' +p2414 +tp2415 +Rp2416 +(dp2417 +g2024 +F2.3999999999999999 +ssg393 +(dp2418 +g2024 +F2.3999999999999999 +ssg8 +(g12 +S'\xe5\x00\x00\x00' +p2419 +tp2420 +Rp2421 +(dp2422 +g2024 +F2.6666666666666665 +ssg949 +(dp2423 +g2024 +F2.2857142857142856 +ssg8 +(g12 +S'l\x01\x00\x00' +p2424 +tp2425 +Rp2426 +(dp2427 +g2024 +F2.5945945945945947 +ssg8 +(g12 +S'u\x00\x00\x00' +p2428 +tp2429 +Rp2430 +(dp2431 +g2024 +F2.5263157894736841 +ssg8 +(g12 +S'\xf8\x00\x00\x00' +p2432 +tp2433 +Rp2434 +(dp2435 +g2024 +F2.7428571428571429 +ssg8 +(g12 +S'|\x01\x00\x00' +p2436 +tp2437 +Rp2438 +(dp2439 +g2024 +F2.3414634146341462 +ssg8 +(g12 +S'\xaa\x01\x00\x00' +p2440 +tp2441 +Rp2442 +(dp2443 +g2024 +F2.7428571428571429 +sssg45 +(dp2444 +g8 +(g12 +S'\x81\x00\x00\x00' +p2445 +tp2446 +Rp2447 +(dp2448 +g2024 +F1.9591836734693877 +ssg541 +(dp2449 +g2024 +F1.9199999999999999 +ssg8 +(g12 +S'V\x01\x00\x00' +p2450 +tp2451 +Rp2452 +(dp2453 +g2024 +F2.0 +ssg41 +g2353 +sg561 +(dp2454 +g2024 +F1.8461538461538463 +ssg8 +(g12 +S'W\x01\x00\x00' +p2455 +tp2456 +Rp2457 +(dp2458 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\x0f\x01\x00\x00' +p2459 +tp2460 +Rp2461 +(dp2462 +g2024 +F2.0 +ssg8 +(g12 +S'\x92\x01\x00\x00' +p2463 +tp2464 +Rp2465 +(dp2466 +g2024 +F2.0 +ssg93 +(dp2467 +g2024 +F1.7777777777777777 +ssg8 +(g12 +S'\x94\x01\x00\x00' +p2468 +tp2469 +Rp2470 +(dp2471 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\xeb\x00\x00\x00' +p2472 +tp2473 +Rp2474 +(dp2475 +g2024 +F2.0 +ssg8 +(g12 +S'\x1a\x01\x00\x00' +p2476 +tp2477 +Rp2478 +(dp2479 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\x1e\x01\x00\x00' +p2480 +tp2481 +Rp2482 +(dp2483 +g2024 +F2.0 +ssg157 +(dp2484 +g2024 +F1.8461538461538463 +ssg8 +(g12 +S'\xa5\x01\x00\x00' +p2485 +tp2486 +Rp2487 +(dp2488 +g2024 +F1.9591836734693877 +ssg681 +(dp2489 +g2024 +F1.8461538461538463 +ssg8 +(g12 +S"'\x01\x00\x00" +p2490 +tp2491 +Rp2492 +(dp2493 +g2024 +F2.0 +ssg8 +(g12 +S'\xab\x01\x00\x00' +p2494 +tp2495 +Rp2496 +(dp2497 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\xac\x01\x00\x00' +p2498 +tp2499 +Rp2500 +(dp2501 +g2024 +F2.0 +ssg8 +(g12 +S'-\x01\x00\x00' +p2502 +tp2503 +Rp2504 +(dp2505 +g2024 +F1.9591836734693877 +ssg389 +(dp2506 +g2024 +F1.8461538461538463 +ssg1761 +(dp2507 +g2024 +F1.8461538461538463 +ssg8 +(g12 +S'\xb7\x01\x00\x00' +p2508 +tp2509 +Rp2510 +(dp2511 +g2024 +F1.9591836734693877 +ssg241 +(dp2512 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\xbd\x01\x00\x00' +p2513 +tp2514 +Rp2515 +(dp2516 +g2024 +F2.0 +ssg8 +(g12 +S'\xbe\x01\x00\x00' +p2517 +tp2518 +Rp2519 +(dp2520 +g2024 +F1.8461538461538463 +ssg8 +(g12 +S'@\x01\x00\x00' +p2521 +tp2522 +Rp2523 +(dp2524 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\xc3\x01\x00\x00' +p2525 +tp2526 +Rp2527 +(dp2528 +g2024 +F2.0 +ssg293 +(dp2529 +g2024 +F1.6551724137931034 +ssg8 +(g12 +S'\xc6\x01\x00\x00' +p2530 +tp2531 +Rp2532 +(dp2533 +g2024 +F1.9591836734693877 +ssg329 +(dp2534 +g2024 +F1.8823529411764706 +ssg8 +(g12 +S'\xcf\x01\x00\x00' +p2535 +tp2536 +Rp2537 +(dp2538 +g2024 +F1.9199999999999999 +ssg865 +(dp2539 +g2024 +F1.8113207547169812 +ssg869 +(dp2540 +g2024 +F1.9591836734693877 +ssg1897 +(dp2541 +g2024 +F1.8823529411764706 +ssg8 +(g12 +S'\xd7\x01\x00\x00' +p2542 +tp2543 +Rp2544 +(dp2545 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\xda\x01\x00\x00' +p2546 +tp2547 +Rp2548 +(dp2549 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S']\x01\x00\x00' +p2550 +tp2551 +Rp2552 +(dp2553 +g2024 +F1.8113207547169812 +ssg8 +(g12 +S'\xe3\x01\x00\x00' +p2554 +tp2555 +Rp2556 +(dp2557 +g2024 +F2.0 +ssg8 +(g12 +S'e\x01\x00\x00' +p2558 +tp2559 +Rp2560 +(dp2561 +g2024 +F1.9199999999999999 +ssg425 +(dp2562 +g2024 +F1.6842105263157894 +ssg8 +(g12 +S'{\x01\x00\x00' +p2563 +tp2564 +Rp2565 +(dp2566 +g2024 +F1.9591836734693877 +ssg8 +(g12 +S'\xeb\x01\x00\x00' +p2567 +tp2568 +Rp2569 +(dp2570 +g2024 +F1.8823529411764706 +ssg965 +(dp2571 +g2024 +F1.9199999999999999 +ssg973 +(dp2572 +g2024 +F1.9199999999999999 +ssg8 +(g12 +S's\x01\x00\x00' +p2573 +tp2574 +Rp2575 +(dp2576 +g2024 +F2.0 +ssg8 +(g12 +S'{\x00\x00\x00' +p2577 +tp2578 +Rp2579 +(dp2580 +g2024 +F2.0 +sssg49 +(dp2581 +g721 +(dp2582 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'\xa4\x00\x00\x00' +p2583 +tp2584 +Rp2585 +(dp2586 +g2024 +F5.6470588235294121 +ssg57 +(dp2587 +g2024 +F5.6470588235294121 +ssg65 +(dp2588 +g2024 +F6.0 +ssg8 +(g12 +S'\x8e\x01\x00\x00' +p2589 +tp2590 +Rp2591 +(dp2592 +g2024 +F6.4000000000000004 +ssg465 +(dp2593 +g2024 +F6.8571428571428568 +ssg113 +(dp2594 +g2024 +F2.9090909090909092 +ssg8 +(g12 +S'\xb2\x00\x00\x00' +p2595 +tp2596 +Rp2597 +(dp2598 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'u\x01\x00\x00' +p2599 +tp2600 +Rp2601 +(dp2602 +g2024 +F7.384615384615385 +ssg497 +(dp2603 +g2024 +F5.6470588235294121 +ssg513 +(dp2604 +g2024 +F6.0 +sssg53 +(dp2605 +g21 +g2044 +sg1065 +(dp2606 +g2024 +F13.714285714285714 +sssg57 +(dp2607 +g49 +g2587 +sg61 +(dp2608 +g2024 +F4.7999999999999998 +ssg65 +(dp2609 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'O\x01\x00\x00' +p2610 +tp2611 +Rp2612 +(dp2613 +g2024 +F12.0 +ssg205 +(dp2614 +g2024 +F10.666666666666666 +ssg513 +(dp2615 +g2024 +F8.7272727272727266 +sssg61 +(dp2616 +g401 +(dp2617 +g2024 +F4.7999999999999998 +ssg1173 +(dp2618 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'B\x00\x00\x00' +p2619 +tp2620 +Rp2621 +(dp2622 +g2024 +F5.333333333333333 +ssg125 +(dp2623 +g2024 +F3.4285714285714284 +ssg405 +(dp2624 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'i\x01\x00\x00' +p2625 +tp2626 +Rp2627 +(dp2628 +g2024 +F5.6470588235294121 +ssg57 +g2608 +sg205 +(dp2629 +g2024 +F5.6470588235294121 +ssg8 +(g12 +S'\xb0\x01\x00\x00' +p2630 +tp2631 +Rp2632 +(dp2633 +g2024 +F6.0 +ssg8 +(g12 +S'O\x01\x00\x00' +p2634 +tp2635 +Rp2636 +(dp2637 +g2024 +F6.0 +ssg877 +(dp2638 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'\x1b\x01\x00\x00' +p2639 +tp2640 +Rp2641 +(dp2642 +g2024 +F4.7999999999999998 +ssg513 +(dp2643 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'\xbd\x00\x00\x00' +p2644 +tp2645 +Rp2646 +(dp2647 +g2024 +F5.6470588235294121 +sssg65 +(dp2648 +g49 +g2588 +sg465 +(dp2649 +g2024 +F12.0 +ssg57 +g2609 +sg8 +(g12 +S'\xb2\x01\x00\x00' +p2650 +tp2651 +Rp2652 +(dp2653 +g2024 +F13.714285714285714 +ssI47 +(dp2654 +g2024 +F12.0 +sssg69 +(dp2655 +g145 +(dp2656 +g2024 +F3.3103448275862069 +ssg21 +g2046 +sg8 +(g12 +S'\x82\x00\x00\x00' +p2657 +tp2658 +Rp2659 +(dp2660 +g2024 +F4.3636363636363633 +ssg29 +g2187 +sg1057 +(dp2661 +g2024 +F4.3636363636363633 +ssg165 +(dp2662 +g2024 +F4.3636363636363633 +ssg173 +(dp2663 +g2024 +F3.6923076923076925 +ssg597 +(dp2664 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'\xca\x00\x00\x00' +p2665 +tp2666 +Rp2667 +(dp2668 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'\xcd\x01\x00\x00' +p2669 +tp2670 +Rp2671 +(dp2672 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'1\x01\x00\x00' +p2673 +tp2674 +Rp2675 +(dp2676 +g2024 +F4.7999999999999998 +ssg1117 +(dp2677 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'\xc0\x01\x00\x00' +p2678 +tp2679 +Rp2680 +(dp2681 +g2024 +F5.0526315789473681 +ssg233 +(dp2682 +g2024 +F4.7999999999999998 +ssg749 +(dp2683 +g2024 +F5.0526315789473681 +ssg1393 +(dp2684 +g2024 +F5.0526315789473681 +ssg161 +(dp2685 +g2024 +F2.3999999999999999 +sssg73 +(dp2686 +g8 +(g12 +S'\x83\x01\x00\x00' +p2687 +tp2688 +Rp2689 +(dp2690 +g2024 +F3.5555555555555554 +ssg8 +(g12 +S'\x0b\x01\x00\x00' +p2691 +tp2692 +Rp2693 +(dp2694 +g2024 +F3.2000000000000002 +ssg637 +(dp2695 +g2024 +F3.096774193548387 +ssg161 +(dp2696 +g2024 +F2.0425531914893615 +ssg8 +(g12 +S'\xa5\x00\x00\x00' +p2697 +tp2698 +Rp2699 +(dp2700 +g2024 +F3.5555555555555554 +ssg221 +(dp2701 +g2024 +F2.9090909090909092 +ssg8 +(g12 +S'4\x01\x00\x00' +p2702 +tp2703 +Rp2704 +(dp2705 +g2024 +F3.2000000000000002 +ssg8 +(g12 +S'\xb8\x01\x00\x00' +p2706 +tp2707 +Rp2708 +(dp2709 +g2024 +F3.5555555555555554 +ssg8 +(g12 +S'\xb9\x01\x00\x00' +p2710 +tp2711 +Rp2712 +(dp2713 +g2024 +F3.6923076923076925 +ssg8 +(g12 +S';\x00\x00\x00' +p2714 +tp2715 +Rp2716 +(dp2717 +g2024 +F2.5945945945945947 +ssg257 +(dp2718 +g2024 +F3.5555555555555554 +ssg813 +(dp2719 +g2024 +F3.2000000000000002 +ssg8 +(g12 +S'H\x01\x00\x00' +p2720 +tp2721 +Rp2722 +(dp2723 +g2024 +F3.3103448275862069 +ssg8 +(g12 +S'\xce\x01\x00\x00' +p2724 +tp2725 +Rp2726 +(dp2727 +g2024 +F3.6923076923076925 +ssg341 +(dp2728 +g2024 +F3.4285714285714284 +ssg857 +(dp2729 +g2024 +F3.6923076923076925 +ssg873 +(dp2730 +g2024 +F3.3103448275862069 +ssg381 +(dp2731 +g2024 +F2.9090909090909092 +ssg413 +(dp2732 +g2024 +F3.096774193548387 +ssg8 +(g12 +S'\xbc\x01\x00\x00' +p2733 +tp2734 +Rp2735 +(dp2736 +g2024 +F3.6923076923076925 +ssg441 +(dp2737 +g2024 +F3.0 +ssg453 +(dp2738 +g2024 +F3.096774193548387 +ssg457 +(dp2739 +g2024 +F3.6923076923076925 +ssg8 +(g12 +S'\xf4\x00\x00\x00' +p2740 +tp2741 +Rp2742 +(dp2743 +g2024 +F3.3103448275862069 +sssg77 +(dp2744 +g789 +(dp2745 +g2024 +F8.0 +ssg309 +(dp2746 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'\x90\x01\x00\x00' +p2747 +tp2748 +Rp2749 +(dp2750 +g2024 +F10.666666666666666 +ssI341 +(dp2751 +g2024 +F7.384615384615385 +ssg125 +(dp2752 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'\x1f\x00\x00\x00' +p2753 +tp2754 +Rp2755 +(dp2756 +g2024 +F7.384615384615385 +sssg81 +(dp2757 +g149 +(dp2758 +g2024 +F4.3636363636363633 +ssg1049 +(dp2759 +g2024 +F4.7999999999999998 +ssg37 +g2335 +sg8 +(g12 +S'a\x01\x00\x00' +p2760 +tp2761 +Rp2762 +(dp2763 +g2024 +F4.3636363636363633 +ssg8 +(g12 +S'I\x01\x00\x00' +p2764 +tp2765 +Rp2766 +(dp2767 +g2024 +F5.333333333333333 +ssg833 +(dp2768 +g2024 +F5.6470588235294121 +ssg845 +(dp2769 +g2024 +F4.3636363636363633 +ssg8 +(g12 +S'P\x01\x00\x00' +p2770 +tp2771 +Rp2772 +(dp2773 +g2024 +F5.333333333333333 +ssg8 +(g12 +S'l\x00\x00\x00' +p2774 +tp2775 +Rp2776 +(dp2777 +g2024 +F6.0 +ssg217 +(dp2778 +g2024 +F3.5555555555555554 +ssg105 +(dp2779 +g2024 +F5.6470588235294121 +ssg8 +(g12 +S'w\x00\x00\x00' +p2780 +tp2781 +Rp2782 +(dp2783 +g2024 +F4.7999999999999998 +ssg693 +(dp2784 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'}\x01\x00\x00' +p2785 +tp2786 +Rp2787 +(dp2788 +g2024 +F5.6470588235294121 +ssg8 +(g12 +S'\xdf\x00\x00\x00' +p2789 +tp2790 +Rp2791 +(dp2792 +g2024 +F6.0 +sssg85 +(dp2793 +g8 +(g12 +S'A\x01\x00\x00' +p2794 +tp2795 +Rp2796 +(dp2797 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'\xe2\x01\x00\x00' +p2798 +tp2799 +Rp2800 +(dp2801 +g2024 +F8.7272727272727266 +ssg805 +(dp2802 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'\x14\x01\x00\x00' +p2803 +tp2804 +Rp2805 +(dp2806 +g2024 +F8.0 +ssg613 +(dp2807 +g2024 +F8.0 +ssg8 +(g12 +S';\x01\x00\x00' +p2808 +tp2809 +Rp2810 +(dp2811 +g2024 +F8.0 +ssg393 +(dp2812 +g2024 +F7.384615384615385 +sssg89 +(dp2813 +g145 +(dp2814 +g2024 +F5.0526315789473681 +ssg29 +g2188 +sg8 +(g12 +S'\xcd\x01\x00\x00' +p2815 +tp2816 +Rp2817 +(dp2818 +g2024 +F9.5999999999999996 +ssg1237 +(dp2819 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\xf2\x01\x00\x00' +p2820 +tp2821 +Rp2822 +(dp2823 +g2024 +F10.666666666666666 +ssg361 +(dp2824 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\x19\x00\x00\x00' +p2825 +tp2826 +Rp2827 +(dp2828 +g2024 +F6.8571428571428568 +sssg93 +(dp2829 +g8 +(g12 +S'@\x01\x00\x00' +p2830 +tp2831 +Rp2832 +(dp2833 +g2024 +F10.666666666666666 +ssg1701 +(dp2834 +g2024 +F10.666666666666666 +ssg45 +g2467 +sg8 +(g12 +S'N\x01\x00\x00' +p2835 +tp2836 +Rp2837 +(dp2838 +g2024 +F8.7272727272727266 +ssg1273 +(dp2839 +g2024 +F7.384615384615385 +ssI349 +(dp2840 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\xbe\x01\x00\x00' +p2841 +tp2842 +Rp2843 +(dp2844 +g2024 +F8.0 +sssg97 +(dp2845 +g209 +(dp2846 +g2024 +F8.0 +ssg193 +(dp2847 +g2024 +F6.8571428571428568 +ssI83 +(dp2848 +g2024 +F12.0 +ssg129 +(dp2849 +g2024 +F5.0526315789473681 +ssg197 +(dp2850 +g2024 +F8.7272727272727266 +sssg101 +(dp2851 +g8 +(g12 +S' \x01\x00\x00' +p2852 +tp2853 +Rp2854 +(dp2855 +g2024 +F4.5714285714285712 +ssg8 +(g12 +S'\x10\x01\x00\x00' +p2856 +tp2857 +Rp2858 +(dp2859 +g2024 +F3.6923076923076925 +ssg125 +(dp2860 +g2024 +F3.0 +ssg8 +(g12 +S'E\x01\x00\x00' +p2861 +tp2862 +Rp2863 +(dp2864 +g2024 +F4.3636363636363633 +ssg8 +(g12 +S'\x88\x01\x00\x00' +p2865 +tp2866 +Rp2867 +(dp2868 +g2024 +F4.1739130434782608 +ssg8 +(g12 +S'\xea\x01\x00\x00' +p2869 +tp2870 +Rp2871 +(dp2872 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'n\x01\x00\x00' +p2873 +tp2874 +Rp2875 +(dp2876 +g2024 +F4.5714285714285712 +ssg8 +(g12 +S'\xb0\x00\x00\x00' +p2877 +tp2878 +Rp2879 +(dp2880 +g2024 +F3.5555555555555554 +ssg8 +(g12 +S'\xd1\x00\x00\x00' +p2881 +tp2882 +Rp2883 +(dp2884 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S's\x00\x00\x00' +p2885 +tp2886 +Rp2887 +(dp2888 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'\xb6\x00\x00\x00' +p2889 +tp2890 +Rp2891 +(dp2892 +g2024 +F4.1739130434782608 +ssg1005 +(dp2893 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'\xb8\x00\x00\x00' +p2894 +tp2895 +Rp2896 +(dp2897 +g2024 +F4.3636363636363633 +ssg117 +(dp2898 +g2024 +F3.8399999999999999 +ssg8 +(g12 +S'\xd9\x00\x00\x00' +p2899 +tp2900 +Rp2901 +(dp2902 +g2024 +F4.3636363636363633 +ssg8 +(g12 +S'[\x01\x00\x00' +p2903 +tp2904 +Rp2905 +(dp2906 +g2024 +F4.1739130434782608 +ssg8 +(g12 +S'V\x00\x00\x00' +p2907 +tp2908 +Rp2909 +(dp2910 +g2024 +F4.0 +ssg8 +(g12 +S'\xde\x01\x00\x00' +p2911 +tp2912 +Rp2913 +(dp2914 +g2024 +F4.3636363636363633 +sssg105 +(dp2915 +g81 +g2779 +sg1429 +(dp2916 +g2024 +F10.666666666666666 +sssg109 +(dp2917 +g1045 +(dp2918 +g2024 +F13.714285714285714 +ssg417 +(dp2919 +g2024 +F13.714285714285714 +ssg117 +(dp2920 +g2024 +F9.5999999999999996 +sssg113 +(dp2921 +g33 +g2314 +sg8 +(g12 +S'\x86\x00\x00\x00' +p2922 +tp2923 +Rp2924 +(dp2925 +g2024 +F4.0 +ssg49 +g2594 +sg601 +(dp2926 +g2024 +F4.0 +ssg201 +(dp2927 +g2024 +F3.5555555555555554 +ssg8 +(g12 +S'\x97\x00\x00\x00' +p2928 +tp2929 +Rp2930 +(dp2931 +g2024 +F4.0 +ssg8 +(g12 +S'"\x01\x00\x00' +p2932 +tp2933 +Rp2934 +(dp2935 +g2024 +F4.0 +ssg1181 +(dp2936 +g2024 +F3.5555555555555554 +ssg8 +(g12 +S'+\x00\x00\x00' +p2937 +tp2938 +Rp2939 +(dp2940 +g2024 +F4.1739130434782608 +ssg709 +(dp2941 +g2024 +F3.6923076923076925 +ssg8 +(g12 +S'.\x01\x00\x00' +p2942 +tp2943 +Rp2944 +(dp2945 +g2024 +F3.6923076923076925 +ssg721 +(dp2946 +g2024 +F3.096774193548387 +ssg8 +(g12 +S'\xb4\x00\x00\x00' +p2947 +tp2948 +Rp2949 +(dp2950 +g2024 +F4.0 +ssg8 +(g12 +S'\xf5\x00\x00\x00' +p2951 +tp2952 +Rp2953 +(dp2954 +g2024 +F4.1739130434782608 +ssg8 +(g12 +S'\xc5\x01\x00\x00' +p2955 +tp2956 +Rp2957 +(dp2958 +g2024 +F3.8399999999999999 +ssg8 +(g12 +S'\xc9\x01\x00\x00' +p2959 +tp2960 +Rp2961 +(dp2962 +g2024 +F4.1739130434782608 +ssg8 +(g12 +S'\xd0\x00\x00\x00' +p2963 +tp2964 +Rp2965 +(dp2966 +g2024 +F4.1739130434782608 +ssg8 +(g12 +S'R\x01\x00\x00' +p2967 +tp2968 +Rp2969 +(dp2970 +g2024 +F4.0 +ssg1469 +(dp2971 +g2024 +F3.6923076923076925 +ssg481 +(dp2972 +g2024 +F4.0 +ssg8 +(g12 +S'u\x01\x00\x00' +p2973 +tp2974 +Rp2975 +(dp2976 +g2024 +F4.0 +ssg521 +(dp2977 +g2024 +F3.5555555555555554 +sssg117 +(dp2978 +g145 +(dp2979 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'\x80\x00\x00\x00' +p2980 +tp2981 +Rp2982 +(dp2983 +g2024 +F12.0 +ssg1045 +(dp2984 +g2024 +F8.7272727272727266 +ssg89 +g2828 +sg101 +g2898 +sI86 +(dp2985 +g2024 +F7.384615384615385 +ssg109 +g2920 +ssg121 +(dp2986 +g661 +(dp2987 +g2024 +F9.5999999999999996 +ssg293 +(dp2988 +g2024 +F5.6470588235294121 +ssg789 +(dp2989 +g2024 +F8.0 +ssg8 +(g12 +S'N\x00\x00\x00' +p2990 +tp2991 +Rp2992 +(dp2993 +g2024 +F9.5999999999999996 +ssI341 +(dp2994 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'e\x01\x00\x00' +p2995 +tp2996 +Rp2997 +(dp2998 +g2024 +F10.666666666666666 +sssg125 +(dp2999 +g1461 +(dp3000 +g2024 +F5.6470588235294121 +ssg8 +(g12 +S'\xea\x01\x00\x00' +p3001 +tp3002 +Rp3003 +(dp3004 +g2024 +F6.0 +ssg61 +g2623 +sg1349 +(dp3005 +g2024 +F4.7999999999999998 +ssg77 +g2752 +sg1105 +(dp3006 +g2024 +F4.3636363636363633 +ssg753 +(dp3007 +g2024 +F5.333333333333333 +ssg8 +(g12 +S'\xd4\x01\x00\x00' +p3008 +tp3009 +Rp3010 +(dp3011 +g2024 +F5.333333333333333 +ssg101 +g2860 +sg181 +(dp3012 +g2024 +F3.8399999999999999 +ssg1265 +(dp3013 +g2024 +F5.333333333333333 +ssg8 +(g12 +S'\xad\x01\x00\x00' +p3014 +tp3015 +Rp3016 +(dp3017 +g2024 +F5.6470588235294121 +ssg513 +(dp3018 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'U\x01\x00\x00' +p3019 +tp3020 +Rp3021 +(dp3022 +g2024 +F4.5714285714285712 +sssg129 +(dp3023 +g8 +(g12 +S'@\x00\x00\x00' +p3024 +tp3025 +Rp3026 +(dp3027 +g2024 +F5.6470588235294121 +ssg8 +(g12 +S'b\x01\x00\x00' +p3028 +tp3029 +Rp3030 +(dp3031 +g2024 +F5.333333333333333 +ssg285 +(dp3032 +g2024 +F4.3636363636363633 +ssg557 +(dp3033 +g2024 +F5.0526315789473681 +ssg817 +(dp3034 +g2024 +F4.5714285714285712 +ssg8 +(g12 +S'*\x00\x00\x00' +p3035 +tp3036 +Rp3037 +(dp3038 +g2024 +F3.5555555555555554 +ssg317 +(dp3039 +g2024 +F4.7999999999999998 +ssg197 +(dp3040 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'\xce\x00\x00\x00' +p3041 +tp3042 +Rp3043 +(dp3044 +g2024 +F5.6470588235294121 +ssg209 +(dp3045 +g2024 +F4.5714285714285712 +ssg1453 +(dp3046 +g2024 +F5.6470588235294121 +ssg97 +g2849 +sg229 +(dp3047 +g2024 +F4.5714285714285712 +ssg969 +(dp3048 +g2024 +F5.333333333333333 +sssg133 +(dp3049 +g8 +(g12 +S'\xe5\x00\x00\x00' +p3050 +tp3051 +Rp3052 +(dp3053 +g2024 +F7.384615384615385 +ssg41 +g2375 +sg8 +(g12 +S'\xc7\x00\x00\x00' +p3054 +tp3055 +Rp3056 +(dp3057 +g2024 +F5.6470588235294121 +ssg8 +(g12 +S'(\x01\x00\x00' +p3058 +tp3059 +Rp3060 +(dp3061 +g2024 +F6.8571428571428568 +ssg949 +(dp3062 +g2024 +F5.0526315789473681 +ssg185 +(dp3063 +g2024 +F4.0 +ssg8 +(g12 +S'\x12\x01\x00\x00' +p3064 +tp3065 +Rp3066 +(dp3067 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'u\x00\x00\x00' +p3068 +tp3069 +Rp3070 +(dp3071 +g2024 +F6.4000000000000004 +ssg8 +(g12 +S'\x98\x00\x00\x00' +p3072 +tp3073 +Rp3074 +(dp3075 +g2024 +F5.333333333333333 +ssg637 +(dp3076 +g2024 +F5.333333333333333 +ssg265 +(dp3077 +g2024 +F6.4000000000000004 +sssg137 +(dp3078 +g21 +g2060 +sg1561 +(dp3079 +g2024 +F9.5999999999999996 +ssg29 +g2205 +sg8 +(g12 +S'\xe1\x00\x00\x00' +p3080 +tp3081 +Rp3082 +(dp3083 +g2024 +F8.7272727272727266 +ssg321 +(dp3084 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'B\x01\x00\x00' +p3085 +tp3086 +Rp3087 +(dp3088 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'o\x01\x00\x00' +p3089 +tp3090 +Rp3091 +(dp3092 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'>\x01\x00\x00' +p3093 +tp3094 +Rp3095 +(dp3096 +g2024 +F9.5999999999999996 +sssg141 +(dp3097 +g817 +(dp3098 +g2024 +F6.8571428571428568 +ssg309 +(dp3099 +g2024 +F8.0 +ssg197 +(dp3100 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\xee\x01\x00\x00' +p3101 +tp3102 +Rp3103 +(dp3104 +g2024 +F10.666666666666666 +ssg77 +g2756 +sI333 +(dp3105 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'8\x01\x00\x00' +p3106 +tp3107 +Rp3108 +(dp3109 +g2024 +F8.7272727272727266 +sssg145 +(dp3110 +g1045 +(dp3111 +g2024 +F6.0 +ssg8 +(g12 +S'e\x00\x00\x00' +p3112 +tp3113 +Rp3114 +(dp3115 +g2024 +F4.0 +ssg8 +(g12 +S'\xe6\x01\x00\x00' +p3116 +tp3117 +Rp3118 +(dp3119 +g2024 +F6.8571428571428568 +ssg941 +(dp3120 +g2024 +F6.4000000000000004 +ssg597 +(dp3121 +g2024 +F6.4000000000000004 +ssg173 +(dp3122 +g2024 +F4.5714285714285712 +ssg69 +g2656 +sg333 +(dp3123 +g2024 +F5.333333333333333 +ssg1237 +(dp3124 +g2024 +F6.4000000000000004 +ssg89 +g2814 +sg8 +(g12 +S'\x13\x01\x00\x00' +p3125 +tp3126 +Rp3127 +(dp3128 +g2024 +F6.8571428571428568 +ssg117 +g2979 +ssg149 +(dp3129 +g8 +(g12 +S'P\x01\x00\x00' +p3130 +tp3131 +Rp3132 +(dp3133 +g2024 +F9.5999999999999996 +ssg37 +g2317 +sg8 +(g12 +S'\xcb\x01\x00\x00' +p3134 +tp3135 +Rp3136 +(dp3137 +g2024 +F10.666666666666666 +ssg81 +g2758 +sg8 +(g12 +S't\x01\x00\x00' +p3138 +tp3139 +Rp3140 +(dp3141 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'w\x00\x00\x00' +p3142 +tp3143 +Rp3144 +(dp3145 +g2024 +F8.0 +ssg8 +(g12 +S'\x99\x01\x00\x00' +p3146 +tp3147 +Rp3148 +(dp3149 +g2024 +F8.7272727272727266 +sssg153 +(dp3150 +g1149 +(dp3151 +g2024 +F13.714285714285714 +sssg157 +(dp3152 +g45 +g2484 +sg8 +(g12 +S'\xeb\x01\x00\x00' +p3153 +tp3154 +Rp3155 +(dp3156 +g2024 +F10.666666666666666 +ssg965 +(dp3157 +g2024 +F12.0 +ssI326 +(dp3158 +g2024 +F9.5999999999999996 +ssg989 +(dp3159 +g2024 +F9.5999999999999996 +sssg161 +(dp3160 +g21 +g2061 +sg1057 +(dp3161 +g2024 +F3.4285714285714284 +ssg1081 +(dp3162 +g2024 +F3.6923076923076925 +ssg69 +g2685 +sg73 +g2696 +sg1157 +(dp3163 +g2024 +F3.4285714285714284 +ssg8 +(g12 +S'$\x01\x00\x00' +p3164 +tp3165 +Rp3166 +(dp3167 +g2024 +F3.5555555555555554 +ssg173 +(dp3168 +g2024 +F3.0 +ssg8 +(g12 +S'\xa8\x01\x00\x00' +p3169 +tp3170 +Rp3171 +(dp3172 +g2024 +F3.5555555555555554 +ssg8 +(g12 +S'\xab\x00\x00\x00' +p3173 +tp3174 +Rp3175 +(dp3176 +g2024 +F3.6923076923076925 +ssg741 +(dp3177 +g2024 +F3.5555555555555554 +ssg8 +(g12 +S'\xb7\x00\x00\x00' +p3178 +tp3179 +Rp3180 +(dp3181 +g2024 +F3.8399999999999999 +ssg8 +(g12 +S'\xb8\x01\x00\x00' +p3182 +tp3183 +Rp3184 +(dp3185 +g2024 +F3.6923076923076925 +ssg249 +(dp3186 +g2024 +F3.5555555555555554 +ssg8 +(g12 +S'C\x01\x00\x00' +p3187 +tp3188 +Rp3189 +(dp3190 +g2024 +F3.8399999999999999 +ssg8 +(g12 +S'H\x01\x00\x00' +p3191 +tp3192 +Rp3193 +(dp3194 +g2024 +F3.4285714285714284 +ssg341 +(dp3195 +g2024 +F3.5555555555555554 +ssg345 +(dp3196 +g2024 +F2.4615384615384617 +ssg365 +(dp3197 +g2024 +F3.4285714285714284 +ssg8 +(g12 +S'c\x00\x00\x00' +p3198 +tp3199 +Rp3200 +(dp3201 +g2024 +F3.2000000000000002 +ssg929 +(dp3202 +g2024 +F3.5555555555555554 +ssg421 +(dp3203 +g2024 +F2.7428571428571429 +ssg8 +(g12 +S'o\x00\x00\x00' +p3204 +tp3205 +Rp3206 +(dp3207 +g2024 +F3.8399999999999999 +sssg165 +(dp3208 +g689 +(dp3209 +g2024 +F10.666666666666666 +ssg21 +g2062 +sg825 +(dp3210 +g2024 +F13.714285714285714 +ssg29 +g2201 +sg69 +g2662 +ssg169 +(dp3211 +g385 +(dp3212 +g2024 +F32.0 +sssg173 +(dp3213 +g8 +(g12 +S'\xc0\x01\x00\x00' +p3214 +tp3215 +Rp3216 +(dp3217 +g2024 +F8.7272727272727266 +ssg145 +g3122 +sg161 +g3168 +sg421 +(dp3218 +g2024 +F4.5714285714285712 +ssg8 +(g12 +S'\xe6\x01\x00\x00' +p3219 +tp3220 +Rp3221 +(dp3222 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'\xe7\x00\x00\x00' +p3223 +tp3224 +Rp3225 +(dp3226 +g2024 +F8.0 +ssg69 +g2663 +sg8 +(g12 +S'\x91\x00\x00\x00' +p3227 +tp3228 +Rp3229 +(dp3230 +g2024 +F8.0 +ssg8 +(g12 +S'X\x01\x00\x00' +p3231 +tp3232 +Rp3233 +(dp3234 +g2024 +F8.7272727272727266 +sssg177 +(dp3235 +I345 +(dp3236 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'c\x01\x00\x00' +p3237 +tp3238 +Rp3239 +(dp3240 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'\xb3\x00\x00\x00' +p3241 +tp3242 +Rp3243 +(dp3244 +g2024 +F10.666666666666666 +ssg253 +(dp3245 +g2024 +F5.333333333333333 +ssI125 +(dp3246 +g2024 +F8.7272727272727266 +sssg181 +(dp3247 +g657 +(dp3248 +g2024 +F6.4000000000000004 +ssg8 +(g12 +S'\xe2\x00\x00\x00' +p3249 +tp3250 +Rp3251 +(dp3252 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\xe6\x00\x00\x00' +p3253 +tp3254 +Rp3255 +(dp3256 +g2024 +F6.0 +ssg433 +(dp3257 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'i\x01\x00\x00' +p3258 +tp3259 +Rp3260 +(dp3261 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'\xec\x01\x00\x00' +p3262 +tp3263 +Rp3264 +(dp3265 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'U\x01\x00\x00' +p3266 +tp3267 +Rp3268 +(dp3269 +g2024 +F5.333333333333333 +ssg877 +(dp3270 +g2024 +F5.6470588235294121 +ssg501 +(dp3271 +g2024 +F5.0526315789473681 +ssg125 +g3012 +sg773 +(dp3272 +g2024 +F6.8571428571428568 +sssg185 +(dp3273 +g273 +(dp3274 +g2024 +F6.0 +ssg285 +(dp3275 +g2024 +F4.5714285714285712 +ssg41 +g2386 +sg1453 +(dp3276 +g2024 +F6.0 +ssg8 +(g12 +S'\xc7\x00\x00\x00' +p3277 +tp3278 +Rp3279 +(dp3280 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'm\x00\x00\x00' +p3281 +tp3282 +Rp3283 +(dp3284 +g2024 +F4.7999999999999998 +ssg841 +(dp3285 +g2024 +F6.0 +ssg589 +(dp3286 +g2024 +F6.0 +ssg209 +(dp3287 +g2024 +F4.7999999999999998 +ssg1113 +(dp3288 +g2024 +F6.4000000000000004 +ssg485 +(dp3289 +g2024 +F5.6470588235294121 +ssg129 +g3038 +sg133 +g3063 +ssg189 +(dp3290 +g113 +g2940 +ssg193 +(dp3291 +g789 +(dp3292 +g2024 +F6.4000000000000004 +ssg8 +(g12 +S'E\x00\x00\x00' +p3293 +tp3294 +Rp3295 +(dp3296 +g2024 +F4.7999999999999998 +ssg41 +g2387 +sg8 +(g12 +S'\xa1\x00\x00\x00' +p3297 +tp3298 +Rp3299 +(dp3300 +g2024 +F7.384615384615385 +ssg309 +(dp3301 +g2024 +F6.8571428571428568 +ssg209 +(dp3302 +g2024 +F6.0 +ssg349 +(dp3303 +g2024 +F8.0 +ssg97 +g2847 +sg8 +(g12 +S'\x17\x01\x00\x00' +p3304 +tp3305 +Rp3306 +(dp3307 +g2024 +F8.0 +sssg197 +(dp3308 +I200 +(dp3309 +g2024 +F7.384615384615385 +ssg309 +(dp3310 +g2024 +F8.7272727272727266 +ssg349 +(dp3311 +g2024 +F10.666666666666666 +ssg97 +g2850 +sg129 +g3040 +sg141 +g3100 +ssg201 +(dp3312 +g8 +(g12 +S'\xe5\x01\x00\x00' +p3313 +tp3314 +Rp3315 +(dp3316 +g2024 +F16.0 +ssg709 +(dp3317 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'\xf2\x00\x00\x00' +p3318 +tp3319 +Rp3320 +(dp3321 +g2024 +F10.666666666666666 +ssg113 +g2927 +sg8 +(g12 +S'~\x00\x00\x00' +p3322 +tp3323 +Rp3324 +(dp3325 +g2024 +F9.5999999999999996 +sssg205 +(dp3326 +g57 +g2614 +sg61 +g2629 +sg65 +g2654 +ssg209 +(dp3327 +g273 +(dp3328 +g2024 +F9.5999999999999996 +ssg41 +g2388 +sg185 +g3287 +sg193 +g3302 +sg841 +(dp3329 +g2024 +F9.5999999999999996 +ssg97 +g2846 +sg129 +g3045 +ssg213 +(dp3330 +g41 +g2392 +ssg217 +(dp3331 +g8 +(g12 +S'\x03\x01\x00\x00' +p3332 +tp3333 +Rp3334 +(dp3335 +g2024 +F5.6470588235294121 +ssg1061 +(dp3336 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'I\x01\x00\x00' +p3337 +tp3338 +Rp3339 +(dp3340 +g2024 +F6.4000000000000004 +ssg1213 +(dp3341 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'\xcc\x00\x00\x00' +p3342 +tp3343 +Rp3344 +(dp3345 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'\xae\x01\x00\x00' +p3346 +tp3347 +Rp3348 +(dp3349 +g2024 +F6.0 +ssg845 +(dp3350 +g2024 +F5.0526315789473681 +ssg81 +g2778 +sg8 +(g12 +S'\x95\x01\x00\x00' +p3351 +tp3352 +Rp3353 +(dp3354 +g2024 +F6.8571428571428568 +ssg253 +(dp3355 +g2024 +F3.8399999999999999 +ssg37 +g2337 +sg653 +(dp3356 +g2024 +F6.0 +sssg221 +(dp3357 +g285 +(dp3358 +g2024 +F5.6470588235294121 +ssg421 +(dp3359 +g2024 +F4.5714285714285712 +ssg557 +(dp3360 +g2024 +F6.8571428571428568 +ssg73 +g2701 +sg8 +(g12 +S'\xd2\x00\x00\x00' +p3361 +tp3362 +Rp3363 +(dp3364 +g2024 +F8.7272727272727266 +ssg993 +(dp3365 +g2024 +F6.8571428571428568 +ssg873 +(dp3366 +g2024 +F6.8571428571428568 +ssg1013 +(dp3367 +g2024 +F5.6470588235294121 +ssg8 +(g12 +S'\xb9\x01\x00\x00' +p3368 +tp3369 +Rp3370 +(dp3371 +g2024 +F8.7272727272727266 +sssg225 +(dp3372 +g1489 +(dp3373 +g2024 +F10.666666666666666 +ssg885 +(dp3374 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'[\x01\x00\x00' +p3375 +tp3376 +Rp3377 +(dp3378 +g2024 +F9.5999999999999996 +ssg361 +(dp3379 +g2024 +F8.7272727272727266 +ssg29 +g2204 +ssg229 +(dp3380 +g421 +(dp3381 +g2024 +F5.0526315789473681 +ssg8 +(g12 +S'G\x01\x00\x00' +p3382 +tp3383 +Rp3384 +(dp3385 +g2024 +F9.5999999999999996 +ssg317 +(dp3386 +g2024 +F7.384615384615385 +ssg969 +(dp3387 +g2024 +F8.7272727272727266 +ssg333 +(dp3388 +g2024 +F7.384615384615385 +ssg1013 +(dp3389 +g2024 +F6.4000000000000004 +ssg129 +g3047 +ssg233 +(dp3390 +g537 +(dp3391 +g2024 +F12.0 +ssg29 +g2225 +sg69 +g2682 +ssg237 +(dp3392 +g353 +(dp3393 +g2024 +F10.666666666666666 +ssg41 +g2397 +ssg241 +(dp3394 +g17 +g2028 +sg45 +g2512 +ssg245 +(dp3395 +g665 +(dp3396 +g2024 +F32.0 +ssg8 +(g12 +S'K\x01\x00\x00' +p3397 +tp3398 +Rp3399 +(dp3400 +g2024 +F24.0 +sssg249 +(dp3401 +g21 +g2084 +sg8 +(g12 +S'\n\x01\x00\x00' +p3402 +tp3403 +Rp3404 +(dp3405 +g2024 +F13.714285714285714 +ssg161 +g3186 +sg345 +(dp3406 +g2024 +F4.7999999999999998 +sssg253 +(dp3407 +g8 +(g12 +S'\x80\x01\x00\x00' +p3408 +tp3409 +Rp3410 +(dp3411 +g2024 +F5.333333333333333 +ssg8 +(g12 +S'\x03\x01\x00\x00' +p3412 +tp3413 +Rp3414 +(dp3415 +g2024 +F5.333333333333333 +ssg545 +(dp3416 +g2024 +F6.4000000000000004 +ssg177 +g3245 +sg8 +(g12 +S'\x0b\x01\x00\x00' +p3417 +tp3418 +Rp3419 +(dp3420 +g2024 +F5.0526315789473681 +ssg73 +g2717 +sg8 +(g12 +S'\xf0\x01\x00\x00' +p3421 +tp3422 +Rp3423 +(dp3424 +g2024 +F6.0 +ssg217 +g3355 +sg1437 +(dp3425 +g2024 +F6.4000000000000004 +ssg625 +(dp3426 +g2024 +F4.7999999999999998 +ssg381 +(dp3427 +g2024 +F4.3636363636363633 +ssg8 +(g12 +S'\xdd\x00\x00\x00' +p3428 +tp3429 +Rp3430 +(dp3431 +g2024 +F5.0526315789473681 +ssg653 +(dp3432 +g2024 +F5.6470588235294121 +sssg257 +(dp3433 +g381 +(dp3434 +g2024 +F8.0 +ssg8 +(g12 +S'\xa5\x00\x00\x00' +p3435 +tp3436 +Rp3437 +(dp3438 +g2024 +F16.0 +ssg73 +g2718 +ssg261 +(dp3439 +g29 +g2215 +ssg265 +(dp3440 +g625 +(dp3441 +g2024 +F8.7272727272727266 +ssg637 +(dp3442 +g2024 +F8.7272727272727266 +ssg133 +g3077 +sI221 +(dp3443 +g2024 +F9.5999999999999996 +sssg269 +(dp3444 +I456 +(dp3445 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'N\x01\x00\x00' +p3446 +tp3447 +Rp3448 +(dp3449 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'/\x01\x00\x00' +p3450 +tp3451 +Rp3452 +(dp3453 +g2024 +F13.714285714285714 +ssI472 +(dp3454 +g2024 +F9.5999999999999996 +ssg1273 +(dp3455 +g2024 +F8.0 +ssI380 +(dp3456 +g2024 +F7.384615384615385 +sssg273 +(dp3457 +g209 +g3328 +sg185 +g3274 +sg129 +g3027 +ssg277 +(dp3458 +g429 +(dp3459 +g2024 +F13.714285714285714 +ssI154 +(dp3460 +g2024 +F9.5999999999999996 +ssg29 +g2220 +sg8 +(g12 +S'v\x01\x00\x00' +p3461 +tp3462 +Rp3463 +(dp3464 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'\xf3\x01\x00\x00' +p3465 +tp3466 +Rp3467 +(dp3468 +g2024 +F13.714285714285714 +sssg281 +(dp3469 +g401 +(dp3470 +g2024 +F9.5999999999999996 +ssg657 +(dp3471 +g2024 +F12.0 +ssg61 +g2622 +sg877 +(dp3472 +g2024 +F9.5999999999999996 +sssg285 +(dp3473 +g557 +(dp3474 +g2024 +F7.384615384615385 +ssg185 +g3275 +sg8 +(g12 +S'g\x01\x00\x00' +p3475 +tp3476 +Rp3477 +(dp3478 +g2024 +F8.7272727272727266 +ssg453 +(dp3479 +g2024 +F6.4000000000000004 +ssg8 +(g12 +S'\x8f\x00\x00\x00' +p3480 +tp3481 +Rp3482 +(dp3483 +g2024 +F8.7272727272727266 +ssg221 +g3358 +sg8 +(g12 +S'\xd6\x00\x00\x00' +p3484 +tp3485 +Rp3486 +(dp3487 +g2024 +F7.384615384615385 +ssg129 +g3032 +ssg289 +(dp3488 +g21 +g2100 +ssg293 +(dp3489 +g8 +(g12 +S'\xa1\x00\x00\x00' +p3490 +tp3491 +Rp3492 +(dp3493 +g2024 +F6.4000000000000004 +ssg8 +(g12 +S'\xa6\x00\x00\x00' +p3494 +tp3495 +Rp3496 +(dp3497 +g2024 +F6.0 +ssg41 +g2399 +sg45 +g2529 +sg193 +g3296 +sg8 +(g12 +S'\xef\x00\x00\x00' +p3498 +tp3499 +Rp3500 +(dp3501 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'\x94\x01\x00\x00' +p3502 +tp3503 +Rp3504 +(dp3505 +g2024 +F7.384615384615385 +ssg357 +(dp3506 +g2024 +F6.4000000000000004 +ssg8 +(g12 +S'\x17\x01\x00\x00' +p3507 +tp3508 +Rp3509 +(dp3510 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'\x99\x00\x00\x00' +p3511 +tp3512 +Rp3513 +(dp3514 +g2024 +F6.8571428571428568 +ssg121 +g2988 +ssg297 +(dp3515 +g8 +(g12 +S'\x9a\x01\x00\x00' +p3516 +tp3517 +Rp3518 +(dp3519 +g2024 +F32.0 +ssg1885 +(dp3520 +g2024 +F24.0 +sssg301 +(dp3521 +g537 +(dp3522 +g2024 +F13.714285714285714 +ssg29 +g2230 +ssg305 +(dp3523 +g569 +(dp3524 +g2024 +F10.666666666666666 +ssg33 +g2302 +ssg309 +(dp3525 +g789 +(dp3526 +g2024 +F8.7272727272727266 +ssg77 +g2746 +sg193 +g3301 +sg197 +g3310 +sg141 +g3099 +ssg313 +(dp3527 +g981 +(dp3528 +g2024 +F10.666666666666666 +ssg345 +(dp3529 +g2024 +F4.5714285714285712 +ssg769 +(dp3530 +g2024 +F10.666666666666666 +ssg549 +(dp3531 +g2024 +F8.0 +ssg8 +(g12 +S'\xd5\x01\x00\x00' +p3532 +tp3533 +Rp3534 +(dp3535 +g2024 +F12.0 +sssg317 +(dp3536 +g577 +(dp3537 +g2024 +F9.5999999999999996 +ssg333 +(dp3538 +g2024 +F8.0 +ssg229 +g3386 +sg377 +(dp3539 +g2024 +F9.5999999999999996 +ssg129 +g3039 +sg8 +(g12 +S'^\x01\x00\x00' +p3540 +tp3541 +Rp3542 +(dp3543 +g2024 +F8.7272727272727266 +sssg321 +(dp3544 +g8 +(g12 +S'\x82\x01\x00\x00' +p3545 +tp3546 +Rp3547 +(dp3548 +g2024 +F24.0 +ssg137 +g3084 +ssg325 +(dp3549 +I120 +(dp3550 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'2\x01\x00\x00' +p3551 +tp3552 +Rp3553 +(dp3554 +g2024 +F16.0 +ssg8 +(g12 +S'\xc4\x01\x00\x00' +p3555 +tp3556 +Rp3557 +(dp3558 +g2024 +F16.0 +ssg1033 +(dp3559 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'7\x01\x00\x00' +p3560 +tp3561 +Rp3562 +(dp3563 +g2024 +F9.5999999999999996 +sssg329 +(dp3564 +g121 +g2993 +sg45 +g2534 +sg8 +(g12 +S'e\x01\x00\x00' +p3565 +tp3566 +Rp3567 +(dp3568 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'\xef\x00\x00\x00' +p3569 +tp3570 +Rp3571 +(dp3572 +g2024 +F13.714285714285714 +sssg333 +(dp3573 +g145 +g3123 +sg8 +(g12 +S'\x01\x01\x00\x00' +p3574 +tp3575 +Rp3576 +(dp3577 +g2024 +F9.5999999999999996 +ssg417 +(dp3578 +g2024 +F9.5999999999999996 +ssg421 +(dp3579 +g2024 +F5.333333333333333 +ssg317 +g3538 +sg229 +g3388 +ssg337 +(dp3580 +g569 +(dp3581 +g2024 +F10.666666666666666 +ssg33 +g2308 +ssg341 +(dp3582 +g413 +(dp3583 +g2024 +F8.7272727272727266 +ssg161 +g3195 +sg8 +(g12 +S'\xab\x00\x00\x00' +p3584 +tp3585 +Rp3586 +(dp3587 +g2024 +F13.714285714285714 +ssg73 +g2728 +ssg345 +(dp3588 +g8 +(g12 +S'\x00\x01\x00\x00' +p3589 +tp3590 +Rp3591 +(dp3592 +g2024 +F5.0526315789473681 +ssg21 +g2105 +sg161 +g3196 +sg549 +(dp3593 +g2024 +F4.1739130434782608 +ssg741 +(dp3594 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'<\x01\x00\x00' +p3595 +tp3596 +Rp3597 +(dp3598 +g2024 +F4.5714285714285712 +ssg313 +g3529 +sg8 +(g12 +S'\xcd\x00\x00\x00' +p3599 +tp3600 +Rp3601 +(dp3602 +g2024 +F5.333333333333333 +ssg1505 +(dp3603 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'\xd5\x01\x00\x00' +p3604 +tp3605 +Rp3606 +(dp3607 +g2024 +F5.0526315789473681 +ssg493 +(dp3608 +g2024 +F4.5714285714285712 +ssg8 +(g12 +S'\x99\x01\x00\x00' +p3609 +tp3610 +Rp3611 +(dp3612 +g2024 +F4.7999999999999998 +ssg249 +g3406 +sg8 +(g12 +S'\\\x01\x00\x00' +p3613 +tp3614 +Rp3615 +(dp3616 +g2024 +F5.333333333333333 +ssg505 +(dp3617 +g2024 +F4.7999999999999998 +ssg8 +(g12 +S'\xff\x00\x00\x00' +p3618 +tp3619 +Rp3620 +(dp3621 +g2024 +F5.333333333333333 +sssg349 +(dp3622 +g97 +g2848 +sg193 +g3303 +sg197 +g3311 +ssg353 +(dp3623 +g41 +g2408 +sg8 +(g12 +S'\x08\x01\x00\x00' +p3624 +tp3625 +Rp3626 +(dp3627 +g2024 +F9.5999999999999996 +ssg613 +(dp3628 +g2024 +F8.0 +ssg237 +g3393 +sg8 +(g12 +S'\x9f\x01\x00\x00' +p3629 +tp3630 +Rp3631 +(dp3632 +g2024 +F9.5999999999999996 +ssI380 +(dp3633 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'\x15\x01\x00\x00' +p3634 +tp3635 +Rp3636 +(dp3637 +g2024 +F12.0 +sssg357 +(dp3638 +g629 +(dp3639 +g2024 +F13.714285714285714 +ssg293 +g3506 +sg41 +g2409 +sg681 +(dp3640 +g2024 +F10.666666666666666 +sssg361 +(dp3641 +g117 +g2985 +sg89 +g2824 +sg225 +g3379 +sg101 +g2910 +sg1005 +(dp3642 +g2024 +F12.0 +ssg8 +(g12 +S'\xd9\x00\x00\x00' +p3643 +tp3644 +Rp3645 +(dp3646 +g2024 +F9.5999999999999996 +sssg365 +(dp3647 +g1157 +(dp3648 +g2024 +F9.5999999999999996 +ssg605 +(dp3649 +g2024 +F9.5999999999999996 +ssg161 +g3197 +sg37 +g2346 +sg8 +(g12 +S'\xb5\x00\x00\x00' +p3650 +tp3651 +Rp3652 +(dp3653 +g2024 +F10.666666666666666 +sssg369 +(dp3654 +g21 +g2080 +ssg373 +(dp3655 +g785 +(dp3656 +g2024 +F8.7272727272727266 +ssg817 +(dp3657 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'M\x01\x00\x00' +p3658 +tp3659 +Rp3660 +(dp3661 +g2024 +F8.0 +ssg1889 +(dp3662 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\xbb\x01\x00\x00' +p3663 +tp3664 +Rp3665 +(dp3666 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\xde\x00\x00\x00' +p3667 +tp3668 +Rp3669 +(dp3670 +g2024 +F8.7272727272727266 +sssg377 +(dp3671 +g1105 +(dp3672 +g2024 +F8.0 +ssg317 +g3539 +sg417 +(dp3673 +g2024 +F12.0 +ssg8 +(g12 +S'^\x01\x00\x00' +p3674 +tp3675 +Rp3676 +(dp3677 +g2024 +F10.666666666666666 +sssg381 +(dp3678 +g8 +(g12 +S'\xa5\x00\x00\x00' +p3679 +tp3680 +Rp3681 +(dp3682 +g2024 +F8.0 +ssg441 +(dp3683 +g2024 +F5.6470588235294121 +ssg653 +(dp3684 +g2024 +F7.384615384615385 +ssg73 +g2731 +sg8 +(g12 +S'\xae\x01\x00\x00' +p3685 +tp3686 +Rp3687 +(dp3688 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\x96\x01\x00\x00' +p3689 +tp3690 +Rp3691 +(dp3692 +g2024 +F8.0 +ssg253 +g3427 +sg257 +g3434 +sg37 +g2347 +ssg385 +(dp3693 +g1049 +(dp3694 +g2024 +F13.714285714285714 +ssg169 +g3212 +ssg389 +(dp3695 +g8 +(g12 +S'\x88\x00\x00\x00' +p3696 +tp3697 +Rp3698 +(dp3699 +g2024 +F9.5999999999999996 +ssI464 +(dp3700 +g2024 +F12.0 +ssg8 +(g12 +S'\xed\x01\x00\x00' +p3701 +tp3702 +Rp3703 +(dp3704 +g2024 +F13.714285714285714 +ssg1321 +(dp3705 +g2024 +F9.5999999999999996 +ssg45 +g2506 +ssg393 +(dp3706 +g8 +(g12 +S'\xe2\x01\x00\x00' +p3707 +tp3708 +Rp3709 +(dp3710 +g2024 +F9.5999999999999996 +ssg41 +g2418 +sg949 +(dp3711 +g2024 +F6.8571428571428568 +ssg85 +g2812 +sg473 +(dp3712 +g2024 +F8.7272727272727266 +ssg1121 +(dp3713 +g2024 +F8.7272727272727266 +sssg397 +(dp3714 +g29 +g2255 +sg8 +(g12 +S'\t\x01\x00\x00' +p3715 +tp3716 +Rp3717 +(dp3718 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'\xba\x00\x00\x00' +p3719 +tp3720 +Rp3721 +(dp3722 +g2024 +F16.0 +ssg445 +(dp3723 +g2024 +F13.714285714285714 +ssI332 +(dp3724 +g2024 +F9.5999999999999996 +sssg401 +(dp3725 +g8 +(g12 +S'!\x01\x00\x00' +p3726 +tp3727 +Rp3728 +(dp3729 +g2024 +F8.7272727272727266 +ssg281 +g3470 +sg8 +(g12 +S'D\x01\x00\x00' +p3730 +tp3731 +Rp3732 +(dp3733 +g2024 +F13.714285714285714 +ssg425 +(dp3734 +g2024 +F6.0 +ssg61 +g2617 +sg8 +(g12 +S'\x91\x01\x00\x00' +p3735 +tp3736 +Rp3737 +(dp3738 +g2024 +F12.0 +sssg405 +(dp3739 +g61 +g2624 +sg673 +(dp3740 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'\xb2\x01\x00\x00' +p3741 +tp3742 +Rp3743 +(dp3744 +g2024 +F13.714285714285714 +ssI283 +(dp3745 +g2024 +F8.7272727272727266 +ssI220 +(dp3746 +g2024 +F9.5999999999999996 +sssg409 +(dp3747 +g29 +g2260 +ssg413 +(dp3748 +g161 +g3201 +sg8 +(g12 +S'e\x00\x00\x00' +p3749 +tp3750 +Rp3751 +(dp3752 +g2024 +F5.0526315789473681 +ssg701 +(dp3753 +g2024 +F9.5999999999999996 +ssg73 +g2732 +sg341 +g3583 +sI244 +(dp3754 +g2024 +F8.0 +ssg8 +(g12 +S'\xfb\x00\x00\x00' +p3755 +tp3756 +Rp3757 +(dp3758 +g2024 +F9.5999999999999996 +sssg417 +(dp3759 +g1105 +(dp3760 +g2024 +F8.0 +ssg377 +g3673 +sg333 +g3578 +sg109 +g2919 +ssg421 +(dp3761 +g145 +g3115 +sg413 +g3752 +sg161 +g3203 +sg173 +g3218 +sg941 +(dp3762 +g2024 +F6.4000000000000004 +ssg333 +g3579 +sg8 +(g12 +S'\xd2\x01\x00\x00' +p3763 +tp3764 +Rp3765 +(dp3766 +g2024 +F6.4000000000000004 +ssg221 +g3359 +sg993 +(dp3767 +g2024 +F5.6470588235294121 +ssg229 +g3381 +sg8 +(g12 +S'\xf9\x00\x00\x00' +p3768 +tp3769 +Rp3770 +(dp3771 +g2024 +F4.7999999999999998 +ssg1021 +(dp3772 +g2024 +F6.4000000000000004 +sssg425 +(dp3773 +g401 +g3734 +sg865 +(dp3774 +g2024 +F6.0 +ssg45 +g2562 +sg965 +(dp3775 +g2024 +F7.384615384615385 +ssg581 +(dp3776 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'q\x01\x00\x00' +p3777 +tp3778 +Rp3779 +(dp3780 +g2024 +F8.0 +ssg8 +(g12 +S'\xf3\x00\x00\x00' +p3781 +tp3782 +Rp3783 +(dp3784 +g2024 +F6.4000000000000004 +ssg8 +(g12 +S'T\x01\x00\x00' +p3785 +tp3786 +Rp3787 +(dp3788 +g2024 +F8.0 +ssg501 +(dp3789 +g2024 +F5.333333333333333 +ssg8 +(g12 +S'\x9b\x01\x00\x00' +p3790 +tp3791 +Rp3792 +(dp3793 +g2024 +F8.0 +sssg429 +(dp3794 +g277 +g3459 +sg29 +g2264 +ssg433 +(dp3795 +g501 +(dp3796 +g2024 +F8.7272727272727266 +ssg937 +(dp3797 +g2024 +F12.0 +ssg181 +g3257 +ssg437 +(dp3798 +I396 +(dp3799 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'5\x01\x00\x00' +p3800 +tp3801 +Rp3802 +(dp3803 +g2024 +F24.0 +sssg441 +(dp3804 +g37 +g2326 +sg73 +g2737 +sg605 +(dp3805 +g2024 +F7.384615384615385 +ssg1249 +(dp3806 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'\x96\x01\x00\x00' +p3807 +tp3808 +Rp3809 +(dp3810 +g2024 +F8.7272727272727266 +ssg381 +g3683 +sg8 +(g12 +S'\xbc\x01\x00\x00' +p3811 +tp3812 +Rp3813 +(dp3814 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\xbe\x00\x00\x00' +p3815 +tp3816 +Rp3817 +(dp3818 +g2024 +F9.5999999999999996 +sssg445 +(dp3819 +g29 +g2268 +sg397 +g3723 +ssg449 +(dp3820 +g81 +g2777 +ssg453 +(dp3821 +g285 +g3479 +sg813 +(dp3822 +g2024 +F7.384615384615385 +ssg185 +g3284 +sg73 +g2738 +sg8 +(g12 +S'\x8f\x00\x00\x00' +p3823 +tp3824 +Rp3825 +(dp3826 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\x83\x01\x00\x00' +p3827 +tp3828 +Rp3829 +(dp3830 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\xd6\x00\x00\x00' +p3831 +tp3832 +Rp3833 +(dp3834 +g2024 +F8.0 +sssg457 +(dp3835 +g1085 +(dp3836 +g2024 +F12.0 +ssg73 +g2739 +ssg461 +(dp3837 +g21 +g2135 +sg161 +g3207 +ssg465 +(dp3838 +g49 +g2593 +sg673 +(dp3839 +g2024 +F10.666666666666666 +ssg65 +g2649 +ssg469 +(dp3840 +g8 +(g12 +S'\xc3\x00\x00\x00' +p3841 +tp3842 +Rp3843 +(dp3844 +g2024 +F19.199999999999999 +sssg473 +(dp3845 +g949 +(dp3846 +g2024 +F7.384615384615385 +ssI482 +(dp3847 +g2024 +F10.666666666666666 +ssg8 +(g12 +S';\x01\x00\x00' +p3848 +tp3849 +Rp3850 +(dp3851 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\x9c\x01\x00\x00' +p3852 +tp3853 +Rp3854 +(dp3855 +g2024 +F9.5999999999999996 +ssg393 +g3712 +ssg477 +(dp3856 +g101 +g2888 +ssg481 +(dp3857 +g113 +g2972 +sg8 +(g12 +S'\xd1\x01\x00\x00' +p3858 +tp3859 +Rp3860 +(dp3861 +g2024 +F16.0 +sssg485 +(dp3862 +I296 +(dp3863 +g2024 +F13.714285714285714 +ssg185 +g3289 +sg133 +g3071 +sg41 +g2431 +ssg489 +(dp3864 +g669 +(dp3865 +g2024 +F32.0 +sssg493 +(dp3866 +g81 +g2783 +sg149 +g3145 +sg345 +g3608 +sg769 +(dp3867 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'\x99\x01\x00\x00' +p3868 +tp3869 +Rp3870 +(dp3871 +g2024 +F10.666666666666666 +sssg497 +(dp3872 +g49 +g2603 +sg1205 +(dp3873 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'k\x01\x00\x00' +p3874 +tp3875 +Rp3876 +(dp3877 +g2024 +F9.5999999999999996 +ssg325 +g3550 +sI398 +(dp3878 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\xfe\x00\x00\x00' +p3879 +tp3880 +Rp3881 +(dp3882 +g2024 +F8.7272727272727266 +sssg501 +(dp3883 +g657 +(dp3884 +g2024 +F8.0 +ssg425 +g3789 +sg937 +(dp3885 +g2024 +F7.384615384615385 +ssg433 +g3796 +sg181 +g3271 +sg8 +(g12 +S'\xec\x01\x00\x00' +p3886 +tp3887 +Rp3888 +(dp3889 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'q\x01\x00\x00' +p3890 +tp3891 +Rp3892 +(dp3893 +g2024 +F9.5999999999999996 +ssg865 +(dp3894 +g2024 +F6.8571428571428568 +sssg505 +(dp3895 +g8 +(g12 +S'\x00\x01\x00\x00' +p3896 +tp3897 +Rp3898 +(dp3899 +g2024 +F13.714285714285714 +ssg21 +g2152 +sg345 +g3617 +sI316 +(dp3900 +g2024 +F10.666666666666666 +sssg509 +(dp3901 +g45 +g2580 +ssg513 +(dp3902 +g49 +g2604 +sg721 +(dp3903 +g2024 +F6.8571428571428568 +ssg57 +g2615 +sg61 +g2643 +sg125 +g3018 +ssg517 +(dp3904 +g177 +g3246 +sI394 +(dp3905 +g2024 +F8.0 +ssg8 +(g12 +S'\xf1\x01\x00\x00' +p3906 +tp3907 +Rp3908 +(dp3909 +g2024 +F12.0 +ssg733 +(dp3910 +g2024 +F9.5999999999999996 +ssg1421 +(dp3911 +g2024 +F8.7272727272727266 +ssI479 +(dp3912 +g2024 +F8.7272727272727266 +sssg521 +(dp3913 +g113 +g2977 +sI465 +(dp3914 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'"\x01\x00\x00' +p3915 +tp3916 +Rp3917 +(dp3918 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'S\x01\x00\x00' +p3919 +tp3920 +Rp3921 +(dp3922 +g2024 +F16.0 +ssg201 +g3325 +ssg525 +(dp3923 +g21 +g2126 +ssg529 +(dp3924 +g117 +g2983 +ssg533 +(dp3925 +g8 +(g12 +S'\xeb\x01\x00\x00' +p3926 +tp3927 +Rp3928 +(dp3929 +g2024 +F16.0 +ssg45 +g2448 +ssg537 +(dp3930 +g301 +g3522 +sg29 +g2226 +sg69 +g2660 +sg233 +g3391 +sg8 +(g12 +S'\x8d\x01\x00\x00' +p3931 +tp3932 +Rp3933 +(dp3934 +g2024 +F13.714285714285714 +sssg541 +(dp3935 +g8 +(g12 +S'\xd0\x01\x00\x00' +p3936 +tp3937 +Rp3938 +(dp3939 +g2024 +F16.0 +ssg561 +(dp3940 +g2024 +F12.0 +ssg45 +g2449 +ssg545 +(dp3941 +g253 +g3416 +sg8 +(g12 +S'\x7f\x01\x00\x00' +p3942 +tp3943 +Rp3944 +(dp3945 +g2024 +F16.0 +sssg549 +(dp3946 +g8 +(g12 +S'\xf1\x00\x00\x00' +p3947 +tp3948 +Rp3949 +(dp3950 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'\xe8\x00\x00\x00' +p3951 +tp3952 +Rp3953 +(dp3954 +g2024 +F9.5999999999999996 +ssg313 +g3531 +sg8 +(g12 +S'\xcd\x00\x00\x00' +p3955 +tp3956 +Rp3957 +(dp3958 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'\x11\x01\x00\x00' +p3959 +tp3960 +Rp3961 +(dp3962 +g2024 +F9.5999999999999996 +ssg345 +g3593 +sg1281 +(dp3963 +g2024 +F8.0 +sssg553 +(dp3964 +g113 +g2925 +sg8 +(g12 +S'\xcb\x00\x00\x00' +p3965 +tp3966 +Rp3967 +(dp3968 +g2024 +F24.0 +sssg557 +(dp3969 +g1013 +(dp3970 +g2024 +F7.384615384615385 +ssg1433 +(dp3971 +g2024 +F10.666666666666666 +ssg285 +g3474 +sg129 +g3033 +sg221 +g3360 +ssg561 +(dp3972 +g8 +(g12 +S'\xd0\x01\x00\x00' +p3973 +tp3974 +Rp3975 +(dp3976 +g2024 +F12.0 +ssg8 +(g12 +S'\xda\x01\x00\x00' +p3977 +tp3978 +Rp3979 +(dp3980 +g2024 +F13.714285714285714 +ssg541 +g3940 +sg389 +g3699 +sg45 +g2454 +ssg565 +(dp3981 +g1121 +(dp3982 +g2024 +F13.714285714285714 +ssg41 +g2361 +ssg569 +(dp3983 +g29 +g2182 +sg33 +g2315 +sg305 +g3524 +sg337 +g3581 +sg1693 +(dp3984 +g2024 +F9.5999999999999996 +ssg649 +(dp3985 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\x9e\x01\x00\x00' +p3986 +tp3987 +Rp3988 +(dp3989 +g2024 +F9.5999999999999996 +sssg573 +(dp3990 +g693 +(dp3991 +g2024 +F16.0 +sssg577 +(dp3992 +g817 +(dp3993 +g2024 +F8.7272727272727266 +ssg317 +g3537 +sI350 +(dp3994 +g2024 +F10.666666666666666 +ssg905 +(dp3995 +g2024 +F10.666666666666666 +sssg581 +(dp3996 +g425 +g3776 +ssg585 +(dp3997 +g21 +g2050 +ssg589 +(dp3998 +g185 +g3286 +sg285 +g3483 +sg453 +g3826 +ssg593 +(dp3999 +g8 +(g12 +S'N\x01\x00\x00' +p4000 +tp4001 +Rp4002 +(dp4003 +g2024 +F19.199999999999999 +sssg597 +(dp4004 +g145 +g3121 +sg69 +g2664 +sg173 +g3230 +ssg601 +(dp4005 +g113 +g2926 +sg8 +(g12 +S'k\x01\x00\x00' +p4006 +tp4007 +Rp4008 +(dp4009 +g2024 +F16.0 +sssg605 +(dp4010 +g441 +g3805 +sg365 +g3649 +sI308 +(dp4011 +g2024 +F8.7272727272727266 +ssg1157 +(dp4012 +g2024 +F9.5999999999999996 +ssg37 +g2338 +ssg609 +(dp4013 +g8 +(g12 +S'\xaf\x00\x00\x00' +p4014 +tp4015 +Rp4016 +(dp4017 +g2024 +F16.0 +sssg613 +(dp4018 +g8 +(g12 +S'\xc8\x01\x00\x00' +p4019 +tp4020 +Rp4021 +(dp4022 +g2024 +F9.5999999999999996 +ssg85 +g2807 +sg353 +g3628 +sg41 +g2366 +sg8 +(g12 +S'\x97\x01\x00\x00' +p4023 +tp4024 +Rp4025 +(dp4026 +g2024 +F16.0 +sssg617 +(dp4027 +g29 +g2192 +ssg621 +(dp4028 +g113 +g2931 +sg8 +(g12 +S'\xa6\x01\x00\x00' +p4029 +tp4030 +Rp4031 +(dp4032 +g2024 +F24.0 +sssg625 +(dp4033 +g8 +(g12 +S'\xe8\x01\x00\x00' +p4034 +tp4035 +Rp4036 +(dp4037 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\xe9\x00\x00\x00' +p4038 +tp4039 +Rp4040 +(dp4041 +g2024 +F6.4000000000000004 +ssg133 +g3075 +sg253 +g3426 +sg901 +(dp4042 +g2024 +F7.384615384615385 +ssg265 +g3441 +sg1421 +(dp4043 +g2024 +F8.0 +sssg629 +(dp4044 +g357 +g3639 +sg41 +g2374 +sg293 +g3514 +ssg633 +(dp4045 +g277 +g3460 +sg29 +g2197 +sg765 +(dp4046 +g2024 +F12.0 +ssI358 +(dp4047 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'\x9e\x00\x00\x00' +p4048 +tp4049 +Rp4050 +(dp4051 +g2024 +F8.7272727272727266 +sssg637 +(dp4052 +g8 +(g12 +S'\xc7\x00\x00\x00' +p4053 +tp4054 +Rp4055 +(dp4056 +g2024 +F7.384615384615385 +ssI267 +(dp4057 +g2024 +F7.384615384615385 +ssg73 +g2695 +sg901 +(dp4058 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\xb5\x01\x00\x00' +p4059 +tp4060 +Rp4061 +(dp4062 +g2024 +F9.5999999999999996 +ssg133 +g3076 +sg265 +g3442 +ssg641 +(dp4063 +g29 +g2198 +sI332 +(dp4064 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'6\x01\x00\x00' +p4065 +tp4066 +Rp4067 +(dp4068 +g2024 +F16.0 +ssg1289 +(dp4069 +g2024 +F16.0 +sssg645 +(dp4070 +g8 +(g12 +S'\xb4\x01\x00\x00' +p4071 +tp4072 +Rp4073 +(dp4074 +g2024 +F13.714285714285714 +ssg2504 +(dp4075 +g2024 +F24.0 +sssg649 +(dp4076 +g29 +g2199 +sg569 +g3985 +sg8 +(g12 +S'\x8c\x01\x00\x00' +p4077 +tp4078 +Rp4079 +(dp4080 +g2024 +F8.7272727272727266 +ssg633 +g4051 +sg765 +(dp4081 +g2024 +F10.666666666666666 +ssg1673 +(dp4082 +g2024 +F10.666666666666666 +sssg653 +(dp4083 +g381 +g3684 +sg217 +g3356 +sg253 +g3432 +sI430 +(dp4084 +g2024 +F12.0 +sssg657 +(dp4085 +g181 +g3248 +sg281 +g3471 +sg877 +(dp4086 +g2024 +F9.5999999999999996 +ssg501 +g3884 +ssg661 +(dp4087 +g8 +(g12 +S'\xc1\x00\x00\x00' +p4088 +tp4089 +Rp4090 +(dp4091 +g2024 +F9.5999999999999996 +ssg121 +g2987 +sg193 +g3300 +sg293 +g3493 +ssg665 +(dp4092 +g245 +g3396 +ssg669 +(dp4093 +g8 +(g12 +S'\xdc\x00\x00\x00' +p4094 +tp4095 +Rp4096 +(dp4097 +g2024 +F13.714285714285714 +ssg489 +g3865 +ssg673 +(dp4098 +g405 +g3740 +sg49 +g2586 +sg8 +(g12 +S')\x01\x00\x00' +p4099 +tp4100 +Rp4101 +(dp4102 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'\x8e\x01\x00\x00' +p4103 +tp4104 +Rp4105 +(dp4106 +g2024 +F9.5999999999999996 +ssg465 +g3839 +sg8 +(g12 +S'\xdc\x00\x00\x00' +p4107 +tp4108 +Rp4109 +(dp4110 +g2024 +F8.7272727272727266 +sssg677 +(dp4111 +g381 +g3682 +sg257 +g3438 +sg73 +g2700 +ssg681 +(dp4112 +g45 +g2489 +sg8 +(g12 +S'\xab\x01\x00\x00' +p4113 +tp4114 +Rp4115 +(dp4116 +g2024 +F13.714285714285714 +ssg293 +g3497 +sg41 +g2381 +sg357 +g3640 +ssg685 +(dp4117 +g8 +(g12 +S'\xc9\x00\x00\x00' +p4118 +tp4119 +Rp4120 +(dp4121 +g2024 +F16.0 +ssg8 +(g12 +S'\xba\x01\x00\x00' +p4122 +tp4123 +Rp4124 +(dp4125 +g2024 +F19.199999999999999 +ssI170 +(dp4126 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\x7f\x01\x00\x00' +p4127 +tp4128 +Rp4129 +(dp4130 +g2024 +F12.0 +sssg689 +(dp4131 +g21 +g2067 +sg29 +g2202 +sg165 +g3209 +sg1293 +(dp4132 +g2024 +F12.0 +sssg693 +(dp4133 +g81 +g2784 +sI280 +(dp4134 +g2024 +F8.7272727272727266 +ssg573 +g3991 +sg8 +(g12 +S'\xc6\x00\x00\x00' +p4135 +tp4136 +Rp4137 +(dp4138 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'\x0e\x01\x00\x00' +p4139 +tp4140 +Rp4141 +(dp4142 +g2024 +F12.0 +sssg697 +(dp4143 +I353 +(dp4144 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\xd3\x00\x00\x00' +p4145 +tp4146 +Rp4147 +(dp4148 +g2024 +F13.714285714285714 +ssg685 +g4126 +sg1093 +(dp4149 +g2024 +F8.0 +ssg8 +(g12 +S'\xcf\x00\x00\x00' +p4150 +tp4151 +Rp4152 +(dp4153 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\x93\x01\x00\x00' +p4154 +tp4155 +Rp4156 +(dp4157 +g2024 +F13.714285714285714 +sssg701 +(dp4158 +g341 +g3587 +sg413 +g3753 +sg161 +g3176 +ssg705 +(dp4159 +g29 +g2178 +ssg709 +(dp4160 +g113 +g2941 +sg985 +(dp4161 +g2024 +F12.0 +ssg33 +g2307 +sg201 +g3317 +ssg713 +(dp4162 +g793 +(dp4163 +g2024 +F12.0 +ssg8 +(g12 +S'\xc3\x00\x00\x00' +p4164 +tp4165 +Rp4166 +(dp4167 +g2024 +F8.7272727272727266 +ssg8 +(g12 +S'j\x01\x00\x00' +p4168 +tp4169 +Rp4170 +(dp4171 +g2024 +F12.0 +ssg725 +(dp4172 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'\xfa\x00\x00\x00' +p4173 +tp4174 +Rp4175 +(dp4176 +g2024 +F8.0 +ssI219 +(dp4177 +g2024 +F6.8571428571428568 +ssI412 +(dp4178 +g2024 +F8.0 +sssg717 +(dp4179 +g21 +g2072 +sg609 +g4017 +sg8 +(g12 +S'\xcc\x01\x00\x00' +p4180 +tp4181 +Rp4182 +(dp4183 +g2024 +F16.0 +ssg1001 +(dp4184 +g2024 +F12.0 +ssg8 +(g12 +S'\xbf\x01\x00\x00' +p4185 +tp4186 +Rp4187 +(dp4188 +g2024 +F13.714285714285714 +sssg721 +(dp4189 +g1181 +(dp4190 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'&\x01\x00\x00' +p4191 +tp4192 +Rp4193 +(dp4194 +g2024 +F8.7272727272727266 +ssg49 +g2582 +sg8 +(g12 +S'n\x01\x00\x00' +p4195 +tp4196 +Rp4197 +(dp4198 +g2024 +F8.0 +ssg729 +(dp4199 +g2024 +F8.7272727272727266 +ssg101 +g2880 +sg8 +(g12 +S'\xb6\x00\x00\x00' +p4200 +tp4201 +Rp4202 +(dp4203 +g2024 +F6.8571428571428568 +ssg113 +g2946 +sg513 +g3903 +ssg725 +(dp4204 +g8 +(g12 +S'\xdb\x00\x00\x00' +p4205 +tp4206 +Rp4207 +(dp4208 +g2024 +F10.666666666666666 +ssg713 +g4172 +ssg729 +(dp4209 +g721 +g4199 +sg49 +g2598 +ssg733 +(dp4210 +g177 +g3244 +sg1397 +(dp4211 +g2024 +F12.0 +ssg8 +(g12 +S'\x8a\x01\x00\x00' +p4212 +tp4213 +Rp4214 +(dp4215 +g2024 +F9.5999999999999996 +ssg517 +g3910 +ssg737 +(dp4216 +g113 +g2950 +sg33 +g2310 +ssg741 +(dp4217 +I372 +(dp4218 +g2024 +F12.0 +ssg345 +g3594 +sg161 +g3177 +sg365 +g3653 +ssg745 +(dp4219 +g721 +g4203 +sg8 +(g12 +S'\xb8\x00\x00\x00' +p4220 +tp4221 +Rp4222 +(dp4223 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'\xad\x01\x00\x00' +p4224 +tp4225 +Rp4226 +(dp4227 +g2024 +F12.0 +ssg1193 +(dp4228 +g2024 +F13.714285714285714 +ssg101 +g2892 +ssg749 +(dp4229 +g161 +g3181 +sg69 +g2683 +ssg753 +(dp4230 +g125 +g3007 +sg1733 +(dp4231 +g2024 +F13.714285714285714 +ssg745 +g4223 +sg101 +g2897 +ssg757 +(dp4232 +g8 +(g12 +S'f\x01\x00\x00' +p4233 +tp4234 +Rp4235 +(dp4236 +g2024 +F19.199999999999999 +sssg761 +(dp4237 +g397 +g3722 +ssg765 +(dp4238 +g633 +g4046 +sg29 +g2211 +sg649 +g4081 +ssg769 +(dp4239 +I280 +(dp4240 +g2024 +F9.5999999999999996 +ssg313 +g3530 +sg8 +(g12 +S'\xd5\x01\x00\x00' +p4241 +tp4242 +Rp4243 +(dp4244 +g2024 +F13.714285714285714 +ssg493 +g3867 +ssg773 +(dp4245 +g181 +g3272 +sg61 +g2647 +sg877 +(dp4246 +g2024 +F10.666666666666666 +sssg777 +(dp4247 +g441 +g3818 +sg37 +g2351 +ssg781 +(dp4248 +g21 +g2153 +ssg785 +(dp4249 +g1105 +(dp4250 +g2024 +F7.384615384615385 +ssg373 +g3656 +sg8 +(g12 +S'\xbb\x01\x00\x00' +p4251 +tp4252 +Rp4253 +(dp4254 +g2024 +F10.666666666666666 +ssI468 +(dp4255 +g2024 +F10.666666666666666 +ssg1165 +(dp4256 +g2024 +F13.714285714285714 +sssg789 +(dp4257 +g661 +g4091 +sg309 +g3526 +sg193 +g3292 +sg77 +g2745 +sg8 +(g12 +S'\x90\x01\x00\x00' +p4258 +tp4259 +Rp4260 +(dp4261 +g2024 +F10.666666666666666 +ssg121 +g2989 +ssg793 +(dp4262 +g713 +g4163 +ssg797 +(dp4263 +g8 +(g12 +S'\xe8\x01\x00\x00' +p4264 +tp4265 +Rp4266 +(dp4267 +g2024 +F13.714285714285714 +ssg949 +(dp4268 +g2024 +F8.0 +ssg713 +g4167 +sg469 +g3844 +ssg801 +(dp4269 +g8 +(g12 +S'\x85\x01\x00\x00' +p4270 +tp4271 +Rp4272 +(dp4273 +g2024 +F32.0 +ssg8 +(g12 +S'=\x01\x00\x00' +p4274 +tp4275 +Rp4276 +(dp4277 +g2024 +F24.0 +sssg805 +(dp4278 +g8 +(g12 +S'A\x01\x00\x00' +p4279 +tp4280 +Rp4281 +(dp4282 +g2024 +F16.0 +ssg85 +g2802 +ssg809 +(dp4283 +g1137 +(dp4284 +g2024 +F12.0 +ssg693 +g4138 +ssg813 +(dp4285 +g8 +(g12 +S'\x83\x01\x00\x00' +p4286 +tp4287 +Rp4288 +(dp4289 +g2024 +F10.666666666666666 +ssg185 +g3280 +sg453 +g3822 +sg73 +g2719 +sg637 +g4056 +sg133 +g3057 +ssg817 +(dp4290 +g577 +g3993 +sg1349 +(dp4291 +g2024 +F7.384615384615385 +ssg197 +g3309 +sg373 +g3657 +sg129 +g3034 +sg8 +(g12 +S'\xde\x00\x00\x00' +p4292 +tp4293 +Rp4294 +(dp4295 +g2024 +F8.0 +ssg141 +g3098 +ssg821 +(dp4296 +g8 +(g12 +S'\x1c\x01\x00\x00' +p4297 +tp4298 +Rp4299 +(dp4300 +g2024 +F32.0 +ssg685 +g4121 +ssg825 +(dp4301 +g165 +g3210 +sg69 +g2668 +ssg829 +(dp4302 +g553 +g3968 +sg1261 +(dp4303 +g2024 +F13.714285714285714 +sssg833 +(dp4304 +g81 +g2768 +sg217 +g3345 +ssg837 +(dp4305 +g345 +g3602 +sg549 +g3958 +ssg841 +(dp4306 +g209 +g3329 +sg185 +g3285 +sg129 +g3044 +ssg845 +(dp4307 +g8 +(g12 +S'a\x01\x00\x00' +p4308 +tp4309 +Rp4310 +(dp4311 +g2024 +F6.8571428571428568 +ssg8 +(g12 +S'I\x01\x00\x00' +p4312 +tp4313 +Rp4314 +(dp4315 +g2024 +F9.5999999999999996 +ssg697 +g4153 +sg977 +(dp4316 +g2024 +F10.666666666666666 +ssg1093 +(dp4317 +g2024 +F7.384615384615385 +ssg81 +g2769 +sg217 +g3350 +ssg849 +(dp4318 +g113 +g2966 +ssg853 +(dp4319 +g101 +g2884 +ssg857 +(dp4320 +g221 +g3364 +sg73 +g2729 +ssg861 +(dp4321 +g697 +g4148 +ssg865 +(dp4322 +g425 +g3774 +sg937 +(dp4323 +g2024 +F8.7272727272727266 +ssg45 +g2539 +sg1381 +(dp4324 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\xb7\x01\x00\x00' +p4325 +tp4326 +Rp4327 +(dp4328 +g2024 +F12.0 +ssg501 +g3894 +ssg869 +(dp4329 +g1413 +(dp4330 +g2024 +F12.0 +ssg45 +g2540 +ssg873 +(dp4331 +g221 +g3366 +sg73 +g2730 +sg285 +g3487 +sg453 +g3834 +sg8 +(g12 +S'\xce\x01\x00\x00' +p4332 +tp4333 +Rp4334 +(dp4335 +g2024 +F13.714285714285714 +sssg877 +(dp4336 +g657 +g4086 +sg8 +(g12 +S'\xe2\x00\x00\x00' +p4337 +tp4338 +Rp4339 +(dp4340 +g2024 +F12.0 +ssg181 +g3270 +sg61 +g2638 +sg281 +g3472 +sg773 +g4246 +ssg881 +(dp4341 +g21 +g2109 +sg8 +(g12 +S'\x84\x01\x00\x00' +p4342 +tp4343 +Rp4344 +(dp4345 +g2024 +F16.0 +ssg8 +(g12 +S'\xec\x00\x00\x00' +p4346 +tp4347 +Rp4348 +(dp4349 +g2024 +F16.0 +sssg885 +(dp4350 +I347 +(dp4351 +g2024 +F10.666666666666666 +ssg225 +g3374 +sg101 +g2902 +sg361 +g3646 +ssg889 +(dp4352 +g8 +(g12 +S'\xd1\x01\x00\x00' +p4353 +tp4354 +Rp4355 +(dp4356 +g2024 +F19.199999999999999 +sssg893 +(dp4357 +g8 +(g12 +S'\xc2\x01\x00\x00' +p4358 +tp4359 +Rp4360 +(dp4361 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'*\x01\x00\x00' +p4362 +tp4363 +Rp4364 +(dp4365 +g2024 +F12.0 +ssg713 +g4177 +sg725 +g4208 +sI250 +(dp4366 +g2024 +F8.0 +ssI394 +(dp4367 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\xdf\x01\x00\x00' +p4368 +tp4369 +Rp4370 +(dp4371 +g2024 +F8.0 +sssg897 +(dp4372 +g1205 +(dp4373 +g2024 +F9.5999999999999996 +ssI283 +(dp4374 +g2024 +F8.7272727272727266 +ssg673 +g4110 +sg669 +g4097 +sg405 +g3746 +ssg901 +(dp4375 +g253 +g3431 +sI267 +(dp4376 +g2024 +F8.0 +ssg8 +(g12 +S'\xb5\x01\x00\x00' +p4377 +tp4378 +Rp4379 +(dp4380 +g2024 +F10.666666666666666 +ssg625 +g4042 +sg637 +g4058 +sg265 +g3443 +ssg905 +(dp4381 +g817 +g4295 +sg373 +g3670 +sg1789 +(dp4382 +g2024 +F10.666666666666666 +ssg577 +g3995 +sg1417 +(dp4383 +g2024 +F9.5999999999999996 +sssg909 +(dp4384 +g81 +g2792 +ssg913 +(dp4385 +g33 +g2289 +ssg917 +(dp4386 +g21 +g2121 +sg961 +(dp4387 +g2024 +F16.0 +ssg137 +g3083 +ssg921 +(dp4388 +g181 +g3252 +sg877 +g4340 +ssg925 +(dp4389 +g8 +(g12 +S'\xd8\x01\x00\x00' +p4390 +tp4391 +Rp4392 +(dp4393 +g2024 +F10.666666666666666 +ssI321 +(dp4394 +g2024 +F10.666666666666666 +ssg1277 +(dp4395 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\x9c\x01\x00\x00' +p4396 +tp4397 +Rp4398 +(dp4399 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\x86\x01\x00\x00' +p4400 +tp4401 +Rp4402 +(dp4403 +g2024 +F13.714285714285714 +sssg929 +(dp4404 +I424 +(dp4405 +g2024 +F12.0 +ssg21 +g2122 +sg161 +g3202 +sg8 +(g12 +S'\x04\x01\x00\x00' +p4406 +tp4407 +Rp4408 +(dp4409 +g2024 +F10.666666666666666 +sssg933 +(dp4410 +g133 +g3053 +sg41 +g2422 +ssg937 +(dp4411 +g433 +g3797 +sg181 +g3256 +sg865 +g4323 +sg1381 +(dp4412 +g2024 +F8.0 +ssg501 +g3885 +ssg941 +(dp4413 +g145 +g3120 +sg421 +g3762 +sg173 +g3226 +ssg945 +(dp4414 +g8 +(g12 +S'\x18\x01\x00\x00' +p4415 +tp4416 +Rp4417 +(dp4418 +g2024 +F10.666666666666666 +ssg981 +(dp4419 +g2024 +F13.714285714285714 +ssg549 +g3954 +ssg949 +(dp4420 +g8 +(g12 +S'\xe0\x01\x00\x00' +p4421 +tp4422 +Rp4423 +(dp4424 +g2024 +F10.666666666666666 +ssg797 +g4268 +sg41 +g2423 +sg473 +g3846 +sg625 +g4041 +sg8 +(g12 +S'\x9c\x01\x00\x00' +p4425 +tp4426 +Rp4427 +(dp4428 +g2024 +F7.384615384615385 +ssg133 +g3062 +sg393 +g3711 +ssg953 +(dp4429 +g989 +(dp4430 +g2024 +F13.714285714285714 +ssg1377 +(dp4431 +g2024 +F24.0 +sssg957 +(dp4432 +g45 +g2475 +ssg961 +(dp4433 +g881 +g4349 +sg917 +g4387 +sg21 +g2130 +ssg965 +(dp4434 +g157 +g3157 +sg425 +g3775 +sg45 +g2571 +ssg969 +(dp4435 +g1013 +(dp4436 +g2024 +F8.0 +ssg8 +(g12 +S'b\x01\x00\x00' +p4437 +tp4438 +Rp4439 +(dp4440 +g2024 +F12.0 +ssg129 +g3048 +sg229 +g3387 +ssg973 +(dp4441 +g293 +g3501 +sg329 +g3572 +sg45 +g2572 +ssg977 +(dp4442 +g8 +(g12 +S'a\x01\x00\x00' +p4443 +tp4444 +Rp4445 +(dp4446 +g2024 +F10.666666666666666 +ssg845 +g4316 +ssg981 +(dp4447 +g945 +g4419 +sg8 +(g12 +S'\x18\x01\x00\x00' +p4448 +tp4449 +Rp4450 +(dp4451 +g2024 +F9.5999999999999996 +ssg313 +g3528 +sg549 +g3950 +ssg985 +(dp4452 +g33 +g2309 +sg8 +(g12 +S'd\x01\x00\x00' +p4453 +tp4454 +Rp4455 +(dp4456 +g2024 +F16.0 +ssg709 +g4161 +sg201 +g3321 +ssg989 +(dp4457 +g8 +(g12 +S'\x81\x01\x00\x00' +p4458 +tp4459 +Rp4460 +(dp4461 +g2024 +F16.0 +ssg953 +g4430 +sg157 +g3159 +sg425 +g3784 +sg1321 +(dp4462 +g2024 +F9.5999999999999996 +sssg993 +(dp4463 +g221 +g3365 +sg413 +g3754 +sg421 +g3767 +sg73 +g2743 +sg8 +(g12 +S'\xfb\x00\x00\x00' +p4464 +tp4465 +Rp4466 +(dp4467 +g2024 +F12.0 +sssg997 +(dp4468 +g113 +g2954 +ssg1001 +(dp4469 +g21 +g2144 +sg8 +(g12 +S'~\x01\x00\x00' +p4470 +tp4471 +Rp4472 +(dp4473 +g2024 +F16.0 +ssg717 +g4184 +ssg1005 +(dp4474 +g101 +g2893 +sg361 +g3642 +ssg1009 +(dp4475 +g41 +g2435 +ssg1013 +(dp4476 +g8 +(g12 +S'b\x01\x00\x00' +p4477 +tp4478 +Rp4479 +(dp4480 +g2024 +F8.0 +ssg421 +g3771 +sg557 +g3970 +sg8 +(g12 +S'G\x01\x00\x00' +p4481 +tp4482 +Rp4483 +(dp4484 +g2024 +F8.7272727272727266 +ssg969 +g4436 +sg8 +(g12 +S'\xd2\x01\x00\x00' +p4485 +tp4486 +Rp4487 +(dp4488 +g2024 +F8.7272727272727266 +ssg221 +g3367 +sg229 +g3389 +ssg1017 +(dp4489 +g8 +(g12 +S'\xe8\x01\x00\x00' +p4490 +tp4491 +Rp4492 +(dp4493 +g2024 +F12.0 +ssI351 +(dp4494 +g2024 +F9.5999999999999996 +ssg893 +g4366 +sg713 +g4176 +sg8 +(g12 +S'\xdf\x01\x00\x00' +p4495 +tp4496 +Rp4497 +(dp4498 +g2024 +F9.5999999999999996 +sssg1021 +(dp4499 +g413 +g3758 +sg993 +g4467 +sg421 +g3772 +ssg1025 +(dp4500 +g8 +(g12 +S'x\x01\x00\x00' +p4501 +tp4502 +Rp4503 +(dp4504 +g2024 +F19.199999999999999 +ssg21 +g2157 +ssg1029 +(dp4505 +g8 +(g12 +S'\x80\x01\x00\x00' +p4506 +tp4507 +Rp4508 +(dp4509 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'\r\x01\x00\x00' +p4510 +tp4511 +Rp4512 +(dp4513 +g2024 +F12.0 +sssg1033 +(dp4514 +g497 +g3882 +sI363 +(dp4515 +g2024 +F10.666666666666666 +ssg325 +g3559 +sg1225 +(dp4516 +g2024 +F10.666666666666666 +ssI311 +(dp4517 +g2024 +F9.5999999999999996 +sssg1037 +(dp4518 +g21 +g2165 +sg345 +g3621 +ssg1041 +(dp4519 +g21 +g2035 +sg345 +g3592 +sg505 +g3899 +ssg1045 +(dp4520 +g145 +g3111 +sg117 +g2984 +sg333 +g3577 +sg109 +g2918 +ssg1049 +(dp4521 +g81 +g2759 +sg1429 +(dp4522 +g2024 +F8.0 +ssg385 +g3694 +sg4276 +(dp4523 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'\xdd\x01\x00\x00' +p4524 +tp4525 +Rp4526 +(dp4527 +g2024 +F16.0 +sssg1053 +(dp4528 +g8 +(g12 +S'\x80\x01\x00\x00' +p4529 +tp4530 +Rp4531 +(dp4532 +g2024 +F9.5999999999999996 +ssg217 +g3335 +sg253 +g3415 +sg1637 +(dp4533 +g2024 +F13.714285714285714 +ssI269 +(dp4534 +g2024 +F8.7272727272727266 +sssg1057 +(dp4535 +g8 +(g12 +S'\xa8\x01\x00\x00' +p4536 +tp4537 +Rp4538 +(dp4539 +g2024 +F10.666666666666666 +ssg21 +g2036 +sg929 +g4409 +sg69 +g2661 +sg161 +g3161 +ssg1061 +(dp4540 +g217 +g3336 +ssg1065 +(dp4541 +g8 +(g12 +S'`\x01\x00\x00' +p4542 +tp4543 +Rp4544 +(dp4545 +g2024 +F13.714285714285714 +ssg21 +g2040 +sI346 +(dp4546 +g2024 +F10.666666666666666 +ssg29 +g2172 +sg53 +g2606 +ssg1069 +(dp4547 +g1585 +(dp4548 +g2024 +F10.666666666666666 +ssg29 +g2173 +sg8 +(g12 +S',\x01\x00\x00' +p4549 +tp4550 +Rp4551 +(dp4552 +g2024 +F16.0 +ssg8 +(g12 +S'E\x01\x00\x00' +p4553 +tp4554 +Rp4555 +(dp4556 +g2024 +F12.0 +sssg1073 +(dp4557 +g353 +g3627 +sg8 +(g12 +S'\xb6\x01\x00\x00' +p4558 +tp4559 +Rp4560 +(dp4561 +g2024 +F19.199999999999999 +ssg41 +g2357 +ssg1077 +(dp4562 +g29 +g2210 +sg397 +g3718 +ssg1081 +(dp4563 +g21 +g2045 +sg249 +g3405 +sg161 +g3162 +ssg1085 +(dp4564 +g637 +g4057 +sg73 +g2694 +sg457 +g3836 +sg253 +g3420 +sg901 +g4376 +sg8 +(g12 +S'\xb5\x01\x00\x00' +p4565 +tp4566 +Rp4567 +(dp4568 +g2024 +F10.666666666666666 +sssg1089 +(dp4569 +g8 +(g12 +S'\x9d\x01\x00\x00' +p4570 +tp4571 +Rp4572 +(dp4573 +g2024 +F32.0 +sssg1093 +(dp4574 +I384 +(dp4575 +g2024 +F8.7272727272727266 +ssg1053 +g4534 +sg697 +g4149 +sg845 +g4317 +sg1029 +g4513 +sg8 +(g12 +S'\x7f\x01\x00\x00' +p4576 +tp4577 +Rp4578 +(dp4579 +g2024 +F9.5999999999999996 +sssg1097 +(dp4580 +g693 +g4142 +sg8 +(g12 +S'}\x01\x00\x00' +p4581 +tp4582 +Rp4583 +(dp4584 +g2024 +F19.199999999999999 +ssg8 +(g12 +S'\xaf\x01\x00\x00' +p4585 +tp4586 +Rp4587 +(dp4588 +g2024 +F24.0 +sssg1101 +(dp4589 +g45 +g2462 +ssg1105 +(dp4590 +g785 +g4250 +sg125 +g3006 +sg417 +g3760 +sg101 +g2859 +sg377 +g3672 +sg8 +(g12 +S'\xbb\x01\x00\x00' +p4591 +tp4592 +Rp4593 +(dp4594 +g2024 +F8.0 +ssg1417 +(dp4595 +g2024 +F7.384615384615385 +ssg8 +(g12 +S'\x1f\x01\x00\x00' +p4596 +tp4597 +Rp4598 +(dp4599 +g2024 +F9.5999999999999996 +sssg1109 +(dp4600 +g21 +g2054 +sg8 +(g12 +S'<\x01\x00\x00' +p4601 +tp4602 +Rp4603 +(dp4604 +g2024 +F12.0 +ssg549 +g3962 +ssg1113 +(dp4605 +g185 +g3288 +sg133 +g3067 +ssg1117 +(dp4606 +g145 +g3128 +sg69 +g2677 +ssg1121 +(dp4607 +g565 +g3982 +sg85 +g2806 +sg41 +g2365 +sg393 +g3713 +sg8 +(g12 +S'y\x01\x00\x00' +p4608 +tp4609 +Rp4610 +(dp4611 +g2024 +F16.0 +sssg1125 +(dp4612 +g353 +g3637 +ssg1129 +(dp4613 +g8 +(g12 +S'\x86\x01\x00\x00' +p4614 +tp4615 +Rp4616 +(dp4617 +g2024 +F32.0 +sssg1133 +(dp4618 +g193 +g3307 +sg293 +g3510 +sg41 +g2370 +ssg1137 +(dp4619 +g8 +(g12 +S'\xa1\x01\x00\x00' +p4620 +tp4621 +Rp4622 +(dp4623 +g2024 +F12.0 +ssg809 +g4284 +sg945 +g4418 +sg693 +g4134 +sg981 +g4451 +sg769 +g4240 +ssg1141 +(dp4624 +g1521 +(dp4625 +g2024 +F24.0 +sssg1145 +(dp4626 +g8 +(g12 +S'\x87\x01\x00\x00' +p4627 +tp4628 +Rp4629 +(dp4630 +g2024 +F32.0 +ssg45 +g2479 +ssg1149 +(dp4631 +g405 +g3745 +sg153 +g3151 +sI289 +(dp4632 +g2024 +F8.7272727272727266 +ssg61 +g2642 +sg8 +(g12 +S'\xb0\x01\x00\x00' +p4633 +tp4634 +Rp4635 +(dp4636 +g2024 +F12.0 +ssg897 +g4374 +ssg1153 +(dp4637 +g821 +g4300 +ssg1157 +(dp4638 +g8 +(g12 +S'$\x01\x00\x00' +p4639 +tp4640 +Rp4641 +(dp4642 +g2024 +F10.666666666666666 +ssg605 +g4012 +sg1249 +(dp4643 +g2024 +F8.7272727272727266 +ssg365 +g3648 +sg161 +g3163 +ssg1161 +(dp4644 +g45 +g2483 +ssg1165 +(dp4645 +g785 +g4256 +sg1105 +g4599 +ssg1169 +(dp4646 +g1317 +(dp4647 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'\xde\x01\x00\x00' +p4648 +tp4649 +Rp4650 +(dp4651 +g2024 +F13.714285714285714 +ssg101 +g2855 +ssg1173 +(dp4652 +g401 +g3729 +sg8 +(g12 +S'\x91\x01\x00\x00' +p4653 +tp4654 +Rp4655 +(dp4656 +g2024 +F13.714285714285714 +ssg61 +g2618 +sg8 +(g12 +S'\x9d\x01\x00\x00' +p4657 +tp4658 +Rp4659 +(dp4660 +g2024 +F13.714285714285714 +ssg1149 +g4632 +ssg1177 +(dp4661 +g113 +g2935 +sg521 +g3918 +ssg1181 +(dp4662 +g721 +g4190 +sg113 +g2936 +sg29 +g2200 +sg1317 +(dp4663 +g2024 +F10.666666666666666 +ssI478 +(dp4664 +g2024 +F10.666666666666666 +sssg1185 +(dp4665 +I328 +(dp4666 +g2024 +F10.666666666666666 +ssI308 +(dp4667 +g2024 +F9.5999999999999996 +ssg161 +g3167 +sg1157 +g4642 +ssg1189 +(dp4668 +g41 +g2380 +ssg1193 +(dp4669 +g721 +g4194 +sg745 +g4228 +ssg1197 +(dp4670 +g45 +g2493 +ssg1201 +(dp4671 +g133 +g3061 +sg41 +g2385 +sg485 +g3863 +ssg1205 +(dp4672 +g497 +g3873 +sg673 +g4102 +sg897 +g4373 +sg8 +(g12 +S'\x8e\x01\x00\x00' +p4673 +tp4674 +Rp4675 +(dp4676 +g2024 +F10.666666666666666 +ssg8 +(g12 +S'\xef\x01\x00\x00' +p4677 +tp4678 +Rp4679 +(dp4680 +g2024 +F16.0 +sssg1209 +(dp4681 +g893 +g4365 +ssg1213 +(dp4682 +g217 +g3341 +sg37 +g2321 +ssg1217 +(dp4683 +g29 +g2203 +sg1069 +g4552 +ssg1221 +(dp4684 +g645 +g4075 +sg45 +g2505 +ssg1225 +(dp4685 +g113 +g2945 +sg8 +(g12 +S'\xc5\x01\x00\x00' +p4686 +tp4687 +Rp4688 +(dp4689 +g2024 +F13.714285714285714 +ssg1033 +g4516 +sI311 +(dp4690 +g2024 +F10.666666666666666 +sssg1229 +(dp4691 +g269 +g3453 +ssg1233 +(dp4692 +g8 +(g12 +S'\xed\x01\x00\x00' +p4693 +tp4694 +Rp4695 +(dp4696 +g2024 +F32.0 +sssg1237 +(dp4697 +g145 +g3124 +sg89 +g2819 +sg69 +g2676 +ssg1241 +(dp4698 +g325 +g3554 +ssg1245 +(dp4699 +g21 +g2076 +sg8 +(g12 +S'\x84\x01\x00\x00' +p4700 +tp4701 +Rp4702 +(dp4703 +g2024 +F19.199999999999999 +sssg1249 +(dp4704 +g1185 +g4667 +sg1329 +(dp4705 +g2024 +F8.7272727272727266 +ssg441 +g3806 +sg73 +g2705 +sg605 +g4011 +sg1157 +g4643 +ssg1253 +(dp4706 +g437 +g3803 +sg8 +(g12 +S'\x8c\x01\x00\x00' +p4707 +tp4708 +Rp4709 +(dp4710 +g2024 +F13.714285714285714 +sssg1257 +(dp4711 +g29 +g2209 +sg641 +g4068 +ssg1261 +(dp4712 +g1033 +g4517 +sg829 +g4303 +sg8 +(g12 +S'\xc5\x01\x00\x00' +p4713 +tp4714 +Rp4715 +(dp4716 +g2024 +F12.0 +ssg1225 +g4690 +sg325 +g3563 +ssg1265 +(dp4717 +g125 +g3013 +sg8 +(g12 +S'M\x01\x00\x00' +p4718 +tp4719 +Rp4720 +(dp4721 +g2024 +F9.5999999999999996 +ssg8 +(g12 +S'\xee\x01\x00\x00' +p4722 +tp4723 +Rp4724 +(dp4725 +g2024 +F16.0 +ssg141 +g3109 +ssg1269 +(dp4726 +g8 +(g12 +S'w\x01\x00\x00' +p4727 +tp4728 +Rp4729 +(dp4730 +g2024 +F32.0 +sssg1273 +(dp4731 +g41 +g2398 +sg8 +(g12 +S'\xe7\x01\x00\x00' +p4732 +tp4733 +Rp4734 +(dp4735 +g2024 +F13.714285714285714 +ssg1473 +(dp4736 +g2024 +F10.666666666666666 +ssg93 +g2839 +sg8 +(g12 +S'|\x01\x00\x00' +p4737 +tp4738 +Rp4739 +(dp4740 +g2024 +F7.384615384615385 +ssg269 +g3455 +ssg1277 +(dp4741 +g85 +g2811 +sg8 +(g12 +S'\xe2\x01\x00\x00' +p4742 +tp4743 +Rp4744 +(dp4745 +g2024 +F10.666666666666666 +ssg925 +g4395 +sI412 +(dp4746 +g2024 +F9.5999999999999996 +ssg473 +g3851 +ssg1281 +(dp4747 +g21 +g2088 +sg345 +g3598 +sg505 +g3900 +sg549 +g3963 +sg1109 +g4604 +ssg1285 +(dp4748 +g1049 +g4523 +sg801 +g4277 +ssg1289 +(dp4749 +g641 +g4069 +sg137 +g3096 +ssg1293 +(dp4750 +g689 +g4132 +sg21 +g2092 +sg8 +(g12 +S'Z\x01\x00\x00' +p4751 +tp4752 +Rp4753 +(dp4754 +g2024 +F12.0 +ssg29 +g2219 +ssg1297 +(dp4755 +g93 +g2833 +sg45 +g2524 +ssg1301 +(dp4756 +g1841 +(dp4757 +g2024 +F10.666666666666666 +ssg85 +g2797 +sg925 +g4394 +sg805 +g4282 +ssg1305 +(dp4758 +g29 +g2224 +sg137 +g3088 +ssg1309 +(dp4759 +g21 +g2096 +sg161 +g3190 +ssg1313 +(dp4760 +g401 +g3733 +ssg1317 +(dp4761 +g1169 +g4647 +sg1181 +g4663 +sg101 +g2864 +sg1069 +g4556 +ssg1321 +(dp4762 +g157 +g3158 +sg989 +g4462 +sg8 +(g12 +S'\xb3\x01\x00\x00' +p4763 +tp4764 +Rp4765 +(dp4766 +g2024 +F16.0 +ssg389 +g3705 +sI491 +(dp4767 +g2024 +F10.666666666666666 +sssg1325 +(dp4768 +g1013 +g4484 +sg1881 +(dp4769 +g2024 +F16.0 +ssg229 +g3385 +ssg1329 +(dp4770 +I440 +(dp4771 +g2024 +F12.0 +ssg1249 +g4705 +sg161 +g3194 +sg73 +g2723 +sg1185 +g4666 +ssg1333 +(dp4772 +g81 +g2767 +sg217 +g3340 +sg845 +g4315 +ssg1337 +(dp4773 +g33 +g2306 +ssg1341 +(dp4774 +g8 +(g12 +S'\xd8\x01\x00\x00' +p4775 +tp4776 +Rp4777 +(dp4778 +g2024 +F16.0 +ssg245 +g3400 +ssg1345 +(dp4779 +g1649 +(dp4780 +g2024 +F13.714285714285714 +ssg8 +(g12 +S'\xe9\x01\x00\x00' +p4781 +tp4782 +Rp4783 +(dp4784 +g2024 +F16.0 +ssg29 +g2234 +sg641 +g4064 +sg397 +g3724 +ssg1349 +(dp4785 +g817 +g4291 +sg8 +(g12 +S'\xd4\x01\x00\x00' +p4786 +tp4787 +Rp4788 +(dp4789 +g2024 +F9.5999999999999996 +ssg1265 +g4721 +sg373 +g3661 +sg125 +g3005 +sg141 +g3105 +ssg1353 +(dp4790 +g593 +g4003 +sg93 +g2838 +sI446 +(dp4791 +g2024 +F10.666666666666666 +ssg269 +g3449 +ssg1357 +(dp4792 +g57 +g2613 +sg61 +g2637 +ssg1361 +(dp4793 +g81 +g2773 +sg149 +g3133 +sg37 +g2336 +ssg1365 +(dp4794 +g1537 +(dp4795 +g2024 +F12.0 +sssg1369 +(dp4796 +g113 +g2970 +sg8 +(g12 +S'\xd1\x01\x00\x00' +p4797 +tp4798 +Rp4799 +(dp4800 +g2024 +F16.0 +sssg1373 +(dp4801 +g521 +g3922 +ssg1377 +(dp4802 +g953 +g4431 +sg425 +g3788 +ssg1381 +(dp4803 +g937 +g4412 +sg181 +g3269 +sg77 +g2751 +sg8 +(g12 +S'\x90\x01\x00\x00' +p4804 +tp4805 +Rp4806 +(dp4807 +g2024 +F9.5999999999999996 +ssg865 +g4324 +sg121 +g2994 +sg125 +g3022 +ssg1385 +(dp4808 +g45 +g2453 +ssg1389 +(dp4809 +g1761 +(dp4810 +g2024 +F13.714285714285714 +ssg45 +g2458 +ssg1393 +(dp4811 +g69 +g2684 +sg173 +g3234 +ssg1397 +(dp4812 +g177 +g3236 +sg8 +(g12 +S'\x8a\x01\x00\x00' +p4813 +tp4814 +Rp4815 +(dp4816 +g2024 +F9.5999999999999996 +ssg733 +g4211 +sg8 +(g12 +S'\x8f\x01\x00\x00' +p4817 +tp4818 +Rp4819 +(dp4820 +g2024 +F19.199999999999999 +sssg1401 +(dp4821 +g21 +g2113 +sg29 +g2254 +sg1065 +g4546 +sg1293 +g4754 +ssg1405 +(dp4822 +I392 +(dp4823 +g2024 +F9.5999999999999996 +ssg1489 +(dp4824 +g2024 +F10.666666666666666 +ssg225 +g3378 +sg101 +g2906 +sg885 +g4351 +ssg1409 +(dp4825 +g21 +g2055 +sg345 +g3616 +ssg1413 +(dp4826 +g41 +g2417 +sg45 +g2553 +sg1473 +(dp4827 +g2024 +F10.666666666666666 +ssg93 +g2840 +sg869 +g4330 +sI470 +(dp4828 +g2024 +F9.5999999999999996 +sssg1417 +(dp4829 +g317 +g3543 +sg577 +g3994 +sg1105 +g4595 +sg377 +g3677 +sg905 +g4383 +ssg1421 +(dp4830 +g8 +(g12 +S'\xf0\x01\x00\x00' +p4831 +tp4832 +Rp4833 +(dp4834 +g2024 +F12.0 +ssg625 +g4043 +sg1017 +g4494 +sg517 +g3911 +sI479 +(dp4835 +g2024 +F9.5999999999999996 +sssg1425 +(dp4836 +g29 +g2259 +sg1065 +g4545 +ssg1429 +(dp4837 +g977 +g4446 +sg1049 +g4522 +sg8 +(g12 +S'\x89\x01\x00\x00' +p4838 +tp4839 +Rp4840 +(dp4841 +g2024 +F12.0 +ssg697 +g4144 +sg845 +g4311 +sg81 +g2763 +sg105 +g2916 +ssg1433 +(dp4842 +g1013 +g4480 +sg129 +g3031 +sg969 +g4440 +sg557 +g3971 +ssg1437 +(dp4843 +g177 +g3240 +sg253 +g3425 +ssg1441 +(dp4844 +g985 +g4456 +sg33 +g2298 +ssg1445 +(dp4845 +g121 +g2998 +sg329 +g3568 +sg45 +g2561 +ssg1449 +(dp4846 +g8 +(g12 +S'h\x01\x00\x00' +p4847 +tp4848 +Rp4849 +(dp4850 +g2024 +F19.199999999999999 +ssg757 +g4236 +sg633 +g4047 +sI396 +(dp4851 +g2024 +F10.666666666666666 +sssg1453 +(dp4852 +g185 +g3276 +sg285 +g3478 +sg129 +g3046 +ssg1457 +(dp4853 +g1449 +g4850 +ssg1461 +(dp4854 +g61 +g2628 +sg181 +g3261 +sg125 +g3000 +ssg1465 +(dp4855 +g713 +g4171 +ssg1469 +(dp4856 +g113 +g2971 +sg497 +g3877 +sg601 +g4009 +sg1033 +g4515 +ssg1473 +(dp4857 +g1273 +g4736 +sg1413 +g4827 +sg41 +g2427 +ssg1477 +(dp4858 +g21 +g2134 +sg4729 +(dp4859 +g2024 +F24.0 +sssg1481 +(dp4860 +g721 +g4198 +sg101 +g2876 +sg8 +(g12 +S'\xde\x01\x00\x00' +p4861 +tp4862 +Rp4863 +(dp4864 +g2024 +F13.714285714285714 +sssg1485 +(dp4865 +g137 +g3092 +ssg1489 +(dp4866 +I392 +(dp4867 +g2024 +F10.666666666666666 +ssg29 +g2276 +sg1405 +g4824 +sg225 +g3373 +ssg1493 +(dp4868 +g501 +g3893 +sg425 +g3780 +ssg1497 +(dp4869 +g21 +g2143 +ssg1501 +(dp4870 +g45 +g2576 +ssg1505 +(dp4871 +g149 +g3141 +sg345 +g3603 +sg741 +g4218 +sI409 +(dp4872 +g2024 +F12.0 +sssg1509 +(dp4873 +g49 +g2602 +sg113 +g2976 +ssg1513 +(dp4874 +g277 +g3464 +sg8 +(g12 +S'\xd3\x01\x00\x00' +p4875 +tp4876 +Rp4877 +(dp4878 +g2024 +F24.0 +sssg1517 +(dp4879 +g1269 +g4730 +sg1477 +g4859 +ssg1521 +(dp4880 +g21 +g2148 +sg1025 +g4504 +sg1141 +g4625 +ssg1525 +(dp4881 +g1121 +g4611 +ssg1529 +(dp4882 +g3792 +(dp4883 +g2024 +F32.0 +sssg1533 +(dp4884 +g8 +(g12 +S'\xb4\x01\x00\x00' +p4885 +tp4886 +Rp4887 +(dp4888 +g2024 +F13.714285714285714 +ssg45 +g2566 +ssg1537 +(dp4889 +g41 +g2439 +sI456 +(dp4890 +g2024 +F8.0 +ssg1365 +g4795 +sg353 +g3633 +sg1273 +g4740 +sg269 +g3456 +sg8 +(g12 +S'\x9f\x01\x00\x00' +p4891 +tp4892 +Rp4893 +(dp4894 +g2024 +F9.5999999999999996 +sssg1541 +(dp4895 +g81 +g2788 +sg1097 +g4584 +ssg1545 +(dp4896 +g8 +(g12 +S'\xb1\x01\x00\x00' +p4897 +tp4898 +Rp4899 +(dp4900 +g2024 +F24.0 +ssg1001 +g4473 +sg21 +g2161 +ssg1549 +(dp4901 +I384 +(dp4902 +g2024 +F10.666666666666666 +ssg545 +g3945 +sg1093 +g4579 +sg685 +g4130 +ssg1553 +(dp4903 +g1053 +g4532 +sg1029 +g4509 +sg253 +g3411 +sg1093 +g4575 +sg1549 +g4902 +ssg1557 +(dp4904 +g989 +g4461 +ssg1561 +(dp4905 +g321 +g3548 +sg137 +g3079 +ssg1565 +(dp4906 +g453 +g3830 +sg73 +g2690 +sg813 +g4289 +ssg1569 +(dp4907 +g881 +g4345 +sg21 +g2059 +sg1245 +g4703 +ssg1573 +(dp4908 +g801 +g4273 +ssg1577 +(dp4909 +g925 +g4403 +sg1129 +g4617 +ssg1581 +(dp4910 +g1145 +g4630 +ssg1585 +(dp4911 +g1489 +g4867 +sg29 +g2174 +sg1405 +g4823 +sg101 +g2868 +sg1069 +g4548 +ssg1589 +(dp4912 +g1429 +g4841 +ssg1593 +(dp4913 +g8 +(g12 +S'\xe1\x01\x00\x00' +p4914 +tp4915 +Rp4916 +(dp4917 +g2024 +F12.0 +ssg733 +g4215 +sg1397 +g4816 +sg893 +g4367 +sg517 +g3905 +sg8 +(g12 +S'\xdf\x01\x00\x00' +p4918 +tp4919 +Rp4920 +(dp4921 +g2024 +F8.7272727272727266 +sssg1597 +(dp4922 +g29 +g2186 +ssg1601 +(dp4923 +g8 +(g12 +S'\xc1\x01\x00\x00' +p4924 +tp4925 +Rp4926 +(dp4927 +g2024 +F13.714285714285714 +ssg649 +g4080 +sg1253 +g4710 +sg1449 +g4851 +sg437 +g3799 +ssg1605 +(dp4928 +g537 +g3934 +sg29 +g2242 +ssg1609 +(dp4929 +g49 +g2592 +sg1205 +g4676 +sg673 +g4106 +sg497 +g3878 +ssg1613 +(dp4930 +g1397 +g4820 +ssg1617 +(dp4931 +g789 +g4261 +sg1381 +g4807 +sg77 +g2750 +ssg1621 +(dp4932 +g401 +g3738 +sg1173 +g4656 +ssg1625 +(dp4933 +g45 +g2466 +ssg1629 +(dp4934 +g697 +g4157 +ssg1633 +(dp4935 +g293 +g3505 +sg45 +g2471 +ssg1637 +(dp4936 +g217 +g3354 +sg1053 +g4533 +ssg1641 +(dp4937 +g441 +g3810 +sg381 +g3692 +sg37 +g2342 +ssg1645 +(dp4938 +g613 +g4026 +ssg1649 +(dp4939 +g29 +g2196 +sg1345 +g4780 +ssg1653 +(dp4940 +g149 +g3149 +sg345 +g3612 +sg1505 +g4872 +sg493 +g3871 +ssg1657 +(dp4941 +g297 +g3519 +ssg1661 +(dp4942 +g1529 +g4883 +sg425 +g3793 +ssg1665 +(dp4943 +g925 +g4399 +sg949 +g4428 +sg713 +g4178 +sg473 +g3855 +sg1277 +g4746 +ssg1669 +(dp4944 +g1173 +g4660 +sg1089 +g4573 +ssg1673 +(dp4945 +g569 +g3989 +sg29 +g2272 +sg649 +g4082 +ssg1677 +(dp4946 +g353 +g3632 +sg1537 +g4894 +sg41 +g2376 +ssg1681 +(dp4947 +g8 +(g12 +S'\xa4\x01\x00\x00' +p4948 +tp4949 +Rp4950 +(dp4951 +g2024 +F32.0 +ssg4031 +(dp4952 +g2024 +F24.0 +sssg1685 +(dp4953 +g1137 +g4623 +sg8 +(g12 +S'\xbf\x01\x00\x00' +p4954 +tp4955 +Rp4956 +(dp4957 +g2024 +F24.0 +sssg1689 +(dp4958 +g1801 +(dp4959 +g2024 +F16.0 +sssg1693 +(dp4960 +g569 +g3984 +sg29 +g2246 +sg33 +g2294 +ssg1697 +(dp4961 +g1681 +g4951 +ssg1701 +(dp4962 +g93 +g2834 +sg45 +g2488 +ssg1705 +(dp4963 +g1681 +g4952 +sg621 +g4032 +ssg1709 +(dp4964 +g21 +g2066 +ssg1713 +(dp4965 +g21 +g2139 +sg1057 +g4539 +sg929 +g4405 +sg161 +g3172 +ssg1717 +(dp4966 +g21 +g2071 +ssg1721 +(dp4967 +g41 +g2443 +ssg1725 +(dp4968 +g681 +g4116 +sg45 +g2497 +ssg1729 +(dp4969 +g45 +g2501 +ssg1733 +(dp4970 +g753 +g4231 +sg125 +g3017 +sg745 +g4227 +ssg1737 +(dp4971 +g217 +g3349 +sg381 +g3688 +sg37 +g2334 +sg653 +g4084 +ssg1741 +(dp4972 +g1097 +g4588 +ssg1745 +(dp4973 +g61 +g2633 +sg1149 +g4636 +ssg1749 +(dp4974 +g1545 +g4900 +ssg1753 +(dp4975 +g405 +g3744 +sg65 +g2653 +ssg1757 +(dp4976 +g1321 +g4766 +ssg1761 +(dp4977 +g17 +g2029 +sg45 +g2507 +sg1533 +g4888 +sg645 +g4074 +sg1389 +g4810 +ssg1765 +(dp4978 +g1085 +g4568 +sg637 +g4062 +sg901 +g4380 +ssg1769 +(dp4979 +g1073 +g4561 +sg41 +g2396 +ssg1773 +(dp4980 +g865 +g4328 +sg45 +g2511 +ssg1777 +(dp4981 +g1329 +g4771 +sg161 +g3185 +sg73 +g2709 +ssg1781 +(dp4982 +g221 +g3371 +sg73 +g2713 +ssg1785 +(dp4983 +g685 +g4125 +ssg1789 +(dp4984 +g785 +g4254 +sg1105 +g4594 +sg905 +g4382 +sg373 +g3666 +ssg1793 +(dp4985 +g441 +g3814 +sg73 +g2736 +ssg1797 +(dp4986 +g45 +g2516 +ssg1801 +(dp4987 +g17 +g2030 +sg1689 +g4959 +sg93 +g2844 +sg1353 +g4791 +sg45 +g2520 +ssg1805 +(dp4988 +g1685 +g4957 +sg717 +g4188 +ssg1809 +(dp4989 +g69 +g2681 +sg173 +g3217 +ssg1813 +(dp4990 +g33 +g2293 +sg1601 +g4927 +ssg1817 +(dp4991 +g8 +(g12 +S'\xe1\x01\x00\x00' +p4992 +tp4993 +Rp4994 +(dp4995 +g2024 +F24.0 +ssg893 +g4361 +ssg1821 +(dp4996 +g45 +g2528 +ssg1825 +(dp4997 +g325 +g3558 +ssg1829 +(dp4998 +g113 +g2958 +sg1225 +g4689 +sg1261 +g4716 +ssg1833 +(dp4999 +g41 +g2403 +sg45 +g2533 +ssg1837 +(dp5000 +g21 +g2104 +ssg1841 +(dp5001 +g1301 +g4757 +sg8 +(g12 +S'\xdb\x01\x00\x00' +p5002 +tp5003 +Rp5004 +(dp5005 +g2024 +F13.714285714285714 +ssg1537 +g4890 +sg613 +g4022 +sg269 +g3445 +ssg1845 +(dp5006 +g113 +g2962 +ssg1849 +(dp5007 +g8 +(g12 +S'\xd7\x01\x00\x00' +p5008 +tp5009 +Rp5010 +(dp5011 +g2024 +F32.0 +sssg1853 +(dp5012 +g149 +g3137 +sg37 +g2330 +ssg1857 +(dp5013 +g717 +g4183 +ssg1861 +(dp5014 +g89 +g2818 +sg29 +g2238 +sg69 +g2672 +ssg1865 +(dp5015 +g873 +g4335 +sg73 +g2727 +ssg1869 +(dp5016 +g8 +(g12 +S'\xd6\x01\x00\x00' +p5017 +tp5018 +Rp5019 +(dp5020 +g2024 +F13.714285714285714 +ssg41 +g2407 +sg45 +g2538 +ssg1873 +(dp5021 +g561 +g3976 +sg541 +g3939 +sg389 +g3700 +ssg1877 +(dp5022 +g1369 +g4800 +sg481 +g3861 +sg889 +g4356 +sg521 +g3914 +ssg1881 +(dp5023 +g1013 +g4488 +sg421 +g3766 +sg1325 +g4769 +ssg1885 +(dp5024 +g297 +g3520 +sg1513 +g4878 +ssg1889 +(dp5025 +g785 +g4255 +sg373 +g3662 +sg125 +g3011 +sg1349 +g4789 +ssg1893 +(dp5026 +g345 +g3607 +sg769 +g4244 +sg313 +g3535 +ssg1897 +(dp5027 +g45 +g2541 +sg1413 +g4828 +sg41 +g2413 +sg1869 +g5020 +ssg1901 +(dp5028 +g1849 +g5011 +sg45 +g2545 +ssg1905 +(dp5029 +g269 +g3454 +sg1341 +g4778 +sg8 +(g12 +S'\xdb\x01\x00\x00' +p5030 +tp5031 +Rp5032 +(dp5033 +g2024 +F16.0 +ssg925 +g4393 +ssg1909 +(dp5034 +g29 +g2250 +ssg1913 +(dp5035 +g561 +g3980 +sg45 +g2549 +ssg1917 +(dp5036 +g1841 +g5005 +sg1905 +g5033 +ssg1921 +(dp5037 +g21 +g2117 +ssg1925 +(dp5038 +g1049 +g4527 +ssg1929 +(dp5039 +g1169 +g4651 +sg1181 +g4664 +sg101 +g2914 +sg1481 +g4864 +ssg1933 +(dp5040 +g1017 +g4498 +sg893 +g4371 +sg517 +g3912 +sg1593 +g4921 +sg1421 +g4835 +ssg1937 +(dp5041 +g949 +g4424 +ssg1941 +(dp5042 +g1817 +g4995 +sg1593 +g4917 +ssg1945 +(dp5043 +g85 +g2801 +sg473 +g3847 +sg1277 +g4745 +sg393 +g3710 +ssg1949 +(dp5044 +g45 +g2557 +ssg1953 +(dp5045 +g37 +g2325 +ssg1957 +(dp5046 +g201 +g3316 +ssg1961 +(dp5047 +g145 +g3119 +sg173 +g3222 +ssg1965 +(dp5048 +g1273 +g4735 +ssg1969 +(dp5049 +g625 +g4037 +sg1017 +g4493 +sg797 +g4267 +ssg1973 +(dp5050 +g1345 +g4784 +ssg1977 +(dp5051 +g125 +g3004 +sg101 +g2872 +ssg1981 +(dp5052 +g533 +g3929 +sg157 +g3156 +sg1321 +g4767 +sg45 +g2570 +ssg1985 +(dp5053 +g181 +g3265 +sg501 +g3889 +ssg1989 +(dp5054 +g1233 +g4696 +sg389 +g3704 +ssg1993 +(dp5055 +g1265 +g4725 +sg141 +g3104 +ssg1997 +(dp5056 +g1205 +g4680 +ssg2001 +(dp5057 +g8 +(g12 +S'\xf1\x01\x00\x00' +p5058 +tp5059 +Rp5060 +(dp5061 +g2024 +F19.199999999999999 +ssg253 +g3424 +sg1421 +g4834 +ssg2005 +(dp5062 +g2001 +g5061 +sg517 +g3909 +ssg2009 +(dp5063 +g89 +g2823 +sg29 +g2280 +ssg2013 +(dp5064 +g277 +g3468 +sg29 +g2284 +sssS'adj' +p5065 +g2018 +sS'name' +p5066 +S'' +p5067 +sb.(dp0 +cnumpy.core.multiarray +scalar +p1 +(cnumpy +dtype +p2 +(S'i4' +p3 +I0 +I1 +tp4 +Rp5 +(I3 +S'<' +p6 +NNNI-1 +I-1 +I0 +tp7 +bS'\x00\x00\x00\x00' +p8 +tp9 +Rp10 +cnumpy.core.multiarray +_reconstruct +p11 +(cnumpy +ndarray +p12 +(I0 +tp13 +S'b' +p14 +tp15 +Rp16 +(I1 +(I2 +tp17 +g2 +(S'f8' +p18 +I0 +I1 +tp19 +Rp20 +(I3 +S'<' +p21 +NNNI-1 +I-1 +I0 +tp22 +bI00 +S'\x0f\x17\x9e\x1d4i\xd5?Eb\x9c\xbf\xe2\x99\xec?' +p23 +tp24 +bsg1 +(g5 +S'\x01\x00\x00\x00' +p25 +tp26 +Rp27 +g11 +(g12 +(I0 +tp28 +g14 +tp29 +Rp30 +(I1 +(I2 +tp31 +g20 +I00 +S'Vg\x9f\xc8!\xef\xe3?C0\xa6\xab\x84F\xcd?' +p32 +tp33 +bsg1 +(g5 +S'\x02\x00\x00\x00' +p34 +tp35 +Rp36 +g11 +(g12 +(I0 +tp37 +g14 +tp38 +Rp39 +(I1 +(I2 +tp40 +g20 +I00 +S'\xdb\x1a\x16.,u\xd8?\x8bA\x95\\\xc70\xc4?' +p41 +tp42 +bsg1 +(g5 +S'\x03\x00\x00\x00' +p43 +tp44 +Rp45 +g11 +(g12 +(I0 +tp46 +g14 +tp47 +Rp48 +(I1 +(I2 +tp49 +g20 +I00 +S'\xf4\x1bP\xaa\x7f\xce\xd9? \x07\xeb\xbaTd\xca?' +p50 +tp51 +bsg1 +(g5 +S'\x04\x00\x00\x00' +p52 +tp53 +Rp54 +g11 +(g12 +(I0 +tp55 +g14 +tp56 +Rp57 +(I1 +(I2 +tp58 +g20 +I00 +S'a\tU[\x8f\x14\xcb?P\x94\xa93\xdd(\xc8?' +p59 +tp60 +bsg1 +(g5 +S'\x05\x00\x00\x00' +p61 +tp62 +Rp63 +g11 +(g12 +(I0 +tp64 +g14 +tp65 +Rp66 +(I1 +(I2 +tp67 +g20 +I00 +S'W\xe5/\x17\xbd7\xe8?\xa6^\xc7v\xa8\xce\xdc?' +p68 +tp69 +bsg1 +(g5 +S'\x06\x00\x00\x00' +p70 +tp71 +Rp72 +g11 +(g12 +(I0 +tp73 +g14 +tp74 +Rp75 +(I1 +(I2 +tp76 +g20 +I00 +S'\xc6\xa7/[\xda\x9f\xdd?\xc3\xbd|\x7f\x8bO\xe8?' +p77 +tp78 +bsg1 +(g5 +S'\x07\x00\x00\x00' +p79 +tp80 +Rp81 +g11 +(g12 +(I0 +tp82 +g14 +tp83 +Rp84 +(I1 +(I2 +tp85 +g20 +I00 +S'>\x04\xbc\xcb\xec\x07\xd3?\xa4\xa2\x94\x90\xda\x15\xea?' +p86 +tp87 +bsg1 +(g5 +S'\x08\x00\x00\x00' +p88 +tp89 +Rp90 +g11 +(g12 +(I0 +tp91 +g14 +tp92 +Rp93 +(I1 +(I2 +tp94 +g20 +I00 +S'\x18\x14\x9d\xb52$\xc2?Y<\xd4K\xeb\xd2\xd8?' +p95 +tp96 +bsg1 +(g5 +S'\t\x00\x00\x00' +p97 +tp98 +Rp99 +g11 +(g12 +(I0 +tp100 +g14 +tp101 +Rp102 +(I1 +(I2 +tp103 +g20 +I00 +S'\x9e5_xA\x8e\xe1?,\xfa\xe7{\xd3\x98\xc9?' +p104 +tp105 +bsg1 +(g5 +S'\n\x00\x00\x00' +p106 +tp107 +Rp108 +g11 +(g12 +(I0 +tp109 +g14 +tp110 +Rp111 +(I1 +(I2 +tp112 +g20 +I00 +S'\x90\xfd\x8c\xba\xb8\xa7\xc3?p,>\xc2g\xf0\xdc?' +p113 +tp114 +bsg1 +(g5 +S'\x0b\x00\x00\x00' +p115 +tp116 +Rp117 +g11 +(g12 +(I0 +tp118 +g14 +tp119 +Rp120 +(I1 +(I2 +tp121 +g20 +I00 +S'Xr\x10\xc9i \xc5?S\xdf>\x18=~\xe0?' +p122 +tp123 +bsg1 +(g5 +S'\x0c\x00\x00\x00' +p124 +tp125 +Rp126 +g11 +(g12 +(I0 +tp127 +g14 +tp128 +Rp129 +(I1 +(I2 +tp130 +g20 +I00 +S'P9B\x92\xa3\xcc\xc0?\xb7U\xb89\xb0\xe6\xdb?' +p131 +tp132 +bsg1 +(g5 +S'\r\x00\x00\x00' +p133 +tp134 +Rp135 +g11 +(g12 +(I0 +tp136 +g14 +tp137 +Rp138 +(I1 +(I2 +tp139 +g20 +I00 +S'\xbf<\xb8NSn\xe0?`\xbc\xe6\xfa\x10/\xd3?' +p140 +tp141 +bsg1 +(g5 +S'\x0e\x00\x00\x00' +p142 +tp143 +Rp144 +g11 +(g12 +(I0 +tp145 +g14 +tp146 +Rp147 +(I1 +(I2 +tp148 +g20 +I00 +S'\x94_\x06o\x10W\xe4?\xe0\xc4\xe5NUT\xe0?' +p149 +tp150 +bsg1 +(g5 +S'\x0f\x00\x00\x00' +p151 +tp152 +Rp153 +g11 +(g12 +(I0 +tp154 +g14 +tp155 +Rp156 +(I1 +(I2 +tp157 +g20 +I00 +S'\xee[\x14e\xda\xfa\xd3?84!K\xce\r\xe3?' +p158 +tp159 +bsg1 +(g5 +S'\x10\x00\x00\x00' +p160 +tp161 +Rp162 +g11 +(g12 +(I0 +tp163 +g14 +tp164 +Rp165 +(I1 +(I2 +tp166 +g20 +I00 +S'\xa0\xb2\xbfn\x04\xc1\xea?\xd1\xa3\xf4\xd3\x1a=\xdb?' +p167 +tp168 +bsg1 +(g5 +S'\x11\x00\x00\x00' +p169 +tp170 +Rp171 +g11 +(g12 +(I0 +tp172 +g14 +tp173 +Rp174 +(I1 +(I2 +tp175 +g20 +I00 +S'\xb1\x8b\x0b\x9d\xd4\x9f\xe1?1\xd4\xfb\x1axy\xea?' +p176 +tp177 +bsg1 +(g5 +S'\x12\x00\x00\x00' +p178 +tp179 +Rp180 +g11 +(g12 +(I0 +tp181 +g14 +tp182 +Rp183 +(I1 +(I2 +tp184 +g20 +I00 +S'\x91\xde7\xe6\xb3#\xdb?\x06\x04Vd`>\xd4?' +p185 +tp186 +bsg1 +(g5 +S'\x13\x00\x00\x00' +p187 +tp188 +Rp189 +g11 +(g12 +(I0 +tp190 +g14 +tp191 +Rp192 +(I1 +(I2 +tp193 +g20 +I00 +S'BQ+\xe0\xbc\x81\xd8?\xd6\xd5C\x12\x88v\xeb?' +p194 +tp195 +bsg1 +(g5 +S'\x14\x00\x00\x00' +p196 +tp197 +Rp198 +g11 +(g12 +(I0 +tp199 +g14 +tp200 +Rp201 +(I1 +(I2 +tp202 +g20 +I00 +S'\xcf\x0b\x8eK\xb1\xf6\xda?h\xa0\xe3f\x8d\xce\xe3?' +p203 +tp204 +bsg1 +(g5 +S'\x15\x00\x00\x00' +p205 +tp206 +Rp207 +g11 +(g12 +(I0 +tp208 +g14 +tp209 +Rp210 +(I1 +(I2 +tp211 +g20 +I00 +S'\x9fM\xc6\xe3_]\xd3?\xdf\xadh\x1e\xbf-\xd8?' +p212 +tp213 +bsg1 +(g5 +S'\x16\x00\x00\x00' +p214 +tp215 +Rp216 +g11 +(g12 +(I0 +tp217 +g14 +tp218 +Rp219 +(I1 +(I2 +tp220 +g20 +I00 +S'J\xa9]\x8c\x8e\xf2\xeb??g\xc9\x06\xeez\xdc?' +p221 +tp222 +bsg1 +(g5 +S'\x17\x00\x00\x00' +p223 +tp224 +Rp225 +g11 +(g12 +(I0 +tp226 +g14 +tp227 +Rp228 +(I1 +(I2 +tp229 +g20 +I00 +S'\xb0tS\x81]:\xda?/\x89\rh\xaa\xf4\xd9?' +p230 +tp231 +bsg1 +(g5 +S'\x18\x00\x00\x00' +p232 +tp233 +Rp234 +g11 +(g12 +(I0 +tp235 +g14 +tp236 +Rp237 +(I1 +(I2 +tp238 +g20 +I00 +S'"\xc2\xd5|hB\xc1?\xa3u\xaa\xdf\x86n\xd1?' +p239 +tp240 +bsg1 +(g5 +S'\x19\x00\x00\x00' +p241 +tp242 +Rp243 +g11 +(g12 +(I0 +tp244 +g14 +tp245 +Rp246 +(I1 +(I2 +tp247 +g20 +I00 +S'a\xc7\x19]+\xac\xd9?\xd8\\\x8d\xed\rw\xd7?' +p248 +tp249 +bsg1 +(g5 +S'\x1a\x00\x00\x00' +p250 +tp251 +Rp252 +g11 +(g12 +(I0 +tp253 +g14 +tp254 +Rp255 +(I1 +(I2 +tp256 +g20 +I00 +S'\xad"\x9a\xc8\xab`\xd4?\xabc\x06\x85j\xf9\xe5?' +p257 +tp258 +bsg1 +(g5 +S'\x1b\x00\x00\x00' +p259 +tp260 +Rp261 +g11 +(g12 +(I0 +tp262 +g14 +tp263 +Rp264 +(I1 +(I2 +tp265 +g20 +I00 +S'\x1a\x04\t\x89\xf5&\xd1?\xc1X\x1d\x9a\xe23\xe0?' +p266 +tp267 +bsg1 +(g5 +S'\x1c\x00\x00\x00' +p268 +tp269 +Rp270 +g11 +(g12 +(I0 +tp271 +g14 +tp272 +Rp273 +(I1 +(I2 +tp274 +g20 +I00 +S'\xe4Z\x9d\xfeU\xb8\xdd?\r\xb00\xc0\xde"\xe2?' +p275 +tp276 +bsg1 +(g5 +S'\x1d\x00\x00\x00' +p277 +tp278 +Rp279 +g11 +(g12 +(I0 +tp280 +g14 +tp281 +Rp282 +(I1 +(I2 +tp283 +g20 +I00 +S'\xbb,\xc1D8b\xe2?\x07 \x06\x070\x8c\xe5?' +p284 +tp285 +bsg1 +(g5 +S'\x1e\x00\x00\x00' +p286 +tp287 +Rp288 +g11 +(g12 +(I0 +tp289 +g14 +tp290 +Rp291 +(I1 +(I2 +tp292 +g20 +I00 +S'!n\xa2Z\xe8\x81\xe0?\x8ez,\\\x13\xa0\xc4?' +p293 +tp294 +bsg1 +(g5 +S'\x1f\x00\x00\x00' +p295 +tp296 +Rp297 +g11 +(g12 +(I0 +tp298 +g14 +tp299 +Rp300 +(I1 +(I2 +tp301 +g20 +I00 +S'@\xe87\x040\x10\xd6?\xcd\xa2\x99KUQ\xe2?' +p302 +tp303 +bsg1 +(g5 +S' \x00\x00\x00' +p304 +tp305 +Rp306 +g11 +(g12 +(I0 +tp307 +g14 +tp308 +Rp309 +(I1 +(I2 +tp310 +g20 +I00 +S'a\xe6\xd4\xea\xb9Z\xde?E\xa9\xb0$>\x86\xd7?' +p311 +tp312 +bsg1 +(g5 +S'!\x00\x00\x00' +p313 +tp314 +Rp315 +g11 +(g12 +(I0 +tp316 +g14 +tp317 +Rp318 +(I1 +(I2 +tp319 +g20 +I00 +S'\xf5\xc7\x17o\xbb\xd1\xe8?=\xfc\x08m\x1c$\xd9?' +p320 +tp321 +bsg1 +(g5 +S'"\x00\x00\x00' +p322 +tp323 +Rp324 +g11 +(g12 +(I0 +tp325 +g14 +tp326 +Rp327 +(I1 +(I2 +tp328 +g20 +I00 +S'A\xb7\xe0lr#\xb7?8M2_\xea*\xe0?' +p329 +tp330 +bsg1 +(g5 +S'#\x00\x00\x00' +p331 +tp332 +Rp333 +g11 +(g12 +(I0 +tp334 +g14 +tp335 +Rp336 +(I1 +(I2 +tp337 +g20 +I00 +S'\xfc\xa5\xc8\x91}\x16\xcb?_\x07\x01\xa3\xd0,\xe9?' +p338 +tp339 +bsg1 +(g5 +S'$\x00\x00\x00' +p340 +tp341 +Rp342 +g11 +(g12 +(I0 +tp343 +g14 +tp344 +Rp345 +(I1 +(I2 +tp346 +g20 +I00 +S'\xd1\xd7\x8f\x8d\xe1\xde\xe3?KA\xf1\xe4]v\xd7?' +p347 +tp348 +bsg1 +(g5 +S'%\x00\x00\x00' +p349 +tp350 +Rp351 +g11 +(g12 +(I0 +tp352 +g14 +tp353 +Rp354 +(I1 +(I2 +tp355 +g20 +I00 +S'\xca\x14"\x1b\xads\xe0?\x1d\'j\x94\xe4\x08\xcf?' +p356 +tp357 +bsg1 +(g5 +S'&\x00\x00\x00' +p358 +tp359 +Rp360 +g11 +(g12 +(I0 +tp361 +g14 +tp362 +Rp363 +(I1 +(I2 +tp364 +g20 +I00 +S'ed\x89o\x96\xfb\xee?,\x9d\xbf\x91^\x0e\xdc?' +p365 +tp366 +bsg1 +(g5 +S"'\x00\x00\x00" +p367 +tp368 +Rp369 +g11 +(g12 +(I0 +tp370 +g14 +tp371 +Rp372 +(I1 +(I2 +tp373 +g20 +I00 +S'\xb2\x82.6\xbd\xd2\xe0?)\xbf 2\xd6(\xd7?' +p374 +tp375 +bsg1 +(g5 +S'(\x00\x00\x00' +p376 +tp377 +Rp378 +g11 +(g12 +(I0 +tp379 +g14 +tp380 +Rp381 +(I1 +(I2 +tp382 +g20 +I00 +S'\xfb\xb2\xc5\xb4k,\xe8?\xca\xc3\xc9\x0f}\x14\xe5?' +p383 +tp384 +bsg1 +(g5 +S')\x00\x00\x00' +p385 +tp386 +Rp387 +g11 +(g12 +(I0 +tp388 +g14 +tp389 +Rp390 +(I1 +(I2 +tp391 +g20 +I00 +S'F\xda\xa5\xfe\x83\xdf\xcb?\x1d\xed\xd8\xe1h\xcb\xe2?' +p392 +tp393 +bsg1 +(g5 +S'*\x00\x00\x00' +p394 +tp395 +Rp396 +g11 +(g12 +(I0 +tp397 +g14 +tp398 +Rp399 +(I1 +(I2 +tp400 +g20 +I00 +S'\x9f0\x8bHC\xa7\xe0?q\xa0\xb0\xee~\x05\xe4?' +p401 +tp402 +bsg1 +(g5 +S'+\x00\x00\x00' +p403 +tp404 +Rp405 +g11 +(g12 +(I0 +tp406 +g14 +tp407 +Rp408 +(I1 +(I2 +tp409 +g20 +I00 +S'\x06H\x93,(\x1a\xb9?`6T\xf2\x8d\x82\xd0?' +p410 +tp411 +bsg1 +(g5 +S',\x00\x00\x00' +p412 +tp413 +Rp414 +g11 +(g12 +(I0 +tp415 +g14 +tp416 +Rp417 +(I1 +(I2 +tp418 +g20 +I00 +S'\xd7~_?S+\xd9?i\xf2\xb5\x82\xa6L\xe5?' +p419 +tp420 +bsg1 +(g5 +S'-\x00\x00\x00' +p421 +tp422 +Rp423 +g11 +(g12 +(I0 +tp424 +g14 +tp425 +Rp426 +(I1 +(I2 +tp427 +g20 +I00 +S"\xf7\x13D\xa2\xd6'\xd9?sYq\xe1\xcc\xef\xe2?" +p428 +tp429 +bsg1 +(g5 +S'.\x00\x00\x00' +p430 +tp431 +Rp432 +g11 +(g12 +(I0 +tp433 +g14 +tp434 +Rp435 +(I1 +(I2 +tp436 +g20 +I00 +S'\xd6\xc7\x19\xa3\xcc\x9d\xc1?\xbc\xd4\x8e\xeb\xa2\x07\xcb?' +p437 +tp438 +bsg1 +(g5 +S'/\x00\x00\x00' +p439 +tp440 +Rp441 +g11 +(g12 +(I0 +tp442 +g14 +tp443 +Rp444 +(I1 +(I2 +tp445 +g20 +I00 +S'\x1er\x92\x06\\8\xc2?\x04O\xee\xd8\x95\xdf\xdd?' +p446 +tp447 +bsg1 +(g5 +S'0\x00\x00\x00' +p448 +tp449 +Rp450 +g11 +(g12 +(I0 +tp451 +g14 +tp452 +Rp453 +(I1 +(I2 +tp454 +g20 +I00 +S'\x12p\xd5\xb2\x95<\xdd?8\x00\x00\x00' +p574 +tp575 +Rp576 +g11 +(g12 +(I0 +tp577 +g14 +tp578 +Rp579 +(I1 +(I2 +tp580 +g20 +I00 +S's\xd6\\\x07\xc2<\xe4?:\x93\x97\xc5\xe2\xb9\xe4?' +p581 +tp582 +bsg1 +(g5 +S'?\x00\x00\x00' +p583 +tp584 +Rp585 +g11 +(g12 +(I0 +tp586 +g14 +tp587 +Rp588 +(I1 +(I2 +tp589 +g20 +I00 +S'\r\xf0\xd7\x02,>\xde?j\x1fM\\z.\xec?' +p590 +tp591 +bsg1 +(g5 +S'@\x00\x00\x00' +p592 +tp593 +Rp594 +g11 +(g12 +(I0 +tp595 +g14 +tp596 +Rp597 +(I1 +(I2 +tp598 +g20 +I00 +S'\xb5\xd71\xdc\x83\xa6\xde?a\xdf.\xff \xa1\xe3?' +p599 +tp600 +bsg1 +(g5 +S'A\x00\x00\x00' +p601 +tp602 +Rp603 +g11 +(g12 +(I0 +tp604 +g14 +tp605 +Rp606 +(I1 +(I2 +tp607 +g20 +I00 +S'j\xbb\\\x9a\x14\t\xd7?Lhl\xbe\x93\xef\xbc?' +p608 +tp609 +bsg1 +(g5 +S'B\x00\x00\x00' +p610 +tp611 +Rp612 +g11 +(g12 +(I0 +tp613 +g14 +tp614 +Rp615 +(I1 +(I2 +tp616 +g20 +I00 +S'\xa0\xd8\x0fe\xa2d\xc5?{Z51\xa4V\xe2?' +p617 +tp618 +bsg1 +(g5 +S'C\x00\x00\x00' +p619 +tp620 +Rp621 +g11 +(g12 +(I0 +tp622 +g14 +tp623 +Rp624 +(I1 +(I2 +tp625 +g20 +I00 +S'\xf5{\xc2\xbe\xe8\x11\xe1?,\xc1`\x95\xaf\n\xe2?' +p626 +tp627 +bsg1 +(g5 +S'D\x00\x00\x00' +p628 +tp629 +Rp630 +g11 +(g12 +(I0 +tp631 +g14 +tp632 +Rp633 +(I1 +(I2 +tp634 +g20 +I00 +S'\xc0\xd04\xa5\xfa8\xe4?x2?\xc4\xcb\xb2\xc7?' +p635 +tp636 +bsg1 +(g5 +S'E\x00\x00\x00' +p637 +tp638 +Rp639 +g11 +(g12 +(I0 +tp640 +g14 +tp641 +Rp642 +(I1 +(I2 +tp643 +g20 +I00 +S'F\xca\x8b\x08\xaa}\xd7?\x07c\xe4T\x1fd\xe7?' +p644 +tp645 +bsg1 +(g5 +S'F\x00\x00\x00' +p646 +tp647 +Rp648 +g11 +(g12 +(I0 +tp649 +g14 +tp650 +Rp651 +(I1 +(I2 +tp652 +g20 +I00 +S'\xac\xb7\x06c\x81\xe1\xd5?\xb57\x1d\x9dm\xbb\x8e?' +p653 +tp654 +bsg1 +(g5 +S'G\x00\x00\x00' +p655 +tp656 +Rp657 +g11 +(g12 +(I0 +tp658 +g14 +tp659 +Rp660 +(I1 +(I2 +tp661 +g20 +I00 +S'\xdf\x1c\xd6\x03\xeew\xdc?\x083jO,[\xcd?' +p662 +tp663 +bsg1 +(g5 +S'H\x00\x00\x00' +p664 +tp665 +Rp666 +g11 +(g12 +(I0 +tp667 +g14 +tp668 +Rp669 +(I1 +(I2 +tp670 +g20 +I00 +S'9\x02\x94+J\x91\xcf?\x02ZN\xd2\xfd\x8c\xc6?' +p671 +tp672 +bsg1 +(g5 +S'I\x00\x00\x00' +p673 +tp674 +Rp675 +g11 +(g12 +(I0 +tp676 +g14 +tp677 +Rp678 +(I1 +(I2 +tp679 +g20 +I00 +S'8\xc8\xd0\xa23\xcc\xd6?\x13\n%\xd0\xd5\xaf\xe3?' +p680 +tp681 +bsg1 +(g5 +S'J\x00\x00\x00' +p682 +tp683 +Rp684 +g11 +(g12 +(I0 +tp685 +g14 +tp686 +Rp687 +(I1 +(I2 +tp688 +g20 +I00 +S'\xe0]\\n\xd7[\xe8?\xd3\xb0/\xc3\x92\r\xd3?' +p689 +tp690 +bsg1 +(g5 +S'K\x00\x00\x00' +p691 +tp692 +Rp693 +g11 +(g12 +(I0 +tp694 +g14 +tp695 +Rp696 +(I1 +(I2 +tp697 +g20 +I00 +S'\xd3\xfb\x1dG\x18z\xdb?\x90rQr\x06\x84\xdf?' +p698 +tp699 +bsg1 +(g5 +S'L\x00\x00\x00' +p700 +tp701 +Rp702 +g11 +(g12 +(I0 +tp703 +g14 +tp704 +Rp705 +(I1 +(I2 +tp706 +g20 +I00 +S'\xb4\xbe\xb3/P\xb4\xe0?\x7f+\x19\xda\xa7\xfd\xc0?' +p707 +tp708 +bsg1 +(g5 +S'M\x00\x00\x00' +p709 +tp710 +Rp711 +g11 +(g12 +(I0 +tp712 +g14 +tp713 +Rp714 +(I1 +(I2 +tp715 +g20 +I00 +S'N0Q\xfe\x83\xbb\xaa?2\xf4\x19\xf4\xc5\x16\xd5?' +p716 +tp717 +bsg1 +(g5 +S'N\x00\x00\x00' +p718 +tp719 +Rp720 +g11 +(g12 +(I0 +tp721 +g14 +tp722 +Rp723 +(I1 +(I2 +tp724 +g20 +I00 +S"h\xdf\xcdE\xe6'\xd4?R\xcd&\x93\xd6s\xe7?" +p725 +tp726 +bsg1 +(g5 +S'O\x00\x00\x00' +p727 +tp728 +Rp729 +g11 +(g12 +(I0 +tp730 +g14 +tp731 +Rp732 +(I1 +(I2 +tp733 +g20 +I00 +S'\x1e\xe8\x0e\xd8\xc0\x14\xdd?\xf4\xb2\xa0\x9d\xbd\x0f\xdc?' +p734 +tp735 +bsg1 +(g5 +S'P\x00\x00\x00' +p736 +tp737 +Rp738 +g11 +(g12 +(I0 +tp739 +g14 +tp740 +Rp741 +(I1 +(I2 +tp742 +g20 +I00 +S'\xb6\x0f\xc1\xe1Nz\xcf?\xc5V^\xc2#\xf3\xc5?' +p743 +tp744 +bsg1 +(g5 +S'Q\x00\x00\x00' +p745 +tp746 +Rp747 +g11 +(g12 +(I0 +tp748 +g14 +tp749 +Rp750 +(I1 +(I2 +tp751 +g20 +I00 +S'\xa4P5\xa9|\xc2\xe3?\n\xc4*{l\xce\xdb?' +p752 +tp753 +bsg1 +(g5 +S'R\x00\x00\x00' +p754 +tp755 +Rp756 +g11 +(g12 +(I0 +tp757 +g14 +tp758 +Rp759 +(I1 +(I2 +tp760 +g20 +I00 +S'\xd8\xf6\x11\xfdi\xc6\xe6?a\x80\x11\x17\xac\xc3\xd3?' +p761 +tp762 +bsg1 +(g5 +S'S\x00\x00\x00' +p763 +tp764 +Rp765 +g11 +(g12 +(I0 +tp766 +g14 +tp767 +Rp768 +(I1 +(I2 +tp769 +g20 +I00 +S'\x81\xbfs\xd3b\x9a\xd9?\xfd\x05\x10\xd1V\x08\xe4?' +p770 +tp771 +bsg1 +(g5 +S'T\x00\x00\x00' +p772 +tp773 +Rp774 +g11 +(g12 +(I0 +tp775 +g14 +tp776 +Rp777 +(I1 +(I2 +tp778 +g20 +I00 +S'\xd82\x14\xf5\x18\x02\xdf?\x10T\x13\x03\xb9h\xea?' +p779 +tp780 +bsg1 +(g5 +S'U\x00\x00\x00' +p781 +tp782 +Rp783 +g11 +(g12 +(I0 +tp784 +g14 +tp785 +Rp786 +(I1 +(I2 +tp787 +g20 +I00 +S'\xf7[3>\xb1@\xd9?o\xbf\x94\xd6J5\xe8?' +p788 +tp789 +bsg1 +(g5 +S'V\x00\x00\x00' +p790 +tp791 +Rp792 +g11 +(g12 +(I0 +tp793 +g14 +tp794 +Rp795 +(I1 +(I2 +tp796 +g20 +I00 +S'\xc6\x06 \x8c\x9db\xd7?!\x88b\xa0}\xaa\xd5?' +p797 +tp798 +bsg1 +(g5 +S'W\x00\x00\x00' +p799 +tp800 +Rp801 +g11 +(g12 +(I0 +tp802 +g14 +tp803 +Rp804 +(I1 +(I2 +tp805 +g20 +I00 +S'\xb2\xca\x8c\xa4ZZ\xe6?\xfc6\xb3`\xb7\xd4\xd9?' +p806 +tp807 +bsg1 +(g5 +S'X\x00\x00\x00' +p808 +tp809 +Rp810 +g11 +(g12 +(I0 +tp811 +g14 +tp812 +Rp813 +(I1 +(I2 +tp814 +g20 +I00 +S'"LY\xfa\x066\xe5?u\xea\xae\xc2\xf6w\xc7?' +p815 +tp816 +bsg1 +(g5 +S'Y\x00\x00\x00' +p817 +tp818 +Rp819 +g11 +(g12 +(I0 +tp820 +g14 +tp821 +Rp822 +(I1 +(I2 +tp823 +g20 +I00 +S'\xda\x81\x04+h5\xd6?\xf5\xe2\x89\x12\x01\x9d\xe0?' +p824 +tp825 +bsg1 +(g5 +S'Z\x00\x00\x00' +p826 +tp827 +Rp828 +g11 +(g12 +(I0 +tp829 +g14 +tp830 +Rp831 +(I1 +(I2 +tp832 +g20 +I00 +S'3\xdd\x98\n\x84%\xd9?B\xe9\x08\xe6s!\xde?' +p833 +tp834 +bsg1 +(g5 +S'[\x00\x00\x00' +p835 +tp836 +Rp837 +g11 +(g12 +(I0 +tp838 +g14 +tp839 +Rp840 +(I1 +(I2 +tp841 +g20 +I00 +S'XY\xadc\xa5\x1c\xe7?\xae\\)x\xf0I\xe0?' +p842 +tp843 +bsg1 +(g5 +S'\\\x00\x00\x00' +p844 +tp845 +Rp846 +g11 +(g12 +(I0 +tp847 +g14 +tp848 +Rp849 +(I1 +(I2 +tp850 +g20 +I00 +S'.@,<\x8e|\xee?*\xea6\x92N\x0b\xdc?' +p851 +tp852 +bsg1 +(g5 +S']\x00\x00\x00' +p853 +tp854 +Rp855 +g11 +(g12 +(I0 +tp856 +g14 +tp857 +Rp858 +(I1 +(I2 +tp859 +g20 +I00 +S'\x95\x0ez\x0c50\xca?\xff\xc4tr\xc8\xff\xea?' +p860 +tp861 +bsg1 +(g5 +S'^\x00\x00\x00' +p862 +tp863 +Rp864 +g11 +(g12 +(I0 +tp865 +g14 +tp866 +Rp867 +(I1 +(I2 +tp868 +g20 +I00 +S'\xb7\xed\xf4\xac\xa5\xd1\xe1?\xf8\xbd}+\xeaA\xe9?' +p869 +tp870 +bsg1 +(g5 +S'_\x00\x00\x00' +p871 +tp872 +Rp873 +g11 +(g12 +(I0 +tp874 +g14 +tp875 +Rp876 +(I1 +(I2 +tp877 +g20 +I00 +S'0\x15{Q\x06+\xda?\xa9\xc1\x9b\x99w\xba\xc0?' +p878 +tp879 +bsg1 +(g5 +S'`\x00\x00\x00' +p880 +tp881 +Rp882 +g11 +(g12 +(I0 +tp883 +g14 +tp884 +Rp885 +(I1 +(I2 +tp886 +g20 +I00 +S'\x8c\xb3\x1b\x067\xbd\xc3?M\xda)\x90\x012\xe3?' +p887 +tp888 +bsg1 +(g5 +S'a\x00\x00\x00' +p889 +tp890 +Rp891 +g11 +(g12 +(I0 +tp892 +g14 +tp893 +Rp894 +(I1 +(I2 +tp895 +g20 +I00 +S'(;_G\x00J\xbd?\x91\x96\x1e\xad\xca\xf9\xdd?' +p896 +tp897 +bsg1 +(g5 +S'b\x00\x00\x00' +p898 +tp899 +Rp900 +g11 +(g12 +(I0 +tp901 +g14 +tp902 +Rp903 +(I1 +(I2 +tp904 +g20 +I00 +S'\x14z\xaa\nD\x94\xd8?\xeb\xd6\xab\xc1u\x04\xc6?' +p905 +tp906 +bsg1 +(g5 +S'c\x00\x00\x00' +p907 +tp908 +Rp909 +g11 +(g12 +(I0 +tp910 +g14 +tp911 +Rp912 +(I1 +(I2 +tp913 +g20 +I00 +S'\x8b\xa0\xc7\xfaU\xf2\xe2?\x08\xe6\xd6:m \xdc?' +p914 +tp915 +bsg1 +(g5 +S'd\x00\x00\x00' +p916 +tp917 +Rp918 +g11 +(g12 +(I0 +tp919 +g14 +tp920 +Rp921 +(I1 +(I2 +tp922 +g20 +I00 +S'\xdc\x83\xd1n\xce\xbf\xd9?<\x8e\xbf]nL\xdc?' +p923 +tp924 +bsg1 +(g5 +S'e\x00\x00\x00' +p925 +tp926 +Rp927 +g11 +(g12 +(I0 +tp928 +g14 +tp929 +Rp930 +(I1 +(I2 +tp931 +g20 +I00 +S'\xce\xea\x0e\xaf\x04\xef\xe0?x\xfe"\xbfW\xe8\xdb?' +p932 +tp933 +bsg1 +(g5 +S'f\x00\x00\x00' +p934 +tp935 +Rp936 +g11 +(g12 +(I0 +tp937 +g14 +tp938 +Rp939 +(I1 +(I2 +tp940 +g20 +I00 +S'\xc9\xb5\xca\xfb\xc4\xa4\xc8?;1\xf0\xdcSt\xe6?' +p941 +tp942 +bsg1 +(g5 +S'g\x00\x00\x00' +p943 +tp944 +Rp945 +g11 +(g12 +(I0 +tp946 +g14 +tp947 +Rp948 +(I1 +(I2 +tp949 +g20 +I00 +S'\x17\xb44\xa2\xd2\x95\xd7?\xffO\x003\xf0\x15\xc1?' +p950 +tp951 +bsg1 +(g5 +S'h\x00\x00\x00' +p952 +tp953 +Rp954 +g11 +(g12 +(I0 +tp955 +g14 +tp956 +Rp957 +(I1 +(I2 +tp958 +g20 +I00 +S'\xde\xd3\xe6\xd9E\x89\xcb?,l\xa5(N\xef\xe3?' +p959 +tp960 +bsg1 +(g5 +S'i\x00\x00\x00' +p961 +tp962 +Rp963 +g11 +(g12 +(I0 +tp964 +g14 +tp965 +Rp966 +(I1 +(I2 +tp967 +g20 +I00 +S"['D\xa8(\x9f\xd0?\xeb\xfe\x95\x8f3<\xba?" +p968 +tp969 +bsg1 +(g5 +S'j\x00\x00\x00' +p970 +tp971 +Rp972 +g11 +(g12 +(I0 +tp973 +g14 +tp974 +Rp975 +(I1 +(I2 +tp976 +g20 +I00 +S'#}|\xfd\x81\x99\xe6?\x89\x1f\\\x9d\xe3,\xde?' +p977 +tp978 +bsg1 +(g5 +S'k\x00\x00\x00' +p979 +tp980 +Rp981 +g11 +(g12 +(I0 +tp982 +g14 +tp983 +Rp984 +(I1 +(I2 +tp985 +g20 +I00 +S'\x86\xb2\xe8\x80\x80\x0f\xda?qg\xbf\xa7)c\xc2?' +p986 +tp987 +bsg1 +(g5 +S'l\x00\x00\x00' +p988 +tp989 +Rp990 +g11 +(g12 +(I0 +tp991 +g14 +tp992 +Rp993 +(I1 +(I2 +tp994 +g20 +I00 +S'\x0f!\xa3\x11)\xbb\xeb?\x93\x8a\x04\x8f\xbez\xda?' +p995 +tp996 +bsg1 +(g5 +S'm\x00\x00\x00' +p997 +tp998 +Rp999 +g11 +(g12 +(I0 +tp1000 +g14 +tp1001 +Rp1002 +(I1 +(I2 +tp1003 +g20 +I00 +S'\xb8\x02\x10#\xbe?\xe2?\\\x04\x88%F]\xe2?' +p1004 +tp1005 +bsg1 +(g5 +S'n\x00\x00\x00' +p1006 +tp1007 +Rp1008 +g11 +(g12 +(I0 +tp1009 +g14 +tp1010 +Rp1011 +(I1 +(I2 +tp1012 +g20 +I00 +S"\x8f\xb58\xa7g'\xe5?\x98h\xd6\tc\xe6\xe1?" +p1013 +tp1014 +bsg1 +(g5 +S'o\x00\x00\x00' +p1015 +tp1016 +Rp1017 +g11 +(g12 +(I0 +tp1018 +g14 +tp1019 +Rp1020 +(I1 +(I2 +tp1021 +g20 +I00 +S'\xf0\xd1\x99\xecE\xff\xe3?F\x84\x7fK\xc9\x87\xd3?' +p1022 +tp1023 +bsg1 +(g5 +S'p\x00\x00\x00' +p1024 +tp1025 +Rp1026 +g11 +(g12 +(I0 +tp1027 +g14 +tp1028 +Rp1029 +(I1 +(I2 +tp1030 +g20 +I00 +S'\xa3\x1a\x02\xaf\xed\xf1\xbe?\xff\x03\xb2\xa5\x08\x92\xda?' +p1031 +tp1032 +bsg1 +(g5 +S'q\x00\x00\x00' +p1033 +tp1034 +Rp1035 +g11 +(g12 +(I0 +tp1036 +g14 +tp1037 +Rp1038 +(I1 +(I2 +tp1039 +g20 +I00 +S'"\xed\x15\x11_.\xe5?\xe9\xd2\xe7\xb5~r\xe8?' +p1040 +tp1041 +bsg1 +(g5 +S'r\x00\x00\x00' +p1042 +tp1043 +Rp1044 +g11 +(g12 +(I0 +tp1045 +g14 +tp1046 +Rp1047 +(I1 +(I2 +tp1048 +g20 +I00 +S'\xae]\xd7\x1c\xdd\xcb\xe2?(Q\x93\xaezh\xe9?' +p1049 +tp1050 +bsg1 +(g5 +S's\x00\x00\x00' +p1051 +tp1052 +Rp1053 +g11 +(g12 +(I0 +tp1054 +g14 +tp1055 +Rp1056 +(I1 +(I2 +tp1057 +g20 +I00 +S'\xff\x0b\x8a\xf7j\x0c\xd2?\x97\x18\x89F^F\xd7?' +p1058 +tp1059 +bsg1 +(g5 +S't\x00\x00\x00' +p1060 +tp1061 +Rp1062 +g11 +(g12 +(I0 +tp1063 +g14 +tp1064 +Rp1065 +(I1 +(I2 +tp1066 +g20 +I00 +S'\xef\xf8K\xfc}\xdd\xb8?\xf0 BW\xf4\xb8\xcd?' +p1067 +tp1068 +bsg1 +(g5 +S'u\x00\x00\x00' +p1069 +tp1070 +Rp1071 +g11 +(g12 +(I0 +tp1072 +g14 +tp1073 +Rp1074 +(I1 +(I2 +tp1075 +g20 +I00 +S'\xd6-\x1a\xf9E\xd7\xe0?\xe1c\x83\xc6\x9a\xf3\xe5?' +p1076 +tp1077 +bsg1 +(g5 +S'v\x00\x00\x00' +p1078 +tp1079 +Rp1080 +g11 +(g12 +(I0 +tp1081 +g14 +tp1082 +Rp1083 +(I1 +(I2 +tp1084 +g20 +I00 +S'\xf6 \xa8^Z6\xa5?\x03\xd2SW\x02*\xdd?' +p1085 +tp1086 +bsg1 +(g5 +S'w\x00\x00\x00' +p1087 +tp1088 +Rp1089 +g11 +(g12 +(I0 +tp1090 +g14 +tp1091 +Rp1092 +(I1 +(I2 +tp1093 +g20 +I00 +S'\xadU:%\xc2\xe6\xe8?%\xa9/N*\xea\xd6?' +p1094 +tp1095 +bsg1 +(g5 +S'x\x00\x00\x00' +p1096 +tp1097 +Rp1098 +g11 +(g12 +(I0 +tp1099 +g14 +tp1100 +Rp1101 +(I1 +(I2 +tp1102 +g20 +I00 +S'\xcc\x8c3\xc3\x13@\xb6?u\x8c\xb5\x8d\x05\xfd\xd6?' +p1103 +tp1104 +bsg1 +(g5 +S'y\x00\x00\x00' +p1105 +tp1106 +Rp1107 +g11 +(g12 +(I0 +tp1108 +g14 +tp1109 +Rp1110 +(I1 +(I2 +tp1111 +g20 +I00 +S'6\xb7\xed\xb4}v\xca?\x82\xbd\xc4\xcd:\x92\xe4?' +p1112 +tp1113 +bsg1 +(g5 +S'z\x00\x00\x00' +p1114 +tp1115 +Rp1116 +g11 +(g12 +(I0 +tp1117 +g14 +tp1118 +Rp1119 +(I1 +(I2 +tp1120 +g20 +I00 +S'\x94\xefz\xeb\xba+\xe6?\xc9\x10\xdb\xea+\x04\xd1?' +p1121 +tp1122 +bsg1 +(g5 +S'{\x00\x00\x00' +p1123 +tp1124 +Rp1125 +g11 +(g12 +(I0 +tp1126 +g14 +tp1127 +Rp1128 +(I1 +(I2 +tp1129 +g20 +I00 +S'LE\x0b`p\x91\xd0?\x00\xd1\x08\x98\x91\xba\xeb?' +p1130 +tp1131 +bsg1 +(g5 +S'|\x00\x00\x00' +p1132 +tp1133 +Rp1134 +g11 +(g12 +(I0 +tp1135 +g14 +tp1136 +Rp1137 +(I1 +(I2 +tp1138 +g20 +I00 +S'\xd4[\x01\x02\x9c\x86\xc8?M@\xb7\x90\xadL\xdc?' +p1139 +tp1140 +bsg1 +(g5 +S'}\x00\x00\x00' +p1141 +tp1142 +Rp1143 +g11 +(g12 +(I0 +tp1144 +g14 +tp1145 +Rp1146 +(I1 +(I2 +tp1147 +g20 +I00 +S'\xc6,h!\xbf\xc5\xe7?\xd1\x0eF3_4\xe6?' +p1148 +tp1149 +bsg1 +(g5 +S'~\x00\x00\x00' +p1150 +tp1151 +Rp1152 +g11 +(g12 +(I0 +tp1153 +g14 +tp1154 +Rp1155 +(I1 +(I2 +tp1156 +g20 +I00 +S'\xf2\xf1X\x10B\xb4\xbb?\xa3\x9c\x0f\x073 \xcc?' +p1157 +tp1158 +bsg1 +(g5 +S'\x7f\x00\x00\x00' +p1159 +tp1160 +Rp1161 +g11 +(g12 +(I0 +tp1162 +g14 +tp1163 +Rp1164 +(I1 +(I2 +tp1165 +g20 +I00 +S'b\x18x\xacY\xec\xe4?F\xd0\\E\x0f\x9f\xc6?' +p1166 +tp1167 +bsg1 +(g5 +S'\x80\x00\x00\x00' +p1168 +tp1169 +Rp1170 +g11 +(g12 +(I0 +tp1171 +g14 +tp1172 +Rp1173 +(I1 +(I2 +tp1174 +g20 +I00 +S'>\x15\x8d\x0e\x97$\xd9?\xfb\x89\x8ff\x19\xc9\xd6?' +p1175 +tp1176 +bsg1 +(g5 +S'\x81\x00\x00\x00' +p1177 +tp1178 +Rp1179 +g11 +(g12 +(I0 +tp1180 +g14 +tp1181 +Rp1182 +(I1 +(I2 +tp1183 +g20 +I00 +S'S\x9a\x1f\x02\xff\xff\xcd?\xd05\x83\xab+(\xea?' +p1184 +tp1185 +bsg1 +(g5 +S'\x82\x00\x00\x00' +p1186 +tp1187 +Rp1188 +g11 +(g12 +(I0 +tp1189 +g14 +tp1190 +Rp1191 +(I1 +(I2 +tp1192 +g20 +I00 +S'?\xe9\xec\x1a\xc1\x95\xdd?\x930\x90A\xf3V\xcf?' +p1193 +tp1194 +bsg1 +(g5 +S'\x83\x00\x00\x00' +p1195 +tp1196 +Rp1197 +g11 +(g12 +(I0 +tp1198 +g14 +tp1199 +Rp1200 +(I1 +(I2 +tp1201 +g20 +I00 +S'\r\x18\x91\xa5\xc4I\xcd?!D\xf4\xf1\x9ad\xeb?' +p1202 +tp1203 +bsg1 +(g5 +S'\x84\x00\x00\x00' +p1204 +tp1205 +Rp1206 +g11 +(g12 +(I0 +tp1207 +g14 +tp1208 +Rp1209 +(I1 +(I2 +tp1210 +g20 +I00 +S'\xd1\xea(\xf0\xdd\x97\xe9?x\xed\xc2\x1a\x07i\xe2?' +p1211 +tp1212 +bsg1 +(g5 +S'\x85\x00\x00\x00' +p1213 +tp1214 +Rp1215 +g11 +(g12 +(I0 +tp1216 +g14 +tp1217 +Rp1218 +(I1 +(I2 +tp1219 +g20 +I00 +S'\x10TO\xf8\x14\xdc\xe7?\x8b\xda\xe0Y\xed\xbe\xd1?' +p1220 +tp1221 +bsg1 +(g5 +S'\x86\x00\x00\x00' +p1222 +tp1223 +Rp1224 +g11 +(g12 +(I0 +tp1225 +g14 +tp1226 +Rp1227 +(I1 +(I2 +tp1228 +g20 +I00 +S'D\x0c\xef\xfe8\xf3\xb3?\r\xea\ro\xe1\x89\xd1?' +p1229 +tp1230 +bsg1 +(g5 +S'\x87\x00\x00\x00' +p1231 +tp1232 +Rp1233 +g11 +(g12 +(I0 +tp1234 +g14 +tp1235 +Rp1236 +(I1 +(I2 +tp1237 +g20 +I00 +S'\xdb\xac\xc4h\x13{\xe0?\x08\x03\xf1\x08>\x11\xe1?' +p1238 +tp1239 +bsg1 +(g5 +S'\x88\x00\x00\x00' +p1240 +tp1241 +Rp1242 +g11 +(g12 +(I0 +tp1243 +g14 +tp1244 +Rp1245 +(I1 +(I2 +tp1246 +g20 +I00 +S'\t\xf4\xfaQ\x87\xe1\xcc?\xf4\xf1\xac\x9aR+\xeb?' +p1247 +tp1248 +bsg1 +(g5 +S'\x89\x00\x00\x00' +p1249 +tp1250 +Rp1251 +g11 +(g12 +(I0 +tp1252 +g14 +tp1253 +Rp1254 +(I1 +(I2 +tp1255 +g20 +I00 +S'O \xbb\x81\xa1S\xe0?1H\x0b\x9a\nh\xe9?' +p1256 +tp1257 +bsg1 +(g5 +S'\x8a\x00\x00\x00' +p1258 +tp1259 +Rp1260 +g11 +(g12 +(I0 +tp1261 +g14 +tp1262 +Rp1263 +(I1 +(I2 +tp1264 +g20 +I00 +S'\xb0g\x08\xc6:\xee\xd1??\x91\x8e\x02O^\xc6?' +p1265 +tp1266 +bsg1 +(g5 +S'\x8b\x00\x00\x00' +p1267 +tp1268 +Rp1269 +g11 +(g12 +(I0 +tp1270 +g14 +tp1271 +Rp1272 +(I1 +(I2 +tp1273 +g20 +I00 +S'\xcb|\xfa1\x97\x8d\xeb?\x02\x160\xe2?_\xd5?' +p1274 +tp1275 +bsg1 +(g5 +S'\x8c\x00\x00\x00' +p1276 +tp1277 +Rp1278 +g11 +(g12 +(I0 +tp1279 +g14 +tp1280 +Rp1281 +(I1 +(I2 +tp1282 +g20 +I00 +S'xOC\x1f\xf5E\xd9?\xd2m\xcb\xf5\x1e`\xe0?' +p1283 +tp1284 +bsg1 +(g5 +S'\x8d\x00\x00\x00' +p1285 +tp1286 +Rp1287 +g11 +(g12 +(I0 +tp1288 +g14 +tp1289 +Rp1290 +(I1 +(I2 +tp1291 +g20 +I00 +S'^\x066\xff\x02\x9a\xc5?9q\xa5\xe6\x13\xbc\xe6?' +p1292 +tp1293 +bsg1 +(g5 +S'\x8e\x00\x00\x00' +p1294 +tp1295 +Rp1296 +g11 +(g12 +(I0 +tp1297 +g14 +tp1298 +Rp1299 +(I1 +(I2 +tp1300 +g20 +I00 +S'\xac\xa7\xd1n*\xde\xe4?\xfa\xd3\xd5\x8dP\x0f\xc8?' +p1301 +tp1302 +bsg1 +(g5 +S'\x8f\x00\x00\x00' +p1303 +tp1304 +Rp1305 +g11 +(g12 +(I0 +tp1306 +g14 +tp1307 +Rp1308 +(I1 +(I2 +tp1309 +g20 +I00 +S'\xc6\x9a\xa0\xf1\x82k\xe1?4\x8d\t\xcaD\xe2\xe2?' +p1310 +tp1311 +bsg1 +(g5 +S'\x90\x00\x00\x00' +p1312 +tp1313 +Rp1314 +g11 +(g12 +(I0 +tp1315 +g14 +tp1316 +Rp1317 +(I1 +(I2 +tp1318 +g20 +I00 +S'jK\x1f\x04\x9bt\xda?\xce8\n\xad\xad\x01\xed?' +p1319 +tp1320 +bsg1 +(g5 +S'\x91\x00\x00\x00' +p1321 +tp1322 +Rp1323 +g11 +(g12 +(I0 +tp1324 +g14 +tp1325 +Rp1326 +(I1 +(I2 +tp1327 +g20 +I00 +S'G\x17\xf5\xb3\xc1 \xe0?P\xee\x9b\xbc\xba\xed\xd5?' +p1328 +tp1329 +bsg1 +(g5 +S'\x92\x00\x00\x00' +p1330 +tp1331 +Rp1332 +g11 +(g12 +(I0 +tp1333 +g14 +tp1334 +Rp1335 +(I1 +(I2 +tp1336 +g20 +I00 +S"\x85b\x1an\x13\xa9\xb9?'jfo\xff'\xd3?" +p1337 +tp1338 +bsg1 +(g5 +S'\x93\x00\x00\x00' +p1339 +tp1340 +Rp1341 +g11 +(g12 +(I0 +tp1342 +g14 +tp1343 +Rp1344 +(I1 +(I2 +tp1345 +g20 +I00 +S'\xda\x00\x8b\xb5\xc5\x86\xe6?\x84\xfb\x1fX\x8c\xd5\xdb?' +p1346 +tp1347 +bsg1 +(g5 +S'\x94\x00\x00\x00' +p1348 +tp1349 +Rp1350 +g11 +(g12 +(I0 +tp1351 +g14 +tp1352 +Rp1353 +(I1 +(I2 +tp1354 +g20 +I00 +S'\xc9\x17\x94\xf6\xe7\x1b\xe8?2\xbc\xbc\x17.\xe3\xc8?' +p1355 +tp1356 +bsg1 +(g5 +S'\x95\x00\x00\x00' +p1357 +tp1358 +Rp1359 +g11 +(g12 +(I0 +tp1360 +g14 +tp1361 +Rp1362 +(I1 +(I2 +tp1363 +g20 +I00 +S'^\x1b\x91\x01 at Y\xe0?B\x90\xc1\xe2\x1e\xb4\xea?' +p1364 +tp1365 +bsg1 +(g5 +S'\x96\x00\x00\x00' +p1366 +tp1367 +Rp1368 +g11 +(g12 +(I0 +tp1369 +g14 +tp1370 +Rp1371 +(I1 +(I2 +tp1372 +g20 +I00 +S',\x112^\xed\xbd\xd7?6/\xce\xe7T\xb7\xc6?' +p1373 +tp1374 +bsg1 +(g5 +S'\x97\x00\x00\x00' +p1375 +tp1376 +Rp1377 +g11 +(g12 +(I0 +tp1378 +g14 +tp1379 +Rp1380 +(I1 +(I2 +tp1381 +g20 +I00 +S'\x95s\xca\x98s\xdb\xae?\xb9\x7f\x05\xae\xfay\xcd?' +p1382 +tp1383 +bsg1 +(g5 +S'\x98\x00\x00\x00' +p1384 +tp1385 +Rp1386 +g11 +(g12 +(I0 +tp1387 +g14 +tp1388 +Rp1389 +(I1 +(I2 +tp1390 +g20 +I00 +S'\xa2\xf3\x15S\xc9\t\xe5?\xad\xbbp\x13x\x91\xe5?' +p1391 +tp1392 +bsg1 +(g5 +S'\x99\x00\x00\x00' +p1393 +tp1394 +Rp1395 +g11 +(g12 +(I0 +tp1396 +g14 +tp1397 +Rp1398 +(I1 +(I2 +tp1399 +g20 +I00 +S'\x19FU[/\xb0\xd9?Fhq\x83Y\xf5\xe7?' +p1400 +tp1401 +bsg1 +(g5 +S'\x9a\x00\x00\x00' +p1402 +tp1403 +Rp1404 +g11 +(g12 +(I0 +tp1405 +g14 +tp1406 +Rp1407 +(I1 +(I2 +tp1408 +g20 +I00 +S'X\xda\xbb\x97HR\xd5?z\x1cq\x8eI\xaf\xc0?' +p1409 +tp1410 +bsg1 +(g5 +S'\x9b\x00\x00\x00' +p1411 +tp1412 +Rp1413 +g11 +(g12 +(I0 +tp1414 +g14 +tp1415 +Rp1416 +(I1 +(I2 +tp1417 +g20 +I00 +S'G\r\xd8z\x8d"\xe4?D\xc0\xdd\xc7n\x8f\xe3?' +p1418 +tp1419 +bsg1 +(g5 +S'\x9c\x00\x00\x00' +p1420 +tp1421 +Rp1422 +g11 +(g12 +(I0 +tp1423 +g14 +tp1424 +Rp1425 +(I1 +(I2 +tp1426 +g20 +I00 +S'\xcd\x8b\xe2\xc5}\xc2\xdc?40\x02\xb3\r\xe6\xc2?' +p1427 +tp1428 +bsg1 +(g5 +S'\x9d\x00\x00\x00' +p1429 +tp1430 +Rp1431 +g11 +(g12 +(I0 +tp1432 +g14 +tp1433 +Rp1434 +(I1 +(I2 +tp1435 +g20 +I00 +S"0\xdc['\x08\xe7\xd2?\xd1\xc5\x01\xcd}\x04\xed?" +p1436 +tp1437 +bsg1 +(g5 +S'\x9e\x00\x00\x00' +p1438 +tp1439 +Rp1440 +g11 +(g12 +(I0 +tp1441 +g14 +tp1442 +Rp1443 +(I1 +(I2 +tp1444 +g20 +I00 +S'\x88\ti\x861\x0f\xd4?\x9b at lk\xf3B\xc3?' +p1445 +tp1446 +bsg1 +(g5 +S'\x9f\x00\x00\x00' +p1447 +tp1448 +Rp1449 +g11 +(g12 +(I0 +tp1450 +g14 +tp1451 +Rp1452 +(I1 +(I2 +tp1453 +g20 +I00 +S'\xd7\x90h\xa3\x893\xe8?\x18E\xfe\xf7\x85\xe2\xe0?' +p1454 +tp1455 +bsg1 +(g5 +S'\xa0\x00\x00\x00' +p1456 +tp1457 +Rp1458 +g11 +(g12 +(I0 +tp1459 +g14 +tp1460 +Rp1461 +(I1 +(I2 +tp1462 +g20 +I00 +S'\x9d4\x9d\xd1\xb5\xf8\xc7?\x97\xcd\x12\xde\xaf!\xe3?' +p1463 +tp1464 +bsg1 +(g5 +S'\xa1\x00\x00\x00' +p1465 +tp1466 +Rp1467 +g11 +(g12 +(I0 +tp1468 +g14 +tp1469 +Rp1470 +(I1 +(I2 +tp1471 +g20 +I00 +S'\xc2\x05Y\x97\x16\x8a\xd6?\xc3:_\xbd\x01\xd3\xe5?' +p1472 +tp1473 +bsg1 +(g5 +S'\xa2\x00\x00\x00' +p1474 +tp1475 +Rp1476 +g11 +(g12 +(I0 +tp1477 +g14 +tp1478 +Rp1479 +(I1 +(I2 +tp1480 +g20 +I00 +S"`\xbc\xb7\xc1'\xae\xe1?\xc3\xbb\xd0\xb1\x81\xe8\xee?" +p1481 +tp1482 +bsg1 +(g5 +S'\xa3\x00\x00\x00' +p1483 +tp1484 +Rp1485 +g11 +(g12 +(I0 +tp1486 +g14 +tp1487 +Rp1488 +(I1 +(I2 +tp1489 +g20 +I00 +S'=h#\xff&\x06\xad?L\x18\x95\x15\xe5\x1a\xdd?' +p1490 +tp1491 +bsg1 +(g5 +S'\xa4\x00\x00\x00' +p1492 +tp1493 +Rp1494 +g11 +(g12 +(I0 +tp1495 +g14 +tp1496 +Rp1497 +(I1 +(I2 +tp1498 +g20 +I00 +S'\x0e\xbe\xd8\xd9\xc5\xd8\xba?!\x06\xd4\x81O\x1d\xdb?' +p1499 +tp1500 +bsg1 +(g5 +S'\xa5\x00\x00\x00' +p1501 +tp1502 +Rp1503 +g11 +(g12 +(I0 +tp1504 +g14 +tp1505 +Rp1506 +(I1 +(I2 +tp1507 +g20 +I00 +S'\xfe^\xd2\xbf\xf9\x1e\xe6?C\xc8\xa2\xda\x08~\xe0?' +p1508 +tp1509 +bsg1 +(g5 +S'\xa6\x00\x00\x00' +p1510 +tp1511 +Rp1512 +g11 +(g12 +(I0 +tp1513 +g14 +tp1514 +Rp1515 +(I1 +(I2 +tp1516 +g20 +I00 +S'\x9d\xa9O\x8bI\xf9\xd7?\xa2K\xa54\x11\xaf\xe8?' +p1517 +tp1518 +bsg1 +(g5 +S'\xa7\x00\x00\x00' +p1519 +tp1520 +Rp1521 +g11 +(g12 +(I0 +tp1522 +g14 +tp1523 +Rp1524 +(I1 +(I2 +tp1525 +g20 +I00 +S'\xeb\x16\xd1\x8eB7\xec?\xc3p6-\x0f\xbe\xe1?' +p1526 +tp1527 +bsg1 +(g5 +S'\xa8\x00\x00\x00' +p1528 +tp1529 +Rp1530 +g11 +(g12 +(I0 +tp1531 +g14 +tp1532 +Rp1533 +(I1 +(I2 +tp1534 +g20 +I00 +S'`@\xe5\xbf\xecv\xe0?\xe1q\x9dx\xf2>\xcc?' +p1535 +tp1536 +bsg1 +(g5 +S'\xa9\x00\x00\x00' +p1537 +tp1538 +Rp1539 +g11 +(g12 +(I0 +tp1540 +g14 +tp1541 +Rp1542 +(I1 +(I2 +tp1543 +g20 +I00 +S'\\v\x17P\xb8\xf1\xea?l\xbe\x1e\x8cp\xfb\xd5?' +p1544 +tp1545 +bsg1 +(g5 +S'\xaa\x00\x00\x00' +p1546 +tp1547 +Rp1548 +g11 +(g12 +(I0 +tp1549 +g14 +tp1550 +Rp1551 +(I1 +(I2 +tp1552 +g20 +I00 +S'$fNx\x87\x1f\xec?f\x19\x10\xb1\x9c\x80\xe0?' +p1553 +tp1554 +bsg1 +(g5 +S'\xab\x00\x00\x00' +p1555 +tp1556 +Rp1557 +g11 +(g12 +(I0 +tp1558 +g14 +tp1559 +Rp1560 +(I1 +(I2 +tp1561 +g20 +I00 +S'\xbfU\xba\xa1\xeb\x8b\xe3?<\xc2?\xe2\xab\xac\xda?' +p1562 +tp1563 +bsg1 +(g5 +S'\xac\x00\x00\x00' +p1564 +tp1565 +Rp1566 +g11 +(g12 +(I0 +tp1567 +g14 +tp1568 +Rp1569 +(I1 +(I2 +tp1570 +g20 +I00 +S'\xcc\xf9Ve\x89h\xd9?Iw\x95\xef\xe3\x7f\xc5?' +p1571 +tp1572 +bsg1 +(g5 +S'\xad\x00\x00\x00' +p1573 +tp1574 +Rp1575 +g11 +(g12 +(I0 +tp1576 +g14 +tp1577 +Rp1578 +(I1 +(I2 +tp1579 +g20 +I00 +S'7)v\xbb\xbc\xc9\xc4?U\xaa9\x03\xec\x15\xcb?' +p1580 +tp1581 +bsg1 +(g5 +S'\xae\x00\x00\x00' +p1582 +tp1583 +Rp1584 +g11 +(g12 +(I0 +tp1585 +g14 +tp1586 +Rp1587 +(I1 +(I2 +tp1588 +g20 +I00 +S'\xf2M\xd6\xa6(\xb1\xe5?hND\xd3?\xd0\xe8?' +p1589 +tp1590 +bsg1 +(g5 +S'\xaf\x00\x00\x00' +p1591 +tp1592 +Rp1593 +g11 +(g12 +(I0 +tp1594 +g14 +tp1595 +Rp1596 +(I1 +(I2 +tp1597 +g20 +I00 +S'\xa3\x17M\xec\x10\x88\xe7?\x06?\x0e=\xad\x8c\xca?' +p1598 +tp1599 +bsg1 +(g5 +S'\xb0\x00\x00\x00' +p1600 +tp1601 +Rp1602 +g11 +(g12 +(I0 +tp1603 +g14 +tp1604 +Rp1605 +(I1 +(I2 +tp1606 +g20 +I00 +S'\x84Z\xb7gG\x1a\xcb?P\xcfD\xae\xefz\xd7?' +p1607 +tp1608 +bsg1 +(g5 +S'\xb1\x00\x00\x00' +p1609 +tp1610 +Rp1611 +g11 +(g12 +(I0 +tp1612 +g14 +tp1613 +Rp1614 +(I1 +(I2 +tp1615 +g20 +I00 +S'O\x8b\xc2\x1b\x0c\xa3\xe6?\xf8o7P\x87\xbf\xe8?' +p1616 +tp1617 +bsg1 +(g5 +S'\xb2\x00\x00\x00' +p1618 +tp1619 +Rp1620 +g11 +(g12 +(I0 +tp1621 +g14 +tp1622 +Rp1623 +(I1 +(I2 +tp1624 +g20 +I00 +S'_\xdf\xdc\xa5\x8aM\xc6?\x18_\xc5\xd9\xd8\xea\xd7?' +p1625 +tp1626 +bsg1 +(g5 +S'\xb3\x00\x00\x00' +p1627 +tp1628 +Rp1629 +g11 +(g12 +(I0 +tp1630 +g14 +tp1631 +Rp1632 +(I1 +(I2 +tp1633 +g20 +I00 +S'\x8b,\xca\xb0\xabP\xe8?q;\xa6W\xf3$\xe6?' +p1634 +tp1635 +bsg1 +(g5 +S'\xb4\x00\x00\x00' +p1636 +tp1637 +Rp1638 +g11 +(g12 +(I0 +tp1639 +g14 +tp1640 +Rp1641 +(I1 +(I2 +tp1642 +g20 +I00 +S" l\xa9?+9\xc6?['\xd0\xdd{/\xcc?" +p1643 +tp1644 +bsg1 +(g5 +S'\xb5\x00\x00\x00' +p1645 +tp1646 +Rp1647 +g11 +(g12 +(I0 +tp1648 +g14 +tp1649 +Rp1650 +(I1 +(I2 +tp1651 +g20 +I00 +S'\xde\x00\xba\xd6Zj\xe6?\xba\x9a\xde\x83\x93B\xd7?' +p1652 +tp1653 +bsg1 +(g5 +S'\xb6\x00\x00\x00' +p1654 +tp1655 +Rp1656 +g11 +(g12 +(I0 +tp1657 +g14 +tp1658 +Rp1659 +(I1 +(I2 +tp1660 +g20 +I00 +S'~\xa5\x12\xb3\xd1\xb1\xcf?\x02]u\x13\xb8\n\xda?' +p1661 +tp1662 +bsg1 +(g5 +S'\xb7\x00\x00\x00' +p1663 +tp1664 +Rp1665 +g11 +(g12 +(I0 +tp1666 +g14 +tp1667 +Rp1668 +(I1 +(I2 +tp1669 +g20 +I00 +S'\xd9\xab\x99,e\x1c\xe2?Ux\rA\xa4\xf4\xd4?' +p1670 +tp1671 +bsg1 +(g5 +S'\xb8\x00\x00\x00' +p1672 +tp1673 +Rp1674 +g11 +(g12 +(I0 +tp1675 +g14 +tp1676 +Rp1677 +(I1 +(I2 +tp1678 +g20 +I00 +S'(Q.(\xe9\x00\xd1?s\xc8\x92\x06M\xe5\xdb?' +p1679 +tp1680 +bsg1 +(g5 +S'\xb9\x00\x00\x00' +p1681 +tp1682 +Rp1683 +g11 +(g12 +(I0 +tp1684 +g14 +tp1685 +Rp1686 +(I1 +(I2 +tp1687 +g20 +I00 +S'\x0b[=\x8db\xe7\xd2?z4\x1e\x9e|\x19\xb5?' +p1688 +tp1689 +bsg1 +(g5 +S'\xba\x00\x00\x00' +p1690 +tp1691 +Rp1692 +g11 +(g12 +(I0 +tp1693 +g14 +tp1694 +Rp1695 +(I1 +(I2 +tp1696 +g20 +I00 +S'\x81\xe8\xff\x1eT\x17\xda?\xf7w\tF`\xab\xbb?' +p1697 +tp1698 +bsg1 +(g5 +S'\xbb\x00\x00\x00' +p1699 +tp1700 +Rp1701 +g11 +(g12 +(I0 +tp1702 +g14 +tp1703 +Rp1704 +(I1 +(I2 +tp1705 +g20 +I00 +S'T\x1c\xda_\x0f\xb2\xd5?\xa4\xa6\xb5\xa1\xed6\xc3?' +p1706 +tp1707 +bsg1 +(g5 +S'\xbc\x00\x00\x00' +p1708 +tp1709 +Rp1710 +g11 +(g12 +(I0 +tp1711 +g14 +tp1712 +Rp1713 +(I1 +(I2 +tp1714 +g20 +I00 +S'\xea1\x15)\xad\xfd\xe8?\r\x91\xdb9}V\xd4?' +p1715 +tp1716 +bsg1 +(g5 +S'\xbd\x00\x00\x00' +p1717 +tp1718 +Rp1719 +g11 +(g12 +(I0 +tp1720 +g14 +tp1721 +Rp1722 +(I1 +(I2 +tp1723 +g20 +I00 +S'm\x8a\xb5\xd1\xc1\xb8\xc7?Vvw\xb3=\xd2\xe1?' +p1724 +tp1725 +bsg1 +(g5 +S'\xbe\x00\x00\x00' +p1726 +tp1727 +Rp1728 +g11 +(g12 +(I0 +tp1729 +g14 +tp1730 +Rp1731 +(I1 +(I2 +tp1732 +g20 +I00 +S"\x1d\x8fP\xbe'z\xe7?\x910&'\xd9\x9d\xdd?" +p1733 +tp1734 +bsg1 +(g5 +S'\xbf\x00\x00\x00' +p1735 +tp1736 +Rp1737 +g11 +(g12 +(I0 +tp1738 +g14 +tp1739 +Rp1740 +(I1 +(I2 +tp1741 +g20 +I00 +S'u\x9d\xbc\x99\x84\x92\xe4?\xcc\x12\x195\xa6\xcc\xc6?' +p1742 +tp1743 +bsg1 +(g5 +S'\xc0\x00\x00\x00' +p1744 +tp1745 +Rp1746 +g11 +(g12 +(I0 +tp1747 +g14 +tp1748 +Rp1749 +(I1 +(I2 +tp1750 +g20 +I00 +S"\xab{~\xf2'}\xd5?W^\xae\xfa\xbb\xb7\xdf?" +p1751 +tp1752 +bsg1 +(g5 +S'\xc1\x00\x00\x00' +p1753 +tp1754 +Rp1755 +g11 +(g12 +(I0 +tp1756 +g14 +tp1757 +Rp1758 +(I1 +(I2 +tp1759 +g20 +I00 +S'\xaa\xccm\x85g\x99\xd5? D\xd9L\x0c\xa3\xe4?' +p1760 +tp1761 +bsg1 +(g5 +S'\xc2\x00\x00\x00' +p1762 +tp1763 +Rp1764 +g11 +(g12 +(I0 +tp1765 +g14 +tp1766 +Rp1767 +(I1 +(I2 +tp1768 +g20 +I00 +S'p\x9d\xf3\xec\x7f<\xe6?\xe9\xc9K\x8c\x15`\xe9?' +p1769 +tp1770 +bsg1 +(g5 +S'\xc3\x00\x00\x00' +p1771 +tp1772 +Rp1773 +g11 +(g12 +(I0 +tp1774 +g14 +tp1775 +Rp1776 +(I1 +(I2 +tp1777 +g20 +I00 +S'>\xd6K\x0c\x08\xdb\xe4?^\xd1\xbfL\xd2\x03\xe8?' +p1778 +tp1779 +bsg1 +(g5 +S'\xc4\x00\x00\x00' +p1780 +tp1781 +Rp1782 +g11 +(g12 +(I0 +tp1783 +g14 +tp1784 +Rp1785 +(I1 +(I2 +tp1786 +g20 +I00 +S'F\xc9A\xa3\xef\x82\xef?\x82\x93\x8d\x03\x1ck\xdb?' +p1787 +tp1788 +bsg1 +(g5 +S'\xc5\x00\x00\x00' +p1789 +tp1790 +Rp1791 +g11 +(g12 +(I0 +tp1792 +g14 +tp1793 +Rp1794 +(I1 +(I2 +tp1795 +g20 +I00 +S"O\xdb+'{\xca\xe1?\xd0I#\xe4\x9dF\xeb?" +p1796 +tp1797 +bsg1 +(g5 +S'\xc6\x00\x00\x00' +p1798 +tp1799 +Rp1800 +g11 +(g12 +(I0 +tp1801 +g14 +tp1802 +Rp1803 +(I1 +(I2 +tp1804 +g20 +I00 +S':\xb5\x90N\xab\xa6\xea?\x9b<\xf14\xd1G\xd4?' +p1805 +tp1806 +bsg1 +(g5 +S'\xc7\x00\x00\x00' +p1807 +tp1808 +Rp1809 +g11 +(g12 +(I0 +tp1810 +g14 +tp1811 +Rp1812 +(I1 +(I2 +tp1813 +g20 +I00 +S'\x9b~\xe1\xbeU\xd0\xe2?x\xcd\x9d+03\xe3?' +p1814 +tp1815 +bsg1 +(g5 +S'\xc8\x00\x00\x00' +p1816 +tp1817 +Rp1818 +g11 +(g12 +(I0 +tp1819 +g14 +tp1820 +Rp1821 +(I1 +(I2 +tp1822 +g20 +I00 +S"\xe1\x96\x92\x80FM\xd8??\x8e\xc1'\xef{\xe1?" +p1823 +tp1824 +bsg1 +(g5 +S'\xc9\x00\x00\x00' +p1825 +tp1826 +Rp1827 +g11 +(g12 +(I0 +tp1828 +g14 +tp1829 +Rp1830 +(I1 +(I2 +tp1831 +g20 +I00 +S'\x9e+\x0b\xcd\xe5#\xed?\x03\xb6\xae\xce\xc3\x13\xe2?' +p1832 +tp1833 +bsg1 +(g5 +S'\xca\x00\x00\x00' +p1834 +tp1835 +Rp1836 +g11 +(g12 +(I0 +tp1837 +g14 +tp1838 +Rp1839 +(I1 +(I2 +tp1840 +g20 +I00 +S'\x1b\xf4D\xfdb\x84\xe0?^K\xb7\xe3\xbe\xb8\xd0?' +p1841 +tp1842 +bsg1 +(g5 +S'\xcb\x00\x00\x00' +p1843 +tp1844 +Rp1845 +g11 +(g12 +(I0 +tp1846 +g14 +tp1847 +Rp1848 +(I1 +(I2 +tp1849 +g20 +I00 +S'\t\xca\x00\x7f*\xbd\xaf?0H!M\x03\t\xd2?' +p1850 +tp1851 +bsg1 +(g5 +S'\xcc\x00\x00\x00' +p1852 +tp1853 +Rp1854 +g11 +(g12 +(I0 +tp1855 +g14 +tp1856 +Rp1857 +(I1 +(I2 +tp1858 +g20 +I00 +S'\x8f\xcc\x9a\x86\x93[\xea?\xd4%j\xc3~\xd7\xdd?' +p1859 +tp1860 +bsg1 +(g5 +S'\xcd\x00\x00\x00' +p1861 +tp1862 +Rp1863 +g11 +(g12 +(I0 +tp1864 +g14 +tp1865 +Rp1866 +(I1 +(I2 +tp1867 +g20 +I00 +S'\xcc.3\x01\xb5\xa3\xe7?\xde-/\x81"a\xd2?' +p1868 +tp1869 +bsg1 +(g5 +S'\xce\x00\x00\x00' +p1870 +tp1871 +Rp1872 +g11 +(g12 +(I0 +tp1873 +g14 +tp1874 +Rp1875 +(I1 +(I2 +tp1876 +g20 +I00 +S'\xb5\xd71\xdc\x83\xa6\xde?a\xdf.\xff \xa1\xe3?' +p1877 +tp1878 +bsg1 +(g5 +S'\xcf\x00\x00\x00' +p1879 +tp1880 +Rp1881 +g11 +(g12 +(I0 +tp1882 +g14 +tp1883 +Rp1884 +(I1 +(I2 +tp1885 +g20 +I00 +S"\x157R\xb5PB\xeb? \xcc\xa07'C\xdf?" +p1886 +tp1887 +bsg1 +(g5 +S'\xd0\x00\x00\x00' +p1888 +tp1889 +Rp1890 +g11 +(g12 +(I0 +tp1891 +g14 +tp1892 +Rp1893 +(I1 +(I2 +tp1894 +g20 +I00 +S'\xe7\xe1\xa9\x07\xe5_\xbd?\xcf\xb5\xbf\xf6\xfb\xe7\xcf?' +p1895 +tp1896 +bsg1 +(g5 +S'\xd1\x00\x00\x00' +p1897 +tp1898 +Rp1899 +g11 +(g12 +(I0 +tp1900 +g14 +tp1901 +Rp1902 +(I1 +(I2 +tp1903 +g20 +I00 +S'Rl0\x8c\xec\xc7\xd1?\x97 \xd1L\x83\xec\xd7?' +p1904 +tp1905 +bsg1 +(g5 +S'\xd2\x00\x00\x00' +p1906 +tp1907 +Rp1908 +g11 +(g12 +(I0 +tp1909 +g14 +tp1910 +Rp1911 +(I1 +(I2 +tp1912 +g20 +I00 +S'-\xf9;^\xf5\xe8\xe2?P=\x06\xeb\x98d\xe0?' +p1913 +tp1914 +bsg1 +(g5 +S'\xd3\x00\x00\x00' +p1915 +tp1916 +Rp1917 +g11 +(g12 +(I0 +tp1918 +g14 +tp1919 +Rp1920 +(I1 +(I2 +tp1921 +g20 +I00 +S'\x93 \xbd\xd0\xc7\xd1\xec?\x9e\xe2\x82g\xd1\xbd\xe0?' +p1922 +tp1923 +bsg1 +(g5 +S'\xd4\x00\x00\x00' +p1924 +tp1925 +Rp1926 +g11 +(g12 +(I0 +tp1927 +g14 +tp1928 +Rp1929 +(I1 +(I2 +tp1930 +g20 +I00 +S'\xfd\x89>\xa2d\xf1\xce?\xdb)\xbc\xc7q\xd1\xe5?' +p1931 +tp1932 +bsg1 +(g5 +S'\xd5\x00\x00\x00' +p1933 +tp1934 +Rp1935 +g11 +(g12 +(I0 +tp1936 +g14 +tp1937 +Rp1938 +(I1 +(I2 +tp1939 +g20 +I00 +S'\x1bu\xd0\xe8\xa3,\xd7?\x13\x8cW\xddN\x86\xea?' +p1940 +tp1941 +bsg1 +(g5 +S'\xd6\x00\x00\x00' +p1942 +tp1943 +Rp1944 +g11 +(g12 +(I0 +tp1945 +g14 +tp1946 +Rp1947 +(I1 +(I2 +tp1948 +g20 +I00 +S'\x85\x14\xd9Wev\xe2?\x08\xc4shZR\xe1?' +p1949 +tp1950 +bsg1 +(g5 +S'\xd7\x00\x00\x00' +p1951 +tp1952 +Rp1953 +g11 +(g12 +(I0 +tp1954 +g14 +tp1955 +Rp1956 +(I1 +(I2 +tp1957 +g20 +I00 +S'\x9e\x04\x85=\xcfR\xc7?\xaeV\xfb\xe9\xd15\xe2?' +p1958 +tp1959 +bsg1 +(g5 +S'\xd8\x00\x00\x00' +p1960 +tp1961 +Rp1962 +g11 +(g12 +(I0 +tp1963 +g14 +tp1964 +Rp1965 +(I1 +(I2 +tp1966 +g20 +I00 +S'\xb9\x92\x80]\x11Z\xe3?{\xf37\x82~\xa3\xc6?' +p1967 +tp1968 +bsg1 +(g5 +S'\xd9\x00\x00\x00' +p1969 +tp1970 +Rp1971 +g11 +(g12 +(I0 +tp1972 +g14 +tp1973 +Rp1974 +(I1 +(I2 +tp1975 +g20 +I00 +S'\x91P\xe3\xabb\xbd\xd5?\x1b\xc3\x0f\x8fz.\xd5?' +p1976 +tp1977 +bsg1 +(g5 +S'\xda\x00\x00\x00' +p1978 +tp1979 +Rp1980 +g11 +(g12 +(I0 +tp1981 +g14 +tp1982 +Rp1983 +(I1 +(I2 +tp1984 +g20 +I00 +S"\xa5\x90r9\x03\xa2\xb1?\x9f]u'2E\xca?" +p1985 +tp1986 +bsg1 +(g5 +S'\xdb\x00\x00\x00' +p1987 +tp1988 +Rp1989 +g11 +(g12 +(I0 +tp1990 +g14 +tp1991 +Rp1992 +(I1 +(I2 +tp1993 +g20 +I00 +S'\xf5\xce\x86\x11\xc21\xe7?\xefR\xc3\x03\x1b\x1f\xe8?' +p1994 +tp1995 +bsg1 +(g5 +S'\xdc\x00\x00\x00' +p1996 +tp1997 +Rp1998 +g11 +(g12 +(I0 +tp1999 +g14 +tp2000 +Rp2001 +(I1 +(I2 +tp2002 +g20 +I00 +S'\x19P\x1b_\xad\xb8\xb6??\xe9\x9a\x91\xe6\xf9\xdc?' +p2003 +tp2004 +bsg1 +(g5 +S'\xdd\x00\x00\x00' +p2005 +tp2006 +Rp2007 +g11 +(g12 +(I0 +tp2008 +g14 +tp2009 +Rp2010 +(I1 +(I2 +tp2011 +g20 +I00 +S'\xca\x87\xfb\xe1(W\xe5?s\xc8h\x80\x10\xf1\xe3?' +p2012 +tp2013 +bsg1 +(g5 +S'\xde\x00\x00\x00' +p2014 +tp2015 +Rp2016 +g11 +(g12 +(I0 +tp2017 +g14 +tp2018 +Rp2019 +(I1 +(I2 +tp2020 +g20 +I00 +S'Q\xe3&\xcf\xee\xc8\xd7?.\x81\xc6\xaa]m\xe0?' +p2021 +tp2022 +bsg1 +(g5 +S'\xdf\x00\x00\x00' +p2023 +tp2024 +Rp2025 +g11 +(g12 +(I0 +tp2026 +g14 +tp2027 +Rp2028 +(I1 +(I2 +tp2029 +g20 +I00 +S'\xe1\x89V\x83\x89\xcb\xeb?\xb7\x06\xac-\xe9\xfe\xda?' +p2030 +tp2031 +bsg1 +(g5 +S'\xe0\x00\x00\x00' +p2032 +tp2033 +Rp2034 +g11 +(g12 +(I0 +tp2035 +g14 +tp2036 +Rp2037 +(I1 +(I2 +tp2038 +g20 +I00 +S'e\xe7\x12\xbeM^\xc9?W4W\x81\xdd\xb7\xc4?' +p2039 +tp2040 +bsg1 +(g5 +S'\xe1\x00\x00\x00' +p2041 +tp2042 +Rp2043 +g11 +(g12 +(I0 +tp2044 +g14 +tp2045 +Rp2046 +(I1 +(I2 +tp2047 +g20 +I00 +S'd\xf7\x11\x1fN\x0b\xe2?Y\xe0\xdclZ\x18\xc6?' +p2048 +tp2049 +bsg1 +(g5 +S'\xe2\x00\x00\x00' +p2050 +tp2051 +Rp2052 +g11 +(g12 +(I0 +tp2053 +g14 +tp2054 +Rp2055 +(I1 +(I2 +tp2056 +g20 +I00 +S'\x16\xfbY\x0f\x9ef\xc8?Y\tuq8\xa0\xe2?' +p2057 +tp2058 +bsg1 +(g5 +S'\xe3\x00\x00\x00' +p2059 +tp2060 +Rp2061 +g11 +(g12 +(I0 +tp2062 +g14 +tp2063 +Rp2064 +(I1 +(I2 +tp2065 +g20 +I00 +S'\xd5\xedz\x18Bf\xe2?\xcc\x8bq\xee\\\\\xeb?' +p2066 +tp2067 +bsg1 +(g5 +S'\xe4\x00\x00\x00' +p2068 +tp2069 +Rp2070 +g11 +(g12 +(I0 +tp2071 +g14 +tp2072 +Rp2073 +(I1 +(I2 +tp2074 +g20 +I00 +S'\x0f\xd2\x1d\xa1\xa3\x8c\xe3?\xc8\xb1\\\x84\xf6t\xd3?' +p2075 +tp2076 +bsg1 +(g5 +S'\xe5\x00\x00\x00' +p2077 +tp2078 +Rp2079 +g11 +(g12 +(I0 +tp2080 +g14 +tp2081 +Rp2082 +(I1 +(I2 +tp2083 +g20 +I00 +S'6\x9f\x8b6\x0f)\xe1?\x01\x88n\xeb\xfe\xc0\xe6?' +p2084 +tp2085 +bsg1 +(g5 +S'\xe6\x00\x00\x00' +p2086 +tp2087 +Rp2088 +g11 +(g12 +(I0 +tp2089 +g14 +tp2090 +Rp2091 +(I1 +(I2 +tp2092 +g20 +I00 +S'Hk\xb9\xe6\x85\xc5\xcd?\xb4\x07#]\xc0T\xe4?' +p2093 +tp2094 +bsg1 +(g5 +S'\xe7\x00\x00\x00' +p2095 +tp2096 +Rp2097 +g11 +(g12 +(I0 +tp2098 +g14 +tp2099 +Rp2100 +(I1 +(I2 +tp2101 +g20 +I00 +S'\xd5\xb7\xf7s\xa4Y\xe0?\xca\x87\xa3R\xbd\xfe\xd8?' +p2102 +tp2103 +bsg1 +(g5 +S'\xe8\x00\x00\x00' +p2104 +tp2105 +Rp2106 +g11 +(g12 +(I0 +tp2107 +g14 +tp2108 +Rp2109 +(I1 +(I2 +tp2110 +g20 +I00 +S"\x96\xb2\x95'\xed\x10\xe9?\xb1\xf2\xe4\x9c\xe1\xfc\xd1?" +p2111 +tp2112 +bsg1 +(g5 +S'\xe9\x00\x00\x00' +p2113 +tp2114 +Rp2115 +g11 +(g12 +(I0 +tp2116 +g14 +tp2117 +Rp2118 +(I1 +(I2 +tp2119 +g20 +I00 +S'!\x03\x1c\xed\x02 \xe3?v`"\xe0;\xe2\xe7?' +p2120 +tp2121 +bsg1 +(g5 +S'\xea\x00\x00\x00' +p2122 +tp2123 +Rp2124 +g11 +(g12 +(I0 +tp2125 +g14 +tp2126 +Rp2127 +(I1 +(I2 +tp2128 +g20 +I00 +S'\xa9\xbd\xc2\x81\xe4\x93\xc5?\xa4\x16\xc9\xa2\xaf\x07\xe8?' +p2129 +tp2130 +bsg1 +(g5 +S'\xeb\x00\x00\x00' +p2131 +tp2132 +Rp2133 +g11 +(g12 +(I0 +tp2134 +g14 +tp2135 +Rp2136 +(I1 +(I2 +tp2137 +g20 +I00 +S'\x8c\xb08\xddO\xd2\xd2?\xa4\x8f?&\xe1x\xeb?' +p2138 +tp2139 +bsg1 +(g5 +S'\xec\x00\x00\x00' +p2140 +tp2141 +Rp2142 +g11 +(g12 +(I0 +tp2143 +g14 +tp2144 +Rp2145 +(I1 +(I2 +tp2146 +g20 +I00 +S')\xa4?u\xde\xd2\xe2?8\xf0W\xc4A\x8c\xc6?' +p2147 +tp2148 +bsg1 +(g5 +S'\xed\x00\x00\x00' +p2149 +tp2150 +Rp2151 +g11 +(g12 +(I0 +tp2152 +g14 +tp2153 +Rp2154 +(I1 +(I2 +tp2155 +g20 +I00 +S'c>V\x06\x1b\x9b\xcb?,[a\xf0p8\xe8?' +p2156 +tp2157 +bsg1 +(g5 +S'\xee\x00\x00\x00' +p2158 +tp2159 +Rp2160 +g11 +(g12 +(I0 +tp2161 +g14 +tp2162 +Rp2163 +(I1 +(I2 +tp2164 +g20 +I00 +S'\xc0\xc4M~\x0e\x18\xdf?Y\x92\xf9\x1b\x0c\xa3\xe0?' +p2165 +tp2166 +bsg1 +(g5 +S'\xef\x00\x00\x00' +p2167 +tp2168 +Rp2169 +g11 +(g12 +(I0 +tp2170 +g14 +tp2171 +Rp2172 +(I1 +(I2 +tp2173 +g20 +I00 +S',um\xbe~\r\xd5?R"\xec\xe7\xa7\x06\xe8?' +p2174 +tp2175 +bsg1 +(g5 +S'\xf0\x00\x00\x00' +p2176 +tp2177 +Rp2178 +g11 +(g12 +(I0 +tp2179 +g14 +tp2180 +Rp2181 +(I1 +(I2 +tp2182 +g20 +I00 +S'\x0f\xef\xef\xa8h\x16\xec?f(\xfb2\x08\xcf\xde?' +p2183 +tp2184 +bsg1 +(g5 +S'\xf1\x00\x00\x00' +p2185 +tp2186 +Rp2187 +g11 +(g12 +(I0 +tp2188 +g14 +tp2189 +Rp2190 +(I1 +(I2 +tp2191 +g20 +I00 +S'%+\x1afJ\xed\xe8?E\xea)\x06"R\xd2?' +p2192 +tp2193 +bsg1 +(g5 +S'\xf2\x00\x00\x00' +p2194 +tp2195 +Rp2196 +g11 +(g12 +(I0 +tp2197 +g14 +tp2198 +Rp2199 +(I1 +(I2 +tp2200 +g20 +I00 +S'N\x90\xe0R c\xc5?\x07\xdao\xc7=\xe5\xc8?' +p2201 +tp2202 +bsg1 +(g5 +S'\xf3\x00\x00\x00' +p2203 +tp2204 +Rp2205 +g11 +(g12 +(I0 +tp2206 +g14 +tp2207 +Rp2208 +(I1 +(I2 +tp2209 +g20 +I00 +S'\xf3\xe0;\x9d\xea\x9e\xc7?\xe39\x08\xf8\x94}\xe8?' +p2210 +tp2211 +bsg1 +(g5 +S'\xf4\x00\x00\x00' +p2212 +tp2213 +Rp2214 +g11 +(g12 +(I0 +tp2215 +g14 +tp2216 +Rp2217 +(I1 +(I2 +tp2218 +g20 +I00 +S'\x83\xea\xfe\x12\xdec\xe2?\x98N\xf4\x02I\xea\xdd?' +p2219 +tp2220 +bsg1 +(g5 +S'\xf5\x00\x00\x00' +p2221 +tp2222 +Rp2223 +g11 +(g12 +(I0 +tp2224 +g14 +tp2225 +Rp2226 +(I1 +(I2 +tp2227 +g20 +I00 +S'Q\x1a\xb0\xd4?' +p2309 +tp2310 +bsg1 +(g5 +S'\xff\x00\x00\x00' +p2311 +tp2312 +Rp2313 +g11 +(g12 +(I0 +tp2314 +g14 +tp2315 +Rp2316 +(I1 +(I2 +tp2317 +g20 +I00 +S'#<\xb4i\x95\xc8\xe5?/,\xe8\xdfc\x94\xd1?' +p2318 +tp2319 +bsg1 +(g5 +S'\x00\x01\x00\x00' +p2320 +tp2321 +Rp2322 +g11 +(g12 +(I0 +tp2323 +g14 +tp2324 +Rp2325 +(I1 +(I2 +tp2326 +g20 +I00 +S'\xfc \x0f\xa3\x1f\xf8\xe5?\r\x14\x12\x89\xe0\x0c\xd1?' +p2327 +tp2328 +bsg1 +(g5 +S'\x01\x01\x00\x00' +p2329 +tp2330 +Rp2331 +g11 +(g12 +(I0 +tp2332 +g14 +tp2333 +Rp2334 +(I1 +(I2 +tp2335 +g20 +I00 +S'\x99\x90aP\xe4\xc1\xdb?\xf9\xd2_D\xd1f\xd9?' +p2336 +tp2337 +bsg1 +(g5 +S'\x02\x01\x00\x00' +p2338 +tp2339 +Rp2340 +g11 +(g12 +(I0 +tp2341 +g14 +tp2342 +Rp2343 +(I1 +(I2 +tp2344 +g20 +I00 +S'\xfaZoS\xb4u\xed?\xc6s.n\x16\x08\xdc?' +p2345 +tp2346 +bsg1 +(g5 +S'\x03\x01\x00\x00' +p2347 +tp2348 +Rp2349 +g11 +(g12 +(I0 +tp2350 +g14 +tp2351 +Rp2352 +(I1 +(I2 +tp2353 +g20 +I00 +S'\xcbK\x07zd|\xe9?2g\xf45\xeb|\xe1?' +p2354 +tp2355 +bsg1 +(g5 +S'\x04\x01\x00\x00' +p2356 +tp2357 +Rp2358 +g11 +(g12 +(I0 +tp2359 +g14 +tp2360 +Rp2361 +(I1 +(I2 +tp2362 +g20 +I00 +S'\x95_\x8ck\x17\xd7\xe2?bO\x1b\t3i\xd3?' +p2363 +tp2364 +bsg1 +(g5 +S'\x05\x01\x00\x00' +p2365 +tp2366 +Rp2367 +g11 +(g12 +(I0 +tp2368 +g14 +tp2369 +Rp2370 +(I1 +(I2 +tp2371 +g20 +I00 +S',\x06dv\x82_\xea?\x8d\t8\xab\xd3.\xe0?' +p2372 +tp2373 +bsg1 +(g5 +S'\x06\x01\x00\x00' +p2374 +tp2375 +Rp2376 +g11 +(g12 +(I0 +tp2377 +g14 +tp2378 +Rp2379 +(I1 +(I2 +tp2380 +g20 +I00 +S'\xa4\xf9X\x0cn\x87\xe0?\xcc_\x9b\x81\xe9\x81\xc9?' +p2381 +tp2382 +bsg1 +(g5 +S'\x07\x01\x00\x00' +p2383 +tp2384 +Rp2385 +g11 +(g12 +(I0 +tp2386 +g14 +tp2387 +Rp2388 +(I1 +(I2 +tp2389 +g20 +I00 +S'\xd0\x94\xf8\xffW\x03\xd5?\xed\x9d\xa1\x1c\x87\x99\xd1?' +p2390 +tp2391 +bsg1 +(g5 +S'\x08\x01\x00\x00' +p2392 +tp2393 +Rp2394 +g11 +(g12 +(I0 +tp2395 +g14 +tp2396 +Rp2397 +(I1 +(I2 +tp2398 +g20 +I00 +S'#t\xe8J\x91V\xde?V6\xed\x1b\xd9\xde\xe9?' +p2399 +tp2400 +bsg1 +(g5 +S'\t\x01\x00\x00' +p2401 +tp2402 +Rp2403 +g11 +(g12 +(I0 +tp2404 +g14 +tp2405 +Rp2406 +(I1 +(I2 +tp2407 +g20 +I00 +S'\x17j\x9b"\x98\xa4\xd9?+\xd7\xb2\xfc^\x14\xc2?' +p2408 +tp2409 +bsg1 +(g5 +S'\n\x01\x00\x00' +p2410 +tp2411 +Rp2412 +g11 +(g12 +(I0 +tp2413 +g14 +tp2414 +Rp2415 +(I1 +(I2 +tp2416 +g20 +I00 +S'\xa3\xad45\x06z\xe4?\xf0\x92\xba\x88\xc5\x90\xd3?' +p2417 +tp2418 +bsg1 +(g5 +S'\x0b\x01\x00\x00' +p2419 +tp2420 +Rp2421 +g11 +(g12 +(I0 +tp2422 +g14 +tp2423 +Rp2424 +(I1 +(I2 +tp2425 +g20 +I00 +S'se)>\xac\\\xe5?\xd8\x8fd\xf7\xd0\xbc\xe2?' +p2426 +tp2427 +bsg1 +(g5 +S'\x0c\x01\x00\x00' +p2428 +tp2429 +Rp2430 +g11 +(g12 +(I0 +tp2431 +g14 +tp2432 +Rp2433 +(I1 +(I2 +tp2434 +g20 +I00 +S'\xed\xfe\xc4BT\xae\xb4?/h\xff\xf6\xd3\x14\xe2?' +p2435 +tp2436 +bsg1 +(g5 +S'\r\x01\x00\x00' +p2437 +tp2438 +Rp2439 +g11 +(g12 +(I0 +tp2440 +g14 +tp2441 +Rp2442 +(I1 +(I2 +tp2443 +g20 +I00 +S"\xa0\xa4!\xd2\xf9\xc8\xea?l\xb9\xb2-R'\xe1?" +p2444 +tp2445 +bsg1 +(g5 +S'\x0e\x01\x00\x00' +p2446 +tp2447 +Rp2448 +g11 +(g12 +(I0 +tp2449 +g14 +tp2450 +Rp2451 +(I1 +(I2 +tp2452 +g20 +I00 +S'\\X.\xa0\xe1\xd9\xeb?\xf00[\x0e\xee\xf4\xd6?' +p2453 +tp2454 +bsg1 +(g5 +S'\x0f\x01\x00\x00' +p2455 +tp2456 +Rp2457 +g11 +(g12 +(I0 +tp2458 +g14 +tp2459 +Rp2460 +(I1 +(I2 +tp2461 +g20 +I00 +S'n|y8\x14\xc8\xd1?\x16\xe6M\xcf\x8f\xfb\xeb?' +p2462 +tp2463 +bsg1 +(g5 +S'\x10\x01\x00\x00' +p2464 +tp2465 +Rp2466 +g11 +(g12 +(I0 +tp2467 +g14 +tp2468 +Rp2469 +(I1 +(I2 +tp2470 +g20 +I00 +S'\xb5\x1ddK\xd4I\xd6?2\x9a\xc9G\x13\xcc\xdd?' +p2471 +tp2472 +bsg1 +(g5 +S'\x11\x01\x00\x00' +p2473 +tp2474 +Rp2475 +g11 +(g12 +(I0 +tp2476 +g14 +tp2477 +Rp2478 +(I1 +(I2 +tp2479 +g20 +I00 +S'\x9b\x81z\xb4\xd5\xca\xe6?\x97\x82N\xc0%^\xd0?' +p2480 +tp2481 +bsg1 +(g5 +S'\x12\x01\x00\x00' +p2482 +tp2483 +Rp2484 +g11 +(g12 +(I0 +tp2485 +g14 +tp2486 +Rp2487 +(I1 +(I2 +tp2488 +g20 +I00 +S'IA\xb8\xd2\xef\x95\xe1?\x18\x86\x18\x94N\xe8\xe4?' +p2489 +tp2490 +bsg1 +(g5 +S'\x13\x01\x00\x00' +p2491 +tp2492 +Rp2493 +g11 +(g12 +(I0 +tp2494 +g14 +tp2495 +Rp2496 +(I1 +(I2 +tp2497 +g20 +I00 +S'v\t\xd4\xe2\xfbg\xdf?9\x1b\xe7-\xcaQ\xd5?' +p2498 +tp2499 +bsg1 +(g5 +S'\x14\x01\x00\x00' +p2500 +tp2501 +Rp2502 +g11 +(g12 +(I0 +tp2503 +g14 +tp2504 +Rp2505 +(I1 +(I2 +tp2506 +g20 +I00 +S'\xd0\xe2?' +p2579 +tp2580 +bsg1 +(g5 +S'\x1d\x01\x00\x00' +p2581 +tp2582 +Rp2583 +g11 +(g12 +(I0 +tp2584 +g14 +tp2585 +Rp2586 +(I1 +(I2 +tp2587 +g20 +I00 +S'0\xb8\xcd\x02\xb2\xa3\xe5?\xbf\x7f\xf0\xd5z\x84\xda?' +p2588 +tp2589 +bsg1 +(g5 +S'\x1e\x01\x00\x00' +p2590 +tp2591 +Rp2592 +g11 +(g12 +(I0 +tp2593 +g14 +tp2594 +Rp2595 +(I1 +(I2 +tp2596 +g20 +I00 +S',^\x1d\xe9\xb5C\xd2?\x90mD\xf7W\xb6\xeb?' +p2597 +tp2598 +bsg1 +(g5 +S'\x1f\x01\x00\x00' +p2599 +tp2600 +Rp2601 +g11 +(g12 +(I0 +tp2602 +g14 +tp2603 +Rp2604 +(I1 +(I2 +tp2605 +g20 +I00 +S'\xa6=\xf5\x00\xf1l\xd5?Y\xf7\x0f\xb4\xee\xb1\xde?' +p2606 +tp2607 +bsg1 +(g5 +S' \x01\x00\x00' +p2608 +tp2609 +Rp2610 +g11 +(g12 +(I0 +tp2611 +g14 +tp2612 +Rp2613 +(I1 +(I2 +tp2614 +g20 +I00 +S'\xb3\x83\x7f\xcf\xef(\xd2?[P\xb3\xbd\xd1a\xd5?' +p2615 +tp2616 +bsg1 +(g5 +S'!\x01\x00\x00' +p2617 +tp2618 +Rp2619 +g11 +(g12 +(I0 +tp2620 +g14 +tp2621 +Rp2622 +(I1 +(I2 +tp2623 +g20 +I00 +S'\xf3\x9c.\x9b9+\xc0?\xda\x9d\t\xbd\xc9\xb8\xe1?' +p2624 +tp2625 +bsg1 +(g5 +S'"\x01\x00\x00' +p2626 +tp2627 +Rp2628 +g11 +(g12 +(I0 +tp2629 +g14 +tp2630 +Rp2631 +(I1 +(I2 +tp2632 +g20 +I00 +S'i\xea\xaa\x91A\xb1\xbc?0\xb9\xa0S\x85\xf2\xcd?' +p2633 +tp2634 +bsg1 +(g5 +S'#\x01\x00\x00' +p2635 +tp2636 +Rp2637 +g11 +(g12 +(I0 +tp2638 +g14 +tp2639 +Rp2640 +(I1 +(I2 +tp2641 +g20 +I00 +S'm\xd7P\xc0\x01%\xd0?\xb0&\xca\xa1\x01g\xd3?' +p2642 +tp2643 +bsg1 +(g5 +S'$\x01\x00\x00' +p2644 +tp2645 +Rp2646 +g11 +(g12 +(I0 +tp2647 +g14 +tp2648 +Rp2649 +(I1 +(I2 +tp2650 +g20 +I00 +S'\x8c\x03\x8b\x00I\x13\xe5?\xef\xff\xc5\xe9\x18\xae\xda?' +p2651 +tp2652 +bsg1 +(g5 +S'%\x01\x00\x00' +p2653 +tp2654 +Rp2655 +g11 +(g12 +(I0 +tp2656 +g14 +tp2657 +Rp2658 +(I1 +(I2 +tp2659 +g20 +I00 +S'c\xc89\xd4\xbeR\xdd?\xf0=8v\xa25\xe9?' +p2660 +tp2661 +bsg1 +(g5 +S'&\x01\x00\x00' +p2662 +tp2663 +Rp2664 +g11 +(g12 +(I0 +tp2665 +g14 +tp2666 +Rp2667 +(I1 +(I2 +tp2668 +g20 +I00 +S':\xa6\xbaZ\xbd\x14\xcd?S\xaf\xbaA}\xed\xd8?' +p2669 +tp2670 +bsg1 +(g5 +S"'\x01\x00\x00" +p2671 +tp2672 +Rp2673 +g11 +(g12 +(I0 +tp2674 +g14 +tp2675 +Rp2676 +(I1 +(I2 +tp2677 +g20 +I00 +S'\x92\xc5\x96\x1dXS\xd0?7\xf2\x89:_\x0b\xeb?' +p2678 +tp2679 +bsg1 +(g5 +S'(\x01\x00\x00' +p2680 +tp2681 +Rp2682 +g11 +(g12 +(I0 +tp2683 +g14 +tp2684 +Rp2685 +(I1 +(I2 +tp2686 +g20 +I00 +S'\xcfuG\x89\x9b\xfe\xe0?\x01N\xe9\xef6\x83\xe6?' +p2687 +tp2688 +bsg1 +(g5 +S')\x01\x00\x00' +p2689 +tp2690 +Rp2691 +g11 +(g12 +(I0 +tp2692 +g14 +tp2693 +Rp2694 +(I1 +(I2 +tp2695 +g20 +I00 +S'#\xe6\xe7\t4;\xb5?\xc1y\xdb\xd9?\n\xda?' +p2696 +tp2697 +bsg1 +(g5 +S'*\x01\x00\x00' +p2698 +tp2699 +Rp2700 +g11 +(g12 +(I0 +tp2701 +g14 +tp2702 +Rp2703 +(I1 +(I2 +tp2704 +g20 +I00 +S'\x84w:\x80\xa7\xbc\xe7?tL\x04d\xf5\xb4\xe8?' +p2705 +tp2706 +bsg1 +(g5 +S'+\x01\x00\x00' +p2707 +tp2708 +Rp2709 +g11 +(g12 +(I0 +tp2710 +g14 +tp2711 +Rp2712 +(I1 +(I2 +tp2713 +g20 +I00 +S'W;\x83x\xef*\xe9?\xeci\xf1%}W\xde?' +p2714 +tp2715 +bsg1 +(g5 +S',\x01\x00\x00' +p2716 +tp2717 +Rp2718 +g11 +(g12 +(I0 +tp2719 +g14 +tp2720 +Rp2721 +(I1 +(I2 +tp2722 +g20 +I00 +S'\xa3\xcd\xd2\xc1\x06\x01\xd6?\x8c\x9by\xabo\x19\xd0?' +p2723 +tp2724 +bsg1 +(g5 +S'-\x01\x00\x00' +p2725 +tp2726 +Rp2727 +g11 +(g12 +(I0 +tp2728 +g14 +tp2729 +Rp2730 +(I1 +(I2 +tp2731 +g20 +I00 +S'\xcar\x93a\x7f\x9d\xd2?-\xc8\xb6\xde\xd3\x9c\xec?' +p2732 +tp2733 +bsg1 +(g5 +S'.\x01\x00\x00' +p2734 +tp2735 +Rp2736 +g11 +(g12 +(I0 +tp2737 +g14 +tp2738 +Rp2739 +(I1 +(I2 +tp2740 +g20 +I00 +S'8\x99]L\xe4\xf6\xb4?6\x08\x1d\x9a\xb8\x13\xd3?' +p2741 +tp2742 +bsg1 +(g5 +S'/\x01\x00\x00' +p2743 +tp2744 +Rp2745 +g11 +(g12 +(I0 +tp2746 +g14 +tp2747 +Rp2748 +(I1 +(I2 +tp2749 +g20 +I00 +S'\x054.\xefB^\xde?\xbb\xd1\x9e7\xf0\xf2\xec?' +p2750 +tp2751 +bsg1 +(g5 +S'0\x01\x00\x00' +p2752 +tp2753 +Rp2754 +g11 +(g12 +(I0 +tp2755 +g14 +tp2756 +Rp2757 +(I1 +(I2 +tp2758 +g20 +I00 +S"\xbf\xdf\xdbV\xad^\xc5?\x05\xd9'\x1aW\x12\xec?" +p2759 +tp2760 +bsg1 +(g5 +S'1\x01\x00\x00' +p2761 +tp2762 +Rp2763 +g11 +(g12 +(I0 +tp2764 +g14 +tp2765 +Rp2766 +(I1 +(I2 +tp2767 +g20 +I00 +S'\xa7\x14\r\x99\x91\xb0\xdd?\x19\xa0\xb7\xc7\xa5\xc9\xd4?' +p2768 +tp2769 +bsg1 +(g5 +S'2\x01\x00\x00' +p2770 +tp2771 +Rp2772 +g11 +(g12 +(I0 +tp2773 +g14 +tp2774 +Rp2775 +(I1 +(I2 +tp2776 +g20 +I00 +S'v\x8e\xc5\xb7\\C\x9f?\xc1\xf5\xd0\x1c\xc6\x18\xd5?' +p2777 +tp2778 +bsg1 +(g5 +S'3\x01\x00\x00' +p2779 +tp2780 +Rp2781 +g11 +(g12 +(I0 +tp2782 +g14 +tp2783 +Rp2784 +(I1 +(I2 +tp2785 +g20 +I00 +S'\x11\xfc\xd6\xbc\xd5\xf3\xe3?\x86&\xadB\x8c[\xc6?' +p2786 +tp2787 +bsg1 +(g5 +S'4\x01\x00\x00' +p2788 +tp2789 +Rp2790 +g11 +(g12 +(I0 +tp2791 +g14 +tp2792 +Rp2793 +(I1 +(I2 +tp2794 +g20 +I00 +S'\xcb\xd4\xa6\x12\x9e\x93\xe5?\xbc\xcb\xc8@?\x83\xdc?' +p2795 +tp2796 +bsg1 +(g5 +S'5\x01\x00\x00' +p2797 +tp2798 +Rp2799 +g11 +(g12 +(I0 +tp2800 +g14 +tp2801 +Rp2802 +(I1 +(I2 +tp2803 +g20 +I00 +S'\x05\xb3q\x06\x11\xe6\xd0?\x9d\x8bA\xe8J\x91\xb9?' +p2804 +tp2805 +bsg1 +(g5 +S'6\x01\x00\x00' +p2806 +tp2807 +Rp2808 +g11 +(g12 +(I0 +tp2809 +g14 +tp2810 +Rp2811 +(I1 +(I2 +tp2812 +g20 +I00 +S'\x0e\xa3\x8d\x133\xe9\xdb?\xc1\xe3\xdf\xe1/\xcb\xc3?' +p2813 +tp2814 +bsg1 +(g5 +S'7\x01\x00\x00' +p2815 +tp2816 +Rp2817 +g11 +(g12 +(I0 +tp2818 +g14 +tp2819 +Rp2820 +(I1 +(I2 +tp2821 +g20 +I00 +S'\xb30/_\xca_\xb0?\xb0\x94\xa7\xfa\x15Z\xd3?' +p2822 +tp2823 +bsg1 +(g5 +S'8\x01\x00\x00' +p2824 +tp2825 +Rp2826 +g11 +(g12 +(I0 +tp2827 +g14 +tp2828 +Rp2829 +(I1 +(I2 +tp2830 +g20 +I00 +S'<\x92,\x84W\x02\xd4?qy\xc1\xeb\xc3{\xe1?' +p2831 +tp2832 +bsg1 +(g5 +S'9\x01\x00\x00' +p2833 +tp2834 +Rp2835 +g11 +(g12 +(I0 +tp2836 +g14 +tp2837 +Rp2838 +(I1 +(I2 +tp2839 +g20 +I00 +S'\xd8c\xff\xd2\x19@\xe6?\xa4\x96\x99/\xad\x1e\xb9?' +p2840 +tp2841 +bsg1 +(g5 +S':\x01\x00\x00' +p2842 +tp2843 +Rp2844 +g11 +(g12 +(I0 +tp2845 +g14 +tp2846 +Rp2847 +(I1 +(I2 +tp2848 +g20 +I00 +S'\xbd\x11\xf3\x93g\x0b\xdc?:K\xb8\xb2i)\xeb?' +p2849 +tp2850 +bsg1 +(g5 +S';\x01\x00\x00' +p2851 +tp2852 +Rp2853 +g11 +(g12 +(I0 +tp2854 +g14 +tp2855 +Rp2856 +(I1 +(I2 +tp2857 +g20 +I00 +S'*\x94\xdd\xbc\xda\xaf\xe2?\x9eK\xca\xb61V\xea?' +p2858 +tp2859 +bsg1 +(g5 +S'<\x01\x00\x00' +p2860 +tp2861 +Rp2862 +g11 +(g12 +(I0 +tp2863 +g14 +tp2864 +Rp2865 +(I1 +(I2 +tp2866 +g20 +I00 +S'y*\xac5\xff\xa6\xe6?\x8b6p\xf3}\x0f\xd1?' +p2867 +tp2868 +bsg1 +(g5 +S'=\x01\x00\x00' +p2869 +tp2870 +Rp2871 +g11 +(g12 +(I0 +tp2872 +g14 +tp2873 +Rp2874 +(I1 +(I2 +tp2875 +g20 +I00 +S'N\xf0,\x1b\x07\xb9\xee?c\xbfJo\xeb\x9d\xdb?' +p2876 +tp2877 +bsg1 +(g5 +S'>\x01\x00\x00' +p2878 +tp2879 +Rp2880 +g11 +(g12 +(I0 +tp2881 +g14 +tp2882 +Rp2883 +(I1 +(I2 +tp2884 +g20 +I00 +S'\xa1\\\xd4"\xcc\xb0\xde?\xb1\xd3B\xe9\xba\xad\xc2?' +p2885 +tp2886 +bsg1 +(g5 +S'?\x01\x00\x00' +p2887 +tp2888 +Rp2889 +g11 +(g12 +(I0 +tp2890 +g14 +tp2891 +Rp2892 +(I1 +(I2 +tp2893 +g20 +I00 +S'a\xa7G\xb0\x97z\xe0?j\t\xebe\x1e\x16\xcb?' +p2894 +tp2895 +bsg1 +(g5 +S'@\x01\x00\x00' +p2896 +tp2897 +Rp2898 +g11 +(g12 +(I0 +tp2899 +g14 +tp2900 +Rp2901 +(I1 +(I2 +tp2902 +g20 +I00 +S'\x00`u\xea\xbf\xa2\xd6?"\xd8H7v\x81\xeb?' +p2903 +tp2904 +bsg1 +(g5 +S'A\x01\x00\x00' +p2905 +tp2906 +Rp2907 +g11 +(g12 +(I0 +tp2908 +g14 +tp2909 +Rp2910 +(I1 +(I2 +tp2911 +g20 +I00 +S'\xdf{\xfb\xca\xf5r\xe1?\x06\xf3U\xcc#r\xeb?' +p2912 +tp2913 +bsg1 +(g5 +S'B\x01\x00\x00' +p2914 +tp2915 +Rp2916 +g11 +(g12 +(I0 +tp2917 +g14 +tp2918 +Rp2919 +(I1 +(I2 +tp2920 +g20 +I00 +S'\xbf\xb3\xfd\xb8"\xb0\xde?\xe2>V_OD\xc5?' +p2921 +tp2922 +bsg1 +(g5 +S'C\x01\x00\x00' +p2923 +tp2924 +Rp2925 +g11 +(g12 +(I0 +tp2926 +g14 +tp2927 +Rp2928 +(I1 +(I2 +tp2929 +g20 +I00 +S'\xae\xf7ZZ?*\xe4?n%4\xb1\xf5\x8c\xd3?' +p2930 +tp2931 +bsg1 +(g5 +S'D\x01\x00\x00' +p2932 +tp2933 +Rp2934 +g11 +(g12 +(I0 +tp2935 +g14 +tp2936 +Rp2937 +(I1 +(I2 +tp2938 +g20 +I00 +S'l\xb6\x0e\xe6\xe8\x16\xc1?2\xb2\x06\xd47u\xe3?' +p2939 +tp2940 +bsg1 +(g5 +S'E\x01\x00\x00' +p2941 +tp2942 +Rp2943 +g11 +(g12 +(I0 +tp2944 +g14 +tp2945 +Rp2946 +(I1 +(I2 +tp2947 +g20 +I00 +S'\n\xd0\xe0\xed\xa0\xc0\xd2??R\x9cM\xa5\xe3\xd3?' +p2948 +tp2949 +bsg1 +(g5 +S'F\x01\x00\x00' +p2950 +tp2951 +Rp2952 +g11 +(g12 +(I0 +tp2953 +g14 +tp2954 +Rp2955 +(I1 +(I2 +tp2956 +g20 +I00 +S'A\xa7\x15h\x18\xd5\xc8?g\xdesg\x0c\xcf\xe9?' +p2957 +tp2958 +bsg1 +(g5 +S'G\x01\x00\x00' +p2959 +tp2960 +Rp2961 +g11 +(g12 +(I0 +tp2962 +g14 +tp2963 +Rp2964 +(I1 +(I2 +tp2965 +g20 +I00 +S'\x97\x1b\xebZ\xf6\x0b\xe0?6\x84=G\xd4\xe5\xde?' +p2966 +tp2967 +bsg1 +(g5 +S'H\x01\x00\x00' +p2968 +tp2969 +Rp2970 +g11 +(g12 +(I0 +tp2971 +g14 +tp2972 +Rp2973 +(I1 +(I2 +tp2974 +g20 +I00 +S'\xc51 8\xde\xbb\xe4?\x1e\x99\x97=+\xd9\xdb?' +p2975 +tp2976 +bsg1 +(g5 +S'I\x01\x00\x00' +p2977 +tp2978 +Rp2979 +g11 +(g12 +(I0 +tp2980 +g14 +tp2981 +Rp2982 +(I1 +(I2 +tp2983 +g20 +I00 +S'h\x7f\x8b\xd68\xd5\xdd?' +p3200 +tp3201 +bsg1 +(g5 +S'b\x01\x00\x00' +p3202 +tp3203 +Rp3204 +g11 +(g12 +(I0 +tp3205 +g14 +tp3206 +Rp3207 +(I1 +(I2 +tp3208 +g20 +I00 +S'\x7f\x05\xe7\xb1\xc1\xae\xdf?\xbc\xc9\x11\x160\xe9\xe4?\xdaL\x8d*\x0e\xa1\xc9?' +p3353 +tp3354 +bsg1 +(g5 +S's\x01\x00\x00' +p3355 +tp3356 +Rp3357 +g11 +(g12 +(I0 +tp3358 +g14 +tp3359 +Rp3360 +(I1 +(I2 +tp3361 +g20 +I00 +S'\x866\x17s\x96\x19\xd1?\x7f\xaav77\xed\xeb?' +p3362 +tp3363 +bsg1 +(g5 +S't\x01\x00\x00' +p3364 +tp3365 +Rp3366 +g11 +(g12 +(I0 +tp3367 +g14 +tp3368 +Rp3369 +(I1 +(I2 +tp3370 +g20 +I00 +S'\xb3\r\xa5\xec\xc6\x9d\xe7?\xaf\x0f\x05\xa5\x02\x01\xd7?' +p3371 +tp3372 +bsg1 +(g5 +S'u\x01\x00\x00' +p3373 +tp3374 +Rp3375 +g11 +(g12 +(I0 +tp3376 +g14 +tp3377 +Rp3378 +(I1 +(I2 +tp3379 +g20 +I00 +S'S$\xd4\xa3^\xf9\xc0?\x8bJ\xe2\t\x9f\xa1\xd5?' +p3380 +tp3381 +bsg1 +(g5 +S'v\x01\x00\x00' +p3382 +tp3383 +Rp3384 +g11 +(g12 +(I0 +tp3385 +g14 +tp3386 +Rp3387 +(I1 +(I2 +tp3388 +g20 +I00 +S'\x85\xd9\xcf[(\x83\xd6?\x88+\xf4\xa0\x92{\xb1?' +p3389 +tp3390 +bsg1 +(g5 +S'w\x01\x00\x00' +p3391 +tp3392 +Rp3393 +g11 +(g12 +(I0 +tp3394 +g14 +tp3395 +Rp3396 +(I1 +(I2 +tp3397 +g20 +I00 +S'\x1c\xa9\xacx{\x01\xe6?\xa9\xacIq\x1f\xb9\xbc?' +p3398 +tp3399 +bsg1 +(g5 +S'x\x01\x00\x00' +p3400 +tp3401 +Rp3402 +g11 +(g12 +(I0 +tp3403 +g14 +tp3404 +Rp3405 +(I1 +(I2 +tp3406 +g20 +I00 +S'q@\xcf\xb2\x1b\xe0\xe4?\xe8\x03-\x00\xddN\xc3?' +p3407 +tp3408 +bsg1 +(g5 +S'y\x01\x00\x00' +p3409 +tp3410 +Rp3411 +g11 +(g12 +(I0 +tp3412 +g14 +tp3413 +Rp3414 +(I1 +(I2 +tp3415 +g20 +I00 +S'\xae\x9c{R\xb14\xe1?%\x01W\x8aM+\xea?' +p3416 +tp3417 +bsg1 +(g5 +S'z\x01\x00\x00' +p3418 +tp3419 +Rp3420 +g11 +(g12 +(I0 +tp3421 +g14 +tp3422 +Rp3423 +(I1 +(I2 +tp3424 +g20 +I00 +S'\xa1\xbcy\x071\xd2\xc1?#\x8dr\x8c\xa4\x18\xe7?' +p3425 +tp3426 +bsg1 +(g5 +S'{\x01\x00\x00' +p3427 +tp3428 +Rp3429 +g11 +(g12 +(I0 +tp3430 +g14 +tp3431 +Rp3432 +(I1 +(I2 +tp3433 +g20 +I00 +S'\x80\x06a\xf93\xf6\xd2?%d\x9c}j/\xec?' +p3434 +tp3435 +bsg1 +(g5 +S'|\x01\x00\x00' +p3436 +tp3437 +Rp3438 +g11 +(g12 +(I0 +tp3439 +g14 +tp3440 +Rp3441 +(I1 +(I2 +tp3442 +g20 +I00 +S'\xd6Y\xf8g.[\xde?\xaa\xe6?\x97l\xd3\xcdS\x96\xc7?' +p3461 +tp3462 +bsg1 +(g5 +S'\x7f\x01\x00\x00' +p3463 +tp3464 +Rp3465 +g11 +(g12 +(I0 +tp3466 +g14 +tp3467 +Rp3468 +(I1 +(I2 +tp3469 +g20 +I00 +S'9e\xe0\xf7\xf1\xc2\xea?\xe0\xfc\xd3Q#\xff\xe1?' +p3470 +tp3471 +bsg1 +(g5 +S'\x80\x01\x00\x00' +p3472 +tp3473 +Rp3474 +g11 +(g12 +(I0 +tp3475 +g14 +tp3476 +Rp3477 +(I1 +(I2 +tp3478 +g20 +I00 +S'\xbaf]3\xb2\xd4\xe9?x\x1c\x02l\xa1\xf5\xe1?' +p3479 +tp3480 +bsg1 +(g5 +S'\x81\x01\x00\x00' +p3481 +tp3482 +Rp3483 +g11 +(g12 +(I0 +tp3484 +g14 +tp3485 +Rp3486 +(I1 +(I2 +tp3487 +g20 +I00 +S'6\x01\x9f\xe4\xd5=\xc5?\x91!3V\xab\xd2\xe8?' +p3488 +tp3489 +bsg1 +(g5 +S'\x82\x01\x00\x00' +p3490 +tp3491 +Rp3492 +g11 +(g12 +(I0 +tp3493 +g14 +tp3494 +Rp3495 +(I1 +(I2 +tp3496 +g20 +I00 +S'\xb2\x1d\x1c\x10:\xd6\xe0?1\xd5\xfa[\xc9e\xc1?' +p3497 +tp3498 +bsg1 +(g5 +S'\x83\x01\x00\x00' +p3499 +tp3500 +Rp3501 +g11 +(g12 +(I0 +tp3502 +g14 +tp3503 +Rp3504 +(I1 +(I2 +tp3505 +g20 +I00 +S"1_z-\x88'\xe3?Z\xc5\xb7jM2\xe2?" +p3506 +tp3507 +bsg1 +(g5 +S'\x84\x01\x00\x00' +p3508 +tp3509 +Rp3510 +g11 +(g12 +(I0 +tp3511 +g14 +tp3512 +Rp3513 +(I1 +(I2 +tp3514 +g20 +I00 +S'\xd8\x95|\xb1M\xb6\xe3?\xc7\x88|\x10\x8c\x88\xc6?' +p3515 +tp3516 +bsg1 +(g5 +S'\x85\x01\x00\x00' +p3517 +tp3518 +Rp3519 +g11 +(g12 +(I0 +tp3520 +g14 +tp3521 +Rp3522 +(I1 +(I2 +tp3523 +g20 +I00 +S'\x00\x00\x00\x00\x00\x00\xf0?\x8ex\t\x0e\xeeM\xdb?' +p3524 +tp3525 +bsg1 +(g5 +S'\x86\x01\x00\x00' +p3526 +tp3527 +Rp3528 +g11 +(g12 +(I0 +tp3529 +g14 +tp3530 +Rp3531 +(I1 +(I2 +tp3532 +g20 +I00 +S'Ui\x15\x1f\r\xec\xe2?X\x0f\xe6,\x14F\xec?' +p3533 +tp3534 +bsg1 +(g5 +S'\x87\x01\x00\x00' +p3535 +tp3536 +Rp3537 +g11 +(g12 +(I0 +tp3538 +g14 +tp3539 +Rp3540 +(I1 +(I2 +tp3541 +g20 +I00 +S'#\xf24\xe1p5\xd0?P\xf5U^;e\xed?' +p3542 +tp3543 +bsg1 +(g5 +S'\x88\x01\x00\x00' +p3544 +tp3545 +Rp3546 +g11 +(g12 +(I0 +tp3547 +g14 +tp3548 +Rp3549 +(I1 +(I2 +tp3550 +g20 +I00 +S'Rw\x80l\x92\x8f\xd5?H\xd8\xaf\x19>\x16\xd3?' +p3551 +tp3552 +bsg1 +(g5 +S'\x89\x01\x00\x00' +p3553 +tp3554 +Rp3555 +g11 +(g12 +(I0 +tp3556 +g14 +tp3557 +Rp3558 +(I1 +(I2 +tp3559 +g20 +I00 +S'\xe51\xb9^\xcb\x0f\xed?El\xeatK\xdf\xdd?' +p3560 +tp3561 +bsg1 +(g5 +S'\x8a\x01\x00\x00' +p3562 +tp3563 +Rp3564 +g11 +(g12 +(I0 +tp3565 +g14 +tp3566 +Rp3567 +(I1 +(I2 +tp3568 +g20 +I00 +S';\x88\xefX@\x12\xe8?\xc3i\x17^n\x11\xe7?' +p3569 +tp3570 +bsg1 +(g5 +S'\x8b\x01\x00\x00' +p3571 +tp3572 +Rp3573 +g11 +(g12 +(I0 +tp3574 +g14 +tp3575 +Rp3576 +(I1 +(I2 +tp3577 +g20 +I00 +S'eQ\x8f=\xc2.\xda?\xa1\xc2\x04m\xd1\x02\xc5?' +p3578 +tp3579 +bsg1 +(g5 +S'\x8c\x01\x00\x00' +p3580 +tp3581 +Rp3582 +g11 +(g12 +(I0 +tp3583 +g14 +tp3584 +Rp3585 +(I1 +(I2 +tp3586 +g20 +I00 +S'\xf6\x87\xa5\x19o\x81\xd1?X\xcb\xcd\xaf\xc4\xfb\xbe?' +p3587 +tp3588 +bsg1 +(g5 +S'\x8d\x01\x00\x00' +p3589 +tp3590 +Rp3591 +g11 +(g12 +(I0 +tp3592 +g14 +tp3593 +Rp3594 +(I1 +(I2 +tp3595 +g20 +I00 +S'\x02\xe4\x11Z\xb9\xba\xdc?\xa8\xedP\x90\xcf\xcf\xcc?' +p3596 +tp3597 +bsg1 +(g5 +S'\x8e\x01\x00\x00' +p3598 +tp3599 +Rp3600 +g11 +(g12 +(I0 +tp3601 +g14 +tp3602 +Rp3603 +(I1 +(I2 +tp3604 +g20 +I00 +S'\xe0\x07\x97\xc9Pe\xb9?\xd3,\x87x*\x16\xd9?' +p3605 +tp3606 +bsg1 +(g5 +S'\x8f\x01\x00\x00' +p3607 +tp3608 +Rp3609 +g11 +(g12 +(I0 +tp3610 +g14 +tp3611 +Rp3612 +(I1 +(I2 +tp3613 +g20 +I00 +S'\x99\xcb\xfb\xb4\xc62\xe9?K|\xdf8\r\x88\xe6?' +p3614 +tp3615 +bsg1 +(g5 +S'\x90\x01\x00\x00' +p3616 +tp3617 +Rp3618 +g11 +(g12 +(I0 +tp3619 +g14 +tp3620 +Rp3621 +(I1 +(I2 +tp3622 +g20 +I00 +S'N\xc20\x98\x8b\x9e\xd3?\\\x167\r+\xf8\xe3?' +p3623 +tp3624 +bsg1 +(g5 +S'\x91\x01\x00\x00' +p3625 +tp3626 +Rp3627 +g11 +(g12 +(I0 +tp3628 +g14 +tp3629 +Rp3630 +(I1 +(I2 +tp3631 +g20 +I00 +S'\xcd\xaa\xb6\xa6[\xe2\xc0?=B_\xefT\x8a\xe2?' +p3632 +tp3633 +bsg1 +(g5 +S'\x92\x01\x00\x00' +p3634 +tp3635 +Rp3636 +g11 +(g12 +(I0 +tp3637 +g14 +tp3638 +Rp3639 +(I1 +(I2 +tp3640 +g20 +I00 +S'A\x9c\xa3\xa7.\xfb\xd0?\x9f\xb6\x19\xd6\x82V\xeb?' +p3641 +tp3642 +bsg1 +(g5 +S'\x93\x01\x00\x00' +p3643 +tp3644 +Rp3645 +g11 +(g12 +(I0 +tp3646 +g14 +tp3647 +Rp3648 +(I1 +(I2 +tp3649 +g20 +I00 +S'<\x82\xff\x8f\xd5\xdc\xec?S~\x12"=\x87\xe0?' +p3650 +tp3651 +bsg1 +(g5 +S'\x94\x01\x00\x00' +p3652 +tp3653 +Rp3654 +g11 +(g12 +(I0 +tp3655 +g14 +tp3656 +Rp3657 +(I1 +(I2 +tp3658 +g20 +I00 +S'w\xe1\xf38\x1f\xd5\xd5?\xfc\x88\x95\xf26l\xe8?' +p3659 +tp3660 +bsg1 +(g5 +S'\x95\x01\x00\x00' +p3661 +tp3662 +Rp3663 +g11 +(g12 +(I0 +tp3664 +g14 +tp3665 +Rp3666 +(I1 +(I2 +tp3667 +g20 +I00 +S'\x1d\xb5Ta;\xd2\xe9?IGM\xa0\xfa\xf2\xe0?' +p3668 +tp3669 +bsg1 +(g5 +S'\x96\x01\x00\x00' +p3670 +tp3671 +Rp3672 +g11 +(g12 +(I0 +tp3673 +g14 +tp3674 +Rp3675 +(I1 +(I2 +tp3676 +g20 +I00 +S'jn.\xf7\x17s\xe7?Z\xea<\xfb\x1a\xae\xde?' +p3677 +tp3678 +bsg1 +(g5 +S'\x97\x01\x00\x00' +p3679 +tp3680 +Rp3681 +g11 +(g12 +(I0 +tp3682 +g14 +tp3683 +Rp3684 +(I1 +(I2 +tp3685 +g20 +I00 +S'\x95L\xee\x85f\x95\xe0?\xdd\x08\x9d/WL\xeb?' +p3686 +tp3687 +bsg1 +(g5 +S'\x98\x01\x00\x00' +p3688 +tp3689 +Rp3690 +g11 +(g12 +(I0 +tp3691 +g14 +tp3692 +Rp3693 +(I1 +(I2 +tp3694 +g20 +I00 +S'\x84O\x92\x1d\xbc\xe2\xda?P\x02tx\xa4\xc9\xc2?' +p3695 +tp3696 +bsg1 +(g5 +S'\x99\x01\x00\x00' +p3697 +tp3698 +Rp3699 +g11 +(g12 +(I0 +tp3700 +g14 +tp3701 +Rp3702 +(I1 +(I2 +tp3703 +g20 +I00 +S"\xd2\xf8 WK/\xe8?'\\\xbb\x88X\xb6\xd6?" +p3704 +tp3705 +bsg1 +(g5 +S'\x9a\x01\x00\x00' +p3706 +tp3707 +Rp3708 +g11 +(g12 +(I0 +tp3709 +g14 +tp3710 +Rp3711 +(I1 +(I2 +tp3712 +g20 +I00 +S'm6\xae\xcc\xf1\xb2\xd5?\x00\x00\x00\x00\x00\x00\x00\x00' +p3713 +tp3714 +bsg1 +(g5 +S'\x9b\x01\x00\x00' +p3715 +tp3716 +Rp3717 +g11 +(g12 +(I0 +tp3718 +g14 +tp3719 +Rp3720 +(I1 +(I2 +tp3721 +g20 +I00 +S'M\x18{\xfc\n\xa3\xc3?\xcal\xe7\x1b\xfe\xeb\xe6?' +p3722 +tp3723 +bsg1 +(g5 +S'\x9c\x01\x00\x00' +p3724 +tp3725 +Rp3726 +g11 +(g12 +(I0 +tp3727 +g14 +tp3728 +Rp3729 +(I1 +(I2 +tp3730 +g20 +I00 +S'\xe9\xc4\xad\xae\x1a\x8f\xe3?\xd5`T$t\xb3\xe9?' +p3731 +tp3732 +bsg1 +(g5 +S'\x9d\x01\x00\x00' +p3733 +tp3734 +Rp3735 +g11 +(g12 +(I0 +tp3736 +g14 +tp3737 +Rp3738 +(I1 +(I2 +tp3739 +g20 +I00 +S'\x1bY\xb1\xee\x88r\xb8?\xb3\xb3\xa1D\xdf\xf6\xe1?' +p3740 +tp3741 +bsg1 +(g5 +S'\x9e\x01\x00\x00' +p3742 +tp3743 +Rp3744 +g11 +(g12 +(I0 +tp3745 +g14 +tp3746 +Rp3747 +(I1 +(I2 +tp3748 +g20 +I00 +S'%WN$\x95C\xd4?\xf6\xe90vI\xd5\xc5?' +p3749 +tp3750 +bsg1 +(g5 +S'\x9f\x01\x00\x00' +p3751 +tp3752 +Rp3753 +g11 +(g12 +(I0 +tp3754 +g14 +tp3755 +Rp3756 +(I1 +(I2 +tp3757 +g20 +I00 +S'\xee\x11\xacVb<\xde?=\xfe|\n\x9e]\xea?' +p3758 +tp3759 +bsg1 +(g5 +S'\xa0\x01\x00\x00' +p3760 +tp3761 +Rp3762 +g11 +(g12 +(I0 +tp3763 +g14 +tp3764 +Rp3765 +(I1 +(I2 +tp3766 +g20 +I00 +S'\xfb1@{\x11\xe3\x8a?rC\xf5|\xf5\xed\xc9?' +p3767 +tp3768 +bsg1 +(g5 +S'\xa1\x01\x00\x00' +p3769 +tp3770 +Rp3771 +g11 +(g12 +(I0 +tp3772 +g14 +tp3773 +Rp3774 +(I1 +(I2 +tp3775 +g20 +I00 +S'W\x90\x18\xf4\xbcN\xe9?\x85R&!\xe8_\xd0?' +p3776 +tp3777 +bsg1 +(g5 +S'\xa2\x01\x00\x00' +p3778 +tp3779 +Rp3780 +g11 +(g12 +(I0 +tp3781 +g14 +tp3782 +Rp3783 +(I1 +(I2 +tp3784 +g20 +I00 +S'e\xb2s|P}\xd7?\x80ie\t\x98\xff\xec?' +p3785 +tp3786 +bsg1 +(g5 +S'\xa3\x01\x00\x00' +p3787 +tp3788 +Rp3789 +g11 +(g12 +(I0 +tp3790 +g14 +tp3791 +Rp3792 +(I1 +(I2 +tp3793 +g20 +I00 +S'\xf8\x03W\x9eU\xd4\xd1?\x9fz\xb4]5\x12\xc8?' +p3794 +tp3795 +bsg1 +(g5 +S'\xa4\x01\x00\x00' +p3796 +tp3797 +Rp3798 +g11 +(g12 +(I0 +tp3799 +g14 +tp3800 +Rp3801 +(I1 +(I2 +tp3802 +g20 +I00 +S'\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xf8\xdb\x83\xe0\xed\xc8?' +p3803 +tp3804 +bsg1 +(g5 +S'\xa5\x01\x00\x00' +p3805 +tp3806 +Rp3807 +g11 +(g12 +(I0 +tp3808 +g14 +tp3809 +Rp3810 +(I1 +(I2 +tp3811 +g20 +I00 +S'_^\xdcC\xae\xb0\xd6?\x1cK\x0b\x83\xffT\xeb?' +p3812 +tp3813 +bsg1 +(g5 +S'\xa6\x01\x00\x00' +p3814 +tp3815 +Rp3816 +g11 +(g12 +(I0 +tp3817 +g14 +tp3818 +Rp3819 +(I1 +(I2 +tp3820 +g20 +I00 +S']\xca\x0f\x85Z\x88\xa1?\x87\x1d\x93\xf7\xe1\x87\xcb?' +p3821 +tp3822 +bsg1 +(g5 +S'\xa7\x01\x00\x00' +p3823 +tp3824 +Rp3825 +g11 +(g12 +(I0 +tp3826 +g14 +tp3827 +Rp3828 +(I1 +(I2 +tp3829 +g20 +I00 +S'\xa7:\x98\x93\xe0P\xe5?\xa3%"\xa1(\xc4\xc8?' +p3830 +tp3831 +bsg1 +(g5 +S'\xa8\x01\x00\x00' +p3832 +tp3833 +Rp3834 +g11 +(g12 +(I0 +tp3835 +g14 +tp3836 +Rp3837 +(I1 +(I2 +tp3838 +g20 +I00 +S'\x0f\xd2\x1d\xa1\xa3\x8c\xe3?\xc8\xb1\\\x84\xf6t\xd3?' +p3839 +tp3840 +bsg1 +(g5 +S'\xa9\x01\x00\x00' +p3841 +tp3842 +Rp3843 +g11 +(g12 +(I0 +tp3844 +g14 +tp3845 +Rp3846 +(I1 +(I2 +tp3847 +g20 +I00 +S'\xfa\xad\x9c\x91`F\xe5?\xdf\xb8*\n 0\xca?' +p3848 +tp3849 +bsg1 +(g5 +S'\xaa\x01\x00\x00' +p3850 +tp3851 +Rp3852 +g11 +(g12 +(I0 +tp3853 +g14 +tp3854 +Rp3855 +(I1 +(I2 +tp3856 +g20 +I00 +S'{\xa1Z\xa5A\x10\xdf?\x18\x81\x1b\xd2\xbe\x07\xe9?' +p3857 +tp3858 +bsg1 +(g5 +S'\xab\x01\x00\x00' +p3859 +tp3860 +Rp3861 +g11 +(g12 +(I0 +tp3862 +g14 +tp3863 +Rp3864 +(I1 +(I2 +tp3865 +g20 +I00 +S'D\xfd\xb3\xf3\x9f\x89\xd6?\xa6\x14\xb6\xf8\xe5;\xe9?' +p3866 +tp3867 +bsg1 +(g5 +S'\xac\x01\x00\x00' +p3868 +tp3869 +Rp3870 +g11 +(g12 +(I0 +tp3871 +g14 +tp3872 +Rp3873 +(I1 +(I2 +tp3874 +g20 +I00 +S'\xc3y\xf6\x81\xd1*\xd1?\x87\x03!K\xb3\xee\xea?' +p3875 +tp3876 +bsg1 +(g5 +S'\xad\x01\x00\x00' +p3877 +tp3878 +Rp3879 +g11 +(g12 +(I0 +tp3880 +g14 +tp3881 +Rp3882 +(I1 +(I2 +tp3883 +g20 +I00 +S'\x1ej\x8e-\x0eI\xd0?\x00\xafZ\xb3\x9b\x8f\xdc?' +p3884 +tp3885 +bsg1 +(g5 +S'\xae\x01\x00\x00' +p3886 +tp3887 +Rp3888 +g11 +(g12 +(I0 +tp3889 +g14 +tp3890 +Rp3891 +(I1 +(I2 +tp3892 +g20 +I00 +S'\xa4<\x1b\xffCP\xe8?\xd4\x11!89\xfd\xdf?' +p3893 +tp3894 +bsg1 +(g5 +S'\xaf\x01\x00\x00' +p3895 +tp3896 +Rp3897 +g11 +(g12 +(I0 +tp3898 +g14 +tp3899 +Rp3900 +(I1 +(I2 +tp3901 +g20 +I00 +S'6W^\xd5 b\xec?\xc18\x02\xa4\x90\x8d\xd6?' +p3902 +tp3903 +bsg1 +(g5 +S'\xb0\x01\x00\x00' +p3904 +tp3905 +Rp3906 +g11 +(g12 +(I0 +tp3907 +g14 +tp3908 +Rp3909 +(I1 +(I2 +tp3910 +g20 +I00 +S'H\xd4\xa0glT\xc0?T\x9dO"\xdf\\\xe0?' +p3911 +tp3912 +bsg1 +(g5 +S'\xb1\x01\x00\x00' +p3913 +tp3914 +Rp3915 +g11 +(g12 +(I0 +tp3916 +g14 +tp3917 +Rp3918 +(I1 +(I2 +tp3919 +g20 +I00 +S'_\xd0\xd0\xa8\xe5\x9e\xe6?\xb7\x0b\x99\x00t\xc4\xc5?' +p3920 +tp3921 +bsg1 +(g5 +S'\xb2\x01\x00\x00' +p3922 +tp3923 +Rp3924 +g11 +(g12 +(I0 +tp3925 +g14 +tp3926 +Rp3927 +(I1 +(I2 +tp3928 +g20 +I00 +S'\xf9\x86[`\x81\x1c\xbd?\xfbR/\xda\xa7\xd2\xdc?' +p3929 +tp3930 +bsg1 +(g5 +S'\xb3\x01\x00\x00' +p3931 +tp3932 +Rp3933 +g11 +(g12 +(I0 +tp3934 +g14 +tp3935 +Rp3936 +(I1 +(I2 +tp3937 +g20 +I00 +S'\x11\xdaDi\xb8t\xc6?\xf5\r\xb3]%,\xea?' +p3938 +tp3939 +bsg1 +(g5 +S'\xb4\x01\x00\x00' +p3940 +tp3941 +Rp3942 +g11 +(g12 +(I0 +tp3943 +g14 +tp3944 +Rp3945 +(I1 +(I2 +tp3946 +g20 +I00 +S'\xc3 at 8\xdf\x13\x9f\xd3?:\xb5\xad8\xb4u\xec?' +p3947 +tp3948 +bsg1 +(g5 +S'\xb5\x01\x00\x00' +p3949 +tp3950 +Rp3951 +g11 +(g12 +(I0 +tp3952 +g14 +tp3953 +Rp3954 +(I1 +(I2 +tp3955 +g20 +I00 +S'\x8a\x94\x84\xab\x94\x08\xe5?\x11"\x1f\x03\x03u\xe3?' +p3956 +tp3957 +bsg1 +(g5 +S'\xb6\x01\x00\x00' +p3958 +tp3959 +Rp3960 +g11 +(g12 +(I0 +tp3961 +g14 +tp3962 +Rp3963 +(I1 +(I2 +tp3964 +g20 +I00 +S'\xb3\x18\xb7s\x95\x08\xde?>\x7fv\x03\xd0\xa0\xe9?' +p3965 +tp3966 +bsg1 +(g5 +S'\xb7\x01\x00\x00' +p3967 +tp3968 +Rp3969 +g11 +(g12 +(I0 +tp3970 +g14 +tp3971 +Rp3972 +(I1 +(I2 +tp3973 +g20 +I00 +S'.t\x80\\\xf0)\xd0?\x84\x01\\j\xe0!\xe7?' +p3974 +tp3975 +bsg1 +(g5 +S'\xb8\x01\x00\x00' +p3976 +tp3977 +Rp3978 +g11 +(g12 +(I0 +tp3979 +g14 +tp3980 +Rp3981 +(I1 +(I2 +tp3982 +g20 +I00 +S'&z\xa2\xbb\xb4V\xe4?\x8f\xbeG\xf5y\xf6\xdb?' +p3983 +tp3984 +bsg1 +(g5 +S'\xb9\x01\x00\x00' +p3985 +tp3986 +Rp3987 +g11 +(g12 +(I0 +tp3988 +g14 +tp3989 +Rp3990 +(I1 +(I2 +tp3991 +g20 +I00 +S'\xf02\xa0\\#\xeb\xe2?\xf31r]\x067\xe0?' +p3992 +tp3993 +bsg1 +(g5 +S'\xba\x01\x00\x00' +p3994 +tp3995 +Rp3996 +g11 +(g12 +(I0 +tp3997 +g14 +tp3998 +Rp3999 +(I1 +(I2 +tp4000 +g20 +I00 +S'\xf4\x9fayO\xc4\xec?R\xee\x07\xc3\x8c\xf7\xe1?' +p4001 +tp4002 +bsg1 +(g5 +S'\xbb\x01\x00\x00' +p4003 +tp4004 +Rp4005 +g11 +(g12 +(I0 +tp4006 +g14 +tp4007 +Rp4008 +(I1 +(I2 +tp4009 +g20 +I00 +S'\xcd\xbb\xa2\xb1\xa1x\xd6?vF\xa7\x1c\x19\xdb\xdf?' +p4010 +tp4011 +bsg1 +(g5 +S'\xbc\x01\x00\x00' +p4012 +tp4013 +Rp4014 +g11 +(g12 +(I0 +tp4015 +g14 +tp4016 +Rp4017 +(I1 +(I2 +tp4018 +g20 +I00 +S"I1\x00k\x1d\xdb\xe5?\xa8'>\n\xbfB\xdf?" +p4019 +tp4020 +bsg1 +(g5 +S'\xbd\x01\x00\x00' +p4021 +tp4022 +Rp4023 +g11 +(g12 +(I0 +tp4024 +g14 +tp4025 +Rp4026 +(I1 +(I2 +tp4027 +g20 +I00 +S'W\x7f\xd0{\x82\xf1\xd1?\xf2^8\x0e4@\xeb?' +p4028 +tp4029 +bsg1 +(g5 +S'\xbe\x01\x00\x00' +p4030 +tp4031 +Rp4032 +g11 +(g12 +(I0 +tp4033 +g14 +tp4034 +Rp4035 +(I1 +(I2 +tp4036 +g20 +I00 +S'?wq-\xcb\x93\xd7?\xaa\xac\xd5\x80mK\xec?' +p4037 +tp4038 +bsg1 +(g5 +S'\xbf\x01\x00\x00' +p4039 +tp4040 +Rp4041 +g11 +(g12 +(I0 +tp4042 +g14 +tp4043 +Rp4044 +(I1 +(I2 +tp4045 +g20 +I00 +S']tQ\x81G\xab\xe8?\xf0\x9f\xb8\xeaG\x9a\xcd?' +p4046 +tp4047 +bsg1 +(g5 +S'\xc0\x01\x00\x00' +p4048 +tp4049 +Rp4050 +g11 +(g12 +(I0 +tp4051 +g14 +tp4052 +Rp4053 +(I1 +(I2 +tp4054 +g20 +I00 +S'A\xeb<\xcfx\xda\xe0?\x9b\xd5Z;\xdc;\xd5?' +p4055 +tp4056 +bsg1 +(g5 +S'\xc1\x01\x00\x00' +p4057 +tp4058 +Rp4059 +g11 +(g12 +(I0 +tp4060 +g14 +tp4061 +Rp4062 +(I1 +(I2 +tp4063 +g20 +I00 +S'<\x87\x80\xe3\xaf$\xcf?\x87\x01\x1cS\xbe_\xc2?' +p4064 +tp4065 +bsg1 +(g5 +S'\xc2\x01\x00\x00' +p4066 +tp4067 +Rp4068 +g11 +(g12 +(I0 +tp4069 +g14 +tp4070 +Rp4071 +(I1 +(I2 +tp4072 +g20 +I00 +S'\x85\xdd(\xfco\x17\xe8?\x10\x1c\xc8w\xd8;\xe8?' +p4073 +tp4074 +bsg1 +(g5 +S'\xc3\x01\x00\x00' +p4075 +tp4076 +Rp4077 +g11 +(g12 +(I0 +tp4078 +g14 +tp4079 +Rp4080 +(I1 +(I2 +tp4081 +g20 +I00 +S'o\xe9.aea\xd0?P\xbf\x98\x06\x0b\xa9\xea?' +p4082 +tp4083 +bsg1 +(g5 +S'\xc4\x01\x00\x00' +p4084 +tp4085 +Rp4086 +g11 +(g12 +(I0 +tp4087 +g14 +tp4088 +Rp4089 +(I1 +(I2 +tp4090 +g20 +I00 +S'\xc2wY\xe8T\x08\xa0?\xdd\x1fP\xb2o\xad\xd4?' +p4091 +tp4092 +bsg1 +(g5 +S'\xc5\x01\x00\x00' +p4093 +tp4094 +Rp4095 +g11 +(g12 +(I0 +tp4096 +g14 +tp4097 +Rp4098 +(I1 +(I2 +tp4099 +g20 +I00 +S'\xc5q\xf6\t\x125\xb5?|\xfa\xd6\xbe\xb6m\xd2?' +p4100 +tp4101 +bsg1 +(g5 +S'\xc6\x01\x00\x00' +p4102 +tp4103 +Rp4104 +g11 +(g12 +(I0 +tp4105 +g14 +tp4106 +Rp4107 +(I1 +(I2 +tp4108 +g20 +I00 +S'H\x98\xb8\xbb\xe1\xae\xd8?YH\x87=\xe6F\xe9?' +p4109 +tp4110 +bsg1 +(g5 +S'\xc7\x01\x00\x00' +p4111 +tp4112 +Rp4113 +g11 +(g12 +(I0 +tp4114 +g14 +tp4115 +Rp4116 +(I1 +(I2 +tp4117 +g20 +I00 +S'\xf5\xe1\xeaFb\x81\xe4?\xa3\xed\x9e\xbe\xc6\xb8\xc8?' +p4118 +tp4119 +bsg1 +(g5 +S'\xc8\x01\x00\x00' +p4120 +tp4121 +Rp4122 +g11 +(g12 +(I0 +tp4123 +g14 +tp4124 +Rp4125 +(I1 +(I2 +tp4126 +g20 +I00 +S'y\xf8\x1ee;?\xe0?4\x99>R\xf4\xb9\xeb?' +p4127 +tp4128 +bsg1 +(g5 +S'\xc9\x01\x00\x00' +p4129 +tp4130 +Rp4131 +g11 +(g12 +(I0 +tp4132 +g14 +tp4133 +Rp4134 +(I1 +(I2 +tp4135 +g20 +I00 +S'D;ZK\x8a\xd6\xba?\xae\nW\xf7\x0c\xe2\xd0?' +p4136 +tp4137 +bsg1 +(g5 +S'\xca\x01\x00\x00' +p4138 +tp4139 +Rp4140 +g11 +(g12 +(I0 +tp4141 +g14 +tp4142 +Rp4143 +(I1 +(I2 +tp4144 +g20 +I00 +S'\xb2K\x8ao\xe9\xf8\xcd?\xf2\xb8\xc7\x84(\n\xed?' +p4145 +tp4146 +bsg1 +(g5 +S'\xcb\x01\x00\x00' +p4147 +tp4148 +Rp4149 +g11 +(g12 +(I0 +tp4150 +g14 +tp4151 +Rp4152 +(I1 +(I2 +tp4153 +g20 +I00 +S"\xbd\xb5f\x7f\x9f\xd2\xe8?\x8d\x94\x88'\x91\xb2\xda?" +p4154 +tp4155 +bsg1 +(g5 +S'\xcc\x01\x00\x00' +p4156 +tp4157 +Rp4158 +g11 +(g12 +(I0 +tp4159 +g14 +tp4160 +Rp4161 +(I1 +(I2 +tp4162 +g20 +I00 +S'\x81d]Z\x0e\xf8\xe7?\x17I\x0b\xa6\x11I\xc8?' +p4163 +tp4164 +bsg1 +(g5 +S'\xcd\x01\x00\x00' +p4165 +tp4166 +Rp4167 +g11 +(g12 +(I0 +tp4168 +g14 +tp4169 +Rp4170 +(I1 +(I2 +tp4171 +g20 +I00 +S'\xf7\xa3\x14b\xd6\xd4\xdc?6m8\xe1\xe2<\xd2?' +p4172 +tp4173 +bsg1 +(g5 +S'\xce\x01\x00\x00' +p4174 +tp4175 +Rp4176 +g11 +(g12 +(I0 +tp4177 +g14 +tp4178 +Rp4179 +(I1 +(I2 +tp4180 +g20 +I00 +S'\x1a\xc1V\xf4t8\xe3?\n\xf0\x1cu\xc8\x18\xe1?' +p4181 +tp4182 +bsg1 +(g5 +S'\xcf\x01\x00\x00' +p4183 +tp4184 +Rp4185 +g11 +(g12 +(I0 +tp4186 +g14 +tp4187 +Rp4188 +(I1 +(I2 +tp4189 +g20 +I00 +S'\xf3\x13\xec\x80`\xc9\xd8? \xc1\xaf\xc1\x10y\xe9?' +p4190 +tp4191 +bsg1 +(g5 +S'\xd0\x01\x00\x00' +p4192 +tp4193 +Rp4194 +g11 +(g12 +(I0 +tp4195 +g14 +tp4196 +Rp4197 +(I1 +(I2 +tp4198 +g20 +I00 +S'\xad\xcd\xf2\x8c%\x15\xcb?kMr\xa5P{\xeb?' +p4199 +tp4200 +bsg1 +(g5 +S'\xd1\x01\x00\x00' +p4201 +tp4202 +Rp4203 +g11 +(g12 +(I0 +tp4204 +g14 +tp4205 +Rp4206 +(I1 +(I2 +tp4207 +g20 +I00 +S'\x9d#\xf9y;\xaa\xb5?\x872\xdd\xf5\x0e\xf0\xcb?' +p4208 +tp4209 +bsg1 +(g5 +S'\xd2\x01\x00\x00' +p4210 +tp4211 +Rp4212 +g11 +(g12 +(I0 +tp4213 +g14 +tp4214 +Rp4215 +(I1 +(I2 +tp4216 +g20 +I00 +S"\x19l\xd2i%w\xe0?\xe1}\x87\xd4\xf3'\xde?" +p4217 +tp4218 +bsg1 +(g5 +S'\xd3\x01\x00\x00' +p4219 +tp4220 +Rp4221 +g11 +(g12 +(I0 +tp4222 +g14 +tp4223 +Rp4224 +(I1 +(I2 +tp4225 +g20 +I00 +S'\xc2\xcd\xbc\xb2\xda*\xd6? dk\xf7\xe7\xf7\xa3?' +p4226 +tp4227 +bsg1 +(g5 +S'\xd4\x01\x00\x00' +p4228 +tp4229 +Rp4230 +g11 +(g12 +(I0 +tp4231 +g14 +tp4232 +Rp4233 +(I1 +(I2 +tp4234 +g20 +I00 +S'Fu\xffL\x0eO\xd4?\x07X8\x02\xd5p\xe0?' +p4235 +tp4236 +bsg1 +(g5 +S'\xd5\x01\x00\x00' +p4237 +tp4238 +Rp4239 +g11 +(g12 +(I0 +tp4240 +g14 +tp4241 +Rp4242 +(I1 +(I2 +tp4243 +g20 +I00 +S'\x02\xfb\xd9\x8cOO\xe8?\x89\xc6$Q:\xbb\xd3?' +p4244 +tp4245 +bsg1 +(g5 +S'\xd6\x01\x00\x00' +p4246 +tp4247 +Rp4248 +g11 +(g12 +(I0 +tp4249 +g14 +tp4250 +Rp4251 +(I1 +(I2 +tp4252 +g20 +I00 +S'1\xc3\x8f\xe5\xc3\xdd\xd8?\xd4"\xd4\xbe\xce\xb4\xe9?' +p4253 +tp4254 +bsg1 +(g5 +S'\xd7\x01\x00\x00' +p4255 +tp4256 +Rp4257 +g11 +(g12 +(I0 +tp4258 +g14 +tp4259 +Rp4260 +(I1 +(I2 +tp4261 +g20 +I00 +S'?\xd6\xa5\xc1\xcf/\xcf?yX2O\x83\x97\xec?' +p4262 +tp4263 +bsg1 +(g5 +S'\xd8\x01\x00\x00' +p4264 +tp4265 +Rp4266 +g11 +(g12 +(I0 +tp4267 +g14 +tp4268 +Rp4269 +(I1 +(I2 +tp4270 +g20 +I00 +S'\x08\xeaQ\x85\xd6\xfd\xe0?e\xdef\xc8\x83\x85\xec?' +p4271 +tp4272 +bsg1 +(g5 +S'\xd9\x01\x00\x00' +p4273 +tp4274 +Rp4275 +g11 +(g12 +(I0 +tp4276 +g14 +tp4277 +Rp4278 +(I1 +(I2 +tp4279 +g20 +I00 +S'\x97\xc7_\xb5\x05\xdd\xd7?\xb3_"\xecU*\xc5?' +p4280 +tp4281 +bsg1 +(g5 +S'\xda\x01\x00\x00' +p4282 +tp4283 +Rp4284 +g11 +(g12 +(I0 +tp4285 +g14 +tp4286 +Rp4287 +(I1 +(I2 +tp4288 +g20 +I00 +S'>\x8e\x97\xfev\x9e\xce?5\x17\xda\x19\xf8\x1b\xeb?' +p4289 +tp4290 +bsg1 +(g5 +S'\xdb\x01\x00\x00' +p4291 +tp4292 +Rp4293 +g11 +(g12 +(I0 +tp4294 +g14 +tp4295 +Rp4296 +(I1 +(I2 +tp4297 +g20 +I00 +S'\x81\xd2\xc7\xa0\t\x9b\xe0?\\\xfe\xdb\xa7er\xec?' +p4298 +tp4299 +bsg1 +(g5 +S'\xdc\x01\x00\x00' +p4300 +tp4301 +Rp4302 +g11 +(g12 +(I0 +tp4303 +g14 +tp4304 +Rp4305 +(I1 +(I2 +tp4306 +g20 +I00 +S'\xd6\xa9\xc8[\xc7Q\xe4?\xab\x84\x1b\x9de\xdc\xc5?' +p4307 +tp4308 +bsg1 +(g5 +S'\xdd\x01\x00\x00' +p4309 +tp4310 +Rp4311 +g11 +(g12 +(I0 +tp4312 +g14 +tp4313 +Rp4314 +(I1 +(I2 +tp4315 +g20 +I00 +S'\x95\xe4\x887U\x15\xee?>\xf7\xb7\x93\x0b\xd5\xdb?' +p4316 +tp4317 +bsg1 +(g5 +S'\xde\x01\x00\x00' +p4318 +tp4319 +Rp4320 +g11 +(g12 +(I0 +tp4321 +g14 +tp4322 +Rp4323 +(I1 +(I2 +tp4324 +g20 +I00 +S'\xac\x88B\xdf~\x00\xd1?-%\x8e\xb0C\x94\xd5?' +p4325 +tp4326 +bsg1 +(g5 +S'\xdf\x01\x00\x00' +p4327 +tp4328 +Rp4329 +g11 +(g12 +(I0 +tp4330 +g14 +tp4331 +Rp4332 +(I1 +(I2 +tp4333 +g20 +I00 +S'5\x1aD\x82aI\xe7?\xceF\xda\x95\xe5\x11\xe7?' +p4334 +tp4335 +bsg1 +(g5 +S'\xe0\x01\x00\x00' +p4336 +tp4337 +Rp4338 +g11 +(g12 +(I0 +tp4339 +g14 +tp4340 +Rp4341 +(I1 +(I2 +tp4342 +g20 +I00 +S'B\xb8u\x14\xfc\x91\xe3?#n\x9fIYh\xe8?' +p4343 +tp4344 +bsg1 +(g5 +S'\xe1\x01\x00\x00' +p4345 +tp4346 +Rp4347 +g11 +(g12 +(I0 +tp4348 +g14 +tp4349 +Rp4350 +(I1 +(I2 +tp4351 +g20 +I00 +S';iI\xce0_\xe8?\xf9\xb8:9\x92\xdf\xe7?' +p4352 +tp4353 +bsg1 +(g5 +S'\xe2\x01\x00\x00' +p4354 +tp4355 +Rp4356 +g11 +(g12 +(I0 +tp4357 +g14 +tp4358 +Rp4359 +(I1 +(I2 +tp4360 +g20 +I00 +S'\xb6i\xf3\xe6\xb7O\xe2?\xf8x\x1fk/\xf7\xe9?' +p4361 +tp4362 +bsg1 +(g5 +S'\xe3\x01\x00\x00' +p4363 +tp4364 +Rp4365 +g11 +(g12 +(I0 +tp4366 +g14 +tp4367 +Rp4368 +(I1 +(I2 +tp4369 +g20 +I00 +S'[\xc6\x9a\xef\x8b|\xdc?' +p4433 +tp4434 +bsg1 +(g5 +S'\xeb\x01\x00\x00' +p4435 +tp4436 +Rp4437 +g11 +(g12 +(I0 +tp4438 +g14 +tp4439 +Rp4440 +(I1 +(I2 +tp4441 +g20 +I00 +S'\xd7<6\xfd\xc9>\xcc?\xc4\xf3\xe1yX\xdf\xe9?' +p4442 +tp4443 +bsg1 +(g5 +S'\xec\x01\x00\x00' +p4444 +tp4445 +Rp4446 +g11 +(g12 +(I0 +tp4447 +g14 +tp4448 +Rp4449 +(I1 +(I2 +tp4450 +g20 +I00 +S'\x16TL@\xe1\xf4\xc9?\x18I?\xfc.\xc7\xe3?' +p4451 +tp4452 +bsg1 +(g5 +S'\xed\x01\x00\x00' +p4453 +tp4454 +Rp4455 +g11 +(g12 +(I0 +tp4456 +g14 +tp4457 +Rp4458 +(I1 +(I2 +tp4459 +g20 +I00 +S'\xc2\xac|\xf3\x01\xe6\xc6?\xf0a\x06<\x9e\xb9\xeb?' +p4460 +tp4461 +bsg1 +(g5 +S'\xee\x01\x00\x00' +p4462 +tp4463 +Rp4464 +g11 +(g12 +(I0 +tp4465 +g14 +tp4466 +Rp4467 +(I1 +(I2 +tp4468 +g20 +I00 +S'\xfa\x9a$j\x8a\xad\xd4?z\xf5\xd8&\xe6\xf6\xe1?' +p4469 +tp4470 +bsg1 +(g5 +S'\xef\x01\x00\x00' +p4471 +tp4472 +Rp4473 +g11 +(g12 +(I0 +tp4474 +g14 +tp4475 +Rp4476 +(I1 +(I2 +tp4477 +g20 +I00 +S'\xcb\x8c\xee(\xf2\xbb\xaf?\xe7\xecn=\x80\xf3\xd9?' +p4478 +tp4479 +bsg1 +(g5 +S'\xf0\x01\x00\x00' +p4480 +tp4481 +Rp4482 +g11 +(g12 +(I0 +tp4483 +g14 +tp4484 +Rp4485 +(I1 +(I2 +tp4486 +g20 +I00 +S'\xdd\xe8v\xa76b\xe7?\x95(\xa2\x19z\xfa\xe4?' +p4487 +tp4488 +bsg1 +(g5 +S'\xf1\x01\x00\x00' +p4489 +tp4490 +Rp4491 +g11 +(g12 +(I0 +tp4492 +g14 +tp4493 +Rp4494 +(I1 +(I2 +tp4495 +g20 +I00 +S'"\xc5\x02\x05\xa9\xbe\xe7?]\xef\xf0\xb1u\x8f\xe5?' +p4496 +tp4497 +bsg1 +(g5 +S'\xf2\x01\x00\x00' +p4498 +tp4499 +Rp4500 +g11 +(g12 +(I0 +tp4501 +g14 +tp4502 +Rp4503 +(I1 +(I2 +tp4504 +g20 +I00 +S'\xe8\xbd\x02\xaer\xa1\xda?\xe4\xd1\xb9\x8d"\xf1\xd1?' +p4505 +tp4506 +bsg1 +(g5 +S'\xf3\x01\x00\x00' +p4507 +tp4508 +Rp4509 +g11 +(g12 +(I0 +tp4510 +g14 +tp4511 +Rp4512 +(I1 +(I2 +tp4513 +g20 +I00 +S'\x96\xa9m\n\xa1\xe5\xd7?\xf72j\x91\x8e\xb5\xc0?' +p4514 +tp4515 +bs.(I1009 +I500 +tp0 +. \ No newline at end of file Added: SwiftApps/Andrey-MC/movie_graph.py =================================================================== --- SwiftApps/Andrey-MC/movie_graph.py (rev 0) +++ SwiftApps/Andrey-MC/movie_graph.py 2011-03-30 17:57:26 UTC (rev 4230) @@ -0,0 +1,863 @@ +#!/home/zzhang/workplace/epd-7.0-2-rh5-x86/bin/python2.7 +#/usr/bin/env python + +# Import graphviz +import sys +sys.path.append('..') +sys.path.append('/usr/lib/graphviz/python/') +sys.path.append('/usr/lib64/graphviz/python/') + +# Import pygraph +#from pythongraph import * +from matplotlib.patches import Circle, PathPatch +import matplotlib.lines as mlines +import matplotlib +matplotlib.use('Agg') + +from matplotlib.font_manager import FontProperties +''' +from pygraph.classes.graph import graph +from pygraph.classes.digraph import digraph +from pygraph.algorithms.searching import breadth_first_search +from pygraph.algorithms.accessibility import accessibility, connected_components +from pygraph.algorithms.minmax import shortest_path, heuristic_search +from pygraph.classes.digraph import digraph +from pygraph.algorithms.heuristics.euclidean import euclidean +from pygraph.algorithms.heuristics.chow import chow +#from pygraph.readwrite.dot import write +''' +from string import replace +import numpy as np +from matplotlib import pyplot +from pylab import * +import operator +from decimal import * +import math as mt +import random +import networkx as nx + +import pickle +import os + +#---------------------------------------------------------- +def string_wrap(st, mode): + + st = str(st) + + if mode==1: + st = "\033[1;29m" + st + "\033[0m" + elif mode==2: + st = "\033[1;34m" + st + "\033[0m" + elif mode==3: + st = "\033[1;44m" + st + "\033[0m" + elif mode==4: + st = "\033[1;35m" + st + "\033[0m" + elif mode==5: + st = "\033[1;33;44m" + st + "\033[0m" + elif mode==6: + st = "\033[1;47;34m" + st + "\033[0m" + elif mode==7: + st = "\033[1;1;31m" + st + "\033[0m" + elif mode==8: + st = "\033[1;1;33m" + st + "\033[0m" + elif mode==9: + st = "\033[1;1;43;34m" + st + "\033[0m" + elif mode==10: + st = "\033[1;1;37m" + st + "\033[0m" + elif mode==11: + st = "\033[1;30;47m" + st + "\033[0m" + else: + st = st + ' ' + return st +#----------------------------------------------------------- +def draw_graph(visible,pos,name,number,dpidpi,Nce,Ncv,scale): + fig = pyplot.figure(num=None,dpi=dpidpi,facecolor='w',edgecolor='k') + rect = [0.1,0.13,0.8,0.77] + ax = plt.subplot(111) + + ax.axis('off') + + + xmin = inf + xmax = -inf + ymin = inf + ymax = -inf + part = 0.01 + + for i in range(Ncv): + x,y=pos[i] + if x > xmax: + xmax = x + elif x < xmin: + xmin = x + if y > ymax: + ymax = y + elif y < ymin: + ymin = y + + xlim(xmin-(xmax-xmin)*part,xmax+(xmax-xmin)*part) + ylim(ymin-(ymax-ymin)*part,ymax+(ymax-ymin)*part) + + for i in range(Ncv): + x,y=pos[i] + r = sqrt(float(G.degree(i)))/pi + circle = Circle((x, y), r*scale, facecolor='none', + edgecolor=(0.3,0.3,0.3), linewidth=0.5, alpha=0.5) + ax.add_patch(circle) + + + savefig(name+str(number)+'.png', dpi=dpidpi, facecolor='w', edgecolor='w', + orientation='portrait', papertype=None, format='png', + transparent=False, bbox_inches=None, pad_inches=0.1) + +#--------------------------------------- +def connected_components(G): + """Return nodes in connected components of graph. + + Parameters + ---------- + G : NetworkX Graph + An undirected graph. + + Returns + ------- + comp : list of lists + A list of nodes for each component of G. + + See Also + -------- + strongly_connected_components + + Notes + ----- + The list is ordered from largest connected component to smallest. + For undirected graphs only. + """ + if G.is_directed(): + raise nx.NetworkXError,\ + """Not allowed for directed graph G. + Use UG=G.to_undirected() to create an undirected graph.""" + seen={} + components=[] + for v in G: + if v not in seen: + c=nx.single_source_shortest_path_length(G,v) + components.append(c.keys()) + seen.update(c) + components.sort(key=len,reverse=True) + return components + + +def number_connected_components(G): + """Return number of connected components in graph. + + Parameters + ---------- + G : NetworkX Graph + An undirected graph. + + Returns + ------- + n : integer + Number of connected components + + See Also + -------- + connected_components + + Notes + ----- + For undirected graphs only. + """ + return len(connected_components(G)) + + +def is_connected(G): + """Test graph connectivity + + Parameters + ---------- + G : NetworkX Graph + An undirected graph. + + Returns + ------- + connected : bool + True if the graph is connected, false otherwise. + + Examples + -------- + >>> G=nx.path_graph(4) + >>> print nx.is_connected(G) + True + + See Also + -------- + connected_components + + Notes + ----- + For undirected graphs only. + """ + if G.is_directed(): + raise nx.NetworkXError(\ + """Not allowed for directed graph G. +Use UG=G.to_undirected() to create an undirected graph.""") + + if len(G)==0: + raise nx.NetworkXPointlessConcept( + """Connectivity is undefined for the null graph.""") + + return len(nx.single_source_shortest_path_length(G, + G.nodes_iter().next()))==len(G) + + +def connected_component_subgraphs(G): + """Return connected components as subgraphs. + + Parameters + ---------- + G : NetworkX Graph + An undirected graph. + + Returns + ------- + glist : list + A list of graphs, one for each connected component of G. + + Examples + -------- + Get largest connected component as subgraph + + >>> G=nx.path_graph(4) + >>> G.add_edge(5,6) + >>> H=nx.connected_component_subgraphs(G)[0] + + See Also + -------- + connected_components + + Notes + ----- + The list is ordered from largest connected component to smallest. + For undirected graphs only. + """ + + cc=connected_components(G) + graph_list=[] + + for c in cc: + graph_list.append(G.subgraph(c)) + return graph_list + + +#======================= +def node_connected_component(G,n): + """Return nodes in connected components of graph containing node n. + + Parameters + ---------- + G : NetworkX Graph + An undirected graph. + + n : node label + A node in G + + Returns + ------- + comp : lists + A list of nodes in component of G containing node n. + + See Also + -------- + connected_components + + Notes + ----- + For undirected graphs only. + """ + if G.is_directed(): + raise nx.NetworkXError,\ + """Not allowed for directed graph G. + Use UG=G.to_undirected() to create an undirected graph.""" + return nx.single_source_shortest_path_length(G,n).keys() + +#======================================================= +def generate_other_graphs(type, Nv, Ne, n_e, epsilon,p): + + if type==1: + G=nx.barabasi_albert_graph(Nv,n_e) + elif type==2: + G=nx.erdos_renyi_graph(Nv,p) + elif type==3: + G=nx.watts_strogatz_graph(Nv,n_e,p) + else: + G=nx.random_lobster(Nv,p,p) + + Ncv = G.number_of_nodes() + Nce = G.number_of_edges() + C = array(list(G.degree(G.nodes()).values())) + E = array(list(G.degree(G.edges()).values())) + + #-------------------- + ncomp = 2 + while 1==1: + ncomp = number_connected_components(G) + if ncomp==1: + print 'only',ncomp,'contected component' + break + comp = connected_components(G) + #print comp + print ncomp,'contected components' + + # connect two largest components through least connected nodes + tmp1 = [] + tmp2 = [] + for t in comp[0]: + if C[t]==min(C[comp[0]]): + tmp1.append(t) + for t in comp[1]: + if C[t]==min(C[comp[1]]): + tmp2.append(t) + i1 = random.sample(tmp1,1) + i2 = random.sample(tmp2,1) + print 'Connecting',i1[0],'and',i2[0] + G.add_edge(i1[0],i2[0]) + + print G.number_of_nodes(), ' nodes' + print G.number_of_edges(), ' edges' + + + pos = nx.spring_layout(G, dim=2, pos=None, + fixed=None, iterations=4400, weighted=False, scale=1) + + visible = zeros([Nce,1],int) + + number = 0 + name = 'test' + dpidpi=150 + scale = 1./200. + #draw_graph(C,E,visible,pos,name,number,dpidpi,Nce,Ncv,scale) +#---pickle output +# + s = raw_input('Pickle the graph? (y/n):') + + if s=='y': + file1 = open('graph1.pickled', 'w') + pickle.dump(G,file1) + pickle.dump(pos,file1) + pickle.dump(C,file1) + pickle.dump(E,file1) + pickle.dump((Nce,Ncv),file1) + file1.close() +#-------------------------------------- + return G,Ncv,Nce,C,E,pos +#--------------------------------------- +#================================================== +def pick_edge_nodes(C, epsilon, Ncv, Nce, E, n_e): + + k = random.randint(1,n_e) + Ncv+=1 + curr=Ncv + tmp = [] + Cs = C.sum() + + for i in range(k): + pick = random.random() + + cumsum = epsilon/(Cs+epsilon) + + # join new node + if cumsum > pick: + Ncv+=1 + C[Ncv]+=1 + Nce+=1 + E[Nce,0]=curr + E[Nce,1]=Ncv + print '[',curr,Ncv,']' + print '***************' + + else: + j=-1 + # old node + Cs = C.sum() + while cumsum < pick and j xmax: + xmax = x + elif x < xmin: + xmin = x + if y > ymax: + ymax = y + elif y < ymin: + ymin = y + + xlim(xmin-(xmax-xmin)*part,xmax+(xmax-xmin)*part) + ylim(ymin-(ymax-ymin)*part,ymax+(ymax-ymin)*part) + + for i in range(Ncv): + x,y=pos[i] + r = sqrt(float(G.degree(i)))/pi + circle = Circle((x, y), r*scale, facecolor='none', + edgecolor=(0.4,0.4,0.4), linewidth=0.5, alpha=0.5) + ax.add_patch(circle) + + + # add current graph + nmax = G.number_of_edges() + cmap=get_cmap(hot) + for ee in G_current.edges(): + #print ee + x,y=pos[ee[0]] + x1,y1=pos[ee[1]] + + if edge_counts[ee] <= 10: + xx = (edge_counts[ee]-1.)/10. + else: + xx = 1. + + col=cm.jet(xx) + al = min(1.,0.23+0.02*edge_counts[ee]) + lww = min(8.,1.1+0.01*edge_counts[ee]) + line = mlines.Line2D([x,x1], [y,y1], lw=lww, alpha=al, color=col) + + + ax.add_line(line) + + #adding a key + + y_step = (ymax-ymin)*part*3.5 + y_start = ymin+10*y_step + for i in range(11): + col=cm.jet(i/10.) + x = xmin-(xmax-xmin)*part*12 + x1 = xmin-(xmax-xmin)*part*12 + (xmax-xmin)*part/30. + y = y_start-float(i)*y_step + line = mlines.Line2D([x,x1], [y,y], lw=2, alpha=0.35, color=col) + ax.add_line(line) + if i < 10 and i > 0: + tmp = '%d times ' % (i+1) + elif i==0: + tmp = '%d ' % (i+1) + else: + tmp = '%d or more' % (i+1) + ax.text(x1+(xmax-xmin)*part/60.,y, tmp, fontname='Synchro LET', color=col, alpha=0.3) + + + if page_rank == 1: + tmp_page = ' (Page Rank)' + else: + tmp_page = ' (Node Degree)' + + tmp = ('$\\alpha_{\\iota} = %4.2f, \\alpha_{\\mu} = %4.2f,\\beta = %4.2f, \\gamma = %4.2f,'+ \ + '\\delta = %4.2f, \\Delta=%d \\;(%d)\\;%d$' + \ + ' published'+tmp_page) % (alpha_i,alpha_m,beta,gamma, \ + delta,step,number,int(float(step)*float(number))) + tmp1 = 'Novel %d (%d possible), Relative Loss %g, Loss %g' % (novel, nmax, loss/(novel+1.), loss) + + ax.text(xmin-(xmax-xmin)*part*8.,ymax+(ymax-ymin)*part*4, tmp, fontname='Synchro LET', color='k') + ax.text(xmin-(xmax-xmin)*part*8.,ymin-(ymax-ymin)*part*10, tmp1, fontname='Synchro LET', color='k') + + ext = 'png' + + if for_print==True: + savefig(name+str(number)+'.pdf', dpi=200, facecolor='w', edgecolor='w', + orientation='portrait', papertype=None, format='pdf', + transparent=False, bbox_inches=None, pad_inches=0.1) + + savefig(output_dir+'/'+name+str(number)+'.'+ext, dpi=dpidpi, facecolor='w', edgecolor='w', + orientation='portrait', papertype=None, format=ext, + transparent=False, bbox_inches=None, pad_inches=0.1) + + return 0 + +#==================================================================================== +def pick_edges(G_curr, current_E, G, alpha_i, alpha_m, beta, gamm, + delta, step, edge_counts, name, count, dpidpi, + loss, novel, page_rank, k_max, reruns, + history, history_novel, history_loss, history_rel_loss, history_nodes, output_dir): + +# compute shortest distances + length=nx.all_pairs_shortest_path_length(G_curr) + + Nv = G_curr.number_of_nodes() + rank = zeros([Nv,1],float) + prob = zeros([Nv,Nv],float) + +# compute ranks + + if page_rank==0: + for ed in G_curr.edges(): + rank[ed[0]]+=1 + rank[ed[1]]+=1 + else: + nodes = nx.pagerank_numpy(G_curr) + minn=min(nodes.values()) + for no in nodes.keys(): + rank[no] = nodes[no].real/minn.real + #print max(rank)[0], min(rank)[0] + + n_l_inf = 0. + for i in range(Nv): + n_l_inf += float(len(length[i]))/2. + + n_inf = Nv*(Nv-1)/2. - n_l_inf + nu = float(n_inf)**(delta+1.)/(float(n_inf)**(delta+1.)+float(n_l_inf)) + + for i in range(Nv): + for j in range(i+1,Nv-1): + + f = alpha_i*log(min([rank[i]+1,rank[j]+1])) +\ + alpha_m*log(max([rank[i]+1,rank[j]+1])) + + if j not in length[i]: + prob[i,j] = exp(log(nu) + f) + else: + g = beta*log(float(length[i][j])/float(k_max)) +\ + gamm*log(1. - float(length[i][j])/float(k_max)) + + prob[i,j] = exp(log(1.-nu) + f + g) + + + summa=0. + p_fail = 0. + good = {} + k=0 + p_success = zeros([G.number_of_edges(),1],float) + for i in range(Nv): + for j in range(i+1, Nv-1): + summa+=prob[i,j] + if j not in G[i]: + p_fail += prob[i,j] + else: + p_success[k]=prob[i,j] + good[k]=(i,j) + k+=1 + + prob = prob/summa + p_fail = p_fail/summa + + p_success = p_success/(sum(p_success)) + + failed = 0. + success = 0 + + while success < step: + + z = np.random.geometric(1.-p_fail, size=1) + loss += z + 1 + failed += z[0] + #print 'failed',z[0] + + pick0 = random.random() + summ = 0. + + first=1 + for i in range(len(p_success)): + summ+=p_success[i] + if summ >= pick0: + ni = good[i][0] + nj = good[i][1] + break + i = ni + j = nj + if j not in G[i]: + failed += 1 + else: + if j not in G_curr[i]: + G_curr.add_edge(i,j) + edge_counts[(i,j)]+=1 + edge_counts[(j,i)]+=1 + success += 1 + novel=G_curr.number_of_edges() + for_print = False + rel_loss = float(loss)/float(novel) + + #modify the original code to plot for every call of pick_edges() + ''' + if reruns == 1: + draw_current_graph(pos,name,count,dpidpi,Nce,Ncv,scale,G_curr, + alpha_i, alpha_m, beta, gamma, delta, step, + loss, novel, edge_counts, page_rank,for_print) + + draw_current_graph(pos,name,count,dpidpi,Nce,Ncv,scale,G_curr, + alpha_i, alpha_m, beta, gamma, delta, step, + loss, novel, edge_counts, page_rank,for_print, output_dir) + ''' + for i in range(G.number_of_edges()): + history[count-1,i] += edge_counts[G.edges()[i]] + history_nodes[count-1,G.edges()[i][0]] += edge_counts[G.edges()[i]] + history_nodes[count-1,G.edges()[i][1]] += edge_counts[G.edges()[i]] + + history_novel[count-1,0] += novel + history_novel[count-1,1] += novel**2 + history_loss[count-1,0] += loss + history_loss[count-1,1] += loss**2 + history_rel_loss[count-1,0] += rel_loss + history_rel_loss[count-1,1] += rel_loss**2 + + print string_wrap(str(rerun),2),count,string_wrap(str(G_curr.number_of_edges()),3),'novel, ',rel_loss,'relative loss' + + prob=[] + + + return G_curr, current_E, failed, edge_counts, loss, novel, history, history_novel, history_loss, history_rel_loss +#=================================================================================== +# vertices +# edges +# Nv +# Ne +# C -- connectivity +# E edges +Nv = 900 +Ne = 2700 +Ncv = -1 +Nce = -1 +epsilon = 0.5 + +#------- try reading pickled graph +s = 'y' + +if s=='y': + + file2 = open('for_movies.pickled', 'r') + G = pickle.load(file2) + pos = pickle.load(file2) + file2.close() + + C = array(list(G.degree(G.nodes()).values())) + E = array(list(G.degree(G.edges()).values())) + Nce = G.number_of_edges() + Ncv = G.number_of_nodes() + +#----------------------------------------- +step = 50 +i=1 +current_E=[] + +alpha_i = 3. +alpha_m = 1.5 +beta = 0. +gamma = 0. +delta = 0.0 + +page_rank=0 + + +dpidpi=150 +scale = 1/200. +nE = G.number_of_edges() +nV = G.number_of_nodes() +edge_counts = {} + + +version = 1 +count = 0 +i=1 +name = 'universes' +k_max = nE + + + +#============================================================= +reruns = 1 +number_of_epochs = 10 +history = zeros([number_of_epochs, nE], float) +history_novel = zeros([number_of_epochs, 2], float) +history_loss = zeros([number_of_epochs, 2], float) +history_rel_loss = zeros([number_of_epochs, 2], float) + +history_nodes = zeros([number_of_epochs, nV], float) +G_curr = nx.MultiGraph() +G_curr.add_nodes_from(G) +loss = 0. +novel = 0. + +#============================================================= +''' +if reruns == 1: + draw_current_graph(pos,name,count,dpidpi,Nce,Ncv,scale,G_curr, + alpha_i, alpha_m, beta, gamma, delta, step, + loss, novel, edge_counts, page_rank, False) + +for rerun in range(reruns): + for e in G.edges(): + edge_counts[(e[0],e[1])]=0. + edge_counts[(e[1],e[0])]=0. + + G_curr = nx.MultiGraph() + G_curr.add_nodes_from(G) + loss = 0. + novel = 0. + + for epoch in range(number_of_epochs): + (G_curr, current_E, failed, + edge_counts, loss, novel, + history, history_novel, + history_loss, history_rel_los) = pick_edges(G_curr, current_E, G, + alpha_i, alpha_m, beta, gamma, delta, step, + edge_counts, name, (epoch+1), dpidpi, loss, + novel, page_rank, k_max, reruns, + history, history_novel, history_loss, + history_rel_loss, history_nodes) + if reruns == 1: + file1 = open('histories.pickled-2', 'w') + pickle.dump([rerun+1,reruns,number_of_epochs],file1) + pickle.dump([alpha_i, alpha_m, beta, gamma, delta, step, page_rank],file1) + pickle.dump(history,file1) + pickle.dump(history_novel,file1) + pickle.dump(history_loss,file1) + pickle.dump(history_rel_loss,file1) + pickle.dump(history_nodes,file1) + + file1.close() +''' +rerun = int(sys.argv[1]) +outputdir = 'output/rerun'+str(rerun) +if not os.path.isdir(outputdir): + os.makedirs(outputdir) + +for e in G.edges(): + edge_counts[(e[0],e[1])]=0. + edge_counts[(e[1],e[0])]=0. + +G_curr = nx.MultiGraph() +G_curr.add_nodes_from(G) +loss = 0. +novel = 0. + +for epoch in range(number_of_epochs): + (G_curr, current_E, failed, + edge_counts, loss, novel, + history, history_novel, + history_loss, history_rel_los) = pick_edges(G_curr, current_E, G, + alpha_i, alpha_m, beta, gamma, delta, step, + edge_counts, name, (epoch+1), dpidpi, loss, + novel, page_rank, k_max, rerun, + history, history_novel, history_loss, + history_rel_loss, history_nodes, outputdir) + +file1 = open(outputdir+'/histories.pickled'+'-'+str(rerun), 'w') +pickle.dump([reruns,reruns,number_of_epochs],file1) +pickle.dump([alpha_i, alpha_m, beta, gamma, delta, step, page_rank],file1) +pickle.dump(history,file1) +pickle.dump(history_novel,file1) +pickle.dump(history_loss,file1) +pickle.dump(history_rel_loss,file1) +pickle.dump(history_nodes,file1) +file1.close() + + +print 'Done!' + + + Property changes on: SwiftApps/Andrey-MC/movie_graph.py ___________________________________________________________________ Name: svn:executable + * Added: SwiftApps/Andrey-MC/movies_coarse.swift =================================================================== --- SwiftApps/Andrey-MC/movies_coarse.swift (rev 0) +++ SwiftApps/Andrey-MC/movies_coarse.swift 2011-03-30 17:57:26 UTC (rev 4230) @@ -0,0 +1,29 @@ +type Pickle {} +type History {} +type Image {} + +app (History historyout) movie_graph (int rerun, Pickle picklefile) +{ + movie_graph rerun; +} + +int arr[]; +iterate i +{ + arr[i] = i+1; +}until(i == 1); + +foreach i in arr{ + Pickle picklefile <"./for_movies.pickled">; + History historyout ; + + //Image out[]; + //iterate j + //{ + // imageout[j] ; + //}until(j==9); + //Image out ; + + historyout = movie_graph(i, picklefile); +} + Added: SwiftApps/Andrey-MC/tc.data =================================================================== --- SwiftApps/Andrey-MC/tc.data (rev 0) +++ SwiftApps/Andrey-MC/tc.data 2011-03-30 17:57:26 UTC (rev 4230) @@ -0,0 +1,19 @@ +#This is the transformation catalog. +# +#It comes pre-configured with a number of simple transformations with +#paths that are likely to work on a linux box. However, on some systems, +#the paths to these executables will be different (for example, sometimes +#some of these programs are found in /usr/bin rather than in /bin) +# +#NOTE WELL: fields in this file must be separated by tabs, not spaces; and +#there must be no trailing whitespace at the end of each line. +# +# sitename transformation path INSTALLED platform profiles +localhost echo /bin/echo INSTALLED INTEL32::LINUX null +localhost cat /bin/cat INSTALLED INTEL32::LINUX null +localhost ls /bin/ls INSTALLED INTEL32::LINUX null +localhost grep /bin/grep INSTALLED INTEL32::LINUX null +localhost sort /bin/sort INSTALLED INTEL32::LINUX null +localhost paste /bin/paste INSTALLED INTEL32::LINUX null +localhost cp /bin/cp INSTALLED INTEL32::LINUX null +localhost movie_graph /home/zzhang/workplace/Andrey/movie_graph.py INSTALLED INTEL32::LINUX null